定时中断T0服务程序参考框图
第六章单片微机的定时器计数器原理及应用

中断矢量001BH
⑴T0方式3下的T0
在方式3情况下,T0被拆成二个独立的8位计数器TH0、TL0。 ▲ TL0:8位定时/计数器,使用T0原有的控制寄存器资 源:TF0,TR0,GATE,C/T,INT0,中断矢量等; ▲ TH0:8位定时器,占用T1的中断溢出标志TF1,运行控 制开关TR1,中断矢量001BH,只能对片内机器周期脉冲计数
复位后,两个寄存器全部清零。
6.3.2 定时器/计数器T2的工作方式
T2的工作方式用控制位CP/RL2(T2CON.0)和RCLK +TCLK来选择。T2有3种工作方式,如表6-2所示:捕获方式、 自动重装载方式和波特率发生器方式。
⒈ 捕获方式
在一定条件下,自动将计数器TH2和TL2的数据读入捕获寄存器 RCAP2H和RCAP2L,亦即TH2和TL2内容的捕获是通过捕获寄 存器RCAP2H和RCAP2L来实现的。其工作原理可参见图6-7。
当CP/RL2=0时,选择自动重装载方式。 若T2的中断是被允许的,则无论发生TF2=1还是EXF2 =1,CPU都会响应中断,此中断向量的地址为002BH。响应 中断后,应用软件撤除中断申请。TF2 和EXF2都是直接可寻 址位,可采用CLR TF2和CLR EXF2指令实现撤除中断申请的 功能。
触发 方式
89H IE0
中断 标志
88H IT0
触发 方式
⒊ T0、T1 的数据寄存器——TH1、TL1,TH0、TL0 ⒋ 定时器/计数器中断
⑴ 中断允许寄存器IE
⑵ 中断矢量 ⑶ 中断优先级寄存器IP
6.2.2 定时器/计数器T0、T1 的工作方式
T0:有4种工作方式可选(方式0,1,2,3)
当CP/RL2=l时,选择捕获方式。
第5章 MCS-51中断、定时计数器及串行接口

22:26
7
保护现场
课本P103
保护现场是指由于CPU执行中断处理程序时, 可能使用主程序中用过的累加器、寄存器或标志位。
为了使这些寄存器的值在中断服务程序中不被 冲掉,进入中断服务程序前,要将它们保护起来。
中断服务程序执行完,必须恢复原寄存器的内 容及原程序中断处的地址,即恢复现场和恢复断点。
22:26
课本P105
一、中断请求控制
(1) TCON中的中断请求标志位 Timer Controller
TCON为定时/计数器控制寄存器,其字节 地址为88H,可位寻址。这个寄存器除了控制定 时/计数器T0和T1的溢出中断外,还控制外部中 断的触发方式和锁存外部中断请求标志位。
图5-3 TCON中的各位定义
22:26
24
2. 中断响应过程
课本P110
CPU响应中断后,由硬件自动执行如下的功能操作:
(1)根据请求源的优先级高低,对相应的优先级状态 触发器置1,自动生成长调用指令LCALL addr16。
(2)保护断点,把程序计数器PC的内容压入堆栈。 (3)清除相应的中断请求标志位。 (4)把被响应的中断源所对应的中断服务程序入口地
…
先进后出
…
POP DPL
POP DPH
POP ACC
RETI
最后1条指令 必须是RETI
27
中断响应过程
处理文档 电话铃响 暂停文档 文档中作暂停记号 电话交谈 找出暂停记号位置 继续处理文档
执行主程序(日常事务程序) 中断申请信号有效(中断请求)
暂停执行主程序响应中断 当前PC及寄存器入栈(保护现场)
22:26
5
中断系统的基本问题
定时器工作原理

定时器工作原理通电延时型。
只要在定时的时间段内(即1分钟)定时器一直得电,则常开触电就会闭合,只要定时器不断电常开触电就会一直闭合。
定时器断电则常开触电断开101 6.1010116801图6.1定时器/计数器结构框图011011011 0265536216016553621606.2411010110104位用于T0,高4位用于T1的。
:门控位。
GATE=0,只要用软件使TR0(或TR1)置1就能启动定时器/计数器0(或定时器/计数器1);GATE=1,只有在(或)引脚为高电平的情况下,且由软件使TR0(或TR1)置1时,才能启动定时器/计数器0(或定时器/计数器1)工作。
不管GATE处于什么状态,只要TR0(或TR1)=0定时器/计数器便停止工作。
:定时器/计数器工作方式选择位。
C/=0,为定时工作方式;C/=1,为计数工作方式。
、M1:工作方式选择位,确定4种工作方式。
如表6.1所示。
表6.1定时器/计数器工作方式选择【例6.1】设置定时器1工作于方式1,定时工作方式与外部中断无关,则,M0=1,GATE=0,因此,高4位应为0001;定时器0未用,低4位可随意11(因方式3时,定时器1停止计数),一般将其设为0000。
因此,指令形式为:MOV TMOD,#10H/计数器工作方式与程序设计通过对特殊功能寄存器TMOD中的设置M1、M0两位的设置来选择四种工作/计数器0、1和2的工作方式相同,方式3的设置差别较大。
工作方式0工作方式寄存器TMOD中的M1M0为:00。
定时器/计数器T0工作在方式0 16位计数器只用了13位,即TH0的高8位和TL0的低5位,组成一个13 /计数器。
当TL0的低5位计满溢出时,向TH0进位,TH0溢出时,对TF0置位,向CPU申请中断。
定时器/计数器0方式0的逻辑结构如6.2所示。
1013121312213131310612 12130106128 192211310110136.22138103213 16.32502132130 16.401200131300819210001110000085 851 140 01011 011601 6.3121312213161610612 121601061265 53621161166.51216101032130 16.6980012162169800 16.711121610103216 111011000888821202 6.41021688812812288810612 128010612256218186.825006.56.5 6.62115001022321250050050050031130 168031021031203 6.66.923821002561001233201。
定时器计数器讲解

TR1位(或TR0位)=1,启动定时器工作的必要条件。 TR1位(或TR0位)=0,停止定时器工作。 该位可由软件置“1”或清“0”。
10
6.2 定时器/计数器的4种工作方式 4种工作方式分别介绍如下。
6.2.1 方式0 当M1、M0为00时,定时器/计数器被设置为工作方式0,
这时定时器/计数器的等效逻辑结构框图如图6-4所示(以定 时器/计数器T1为例,TMOD.5、TMOD.4 = 00)。
(1)GATE=0时,A点(见图6-4)电位恒为1,B点电位仅 取决于TRx状态。TRx = 1,B点为高电平,控制端控制电子 开关闭合,允许T1(或T0)对脉冲计数。TRx = 0,B点为低 电平,电子开关断开,禁止T1(或T0)计数。
(2)GATE=1时,B点电位由INTX*(x = 0,1)的输入电 平和TRx的状态两个条件来定。当TRx=1,且INTX*=1时,B 点才为1,控制端控制电子开关闭合,允许T1(或T0)计数。 故这种情况下计数器是否计数是由TRx和INTX*两个条件来共 同控制。
图6-1 AT89S51单片机的定时器/计数器结构框图
4
只不过计数信号的来源不同。 计数器模式是对加在T0(P3.4)和T1(P3.5)两个引脚上
的外部脉冲进行计数(见图6-1) 定时器模式是对单片机的系统时钟信号经片内12分频后的
内部脉冲信号(机器周期)计数。由于时钟频率是定值,所 以可根据对内部脉冲信号的计数值可计算出定时时间。
本例由于采用定时器T0中断,因此需将IE寄存器中的EA、 ET0位置1。 (4)启动和停止定时器T0
实验2利用定时器T0中断延时

实验2 定时器T0中断实验目的掌握定时器相关寄存器的配置,以及定时时间的计算等实验内容定时器中断控制P1.0口输出(实现LED的亮灭),在Proteus界面观察。
实验步骤1、在Keil开发环境下建立一个工程,命名为‘定时器中断’,然后选择存储路径进行文件保存。
2、程序的编写,a.定时常数的确定定时器/计数器的输入脉冲周期与机器周期一致,为振荡频率的1/12。
本实验中时钟频率为12 MHZ,现采用中断方法来实现0.5秒延时,选用定时器T0来完成。
(用T0计时器不能直接实现0.5S的延时,实验可以通过中断延时0.05秒,然后进行10次中断后,实现LED的亮灭)时间常数可按下述方法确定:机器周期=12÷晶振频率=12/(12×106)=1us设计数初值为X,则(216-X)×1×10-6=0.05,可求得X,然后将X化为十六进制则X=3CB0H,故初始值为TH1=3CH,TL1=B0Hb.初始化程序包括定时器初始化和中断系统初始化,主要是对IE、TCON、TMOD 的相应位进行正确的设置,并将时间常数送入定时器中。
c.设计中断服务程序和主程序中断服务程序除了要完成计数减一工作外,还要将时间常数重新送入定时器中,为下一次中断做准备。
d.编译代码:ORG 0000HSJMP MainORG 000BHAJMP TT0 ;定时器T0的中断服务程序入口地址ORG 0030HMain : MOV TMOD ,#00000001B ,定时器T0工作在方式1CLR TR0CLR TF0MOV TH0,#60 ;(65536-50000)延时5ms的初值MOV TL0,#176MOV R7,#10 ;循环10次,5*10=50msSETB P1.0MOV IE,#00000010B ;允许T0中断SETB TR0 ;启动定时器T0SETB EA ;打开中断系统Loop: SJMP LoopTT0 : DJNZ R7,Next ;CPL P1.0 ;取反p1.0MOV R7,#10 ;重置循环次数初值Next: CLR TR0 ;关闭定时器MOV TH0,#60 ;重写定时5ms的初值MOV TL0,#176SETB TR0 ;启动定时器RETI3、搭建Proteus仿真平台,仿真平台如实验1中平台一致。
定时中断系统

T0(P3.4)
(8AH)
TH0 TL0 8FH 8EHTH1 8DH TL1 8CH 8BH 8AH 89H 88H 7 0 7 0 7 (88H) TF1 TR1 TF0 TR0 IE1 7 0 IE0 0 IT0 溢出 IT1
CPU
溢出 启 动
启 动
内部总线
工作方式 工作方式
TCON(88H)
AJMP DEL1 RESP1:CLR TR0 : MOV TMOD,#02H , MOV TH0,#06H , MOV TL0,#06H , SETB P1.1
;重置T0为500 µS定时 ;重置定时初值
;P1.1置1
CLR
P1.0
;清P1.0 ;启动定时器 ;检测第一次500 µS到否
SETB TR0 DEL2: JBC TF0,RESP2 , AJMP DEL2 RESP2:SETB P1.0 : DEL3: JBC TF0,RESP3 , AJMP DEL3 PESP3: CLR P1.1 CLR TR0 AJMP BEGIN
返回
定时/计数器方式寄存器TMOD 定时/计数器方式寄存器TMOD
INT1 INT0 (P3.3) (P3.2) 定时器T1 (8DH) (8BH)
TL1 D5 0 4 7 D
T1(P3.5)
T0(P3.4)
定时器T0 (8CH) (8AH)
TL0 D 7 10
D7
TH1 D 7 60
D3
TH0 2 7 D0
对于6MHZ的晶振频率,每 次加一操作需2 µS
源程序:
BEGIN:MOV TMOD,#06H : , MOV TH0,#0FFH , MOV TL0,#0FFH , CLR P1.1 SETB TR0 DEL1:JBC : TF0,RESP1 , ;设T0为方式2,外部计数 ;计数值为01即溢出 ; ;P1.1初值为0 ;启动计数器 ;检测外跳变信号 ;
第5章AT89S52定时器计数器

图5-2 TMOD格式
8位分为两组,高4位控制T1,低4位控制T0。 TMOD各位的功能。 (1)GATE———门控位。
0:仅由运行控制位TRx(x = 0,1)来控制定时器/计数器运 行。
1:用外中断引脚( INT0*或 INT1*)上的电平与运行控制 位TRx共同来控制定时器/计数器运行。
9
5
5.1 定时器/计数器的结构 定时器/计数器T1、T0结构如图5-1所示,T0由特殊功能
寄存器TH0、TL0构成,T1由特殊功能寄存器TH1、TL1构成。
图5-1 定时器/计数器T0、T1结构框图
6
具有定时器和计数器2种工作模式,4种工作方式(方式0、 方式1、方式2和方式3)。属于增1计数器。
定时器/计数器T0分为两个独立的8位计数器TL0和TH0, TL0使用T0的状态控制位C/T*、GATE、TR0、TF0 ,而TH0
23
被固定为一个8位定时器(不能作为外部计数模式),并使用 定时器T1的状态控制位TR1和TF1,同时占用定时器T1的中断 请求源TF1。 2.T0工作在方式3时T1的各种工作方式
P1.0输出;T2OE=0,禁止定时时钟从P1.0输出。 DCEN(D0):计数方式选择。DCEN=1,T2的计数方式
由P1.1引脚状态决定。P1.1=1,T2减计数,P1.1=0,T2加 计数;DCEN=0,计数方式与P1.1无关,同T1和T0一样,采 用增1计数。
31
2. 特殊功能寄存器T2CON T2的功能选择由特殊功能控制寄存器T2CON来设定,
(2)M1、M0——工作方式选择位 M1、M0共有4种编码,对应于4种工作方式的选择,如
表6-1所示。
10
(3)C/T*—计数器模式和定时器模式选择位 0:为定时器工作模式,对单片机的晶体振荡器12分频后的
c51单片机的定时器和中断

二、方式1 方式
方式1结构 图6-5 T0 (或T1) 方式 结构 或
三、方式2 方式
TMOD 申请 TCON 中断 D7 TF1 TR1 TF0 TR0 T1引脚 溢出 TL1 重装初值控制 TH1 8位 &
≥1
0 1
M0 M1 C/T
D4
1
1 0
机器周期
GATE D7
1 INT1引脚
D0
方式2结构 图6-6 T0 (或T1) 方式 结构 或
图6-3 方波硬件设计和仿真波形
(2)源程序 ) //中断方式 中断方式 #include "reg51.h" #include "stdio.h" Uart_Init(); sbit P1_1=P1^1; void main() { TMOD=0X01; // T0工作在方式 工作在方式1 工作在方式 TL0=0xB0; //给TL0置初值 给 置初值 TH0=0x3c; //给TH0置初值 给 置初值 ET0=1; //开串行口中断 开串行口中断 EA=1; TF0=0; TR0=1; //启动 启动T0 启动 while(1) ; //设置断点处 设置断点处 } void Int_T0() interrupt 1 using 2 { TL0=0xB0; TH0=0x3c; //重赋初值 重赋初值 P1_1=!P1_1; //定时时间到 定时时间到P1_1取反 定时时间到 取反 printf("Timer1 overflow in Mode 1\n");/* 定时 溢出后, 器0溢出后,输出提示信息 */ 溢出后 }
计数器控制寄存器TCON 三、定时/计数器控制寄存器 定时 计数器控制寄存器
定时器控制字TCON的格式如下。 位地址 位符号 8FH TF1 8EH TR1 8DH TF0 8CH TR0 8BH IE1 8AH IT1 89H IE0 88H IT0
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
软件程序:
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP PIT0
ORG 001BH
LJMP PIT1
ORG 0100H
MAIN: MOV SP,#FH ;设堆栈指针
MOV SCON,#00H ;设置串行口为方式0
MOV TMOD,#11H ;T0和T1初始化为方式1
MOV TH0, #3CH ;置时间常数,T0和T1定时100ms MOV TL0, #OB0H
MOV TH1, #3CH
MOV TL1, #0B0H
MOV 50H, #96H ;T0中断次数计数单元
MOV 51H,#14H ;T1中断次数计数单元
MOV R1, #00H
MOV R2, #00H
MOV R0, #40H ;显示缓冲单元起始地址
DISP0:MOV @R0, #00H ;显示缓冲单元清零
INC R0
CJNE R0, #4CH,DISP0
MOV 44H,#01H ;设置通道号的显示缓冲单元
MOV 48H,#02H
MOV R7,#40H ;置当前通道显示缓冲单元首址
MOV 53H,#40H
SETB ETO ;开中断
SETB ET1
SETB EA
SETB TR0 ;启动定时器
SETB TR1
LP: MOV R7, 53H ;调显示子程序
ACALL DISP
AJMP JP
定时器TO中断服务程序
PIT0: MOV TH0, #3CH ;重置时间常数
MOV TL0, #OBOH
DJNZ 50H,#96H
PUSH ACC
PUSH 03H
ACALL WDXJ ;调温度巡检子程序
POP 03H
POP ACC
DH0: RET1
定时器T1中断服务程序
PIT1: MOV TH1,#3CH ;重置时间常数
MOV TL0, #OBOH
DJNZ 51H,DH1 ;计数20次即定时2S
MOV 51H,#14H
INC R2
CJNE R2,#03H,CNL0 ;根据R2中的内容确定显示缓冲区首址 MOV R2,#00H
CNL0: CJNE R2,#00H,CNL1
MOV 53H,#40H
SJMP DH1
CNL1: CJNE R2,#01H,CNL2
MOV 53H,#40H
SJMP DH1
CNL2: MOV 53H,#48H
DH1: RETI
显示子程序
DISP: CLR P3.7 ;输出锁存
MOV R3,#01H ;置显示字位码
MOV DPTR,#TAB
DISP1:MOV A,R3
MOV SBUF,A ;字位码送串行口
JNB T1,$ ;等待串行转送结束
CLR T1 ;清串行中断标志
MOV A,R7
MOV R0,A
MOV A,@RO ;取代显示的数据
MOVC A,@R0 ;查表求字段码
MOV SBUF, A ;字段码送串行口,
JNB T1,$ ;等待串行中断标志
SETB P3.7 ;允许输出显示
ACALL DEL ;调延时子程序
MOV A,R3
JB ACC.3,DISP2 ;4位显示完否
RL A
MOV R3,A
INC R7
CLR P3.7 ;输出锁存
AJNP DISP1
DISP2:RET
TAB : DB 3FH,06H,5BH,4FH,66H
DB 6DH,7DH,07H,7FH,6FH
DEL: PUSH 07H ;延时子程序
MOV R6,#32H
AA: MOV R7,#19H
DJNZ R7,$
DJNZ R6,AA
POP 06H
POP 07H
RET
温度巡检子程序
WDXJ: CLR P2.0
CLR P2.1
SERB P2.2
MOV A,R1 ;读入当前待检测的通道号
RL A
RL A
ADD A,#40H ;求显示缓冲区首址
MOV R0,A
MOV A,R1
MOV @R0,A
INC R0
MOV R5,#00H
MOV R6,#04H
STAT: CJNE R1,#00H,AD01 ;根据R1的内容选择通道
CLR P2.5
CLR P2.6
CLR P2.7
SJMP ZH
AD01: CJNE R1,#01H,AD02
SETB P2.5
CLR P2.6
CLR P2.7
SJMP ZH
AD02: CLR P2.5
SETB P2.6
CLR P2.7
ZH: SETB P2.0
NOP
N0P
NOP
CLP P2.0
JNB P2.2,$ ;检测EOC信号,等待转换完毕 SETB P2.1
MOV P1,#0FFH
MOV A,P1 ;读入转换结果
RRC A ;转换结果除以4
ADD A,R5 ;累加
MOV R5,A
DJNZ R6,ZH ;4次到?
MOV A,R5 ;保存平均值
MOV B,#03H ;标度变换
DIV AB
MOV R3,B
MOV B,#0AH ;将标度变换结果的整数部分 DIV AB ;进行BCD码转换
MOV @R0,A 送显示缓冲单元(十,个位)
INC R0
MOV @R0,B
INC R0
CJNE R3,#00H,L1 ;标度变换结果的余数部分 MOV @RO,#00H ;小数处理
SJMP L3
L1: CJNE R3,#01H,L2。