《C的中断系统及定时计数器定时计数器概要实用.pptx》由会员分享,可在线阅读,更多相关《C的中断系统及定时计数器定时计数器概要实用.pptx(49页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、复习数电中的计数器、定时器提出要求:提出要求:1、有参与计数的实体(计数长度可变)、有参与计数的实体(计数长度可变)2、有计数脉冲的引入,有溢出位有计数脉冲的引入,有溢出位3、可以置入初值、可以置入初值溢出溢出计数脉冲计数脉冲置入初值置入初值计数长度为计数长度为n的计数器的计数器第1页/共49页溢出溢出计数脉冲计数脉冲CP置入初值置入初值长度为n的计数器长度为n的计数器定时器/计数器可由触发器构成计数状态满足一定条件时有输出有置入初值的途径最大计数长度:最大定时时间:对于加1计数器,若初值为x,则记录m个脉冲后溢出。结论:为实现m个脉冲的计数,则需置入初值x,第2页/共49页2 2、定时(延时
2、)、定时(延时)t t1 1、计数、计数m m个脉冲个脉冲任务的类型:计算:置入初值。计算:置入初值。第3页/共49页5.3 80C51单片机的定时/计数器2023/3/2345.3.1 定时/计数器的结构和工作原理 第4页/共49页2种工作模式:(1)计数器工作模式(2)定时器工作模式4种工作方式(方式0-方式3)。由图看到:1、两个可编程的定时器/计数器T1、T0。2、出现的SFR有:TH0、TL0、TH1、TL1 TMOD、TCON借助于SFR,实现:两种不同的计数脉冲的引入,并借助于TMOD用于区分模式。用TMOD来安排工作方式。第5页/共49页2023/3/236定时/计数器的工作原
3、理实质是16位加1计数器定时器模式时,是对内部机器周期计数。计数值乘以机器周期就是定时时间 计数器模式时,是对外部事件计数。脉冲由T0(P3.4)或T1(P3.5)引脚输入。注意:(若计数值为m,计数初值为X)溢出信号使TF0或TF1置1,并发出中断请求,16位时有:m=65536-X,或X=65536-m12MHz晶振时,计数频率低于0.5MHz 第6页/共49页GATEC/TM1M0GATEM1C/TM0定时器定时器T1定时器定时器T0TMOD(89H)D7 D6 D5 D4 D3 D2 D1 D0第7页/共49页2023/3/238M1M0M1M0工作方式工作方式说说 明明0000方式方
4、式0 01313位定时位定时/计数器计数器0101方式方式1 11616位定时位定时/计数器计数器1010方式方式2 28 8位自动重装定时位自动重装定时/计数器计数器1111方式方式3 3T0T0分成两个独立的分成两个独立的8 8位定时位定时/计数器;计数器;T1T1此此方式停止计数方式停止计数注意:TMOD不能进行位寻址 第8页/共49页2023/3/239控制寄存器TCON 76543210TCONTF1TR1TF0TR0字节地址:字节地址:88H第9页/共49页2023/3/23105.3.3 定时/计数器的工作方式T0有方式0、1、2、3;T1有方式0、1、2。以T0为例说明。方式0
5、:13位方式 第10页/共49页2023/3/2311 C/T=1时,则为计数模式,有:X=213-m=8192-m C/T=0时,则为定时模式,有:X=213-m=8192-m,m=t/Tcy【例5-3】若计数个数m 为2,求计数初值。X=81922=8190=1FFEH=1 1111 1111 1110B 初值计算:上述初值如何分配给TH0、TL0注意:方式0的计数初值高8位和低5位确定麻烦,实际应用中常由16位的方式1取代。第11页/共49页2023/3/2312方式1:16位方式 X=216-m=65536-m 计数范围:165536 计数初值要分成2个字节分别送入TH0、TL0第12
6、页/共49页2023/3/2313【例5-4】若要求定时器T0工作于方式1,定时时间为1ms,当晶振为6 MHz时,求送入TH0和TL0的计数初值各为多少?应怎样送入TH0和TL0?由于晶振为6 MHz,所以机器周期Tcy为2S,因此:m=t/Tcy=110-3/210-6500X216-m 65536-50065036FE0CH 也可以利用以下2条指令完成:MOV TL0,#(65536-500)MOD 256;余数为计数初值的低字节 MOV TH0,#(65536-500)/256 ;商为计数初值的高字节用传送指令分别将FEH送入TH0中,0CH送入TL0中即可。举例第13页/共49页20
7、23/3/2314方式2:8位自动重装方式 X=28-m=256-m 计数范围:1256 特别适合与脉冲信号发生器第14页/共49页2023/3/2315方式3:(仅T0有此方式,T1的方式3将停止计数)TL0进行8位定时/计数 TH0进行8位定时(T1方式2时,可出借TR1、TF1)第15页/共49页2023/3/23165.3.4 定时/计数器用于外部中断扩展例:用T0扩展一个外部中断源。将T0设置为计数器方式,按方式2工作,TH0、TL0的初值均为0FFH,T0允许中断,CPU开放中断。其初始化程序如下:MOV TMOD,#06H ;置T0为计数器方式2 MOV TL0,#0FFH ;置
8、计数初值 MOV TH0,#0FFH SETB TR0 ;启动T0工作 SETB EA ;CPU开中断 SETB ET0 ;允许T0中断 T0外部引脚上出现一个下降沿信号时,TL0计数加1,产生溢出,将TF0置1,向CPU发出中断请求 第16页/共49页2023/3/23175.3.5 定时/计数器应用举例初始化程序应完成:对TMOD赋值,以确定T0和T1的工作方式;求初值,并写入TH0、TL0或TH1、TL1;使TR0或TR1置位,启动定时/计数器工作。初始化程序设计(四条指令)MOV TMOD,#01H ;设置T0为方式1MOV TH0,#0FEH ;T0置初值MOV TL0,#0CHSE
9、TB TR0第17页/共49页两种方式对溢出作出反应:查询、中断两种方式对溢出作出反应:查询、中断2023/3/2318中断方式:(常用)查询方式:1、在主程序中进行中断初始化2、计数(定时)结束后该做的事情放在中断服务程序中1、反复查询是否溢出,如JNB TF0,$2、一旦发现溢出,及时清除溢出标志3、然后安排计数(定时)结束后该做的事情第18页/共49页2023/3/2319计数应用【例5-5】有一包装流水线,产品每计数24瓶时发出一个包装控制信号。试编写程序完成这一计数任务。用T0完成计数,用P1.0发出控制信号。确定方式字:T0在计数的方式2时:M1M0=10,GATE=0,C/T=1
10、方式控制字为06H 求计数初值X:N=24X=256-24=232=E8H应将E8H送入TH0和TL0中 第19页/共49页2023/3/2320 ORG 0000H LJMP MAIN ORG 000BH LJMP DVT0 ORG 0100HMAIN:MOV TMOD,#06H ;置T0计数方式2 MOV TH0,#0E8H;装入计数初值 MOV TL0,#0E8H SETB ET0 ;T0开中断 SETB EA ;CPU开中断 SETB TR0 ;启动T0 SJMP$;等待中断DVT0:SETB P1.0 NOP NOP CLR P1.0 RETI END主程序 中断服务程序 第20页/
11、共49页2023/3/2321定时应用 定时时间较小时(小于65ms)。可直接采用方式1完成定时任务。两种方式对溢出作出反应:查询、中断两种方式对溢出作出反应:查询、中断系统时钟为6MHz时,各种方式下的最长定时的计算:由最长定时=2nTcp ,而Tcp=2s 方式0最长可定时16.384ms;方式1最长可定时131.072ms;方式2最长可定时512s。晶振为12 MHz时,Tcy为1S。最长可定时65ms第21页/共49页2023/3/2322确定方式字:T0在定时的方式1时:M1M0=01,GATE=0,C/T=0方式控制字为01H 求计数初值X:Tcy为1S N=10ms/1S=10
12、000X=65536-10000=D8F0H应将D8送TH0,F0H送TL0 举例举例第22页/共49页2023/3/2323 ORG 0000H LJMP MAIN ORG 000BH LJMP DVT0 ORG 0100HMAIN:MOV TMOD,#01H ;置T0方式1 MOV TH0,#0D8H;装入计数初值 MOV TL0,#0F0H SETB ET0 ;T0开中断 SETB EA ;CPU开中断 SETB TR0 ;启动T0 SJMP$;等待中断DVT0:CPL P1.0 MOV TH0,#0D8H MOV TL0,#0F0H RETI END主程序中断方式 中断服务程序 数数源
13、程序的四要素注意重装初值,为什么?数数中断的四要素第23页/共49页2023/3/2324 ORG 0000H LJMP MAIN ORG 0100HMAIN:MOV TMOD,#01H ;置T0方式1LOOP:MOV TH0,#0D8H;装入计数初值 MOV TL0,#0F0H SETB TR0 ;启动T0 JNB TF0,$;查询TF0标志 CLR TF0 ;T0溢出,清标志 CPL P1.0 ;P1.0的状态求反 SJMP LOOP END主程序查询方式 第24页/共49页2023/3/2325 定时时间较大时(大于65ms)。实现方法:一是采用1个定时器定时一定的间隔(如20ms),然
14、后用软件进行计数;二是采用2个定时器级联,其中一个定时器用来产生周期信号(如20ms为周期),然后将该信号送入另一个计数器的外部脉冲输入端进行脉冲计数。第25页/共49页【例5-7】2023/3/2326编写程序,实现用定时/计数器T0定时,使P1.7引脚输出周期为2s的方波。设系统的晶振频率为12MHz。求计数初值X:Tcy为1S N=20ms/1S=20 000X=65536-20000=4E20H应将4EH送TH0,20H送TL0 采用定时20ms,然后再计数50次的方法实现-用DJNZ指令 确定方式字:T0在定时的方式1时:M1M0=01,GATE=0,C/T=0方式控制字为01H 第
15、26页/共49页2023/3/2327 ORG 0000H LJMP MAIN ORG 000BH LJMP DVT0 ORG 0030HMAIN:MOV TMOD,#01H;置T0方式1 MOV TH0,#4EH;装入计数初值 MOV TL0,#20H;首次计数值 MOV R7,#50 ;计数50次 SETB ET0 ;T0开中断 SETB EA ;CPU开中断 SETB TR0 ;启动T0 SJMP$;等待中断DVT0:DJNZ R7,NT0 MOV R7,#50 CPL P1.7 NT0:MOV TH0,#4EH MOV TL0,#20H ;SETB TR0 RETI END主程序 中断
16、服务程序 1S到在哪里?第27页/共49页 将上述例题改写成查询方式,并在P1.0上输出周期为2秒的方波。ORG 0000HRESET:LJMP MAIN ;上电,转主程序入口MAIN ORG 1000H MAIN:MOV SP,#60H ;设堆栈指针 MOV B,#0AH ;设循环次数10次 MOV TMOD,#01H ;设T0工作在方式1 MOV TL0,#0B0H ;给T0设初值 MOV TH0,#3CH SETB TR0 ;启动T0LOOP1:JNB TF0,LOOP1 ;查询TF0标志CLR TF0 ;T0溢出,清标志MOV TL0,#0B0H ;T0溢出后,重装初值MOV TH0,
17、#3CH ;DJNZ B,LOOP1;满10次了吗?CPL P1.0 ;P1.0的状态求反MOV B,#0AH ;设循环次数10次SJMP LOOP1END第28页/共49页 ORG 0000HRESET:LJMP MAIN ;上电,转主程序入口MAIN ORG 1000H MAIN:MOV SP,#60H ;设堆栈指针 MOV TMOD,#01H ;设T0工作在方式1 SETB TR0 ;启动T0CLR P1.0LOOP1:LCALL DEL1SCPL P1.0 ;P1.0的状态求反SJMP LOOP1DEL1S:MOV B,#0AH ;设循环次数10次LOOP11:MOV TL0,#0B0
18、H ;T0溢出后,重装初值MOV TH0,#3CH ;JNB TF0,$;查询TF0标志CLR TF0 ;T0溢出,清标志DJNZ B,LOOP11;满10次了吗?RETEND第29页/共49页当T0(P3.4)引脚上发生负跳变时,从P1.0引脚上输出一个周期为1ms的方波,如图所示。(系统时钟为6MHz)举例举例第30页/共49页1、有定时,有计数2、方式2的应用(免重装初值)3、两个中断源本题分析:1、T0为方式1计数,初值 0FFFFH,即外部计数输入端T0(P3.4)发生一次负跳变时,T0加1且溢出,溢出标志TF0置“1”,发中断请求。2、T1定义为方式2定时。在T0脚发生一次负跳变后
19、,启动T1每500s产生一次中断,在中断服务程序中对P1.0求反,使P1.0产生周期1ms的方波。本题特点:第31页/共49页(1)T0、T1工作方式的确定 MOV TMOD,#00100101B;各位的含义(2)计算T1初值 已知机器周期为2s,定时为500s 设T1的初值为X:则 (28-X)210-6=510-4 S X=28-250=6=06H(3)主程序的设计 完成两个定时器的初始化及中断的初始化 注意根据题意,在合适的时刻启动定时和开启中断 需要完成下列任务:第32页/共49页ORG 0000HRESET:LJMP MAIN ;复位入口转主程序 ORG 000BH LJMP IT0
20、P ;转T0中断服务程序 ORG 001BH LJMP IT1P ;转T1中断服务程序 ORG 0100HMAIN:MOV SP,#60H MOV TMOD,#25H;T1为方式2定时,T0为方式1计数 MOV TL0,#0FFH ;T0置初值 MOV TH0,#0FFH SETB TR0 ;启动T0MOV TL1,#06H ;T1置初值 MOV TH1,#06HSETB ET0 ;允许T0中断SETB EAHERE:AJMP HERE第33页/共49页 IT0P:CLR TR0;T0中断服务程序,停止T0计数SETB TR1 ;启动T1 SETB ET1 ;允许T1中断 RETIIT1P:C
21、PL P1.0;T1中断服务,P1.0位取反RETIEND 两个中断服务主程序的设计:要求:画出流程图。在T1定时中断服务程序IT1P中,省去了T1中断服务程序中重新装入初值06H的指令。第34页/共49页 GATE0可使定时器/计数器T0的启动计数受INT0*的控制,可测量引脚INT0*(P3.2)上正脉冲的宽度(可理解为定时器的第三种工作方式“计时”)。门控制位GATE的应用测量脉冲宽度A第35页/共49页2023/3/2336门控位的应用【例5-8】测量INT0引脚上出现的正脉冲宽度,并将结果(以机器周期的形式)存放在30H和31H两个单元中。将T0设置为方式1的定时方式,且GATE=1
22、,计数器初值为0,将TR0置1。INT0引脚上出现高电平时,加1计数器开始对机器周期计数。INT0引脚上信号变为低电平时,停止计数 然后读出TH0、TL0的值 T0设置为定时还是计数?第36页/共49页2023/3/2337 ORG 0000H AJMP MAIN ORG 0200H MAIN:MOV TMOD,#09H;置T0为定时器方式1,GATE=1 MOV TH0,#00H ;置计数初值 MOV TL0,#00H MOV R0,#31H ;置地址指针初值(指向低字节)L1:JB P3.2,L1 ;高电平等待 SETB TR0 ;当INT0由高变低时使TR0=1,准备好 L2:JNB P
23、3.2,L2 ;等待INT0变高 L3:JB P3.2,L3 ;已变高,启动定时,直到INT0变低 CLR TR0 ;INT0由高变低,停止定时 MOV R0,TL0 ;存结果 DEC R0 MOV R0,TH0 SJMP$END第37页/共49页 ORG 0000H;MUSIC LJMP START ORG 000BH LJMP INTT0START:MOV SP,#50H MOV TH0,#0D8H MOV TL0,#0EFH MOV TMOD,#01H MOV IE,#82HMUSIC0:NOP MOV DPTR,#DAT MOV 20H,#00HMUSIC1:NOP CLR A MOV
24、C A,A+DPTR JZ END0 CJNE A,#0FFH,MUSIC5 LJMP MUSIC3MUSIC5:NOP ;正常播放音乐 MOV R6,A INC DPTR MOV A,#0 MOVC A,A+DPTR MOV R7,A SETB TR0T0定时时间=(216-D8EFH)*12/12MHz=10ms音乐播放(C51music1.asm)第38页/共49页2023/3/2339MUSIC4:NOP MOV R3,#0FFH LCALL DEL DJNZ R2,MUSIC4 INC DPTR LJMP MUSIC1END0:NOP;音乐播放完 MOV R2,#0FFHMUSIC6
25、:MOV R3,#00H LCALL DEL DJNZ R2,MUSIC6 LJMP MUSIC0MUSIC2:NOP CPL P1.5 MOV A,R6 MOV R3,A LCALL DEL MOV A,R7 CJNE A,20H,MUSIC2 MOV 20H,#00H INC DPTR LJMP MUSIC1MUSIC3:NOP;一小段音乐播放结束,延时 CLR TR0 MOV R2,#0DH音乐播放第39页/共49页2023/3/2340DAT:DB 18H,30H,1CH,10H,20H,40H,1CH,10HDB 18H,10H,20H,10H,1CH,10H,18H,40HDB 1
26、CH,20H,20H,20H,1CH,20H,18H,20HDB 20H,80H,0FFH,20H,30H,1CH,10H,18HDB 20H,15H,20H,1CH,20H,20H,20H,26HDB 40H,20H,20H,2BH,20H,26H,20H,20HDB 20H,30H,80H,0FFH,20H,20H,1CH,10HDB 18H,10H,20H,20H,26H,20H,2BH,20HDB 30H,20H,2BH,40H,20H,20H,1CH,10HDB 18H,10H,20H,20H,26H,20H,2BH,20HDB 30H,20H,2BH,40H,20H,30H,1CH
27、,10HDB 18H,20H,15H,20H,1CH,20H,20H,20HDB 26H,40H,20H,20H,2BH,20H,26H,20HDB 20H,20H,30H,80H,20H,30H,1CH,10HDEL:NOPDEL3:MOV R4,#02HDEL4:NOP DJNZ R4,DEL4 NOP DJNZ R3,DEL3 RETINTT0:INC 20H MOV TH0,#0D8H MOV TL0,#0EFH RETI第40页/共49页2023/3/2341DB 20H,10H,1CH,10H,20H,20H,26H,20H,2BH,20H,30H,20HDB 2BH,40H,20
28、H,15H,1FH,05H,20H,10H,1CH,10H,20H,20HDB 26H,20H,2BH,20H,30H,20H,2BH,40H,20H,30H,1CH,10H DB 18H,20H,15H,20H,1CH,20H,20H,20H,26H,40H,20H,20HDB 2BH,20H,26H,20H,20H,20H,30H,30H,20H,30H,1CH,10HDB 18H,40H,1CH,20H,20H,20H,26H,40H,13H,60H,18H,20HDB 15H,40H,13H,40H,18H,80H,00HEND第41页/共49页实时时钟的设计1、实时时钟实现的基本思想
29、2、程序设计(1)主程序的设计(2)中断服务程序的设计 涉及到的话题:(1)1秒钟的实现(2)数据的规划-时、分、秒的数据存放(3)六十进制加法、二十四进制加法的实现、BCD码(4)基本的定时器的使用、中断的应用(5)程序的执行过程的描述第42页/共49页可把定时时间定为100ms,采用中断方式进行溢出次数的累计,计满10次,即得到秒计时。2、满1秒后,内部应完成哪些任务:秒加1以及可能的分加1、可能的时加1。刷新显示。片内RAM的规划:规定3个单元作为秒、分、时单元,如:42H:“秒”单元;41H:“分”单元;40H:“时”单元。3、本题加1操作的进制以及实现方法:秒、分加1是六十进制加法、
30、而时加1是二十四进制加法。通常为了后续处理的方便,希望进行的是十进制BCD码的运算,再借助于比较,完成六十进制加法和二十四进制加法。保证40H、41H、42H内的数据时BCD码。1、如何获得1秒的定时:第43页/共49页何时到此一游?中途会发生什么事情?流程图第44页/共49页主程序Start:mov tmod,#01hmov th0,#3chmov tl0,#0b0hsetb tr0mov ie,#10000010bmov 20h,#10 MOV 52H,#34 MOV 51H,#12 MOV 50H,#06abc:lcall disp0 lcall disp1lcall disp2sjmp
31、 abc第45页/共49页中断服务程序t00:mov th0,#3chmov tl0,#0b0hdjnz 20h,eedmov 20h,#10mov a,#01add a,52hmov 52h,acjne a,#60,eedmov 52h,#0mov a,#01add a,51hmov 51h,acjne a,#60,eedmov 51h,#0mov a,#01add a,50hmov 50h,acjne a,#24,eedmov 50h,#0eed:reti第46页/共49页拆分子程序和查表主程序disp0:mov r0,#52hmov r1,#30hmov r3,#3lll:mov a,r
32、0mov b,#10div abmov r1,binc r1mov r1,ainc r1dec r0djnz r3,lllretdisp1:MOV R0,#DBUF MOV R1,#TEMP MOV R2,#6 MOV DPTR,#SEGTABDP00:MOV A,R0 MOVC A,A+DPTR MOV R1,A INC R1 INC R0 DJNZ R2,DP00retDBUF应是谁?第47页/共49页作业个人作业 P128 2、3、514 小组作业:发往 1.单片机电子琴的工作原理。2.单片机时钟电路及相应的程序设计。3.4.5.2023/3/2348第48页/共49页2023/3/2349感谢您的欣赏!第49页/共49页