⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 timer.c

📁 measure coin used 89c52,which use two Timers
💻 C
字号:

 #include<reg52.h>
 #include <noname1.h>
 #include <absacc.h>

#define uchar unsigned char
#define uint  unsigned int
#define senddata_shu 20

sbit P3_3=P3^3;
sbit P3_5=P3^5;
sbit P1_2=P1^2;
sbit P1_5=P1^5;
sbit P1_6=P1^6;
sbit P1_7=P1^7;

uchar 	flag_int1;            //外中断输入的标志位
uchar m_flag;
bit bhead=0;
bit send_flag=0;

void int0svr(void) interrupt 0
{
   EX0=0;     //关外部中断0
   m_flag=1;
   EX1=1;    //开外部中断1
}
/*外中断0的控制T1计数子程序*/
void int1svr(void) interrupt 2
{
  if(flag_int1==1)
  {
     time_sgn[l]=0;
     TR0=0;
     time_sgn[l]=TL0;
     TL0=0;
     TR0=1;
     m++;
  }
  else
  {
     TR0=0;
     TH0=0;
     TL0=0;
     TR0=1;         //启动定时器
     flag_int1=1;
     l=0;
  }
}

/*T1计数子程序*/
void timer1(void) interrupt 3
{
   TH0=0;
   TL0=0;
   N=N+1;
}

void send() interrupt 4
{
    TI=0;
    EX1=0;
    if(!bhead)
    {
      SBUF=0xee;
      bhead=1;
    }
    else
    {
      if(l<senddata_shu)
        SBUF=time_sgn[l];
      else
      {
        SBUF=0xff ;
        TI=0;
      }
      l++;
    }
    while(!TI);
}
void UART_INT(void)
{
    EA=1;
    IT0=1;         //下降沿触发
    IT1=1;
    TMOD=0x21;
    PCON=0x80;           //波特率翻倍
    SCON =0x50;          //串口为工作1方式,波特率可变,允许串行接受
    TH1 = 0xf3;           //串口波特率设置,9600
    TL1 = 0xf3;
    ES  = 1;                //打开串口中断
    ET1 = 0;	           //关闭计数器1中断
}
void main(void)
{
    UART_INT();
    P1_7=1;
    m_flag=0;
    flag_int1=0;

    for(l=0;l<senddata_shu;l++)
      time_sgn[l]=l;
    l=0;
    bhead=0;
    TR1=1;
    TI=1;                              //开中断,通过串口发送数据去打印
    while(l<=senddata_shu);                  //等待发送数据
    TI=0;
    ES=0;
    TR1=0;
//    TH0=0;
//    TL0=0;
  while(1)
  {
    EX0=1;              //打开外部中断0
    m_flag=0;
    while(m_flag==0);
     l=0;
     flag_int1=0;
    while( m<senddata_shu);
    EA=0;         //采集2048个脉冲的频率后退出中断
    EX1=0;
    l=0;
    P1_7=0;
    EA=1;
    ES=1;
    TR1=1;
    TI=1;                              //开中断,通过串口发送数据去打印
    while(m<=senddata_shu);                  //等待发送数据
    TI=0;
    m=0;
    bhead=0;
    ES=0;
    senddata=0;
    TR1=0;
    EX0=1;
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -