欢迎来到天天文库
浏览记录
ID:59017263
大小:423.50 KB
页数:41页
时间:2020-09-26
《第6章定时器计数器习题课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第6章定时器/计数器习题116.4定时器/计数器的编程和应用4种方式,方式0与方式1基本相同,只是计数位数不同。方式0初值计算复杂,一般不用方式0,而用方式1。6.4.1方式1的应用【例6-1】假设系统时钟频率采用6MHz,在P1.0引脚上输出一个周期为2ms的方波,如图6-13所示。2图6-13P1.0引脚上输出周期为2ms的方波2基本思想:方波周期T0确定,T0每隔1ms计数溢出1次,即T0每隔1ms产生一次中断,CPU响应中断后,在中断服务子程序中对P1.0取反,如图6-13所示。为此要做如下几步工作。(1)计算计数初值X机器周期= 2
2、s = 210−6s设需要装入T0的初值为X,则有(216−X)210−6=110−3,216−X=500,X=65036。X化为十六进制数,即:65036 = FE0CH。T0的初值为TH0=FEH,TL0= 0CH。33(2)初始化程序设计采用定时器中断方式工作。包括定时器初始化和中断系统初始化,主要是对寄存器IP、IE、TCON、TMOD的相应位进行正确的设置,并将计数初值送入定时器中。(3)程序设计中断服务子程序除了完成所要求的产生方波的工作之外,还要注意将计数初值重新装入定时器,为下一次产生中断做准备。本例,主程序用一条转
3、至自身的短跳转指令来代替。44参考程序如下:ORG0000H;程序入口RESET:AJMPMAIN;转主程序ORG000BH;T0中断入口AJMPIT0P;转T0中断处理程序IT0PORG0100H;主程序入口MAIN:MOVSP,#60H;设堆栈指针MOVTMOD,#01H;设置T0为方式1定时ACALLPT0M0;调用初始化子程序PT0M0HERE:AJMPHERE;原地循环,等待中断55PT0M0:MOVTL0,#0CH;T0初始化,装初值的低8位MOVTH0,#0FEH;装初值的高8位SETBET0;允许T0中断SETBEA;总中断允
4、许SETBTR0;启动T0RETIT0P:MOVTL0,#0CH;中断子程序,T0重装初值MOVTH0,#0FEHCPLP1.0;P1.0的状态取反RETI程序说明:当单片机复位时,从程序入口0000H跳向主程序MAIN处执行。其中调用了T0初始化子程序PT0M0。66子程序返回后,程序执行“AJMPHERE”指令,则循环等待。当响应T0定时中断时,则跳向T0中断入口,再从T0中断入口跳向IT0P标号处执行T0中断服务子程序。当执行完中断返回的指令“RETI”后,又返回断点处继续执行循环指令“AJMPHERE”。在实际的程序中,“AJMPHE
5、RE”实际上是一段主程序。当下一次定时器T0的1ms定时中断发生时,再跳向T0中断入口,从而重复执行上述过程。如CPU不做其他工作,也可用查询方式进行控制,程序要简单得多。77查询方式参考程序:MOVTMOD,#01H;设置T0为方式1LOOP:MOVTH0,#0FEH;T0置初值MOVTL0,#0CHSETBTR0;接通T0LOOP1:JNBTF0,LOOP1;查TF0,TF0=0,T0未溢出;;TF0=1,T0溢出,CLRTR0;T0溢出,关断T0CPLP1.0;P1.0的状态求反SJMPLOOP查询程序虽简单,但CPU必须要不断查询TF
6、0标志,工作效率低。88【例6-2】系统时钟为6MHz,编写定时器T0产生1s定时的程序。基本思想:采用定时器模式。因定时时间较长,首先确定采用哪一种工作方式。时钟为6MHz的条件下,定时器各种工作方式最长可定时时间:方式0最长可定时16.384ms;方式1最长可定时131.072ms;方式2最长可定时512s。由上可见,可选方式1,每隔100ms中断一次,中断10次为1s。99(1)计算计数初值X因为(216−X)210−6= 10−1,所以X= 15536 = 3CB0H。因此TH0 = 3CH,TL0 = B0H。(2)10次计数
7、的实现对于中断10次的计数,采用B寄存器作为中断次数计数器。(3)程序设计参考程序如下:ORG0000H;程序运行入口RESET:LJMPMAIN;跳向主程序入口MAINORG000BH;T0的中断入口LJMPIT0P;转T0中断处理子程序IT0PORG1000H;主程序入口1010MAIN:MOVSP,#60H;设堆栈指针MOVB,#0AH;设循环次数10次MOVTMOD,#01H;设置T0工作在方式1定时MOVTL0,#0B0H;给T0设初值MOVTH0,#3CHSETBET0;允许T0中断SETBEA;总中断允许SETBTR0;启动T0
8、HERE:SJMPHERE;原地循环,等待中断1111IT0P:MOVTL0,#0B0H;T0中断子程序,T0重装初值MOVTH0,#3CHDJNZB,RTURN;
此文档下载收益归作者所有