C51 用一个外部中断0检测过零脉冲,并产生脉冲
扫描二维码
随时随地手机看文章
用一个外部中断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;
}