730 likes | 901 Views
项目三 信号灯的定时器、中断方式的控制与实现. 定时 / 计数器组成与应用. 中断系统的与应用. 任务一 信号灯的定时器控制与实现. ( 1) 任务要求 利用单片机的定时器,实现对流水信号灯的复杂控制。 方法:利用定时器实现 1S 延时,实现信号灯的控制。. ; 主程序. ORG 0000H CONT : MOV R2 , #07H MOV A , #0FEH NEXT : MOV P1 , A ACALL DELAY RL A DJNZ R2 , NEXT
E N D
项目三 信号灯的定时器、中断方式的控制与实现 定时/计数器组成与应用 中断系统的与应用
任务一 信号灯的定时器控制与实现 (1) 任务要求 利用单片机的定时器,实现对流水信号灯的复杂控制。 方法:利用定时器实现1S延时,实现信号灯的控制。
;主程序 ORG 0000H CONT: MOV R2,#07H MOV A,#0FEH NEXT:MOV P1,A ACALL DELAY RL A DJNZ R2,NEXT MOV R2,#07H NEXT1:MOV P1,A RR A ACALL DELAY DJNZ R2,NEXT1 SJMP CONT (2)控制程序
;延时子程序定时器方式 DELAY:MOV R3,#14H ;置50ms计数循环初值 MOV TMOD,#10H ;设定时器1为方式1 MOV TH1,#3CH ;置定时器初值 MOV TL1,#0B0H SETB TR1 ;启动T1 LP1: JBC TF1,LP2 ;查询计数溢出 SJMP LP1 ;未到50ms继续计数 LP2: MOV TH1,#3CH ;重新置定时器初值 MOV TL1,#0B0H DJNZ R3,LP1 ;未到1s继续循环 RET ;返回主程序 END 定时器应用的控制指令
(3) 控制过程的实现 1)延时程序的实现要对定时器/计数器的初始化。 2)启动单片机内的定时器/计数器来完成的。 优点:可完成任一时间的定时,定时实现灵活,可靠。 采用中断还可以提高CPU工作效率。
(4) 实现任务目的 1)掌握四种定时器/计数器方式及初值计算; 2)掌握定时器/计数器初始化编程。 3)学会定时器/计数器实现定时/计数的编程方 法;
1.什么是定时?什么是计数? 定时: 是对已知脉冲(周期或频率确定)的计数,即对机器周期进行加1计数即机器周期X计数值。 计数: 对未知脉冲(周期或频率不确定)的计数,即对外部事件产生的脉冲进行加1计数。
1 2 3 4 5 6 7 8 9 10 11 12 晶振 频率 计数 频率 一次计数 1μs 1.什么是定时?什么是计数? 定时功能计数脉冲的产生 6.1.2 定时功能 机器 周期
N个 Tc t 1.什么是定时?什么是计数? 定时时间与计数脉冲之间的关系 计数脉冲T的个数为N 已知频率(或周期Tc)的脉冲 定时时间t t=NTc
2. 定时器/计数器及其组成结构 单片机内设有两个可编程的16位定时器/计数器:T0和T1。它们既可用以实现定时,也可用来对外部脉冲计数。 其中,T0和T1分别包括由两个8位即16位计数器:TL0、TH0;TL1、TH1。
T1(P3.5) T0(P3.4) TH1 TL1 TH0 TL0 TCON(88H) TMOD(89H) 中断 2. 定时器/计数器及其组成结构 (P3.3) (P3.2) T1 T0 8DH 8BH 8CH 8AH CPU 7 0 7 0 7 0 7 0 内部总线 控制寄存器 方式寄存器 MCS-51单片机定时器/计数器的结构图
2. 定时器/计数器及其组成结构 TH0TL0 MCS-51单片机定时器/计数器T0的逻辑结构图
GATE C/T M1 M0 GATE C/T M1 M0 TMOD 定时器0 定时器1 方式选择位: =1,计数方式 =0,定时方式 C/T C/T 3. 定时器/计数器的控制寄存器 工作模式寄存器TMOD M1、M0: 模式选择位 0 0 模式0 0 1 模式1 1 0 模式2 1 1 模式3 门控位:与其它条件一起控制定时器启动和停止
TCON TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 控制外部中断 控制寄存器TCON 定时器0 定时器1 T0溢出标志位: 当T0计满溢出时,由硬件置1,向CPU申请中断 T0运行控制位:与其它条件一起控制定时器启动或停止
& TRi 控制 GATE ≥1 1 INTi 4.定时器/计数器的工作方式、运行控制 定时器的运行控制逻辑 0 1 0 1 停止 启动 1 0 0 1 1 1
GATE C/T M1 M0 GATE C/T M1 M0 TMOD 定时器/计数器的初始化 1. 确定并设置工作方式-------对TMOD赋值; 2. 确定计数器初始值-------对TH0、TL0或TH1、TL1赋值; 3. 定时器/计数器的启动-----将TR0或TR1置1。(SETB TR0; SETB TR1 )
3. 定时器/计数器的工作模式 T0工作模式0 13位计数器 最大计数值:213 =8192 最大定时时间: 213 ×12/fosc 当fosc=12MHz时,tmax=8192μs 当fosc=6MHz时,tmax=16384μs
开始 计数 0 8192 定时时间t 初值X 定时时间=(213-初值)×12/fosc 若定时时间确定t,设计数值为N,N=t/机器周期Tc。由上式可计算出计数器的初值X= 213 -N,这个初值就是要写入TL0和TH0的值。[MOV TH0,#xxH (高八位) MOV TL0,#yyh(低五位)]
GATE C/T M1 M0 GATE C/T M1 M0 TMOD 定时器0 定时器1 例1. 用定时器/计数器T0的方式0,实现1s的定时 分析: 1. 采用定时器T0的方式0 2. 计数器初始值的计算 方式0最大定时时间: tmax=8.192ms=8192μs 要定时时间:1s 超出方式0计数范围 5000 μs =5ms 可选5ms定时,再循环200次 初始值:t=5000μs ,N=t/Tc=5000/1=5000,X=8192-5000=3192 X=0110001111000B 故TMOD=00H; 0 0 0 0 0 0 0 0 TH0 TL0 即:TH0=01100011B=63H,TL0=11000B=18H
初始化程序: MOV TMOD,#00H ;设定T0为方式0的定时方式 MOV TL0,#18H ;置T0计数器初值 MOV TH0,#63H SETB TR0 ;启动T0 ; 定时程序 MOV R6,#200 ;置5ms计数循环初值 MOV TMOD,#00H ;设定T0为方式0的定时方式 MOV TL0,#18H ;置T0计数器初值 MOV TH0,#63H SETB TR0 ;启动T0 LOOP:JNB TF0,$ ;查询计数溢出 CLR TF0 MOV TL0,#18H ;重置初值 MOV TH0,#63H DJNZ R6,LOOP
T0工作模式1 16位计数器 最大计数值:216=65536 最大定时时间: 216 ×12/fosc 定时时间=(216-初值)×12/fosc
TH0 (8位) T0工作模式2 8位计数器 存放初值 最大计数值:28=256 最大定时时间: 28×12/fosc 定时时间=(28-初值)×12/fosc
例2. 用T1模式2计数,外部计数信号由T1(P3.5)引脚输入,每出现一次负跳变计数器加1,要求每计满200次,使P1.0端取反。 分析: 1.确定工作方式——对TMOD赋值:(TMOD)=60H 2.计数器TH1、TL1的初值X : X=28-200=56=38H 故 (TH1)=(TL1)=38H。 3.启动计数器工作——将TR1置1,指令为 SETB TR1
初始化程序: MOV TMOD, #60H ; 设置T1为模式2计 数工作方式 MOV TH1, #38H ; 赋初值 MOV TL1, #38H SETB TR1 ;启动T1计数器
程序清单: ORG 1000H MOV TMOD,#60H ; 设置T1为模式2计数工作方式 MOV TH1,#38H ; 赋初值 MOV TL1,#38H SETB TR1 ; 启动T1计数器 LP1: JBC TF1,LP2 ; 查询计数溢出否? AJMP LP1 LP2: CPL P1.0 ; 输出取反 AJMP LP1 ; 重复循环 END
T0工作模式3 8位计数器 只有定时功能
在上一章中,已把流水灯的控制改进为调用延时子程序的形式,现在延时程序的实现可以由定时器/计数器来完成。在上一章中,已把流水灯的控制改进为调用延时子程序的形式,现在延时程序的实现可以由定时器/计数器来完成。 流水灯控制程序的改进
例3. 利用T0工作于方式1来实现延时,控制流水灯的程序。 源程序: ORG 1000H ;主程序 MOV A,#0FEH ;控制字11111110B送A LOOP:MOV P1,A ;控制与P1.0连接的LED亮 ACALL DELAY ;调延时子程序 RL A ;控制字左移一位 SJMP LOOP
ORG 1050H ;延时10ms子程序 DELAY:MOV TMOD,#01H;设置T0方式1定时方式 MOV TH0,#0FDH;置计数器的初始值 MOV TL0,#0F8H SETB TR0;启动T0 LP1: JBC TF0,LP2 ;查询定时时间是否到 SJMP LP1 LP2:MOV TH0,#0FDH;重置计数器的初始值 MOV TL0,#0F8H RET ;子程序返回 END
动手做: 通过定时器/计数器对流水灯控制功能改进。例如,要求第一位灯闪5次再移动等。
任务二 信号灯的中断控制与实现 (1) 任务要求: 利用单片机的中断系统,实现对流水信号灯的复杂控制。 方法:采用软件延时,通过中断方式实现信号灯的控制。 录像
任务内容: 单片机的P1连接八个LED,(主程序)控制8只LED循环点亮,当外部中断1发出中断请求时,(执行中断服务程序)8只LED亮0.5s,灭0.5s,共十次。之后(中断服务程序执行完,返回到主程序),继续控制8只LED循环点亮。 原理图如下页所示。
INT0 INT1 单片机AT89C51 LED0 LED1 LED2 LED3 LED4 LED5 LED6 LED7 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 单脉冲发生器
参考程序: • ORG 0000H • AJMP MAIN • ORG 0013H ;外部中断1入口 • AJMP INT01 • ;主程序 • ORG 0100H MAIN: SETB IT0 ;设置沿触发 • SETB EX1 ;允许外部中断1中断 • SETB EA ;CPU开中断 • MOV A,#0FEH ;信号灯初始状态, • ;最右边LED亮 • LC: MOV P1,A • RL A ;准备点亮下一个LED • MOV R4,#20 ;时间常数 • LCALL DIS01S ;调用延时程序 • SJMP LC (2)控制程序 录像1
; 中断服务程序 • ORG 0150H INT01:PUSH ACC ;保护现场 • MOV R7,#10 ;闪烁10次 LOOP: CLR A ;全亮 • MOV P1,A • MOV R4,#25 ;时间常数 • LCALL DIS01S ;调用延时程序 • CPL A ;全灭 • MOV P1,A • MOV R4,#10 ;时间常数 • LCALL DIS01S ;调用延时程序 • DJNZ R7,LOOP ;查询是否结束 • POP ACC ;恢复现场 • RETI 录像3 录像2
; 延时程序 • ORG 200H • DIS01S: MOV R5,#100 • DD1: MOV R6,#100 • DJNZ R6, $ • DJNZ R5,DD1 • DJNZ R4, DIS01S • RET • END
(3) 控制过程的实现 1)由主程序控制信号灯的循环移位。 2)利用外部中断实现信号灯的闪烁。 3)通过中断体现实时控制的优点。
(4) 实现任务目的 1)理解中断的概念。 2)学会中断初始化。 3)学会利用中断控制外部设备。
电话铃响 批文件 1. 中断概念 中断现象举例 • 某经理正在批阅文件,突然桌子上的电话铃响了。 • 她读或写完正在读或写的字或句子后,去接电话。 • 听完电话以后,她又从打断的地方继续读或写。 批文件 接电话
计算机中的中断概念 CPU • 中断就是中止当前正在运行的程序,去处理更紧急更必要的中断服务程序; • 当中断服务执行完毕后,再返回到原先被终止的程序并继续运行。 主程序 中断服务程序 随机事件 主程序
日常生活中的中断与计算机中断的比较 批阅文件 执行主程序 日常事务 电话铃响 中断信号 中断请求 暂停看书 暂停执行主程序 中断响应 电话谈话 执行中断程序 中断服务 批阅文件 返回主程序 中断返回
中断嵌套的过程 中断嵌套示意图 CPU正在执行 响应高级中断请求 主程序 响应低级中断请求 执行高级中断服务程序 断点 断点 RETI RETI
INT0 INT1 单片机 或 或 MCS-51系列单片机的中断系统提供5个中断源。 外部中断INT0 外部中断INT1 定时器T0溢出中断 定时器T1溢出中断 片内串行口产生的发送或接收中断 P3.2 P3.3 TF0 TF1 TI或RI
IE0 INT0 高 TF0 T0 INT1 IE1 TF1 T1 串口 TI RI 低 中断标志 中断标志位 中断源 自然优先级
2. 中断控制 定时器/计数器控制寄存器TCON TCON IE0:外部中断0中断请求标志。当IE0=1时,外部中断0向CPU申请中断。 TF0:定时器T0中断请求标志。当定时器T0计满溢出时,TF0=1,向CPU申请中断 IE1:外部中断1中断请求标志。当IE1=1时,外部中断1向CPU申请中断。 IT1:外部中断1类型控制位。当IT1=1时,选择外部中断1为下降沿触发申请中断;当IT1=0时,选择外部中断1为低电平触发。 IT0:外部中断0类型控制位。当IT0=1时,选择外部中断0为下降沿触发申请中断;当IT0=0时,选择外部中断0为低电平触发。 TF1:定时器T1中断请求标志。当定时器T1计满溢出时,TF1=1,向CPU申请中断
TI RI SCON X X X X X X 串行口控制寄存器SCON TI:串行口发送中断请求标志 RI:串行口接受中断请求标志 TI和RI通过或门输出向CPU发出中断申请,CPU响应中断后,先要判断RI和TI哪一个是中断源,从而进入相应的中断处理程序。 返回
EA ES ET1 EX1 ET0 EX0 IE EX0 INT0 T0 ET0 INT1 EX1 T1 ET1 串口 ES 中断允许控制寄存器IE 中断源 中断允许位 EA——总中断允许位,EA=0,禁止所有中断, EA=1开放所有中断; 每一个中断源还有相应的中断允许位, 1允许相应中断源的中断,0禁止相应中断源的中断。 EA
EA X X ES ET1 EX1 ET0 EX0 IE 例1:假设允许MCS-51系列单片机片内定时器/计数器中断,禁止其他中断。试根据要求设置寄存器IE的值。 解: 1 1 1 0 0 0 0 0 根据题意要求,总允许位设为1, 定时器中断允许位设为1,其余位设为0; 故(IE)=8AH
IE的设置指令 方法一:用字节操作指令 MOV IE, #8AH 方法二:用位操作指令 SETB EA ;开中断 SETB ET0 ;T0允许中断 SETB ET1 ;T1允许中断