测试定时器0的程序

发布者:Meilin8888最新更新时间:2017-01-10 来源: eechina关键字:定时器0  主函数 手机看文章 扫描二维码
随时随地手机看文章

这是写的一个简单的测试定时器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);
           } 
}


关键字:定时器0  主函数 引用地址:测试定时器0的程序

上一篇:51数码管动态显示程序-------调试经验
下一篇:单片机中断函数的编写

推荐阅读最新更新时间:2024-03-16 15:29

单片机定时器0的使用
本程序功能是让PA口接的等每隔0.5s闪烁一次,程序如下 include avr/io.h #include avr/interrupt.h #define F_CPU 8000000UL int k; int main(void) { DDRA=0XFF; PORTA=0xff; TCCR0=0X05; TCNT0=256-F_CPU/1024*0.5; TIMSK=0X01; sei(); while(1); } ISR(TIMER0_OVF_vect) { k++; if(k 200) { k=0; PORTA=~PORTA; } TCNT0=256-F_CPU/102
[单片机]
单片机定时器0实现信号交通灯程序
本程序所用的原理图下载: 点这里 ,单片机芯片使用的stc89c52 /* *功能:定时器0实现信号交通灯 * *日期:2013-05-07-08:41 *作者:徐冉 *特别说明:本程序代码已经通过调试,仅供学习使用; * */ /***********AT89C52-RC 单片机实验板***********/ /*****************51hei-开发板*********************/ #include reg52.h typedef unsigned int uint; typedef unsigned char uchar; sbit LED_hong = P1^0;//红信号灯 sbit LED_l
[单片机]
TQ2440之定时器中断0——volatile关键字的重要作用
近日,在学习《ARM处理器裸机开发实战 机制而非策略》一书,在TQ2440开发板上,按照书中实例以及光盘配套程序源代码进行Timer0中断试验,编译成功后烧写到开发板上,没有任何反应,反复检查代码,一直没有找出哪里有问题,就是到开发板上没有预期效果。(让人纠结的很) 最终参考了 TQ2440之定时器中断0 的程序代码,编译成功后,烧写到板子上,惊喜出现了。绝对是久旱逢甘霖的感觉,在这里对 TQ2440之定时器中断0 的原创作者表示感谢。 后来,经过代码对比,发现两个可疑的地方: (1)之前的Timer0的初始化中没有rTCMPB0 = 0;这条语句。 而后来参考 TQ2440之定时器中断0 中的代码是有这条语句的。
[单片机]
TQ2440之<font color='red'>定时器</font>中断<font color='red'>0</font>——volatile关键字的重要作用
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved