1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,MCS-51,单片机的中断系统与定时,/,计数器,E-mail:tongyuda_2011 技术支持:0532-83027215,7.1,中断系统,7.1.1,概述,7.1.2 AT89C51,中断系统,7.1.3,中断应用实例,7.2,定时,/,计数器及应用,7.2.1,定时,/,计数器,0,、,1,的结构及工作原理,7.2.2,定时,/,计数器,0,、,1,的四种工作方式,7.2.3,定时器,/,计数器,0,、,1,的应用,7.2.4 AT89C52,定时,/,计数器,2,的结构,7.2.5 AT89C
2、52,定时,/,计数器,2,的工作方式,7.2,定时,/,计数器及应用,定时,/,计数器的核心是一个加,1,计数器。,当它对外部事件计数时,由于频率不固定,称之为,计数器,;,当它对内部固定频率的机器周期进行计数时,称为,定时器,。,MCS-51,单片机内有,2,个,16,位可编程的定时器,/,计数器,分别为,T0,和,T1,。,7.2.1 T0,、,T1,的结构及工作原理,定时器,/,计数器内部结构逻辑图,T0,、,T1,核心组成部分:,16,位的加,1,计数器,定时器控制寄存器,TCON,工作方式控制寄存器,TMOD,7.2.1 T0,、,T1,的结构及工作原理,(,1,)加,1,计数器,
3、定时器,/,计数器,T0,由,8,位特殊功能寄存器,TH0,和,TL0,组成,,TH0,为高,8,位,,TL0,为低,8,位;,加,1,计数器的初值可以通过程序进行设定,设定不同的初值,就可以获得不同的计数值或定时时间。,对外部事件脉冲计数,是计数器;,对单片机内部机器周期产生的脉冲进行计数,是定时器。,TF1,TF0,IE1,IT1,IE0,IT0,TCON,TR1,:定时器,1,运行启停控制位(可由用户通过软件设置)。,TR1=0,:定时器,1,停止运行;,TR1=1,:定时器,1,启动运行。,7,6,5,4,3,2,1,0,7.2.1 T0,、,T1,的结构及工作原理,(,2,)定时器控
4、制寄存器,TCON,TR1,TR0,当,C/T=0,,定时功能,当,C/T=1,,计数功能,7.2.1 T0,、,T1,的结构及工作原理,(,3,)工作方式控制寄存器,TMOD,M1M0,对应,4,种不同的二进制组合对应,4,种工作方式:,方式,0,、方式,1,、方式,2,、方式,3,7.2.1 T0,、,T1,的结构及工作原理,计数功能,:对外部事件产生的脉冲进行计数。,当,C/=1,,,T0,(,P3.4,)或,T1,(,P3.5,)两个信号引脚输入信号脉冲发生负跳变时,加,1,计数器自动加,1,。,定时功能,:对单片机内部机器周期产生的脉冲进行计数。,当,C/=0,,每个机器周期计数器自
5、动加,1,。如果单片机的晶体频率为,12MHz,,则计数频率为,1MHz,,或者说计数器每加,1,,可实现,1s,的定时。,定时或计数功能的选择,7.2.2 T0,、,T1,的,4,种工作方式,(,1,)方式,0,当,TMOD,中,M1M0=00,时,定时器,/,计数器选定方式,0,进行工作。,此时,选择定时器,/,计数器的高,8,位和低,5,位组成一个,13,位的定时器,/,计数器。,(,2,)方式,1,当,TMOD,中,M1M0=01,时,定时器,/,计数器选定方式,1,进行工作。,此时,选择定时器,/,计数器的,TH0,和,TL0,构成一个,16,位的定时器,/,计数器。,7.2.2 T
6、0,、,T1,的,4,种工作方式,(,2,)方式,1,当,TMOD,中,M1M0=01,时,定时器,/,计数器选定方式,1,进行工作。,此时,选择定时器,/,计数器的,TH0,和,TL0,构成一个,16,位的定时器,/,计数器。,7.2.2 T0,、,T1,的,4,种工作方式,(,2,)方式,1,当作为计数器使用时,计数脉冲个数,N,:,N=2,16,-x=65536-x,计数初值,x,是,TH0,、,TL0,设定的初值。,当作为定时器使用时,定时器的定时时间为:,T,d,=,(,2,16,-x,),T,cy,如果晶振频率,fosc,=12MHz,,则,T,cy,=1,s,,定时范围为,1,6
7、5536,s,。,初值,x,是,TH0,、,TL0,设定的初值。,7.2.2 T0,、,T1,的,4,种工作方式,(,3,)方式,2,工作方式,0,、方式,1,具有共同的特点,发生溢出现象后,需要程序不断反复给计数器赋初值。,TH0,的内容重新装入,TL0,后,其自身保持不变。,7.2.2 T0,、,T1,的,4,种工作方式,(,3,)方式,2,当作为计数器使用时,计数脉冲个数,N,:,N=2,8,-x=256-x,计数初值,x,是,TH0,、,TL0,设定的初值。,当作为定时器使用时,定时器的定时时间为:,T,d,=,(,2,8,-x,),T,cy,如果晶振频率,fosc,=12MHz,,则
8、T,cy,=1,s,,定时范围为,1,256,s,。,初值,x,是,TH0,、,TL0,设定的初值。,7.2.2 T0,、,T1,的,4,种工作方式,(,4,)方式,3,T0,和,T1,具有完全不同的功能。,7.2.2 T0,、,T1,的,4,种工作方式,定时,/,计数器,0,、,1,的四种工作方式总结,方式,TMOD,中,M1MO,计数器位数,定时范围(,12MHz,晶振),0,00,13,1-8192s,1,01,16,1-65536s,2,10,8,1-256s,3,11,8,1-256s,7.2.3,定时,/,计数器,0,、,1,的应用,1.,定时器,/,计数器的初始化编程,MCS-
9、51,单片机的定时,/,计数器具有定时和计数功能,并可选择,4,种工作方式。在使用定时器,/,计数器前必须对其进行初始化,设置其工作方式等。初始化包括:,(,1,)设置工作方式,即设置,TMOD,中的各位:,GATE,、,C/T,、,M1M0,。,(,2,)计算定时,/,计数器的初值,x,,并将初值,x,送入,TH,、,TL,中。,(,3,)启动计数器工作,即将,TR,置,1,。,(,4,)若采用中断方式则将对应的定时,/,计数器及,CPU,开中断。,7.2.3,定时,/,计数器,0,、,1,的应用,2.,计算计数初值,(,1,)计数方式下,初值,x,的计算,计数脉冲个数,N=2,n,-x,已
10、知计数脉冲个数,N,,则初值,x=2,n,-N,当采用工作方式,0,,,1,,,2,时,,n,分别取值,13,,,16,,,8,。,(,2,)定时方式下,初值,x,的计算,定时时间,Td=(2,n,-x),机器周期,Tcy,已知定时时间,Td,,机器周期,Tcy,。,则初值,x=2,n,-Td/Tcy,。当采用工作方式,0,,,1,,,2,时,,n,分别取值,13,,,16,,,8,。,例,7-5,:,定时器,/,计数器,T1,工作于计数方式,计数脉冲个数,N,=100,,允许中断,分别使用:(,1,)工作方式,1,;(,2,)工作方式,2,,进行初始化编程。,(,1,)由于,T1,工作于计数
11、方式,GATE=0,,,C/T=1,,,T1,工作于方式,1,,则,M1M0=01,。,T0,不用,,TMOD,的低,4,位取,0000,,则,TMOD=01010000B=50H,工作方式,1,,则计数器位数,n,=16,。,计数器初值,x=2,16,-100=65536-100=65436=FF9CH,。,TH1=FFH;TL1=9CH,分析:,例,7-5,:,定时器,/,计数器,T1,工作于计数方式,计数脉冲个数,N,=100,,允许中断,分别使用:(,1,)工作方式,1,;(,2,)工作方式,2,,进行初始化编程。,C51,语言初始化程序如下:,TMOD=0 x50;/*,设置,T1,
12、工作计数方式,1*/,TH1=0 xff;/*,加,1,计数器高,8,位,TH1,赋初值,FFH*/,TL1=0 x9c;/*,加,1,计数器低,8,位,TL1,赋初值,9CH*/,TR1=1;/*,打开,T1,启动开关*,/,ET1=1;/*T1,开中断*,/,EA=1;/*CPU,开中断*,/,例,7-5,:,定时器,/,计数器,T1,工作于计数方式,计数脉冲个数,N,=100,,允许中断,分别使用:(,1,)工作方式,1,;(,2,)工作方式,2,,进行初始化编程。,汇编语言初始化程序,1,如下:,MOV TMOD,#50H,MOV TH1,#0FFH,MOV TL1,#9CH,SETB
13、 TR1,SETB ET1,SETB EA,汇编语言初始化程序,2,如下:,MOV TMOD,#50H,MOV TH1,#0FFH,MOV TL1,#9CH,SETB TR1,MOV IE,#84H,例,7-5,:,定时器,/,计数器,T1,工作于计数方式,计数脉冲个数,N,=100,,允许中断,分别使用:(,1,)工作方式,1,;(,2,)工作方式,2,,进行初始化编程。,(,2,),TMOD=01100000B=60H,计数器初值,x=2,8,-100=156=9CH,。,TH1=9CH;TL1=9CH,分析:,C51,语言初始化程序如下:,TMOD=0 x60;/*,设置,T1,工作计数
14、方式,1*/,TH1=0 x9c;/*,加,1,计数器高,8,位,TH1,赋初值,9CH*/,TL1=0 x9c;/*,加,1,计数器低,8,位,TL1,赋初值,9CH*/,TR1=1;/*,打开,T1,启动开关*,/,ET1=1;/*T1,开中断*,/,EA=1;/*CPU,开中断*,/,例,7-5,:,定时器,/,计数器,T1,工作于计数方式,计数脉冲个数,N,=100,,允许中断,分别使用:(,1,)工作方式,1,;(,2,)工作方式,2,,进行初始化编程。,汇编语言初始化程序,1,如下:,MOV TMOD,#60H,MOV TH1,#9CH,MOV TL1,#9CH,SETB TR1,
15、SETB ET1,SETB EA,汇编语言初始化程序,2,如下:,MOV TMOD,#60H,MOV TH1,#9CH,MOV TL1,#9CH,SETB TR1,MOV IE,#84H,例,7-6,:,T0,工作于定时方式,1,,定时时间,T,d,=2ms,,系统主频,f,osc,=12MHz,,允许中断,对,T0,进行初始化编程。,分析:,T0,工作于定时方式,GATE=0,,,C/T=0,,,T0,工作于方式,1,,则,M1M0=01,。,T1,不用,,TMOD,的高,4,位取,0000,,则,TMOD=00000001B=01H,系统主频,f,osc,=12MHz,,机器周期,Tcy=
16、1us,。,工作方式,1,,则计数器位数,n,=16,。,计数器初值,x=2,16,-Td/Tcy=65536-2000=63536=F830H,。,TH0=F8H;TL0=30H,例,7-6,:,T0,工作于定时方式,1,,定时时间,T,d,=2ms,,系统主频,f,osc,=12MHz,,允许中断,对,T0,进行初始化编程。,分析:,C51,语言初始化程序如下:,TMOD=0 x01;/*,设置,T0,工作计数方式,1*/,TH0=0 xf8;/*,加,1,计数器高,8,位,TH0,赋初值,F8H*/,TL0=0 x30;/*,加,1,计数器低,8,位,TL0,赋初值,30H*/,TR0=
17、1;/*,打开,T0,启动开关*,/,ET0=1;/*T0,开中断*,/,EA=1;/*CPU,开中断*,/,TMOD=00000001B=01H,TH0=F8H;TL0=30H,汇编语言初始化程序,1,如下:,MOV TMOD,#01H,MOV TH0,#0F8H,MOV TL0,#30H,SETB TR0,SETB ET0,SETB EA,汇编语言初始化程序,2,如下:,MOV TMOD,#01H,MOV TH0,#0F8H,MOV TL0,#30H,SETB TR0,MOV IE,#84H,例,7-6,:,T0,工作于定时方式,1,,定时时间,T,d,=2ms,,系统主频,f,osc,=
18、12MHz,,允许中断,对,T0,进行初始化编程。,要求利用定时器,T0,使图中,P1.0,口控制的发光二极管,D8,进行,300us,亮,300us,灭。系统主频,f,=6MHz,。,ORG 0000H,LJMP MAIN ;,转主程序,ORG 000BH ;T0,中断入口地址,LJMP IT0 ;,转,T0,中断服务程序,ORG 0100H ;,主程序首地址,MAIN,:,MOV TMOD,,,#01H ;,定时器,0,工作方式,1,MOV TH0,,,#0FFH ;T0,初值设置,MOV TL0,,,#6AH,SETB TR0 ;,启动,T0,SETB ET0 ;T0,中断允许,SETB
19、 EA ;,中断总允许,SETB P1.0,SJMP$;,等待中断,ORG 0200H,IT0,:,MOV TH0,,,#0FFH,MOV TL0,,,#6AH,CPL P1.0,RETI,END,要求利用定时器,T0,使图中,P1.0,口控制的发光二极管,D8,进行,300us,亮,300us,灭。系统主频,f,=6MHz,。,ORG 0000H,LJMP MAIN ;,转主程序,ORG 000BH ;T0,中断入口地址,LJMP IT0 ;,转,T0,中断服务程序,ORG 0100H ;,主程序首地址,MAIN,:,MOV TMOD,,,#02H ;,定时器,0,工作方式,2,MOV TH
20、0,,,#6AH ;T0,初值设置,MOV TL0,,,#6AH,SETB TR0 ;,启动,T0,SETB ET0 ;T0,中断允许,SETB EA ;,中断总允许,SETB P1.0,SJMP$;,等待中断,ORG 0200H,IT0,:,CPL P1.0,RETI,END,#include,sbit,P1_0=P10;,void main(),TMOD=0 x02;/*,设置,T0,工作计数方式,2*/,TH0=0 x6A;/*,加,1,计数器高,8,位,TH0,赋初值,*/,TL0=0 x6A;/*,加,1,计数器低,8,位,TL0,赋初值,*/,TR0=1;/*,打开,T0,启动开关
21、/,ET0=1;/*T0,开中断*,/,EA=1;/*CPU,开中断*,/,while(1);,void Timer0(void)interrupt 1,P1_0=-P1_0;,例,7-7,:,要求利用定时器,T0,使图中,P1.7,口控制的发光二极管,D8,进行秒闪烁。系统主频,f,=12MHz,。,例,7-7,:,要求利用定时器,T0,使图中,P1.7,口控制的发光二极管,D8,进行秒闪烁。系统主频,f,=12MHz,。,分析:,发光二极管,D8,进行秒闪烁,即每秒一亮一灭,亮,500 ms,,灭,500 ms,。,系统主频,f,=12MHz,条件下,定时器,0,工作方式,1,,最大定
22、时时间为,65.536 ms,,,取定时器,0,定时,50ms,,溢出,10,次实现,500 ms,定时。,T0,工作方式确定:,GATE=0,,,C/T=0,,,T0,工作于方式,1,,则,M1M0=01,。则,TMOD=00000001B=01H,系统主频,f,osc,=12MHz,,机器周期,Tcy=1us,。,工作方式,1,,则计数器位数,n,=16,。,计数器初值,x=2,16,-Td/Tcy=65536-50000=15536=3CB0H,。,TH0=3CH;TL0=B0H,例,7-7,:,要求利用定时器,T0,使图中,P1.7,口控制的发光二极管,D8,进行秒闪烁。系统主频,f,
23、12MHz,。,ORG 0000H,LJMP MAIN ;,转主程序,ORG 000BH ;T0,中断入口地址,LJMP IT0 ;,转,T0,中断服务程序,ORG 0100H ;,主程序首地址,MAIN,:,MOV,TMOD,,,#01H ;,定时器,0,工作方式,1,MOV TH0,,,#3CH ;T0,初值设置,MOV TL0,,,#0B0H,SETB ET0 ;T0,中断允许,SETB EA ;,中断总允许,MOV R7,,,#0AH ;50 ms,置,10,次,SETB TR0 ;,启动,T0,SETB P1.7,SJMP$;,等待中断,ORG 0200H,IT0,:,MOV TH
24、0,,,#3CH,MOV TL0,,,#0B0H,DJNZ R7,,,LEDR,CPL P1.7,MOV R7,,,#0AH,LEDR,:,RETI,END,例,7-7,:,要求利用定时器,T0,使图中,P1.7,口控制的发光二极管,D8,进行秒闪烁。系统主频,f,=12MHz,。,void Timer0(void)interrupt 1 using 1,TH0=0 x3c;,TL0=0Xb0;,counter-;,if(counter=0),Signal=-Signal;,counter=10;,7.2.4 AT89C52,定时,/,计数器,2,的结构,AT89C52,中有一个功能较强的定时
25、/,计数器,T2,,它是一个,16,位的,具有自动重装和捕获能力的定时,/,计数器。,三种工作方式:,16,位自动重装载定时器,/,计数器方式,捕捉方式,串行口波特率发生器方式,7.2.4 AT89C52,定时,/,计数器,2,的结构,在定时器,/,计数器,2,内部,除了两个特殊功能寄存器,TH2,、,TL2,和控制寄存器,T2CON,、,T2MOD,之外,还有捕获寄存器,RCAP2H,、,RCAP2L,等电路组成。,其中,TH2,、,TL2,构成,16,位加法计数器。,RCAP2H,、,RCAP2L,构成,16,位寄存器。,在定时器,/,计数器,2,的计数脉冲源有两个:,内部机器周期,外部
26、计数脉冲。,7.2.4 AT89C52,定时,/,计数器,2,的结构,1,控制寄存器,T2CON,7.2.4 AT89C52,定时,/,计数器,2,的结构,2,捕获寄存器,RCAP2H,、,RCAP2L,外定时,/,计数器,T2,的捕获寄存器是一个,16,位的数据寄存器。由高,8,位寄存器,RCAP2H,和低,8,位寄存器,RCAP2L,组成。,捕获寄存器,RCAP2H,、,RCAP2L,用语捕获计数器,TH2,,,TL2,的计数状态,或用来预置计数初值。,7.2.5 AT89C52,定时,/,计数器,2,的工作方式,定时,/,计数器,2,有三种工作方式:,16,位自动重装载定时器,/,计数器方式、捕捉方式和串行口波特率发生器方式,。,






