×
单片机 > 单片机程序设计 > 详情

C51 用一个外部中断0检测过零脉冲,并产生脉冲

发布时间:2020-06-04 发布时间:
|

用一个外部中断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; 
     }



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
8051单片机的函数发生器的设计