当前位置:首页 > 单片机 > 单片机
[导读]用一个外部中断0检测过零脉冲,然后用一个定时器产生一个脉冲即可。#include#define uint unsigned int /*宏定义*/#define uchar unsigned char /*宏定义*///#define Time_5ms (0x10000-5000) //fosc=12M#define Tim

用一个外部中断0检测过零脉冲,然后用一个定时器产生一个脉冲即可。
#include
#define uint unsigned int /*宏定义*/
#define uchar unsigned char /*宏定义*/
//#define Time_5ms (0x10000-5000) //fosc=12M
#define Time_100us (0x10000-100)

sbit P2_0=P2^0;

uint Time_5ms=10000;
void time_initial();

void main()
{
P2_0=0;
time_initial();
while(1);
}
void time_initial() //定时器初始化
{
TMOD=TMOD|0x01;
TMOD=TMOD&0xF1;
ET0=1; //定时器0的中断控制位
EX0=1; //外部的中断0控制位
IT0=1; //外部中断0为下降沿触发方式
EA=1;
}

void Time0() interrupt 1 //定时器0的中断函数?
{ //修改
static bit P2_0_flag=1;

P2_0=P2_0_flag;
if(P2_0_flag)
{
TH0=Time_100us/256;
TL0=Time_100us%256;
}
else
TR0=0;
P2_0_flag=~P2_0_flag;
}

void int0() interrupt 0 // 外部的中断函数
{
static uint i;
TR0=0;
P2_0=0;
i=0x10000-Time_5ms;
TH0=i/256; //修改
TL0=i%256;
TR0=1;
}


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读
关闭