C51步步学习单片机

C51步步学习单片机

ID:38179145

大小:31.00 KB

页数:6页

时间:2019-05-24

C51步步学习单片机_第1页
C51步步学习单片机_第2页
C51步步学习单片机_第3页
C51步步学习单片机_第4页
C51步步学习单片机_第5页
资源描述:

《C51步步学习单片机》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、C51步步学习单片机定时器中断跑马灯在第3课,我们用指令延时方式实现了跑马灯。这里我们用定时器方式再次实现,定时器方式有效率高,定时准确等优点。一个编程经验是,所有的中断都要尽快的运行和退出,中断服务程序越短越好,这样才不至于干扰主程序的工作和其他中断的运行。也就是,我们应该尽量把程序代码从中断服务函数里搬出来。对于定时器的中断的工作方式,我们可以建立一个全局的标记,在中断里置这个标记,然后就退出。在主程序里检查到这个标记之后,就运行相关的程序。对于CPU任务比较多的项目来说,这种工作方式可以获得最佳的工作效率。当然,对于非常实时的应用要求,,

2、比如时钟,还是建议在中断里做完,因为使用标记的方式时,主程序可能太忙而造成错过标记信号,就是这个标记还没有开始处理呢,下一个又来了。熟练的程序员还是可以避开这些异常的情况的。在我们的这个例程中,前一课的1秒钟输出信号,被换成了一个全局标记。在主程序中去检查这个标记,再清0标记和处理相应的工作。这一课的跑马灯输出方式也改变了,我们采用查表的方式,将要点亮的灯预先设置好,到了时间,就一起送到P1口。这样,程序的执行效率会更高。下面请认真学习和分析例程:以下是例程,请打开lesson8目录的工程,内容是一样的。#defineucharunsigned

3、char//定义一下方便使用#defineuintunsignedint#defineulongunsignedlong#include//包括一个52标准内核的头文件sbitP10=P1^0;//头文件中没有定义的IO就要自己来定义了sbitP11=P1^1;sbitP12=P1^2;sbitP13=P1^3;bitldelay=0;//长定时溢出标记,预置是0charcodedx516[3]_at_0x003b;//这是为了仿真设置的//定时器中断方式的跑马灯voidmain(void)//主程序{ucharcodeled

4、p[4]={0xfe,0xfd,0xfb,0xf7};//预定的写入P1的值ucharledi;//用来指示显示顺序RCAP2H=0x10;//赋T2的预置值0x1000,溢出30次就是1秒钟RCAP2L=0x00;TR2=1;//启动定时器ET2=1;//打开定时器2中断EA=1;//打开总中断while(1)//主程序循环{if(ldelay)//发现有时间溢出标记,进入处理{ldelay=0;//清除标记P1=ledp[ledi];//读出一个值送到P1口ledi++;//指向下一个if(ledi==4)ledi=0;//到了最后一个灯就

5、换到第一个}}}//定时器2中断timer0()interrupt5{staticuchart;TF2=0;t++;if(t==30)//T2的预置值0x1000,溢出30次就是1秒钟,晶振22118400HZ{t=0;ldelay=1;//每次长时间的溢出,就置一个标记,以便主程序处理}}编译,进入仿真,看结果。可以看到4个灯以精确的1秒的速度不断循环跑动。自动变速的跑马灯试验这一课,我们仍然使用上一个定时器跑马灯工作方式,但是我们让跑动的速度自动变化,从慢到快。相对于上一颗的跑马灯试验,我们新设置了一个变量speed,用来保存跑马灯的移动速

6、度,其实也就是定时器的累计时间溢出次数。我们在程序中修改speed的数值,溢出的时间就会改变,跑马灯的移动速度也就改变了。我们是在每循环跑完一圈,就改变一次速度的。请仔细研究代码,做到充分理解。源代码如下:请打开对应目录里的例程,和下面的代码是一样的。―――――――――――――――――――――――#defineucharunsignedchar//定义一下方便使用#defineuintunsignedint#defineulongunsignedlong#include//包括一个52标准内核的头文件sbitP10=P1^0;

7、//头文件中没有定义的IO就要自己来定义了sbitP11=P1^1;sbitP12=P1^2;sbitP13=P1^3;bitldelay=0;//长定时溢出标记,预置是0ucharspeed=10;//设置一个变量保存跑马灯的移动速度charcodedx516[3]_at_0x003b;//这是为了仿真设置的//自动变速的跑马灯试验voidmain(void)//主程序{ucharcodeledp[4]={0xfe,0xfd,0xfb,0xf7};//预定的写入P1的值ucharledi;//用来指示显示顺序RCAP2H=0x10;//赋T2

8、的预置值0x1000,溢出30次就是1秒钟RCAP2L=0x00;TR2=1;//启动定时器ET2=1;//打开定时器2中断EA=1;//打开总中断w

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。