《定时器中断应用优秀课件.ppt》由会员分享,可在线阅读,更多相关《定时器中断应用优秀课件.ppt(10页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、定时器中断应用定时器中断应用第1页,本讲稿共10页定时定时/计数器的编程和应用计数器的编程和应用2.计数初值C的计算和装入工作方式工作方式计数位数计数位数最大计数值最大计数值最大定时时间最大定时时间定时初值计算公定时初值计算公式式计数初值计算公式计数初值计算公式方式方式013213=8192213 T机机X=213-T/T机机X=213-计数值计数值方式方式116216=65536216 T机机X=216-T/T机机X=216-计数值计数值方式方式2828=25628 T机机X=28-T/T机机X=28-计数值计数值第2页,本讲稿共10页定时定时/计数器的编程和应用计数器的编程和应用l例:分别
2、确定在方式0、1、2要计100个脉冲的计数初值,并编程装入。l解:在方式0、1、2的计数初值分别为:l方式0:C=2000H-64H=1F9CHl方式1:C=10000H-64H=FF9CHl方式2:C=100H-64H=9CH第3页,本讲稿共10页用用T1T1、工作方式、工作方式0 0实现实现1 1秒延时函数,晶振频率为秒延时函数,晶振频率为12MHz12MHz。方式方式0 0采用采用1313位计数器,其最大定时时间为:位计数器,其最大定时时间为:8192181921 s=s=8.192ms8.192ms,因此,定时时间不可能象任务,因此,定时时间不可能象任务7 7中一样选择中一样选择50m
3、s50ms,可,可选择定时时间为选择定时时间为5ms5ms,再循环,再循环200200次。次。定时时间为定时时间为5ms5ms,则计数值为,则计数值为5ms/15ms/1 s=5000s=5000,T1T1的初值为:的初值为:X=M X=M 计数值计数值=8192=8192 5000=3192=C78H=5000=3192=C78H=0110001111000B0110001111000B1313位计数器中位计数器中TL1TL1的高的高3 3位未用,填写位未用,填写0 0,TH1TH1占高占高8 8位,所以,位,所以,X X的的实际填写值应为:实际填写值应为:X=01100011X=01100
4、01100000011000B=6318H11000B=6318H举 例1第4页,本讲稿共10页用用T1T1方式方式0 0实现任务实现任务7 7中中1 1秒延时函数如下:秒延时函数如下:void delay1s()void delay1s()unsigned char i;unsigned char i;TMOD=0 x00;TMOD=0 x00;/置置T1T1为工作方式为工作方式0 0 for(i=0;i0 xc8;i+)for(i=0;i0 xc8;i+)/设置设置200200次循环次数次循环次数 TH1=0 x63;TH1=0 x63;/设置定时器初值设置定时器初值 TL1=0 x18;
5、TL1=0 x18;TR1=1;/TR1=1;/启动启动T1T1 while(!TF1);/while(!TF1);/查询计数是否溢出,即定时查询计数是否溢出,即定时5ms5ms时间到,时间到,TF1=1TF1=1 TF1=0;TF1=0;/5ms/5ms定时时间到,将定时时间到,将定时器溢出标志位定时器溢出标志位TF1TF1清零清零 举 例1第5页,本讲稿共10页用用T1T1方式方式0 0实现实现1 1秒延时如下:秒延时如下:unsigned char i=200;unsigned char i=200;void main()void main()TMOD=0 x00;/TMOD=0 x00
6、;/置置T1T1为工作方式为工作方式0 0 TH1=0 x63;TH1=0 x63;/设置定时器初值设置定时器初值 TL1=0 x18;TL1=0 x18;IE=0 x88;/IE=0 x88;/开中断开中断 TR1=1;/TR1=1;/启动启动T1T1 while(1);/while(1);/等待中断,即定时等待中断,即定时5ms5ms时间到,时间到,TF1=1TF1=1 void T1_int()interrupt 3void T1_int()interrupt 3 i-;i-;if(i=0)i=200;if(i=0)i=200;举 例1第6页,本讲稿共10页中断程序设计中断程序设计l用户
7、对中断的控制和管理:l IE、IP、TCON、SCONl中断程序的编制中应注意:l(1)开中断:总控开关EA、中断源的中断允许位;l(2)对外部中断INT0、INT1应选择触发方式;l(3)多个中断源,应设定中断优先级,预设IP。第7页,本讲稿共10页中断程序设计中断程序设计lC语言程序设计l1.中断服务函数的定义l函数名()模式 Interrupt n Using ml(1)Interrupt n:将函数声明为中断服务程序,n为中断源编号;n=04l 五个中断源:IE0、TF0、IE1、TF1、RI/TIl(2)Using m:定义函数使用的工作寄存器组;第8页,本讲稿共10页中断程序设计中断程序设计l中断服务程序不允许用于外部函数,它对目标代码影响如下:l(1)调用函数时,SFR中的ACC、B、DPTR和PSW当需要时入栈;l(2)如果不使用寄存器组切换,中断函数所需的所有工作寄存器Rn都入栈;l(3)函数退出前,所有工作寄存器出栈;l(4)函数由“RETI”指令终止。第9页,本讲稿共10页中断程序设计中断程序设计2.编程举例#include void Int0()interrupt 0 P1=0 x0f;P14;void main()EA=1;EX0=1;IT0=1;while(1);第10页,本讲稿共10页
限制150内