单片机
返回首页

测试定时器0的程序

2017-01-10 来源:eechina

这是写的一个简单的测试定时器0的程序:要实现的目标是,LED第一个跟第二个灯先循环亮起,第三盏灯则以间隔一秒钟的时间亮起一次,其中,第三盏灯的亮起时间以定时器0的中断来执行,里边有亮点需要注意。

一、不要忘记中断程序中进if语句中的后的tt清零

二、不要忘了把定时器里边的语句回归哦,否则老是认为中断服务程序没返回主函数呢

三、这个if语句不应写在主函数中,因为如果写在主函数中,时序会出现问题。因为如果在main函数中的话,前边的几个delay时间会与定时器定的准确时间产生时序问题,因为delay()的时间长,早过了20个tt时间了,所以会出现时序问题!

四、另外,那个delay函数的时间也有问题,我还得重新调试下!

五、注意定时器0的初始化,中断函数不需声明等。

# include
# define uint unsigned int
# define uchar unsigned char
sbit P21=P2^0;  
sbit P22=P2^1;
sbit P23=P2^2;
void delay(uint z);  //延时函数声明
uchar tt;

void main ()
{
         TMOD=0x01;      //定时器0初始化
          TH0=(65536-50000)/256; //约为50ms
          TL0=(65536-50000)%256;
          EA=1;   //开总中断
          ET0=1;   //开定时器0中断
          TR0=1;   //启动定时器工作    */

          while(1)
          { 
                    P23=1;    //不要忘了把定时器里边的语句回归哦,否则
                                  //老是认为中断服务程序没返回主函数呢
                    P21=0;    //如果是50*20ms=1秒时候,触发中断
                    delay(2000);   //P21与P22以约为1秒的时间间隔闪烁
                    P21=1;
                    delay(2000);
                    P22=0;
                    delay(2000);
                    P22=1;    
                    delay(2000);
           }
}

void delay(uint z)   //延时函数,约为1秒
{
          uchar x,y;
          for(x=z;x>0;x--)
          for(y=110;y>0;y--);
}

void timer0() interrupt 1  //定时器0中断服务函数
{
          TH0=(65536-50000)/256;
          TL0=(65536-50000)%256;
          tt++;
          if(tt==20)     //这个if语句不应写在主函数中,因为如果
           {                 //写在主函数中,时序会出现问题
                     tt=0; //千万不要忘记tt清零哇!!!!   
                     P23=0;
                     delay(2000); //delay()函数还要调试,因为
                                          //延时时间不是按照()中的数字递增而递增的
                     P21=1;
                     delay(2000);
                     P22=1;
                     delay(2000);
           } 
}


进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • PIC单片机控制的遥控防盗报警器电路

  • 使用ESP8266从NTP服务器获取时间并在OLED显示器上显示

  • 用NE555制作定时器

  • 如何构建一个触摸传感器电路

  • 基于ICL296的大电流开关稳压器电源电路

  • 基于TDA2003的简单低功耗汽车立体声放大器电路

    相关电子头条文章