340 likes | 478 Views
第六章 输入/输出和中断. 6.1 输入/输出 6.2 CPU 与外设数据传送方式 6. 3 MCS-51 中断系统 6. 4 中断应用举例. 6.1 输入/输出. 查询方式. 直接传送方式. 6 . 2 CPU 与外设数据传送方式. 一、 直接传送方式 ( 无条件 ) 也称无条件传送方式, 例: 驱动指示灯、继电器、启动电机等. 初始化. Busy?. 输出数据. 结束 ?. 二、 查询方式 送数据或发命令前先检查设备状态. 例:打印机的“忙 ” 状态. 1) 输出: P1(8 位 ), 接打印机 数据口
E N D
第六章 输入/输出和中断 6.1 输入/输出 6.2 CPU与外设数据传送方式 6. 3MCS-51中断系统 6. 4 中断应用举例
6.1 输入/输出 查询方式 直接传送方式
6.2 CPU与外设数据传送方式 • 一、直接传送方式(无条件) • 也称无条件传送方式,例: • 驱动指示灯、继电器、启动电机等
初始化 Busy? 输出数据 结束? 二、查询方式 送数据或发命令前先检查设备状态 例:打印机的“忙”状态 1)输出:P1(8位), 接打印机数据口 2)输入:P3.1(1位), 接打印机的“忙”信号 低电平表示状态“忙” SETB P3.1 Busy: JNB P3.1, Busy … MOV P1, A DJNZ Rn, Busy 有什么办法可以提高CPU效率?
三、中断传送方式 有直接、查询、中断、DMA等传送方式。 查寻方式 中断方式 CPU不主动查询外设,只执行自己的程序,当外设准备好需要传送数据时,主动提出申请,(突发的),若CPU准于请求,(响应),放下正在执行的程序,去传送外设的数据。见下页图
查询 中断 仿真
温度 外设 CPU 处理 CPU 压力 外设 断电 外设 中断有硬件中断和软件中断,仅讨论硬件中断。 中断的特点:外设主动提出申请,突发性,软硬件共同完成。 中断的好处: 1、CPU分时操作(与多个外设并行工作,多任务) 2、实现实时处理 3、故障处理和调试程序 机器如何实现中断? 中断是软硬件共同组成的系统。
1、中断请求 外设向CPU发出的“中断申请信号”称“中断请求”。 键盘 打印机 请求 CPU 外设 定时器 磁盘 掉电 2、中断源 引起中断的原因,或能发出中断申请的源,称为“中断源”。通常中断源有: (1)一般的输入输出设备,如键盘,打印机等。 (2)数据通道,如磁盘,磁带等。 (3)定时器。 (4)故障源,如电源掉电。 (5)为调试程序而设的中断,如单步、断点设置等。
主程序 RETI 4、中断系统的功能 (1)响应中断及返回 (2)能实现优先权排队 中断请求 中断请求 (3)能实现中断嵌套 RETI 5、中断及响应的过程 中断源提出申请 →CPU决定是否响应→ 若响应转去中断处理 →完成后返回原中断处。
6、CPU响应中断的条件 (1)有中断请求 (2)中断请求没有被屏蔽 (3)中断是开放的或者是允许的 (4)在现行指令结束后才响应中断 7、中断响应及中断期间应做的工作 (1)关中断(硬件自动实现) (2)保留断点(硬件自动实现) (3)保护现场(软件完成) (4)给出中断,入口转入相应的中断服务程序(硬件自动完成) (5)恢复现场 (6)开中断与返回(由RETI指令实现)
RETI与RET的异同点? ①相同: 匀执行恢复断点操作,即从堆栈中弹出断点给PC。 ②不同:RETI将清“0”响应时所置的优先级触发器,RET没有该功能。 中断与子程序调用的区别?
6.3 MCS-51 中断系统 MCS-51允许5个中断请求源,提供二个中断优先级,可实现二级中断服务程序嵌套。 优先级 外部中断0 中断允许 定时器0 外部中断1 定时器1 串行口中断 总允许 • 与中断系统相关的特殊功能寄存器有: • 中断源寄存器:TCON(88H),SCON(98H) • 中断允许控制寄存器IE(A8H) • 中断优先级控制寄存器IP(B8H)
一、中断请求源 1、TCON(Timer Control)定时器/计数器的控制寄存器,锁存外部中断请求标志。 ITi=0 0 INT0 ITi=1 INT1 (1)IT0、IT1 (interrupt trigger mode)外部中断请求触发方式 ①ITi=0 为低电平触发方式; ②ITi=1 为边沿触发方式; ③ ITi 可由软件置“1”或清“0”。 (2)IE0、IE1(external interrupt flag) 外部中断标志,当有外部中断请求时,置“1”该位 ①当ITi=0 时,若INTi=0,则置“1”IEi,否则清“0” IEi; ②当ITi=1 时,若INTi= 置“1”Iei; ③ IEi=1表示外部正在向CPU申请中断,CPU响应中断后自动清IEi
(3) TF0、TF1(Timer overflow interrupt flag)定时器溢出中断标志 当定时器/计数器最高位进位时,置“1”TFi表示正在向CPU申请中断,CPU响应中断后,自动清“0” TFi。 二、中断控制 1、IE(Interrupt Enable)中断允许寄存器:控制中断是开放还是屏蔽的。 (1)EA(Enable All)总中断允许标志 (2)ES(Enable Series)串行口允许标志 (3)ET0、ET1(Enable Timer)定时器/计数器溢出中断标志 (4) EX0、EX1(Enable eXternal)外部中断允许标志 上述中:“1”表示允许中断,“0”表示屏蔽中断。
2、IP(Interrupt priority) 中断优先权控制寄存器(B8H) (1)PS:串行口中断优先级控制位 (2)PT0、PT1:定时器/计数器中断优先级控制位 (3)PX0、PX1:外部中断优先级控制位 上述中:“1”表示高优先级,“0”表示低优先级。
三、中断响应过程 每个周期S6→对中断源进行采样→在下一个周期按优先级顺序依次查询→如果某个中断标志在上一个周期S6已被置“1” →CPU执行硬件LCALL转向相应中断的特定单元,进入中断服务程序,但是如果遇上下列条件之一,硬件将受阻: (1)正在执行同级或高级中断服务程序。 (2)当前的查询周期不是执行指令的最后一个机器周期。 (3)正在执行RETI或任何仿问IE或IP的指令。 CPU响应中断时先置“1”相应的优先级触发器,然后执行硬件LCALL(压栈与转移),同时清“0”中断请求标志(TI、RI除外)。
中断服务程序入口: IE0 0003H~000AH IT0 000BH~0012H IE1 0013H~001AH IT1 001BH~0022H IS 0023H~002AH 在中断服务程序的最后,须放一条指令RETI,该指令清“0”响应时所置的优先级触发器(RET没有此操作),然后返回。 举例:
ORG 0003H LJMP INTP ORG 0040H CLR P1.0 CLR IT0 ;低电平触发 SETB PX0 ;高优先级 SETB EA ;开总中断 SETB EX0 ;开INT0中断 ORG 0100H INTP:JB F0, FS CLR P1.0 ;F0=0,关水 CPL F0 RETI FS: SETB P1.0 ;F0=1,放水 CPL F0 RETI 主程序
简单I/O实验(实验四)(交通灯控制) • 系统晶振是 11.0592 MHz • ORG 0000H • LJMP START • ORG 0040H • START: • MOV SP,#60H • LCALL STATUS0 ;初始状态(都是红灯) • CIRCLE: LCALL STATUS1 ;南北绿灯,东西红灯 • LCALL STATUS2 ;南北绿灯闪转黄灯,东 • LCALL STATUS3 ;南北红灯,东西绿灯 • LCALL STATUS4 ;南北红灯,东西绿灯 • LJMP CIRCLE • STATUS0: ;南北红灯,东西红灯 • MOV DPTR,#8300H • MOV A,#0FH • MOVX @DPTR,A • MOV R2,#10 ;延时1秒
LCALL DELAY • RET • STATUS1: ;南北绿灯,东西红灯 • MOV DPTR,#08300H • MOV A,#96H ;南北绿灯,东西红灯 • MOVX @DPTR,A • MOV R2,#200 ;延时20秒 • LCALL DELAY • RET • STATUS2: ;南北绿灯闪转黄灯, • MOV DPTR,#8300H • MOV R3,#03H ;绿灯闪3次 • FLASH: MOV A,#9FH • MOVX @DPTR,A • MOV R2,#03H • LCALL DELAY • MOV A,#96H • MOVX @DPTR,A
MOV R2,#03H • LCALL DELAY • DJNZ R3,FLASH • MOV A,#06H ;南北黄灯,东西红灯 • MOVX @DPTR,A • MOV R2,#10 ;延时1秒 • LCALL DELAY • RET • STATUS3: ;南北红灯,东西绿灯 • MOV DPTR,#8300H • MOV A,#69H • MOVX @DPTR,A • MOV R2,#200 ;延时20秒 • LCALL DELAY • RET • STATUS4: ;南北红灯,东西绿灯 • MOV DPTR,#8300H • MOV R3,#03H ;绿灯闪3次
FLASH1: MOV A,#6FH • MOVX @DPTR,A • MOV R2,#03H • LCALL DELAY • MOV A,#69H • MOVX @DPTR,A • MOV R2,#03H • LCALL DELAY • DJNZ R3,FLASH1 • MOV A,#09H ;南北红灯,东西黄灯 • MOVX @DPTR,A • MOV R2,#10 ;延时1秒 • LCALL DELAY • NOP • RET • DELAY: ;延时子程序 • PUSH 2 • PUSH 1
PUSH 0 • DELAY1: MOV 1,#00H • DELAY2: MOV 0,#0B2H • DJNZ 0,$ • DJNZ 1,DELAY2 ;延时 100 mS • DJNZ 2,DELAY1 • POP 0 • POP 1 • POP 2 • RET • END
举例: • 外部中断实验(实验五)(急救车与交通灯) • 系统晶振是 11.0592 MHz • ORG 0000H • LJMP START • ORG 0003H ;INT 0 中断入口地址 • LJMP INT0 • ORG 0040H • START: • MOV SP,#60H • SETB EX0 ;INT 0 中断有效 • SETB IT0 • SETB EA • LCALL STATUS0 ;初始状态(都是红灯) • CIRCLE: LCALL STATUS1 ;南北绿灯,东西红灯 • LCALL STATUS2 ;南北绿灯闪转黄灯,东 • LCALL STATUS3 ;南北红灯,东西绿灯 • LCALL STATUS4 ;南北红灯,东西绿灯闪
LJMP CIRCLE • INT0: • PUSH PSW ;保护现场 • PUSH 2 • PUSH ACC • MOV DPTR,#8300H • MOV A,#0FH ;南北,东西都亮红灯 • MOVX @DPTR,A • MOV R2,#100 ;延时10秒 • LCALL DELAY • POP ACC ;恢复现场 • MOVX @DPTR,A • POP 2 • POP PSW • RETI • STATUS0: ;南北红灯,东西红灯 • MOV DPTR,#8300H • MOV A,#0FH
MOVX @DPTR,A • MOV R2,#10 ;延时1秒 • LCALL DELAY • RET • STATUS1: ;南北绿灯,东西红灯 • MOV DPTR,#8300H • MOV A,#96H ;南北绿灯,东西红灯 • MOVX @DPTR,A • MOV R2,#200 ;延时20秒 • LCALL DELAY • RET • STATUS2: ;南北绿灯闪转黄灯,东 • MOV DPTR,#8300H • MOV R3,#03H ;绿灯闪3次 • FLASH: MOV A,#9FH • MOVX @DPTR,A • MOV R2,#03H • LCALL DELAY
MOV A,#96H • MOVX @DPTR,A • MOV R2,#03H • LCALL DELAY • DJNZ R3,FLASH • MOV A,#06H ;南北黄灯,东西红灯 • MOVX @DPTR,A • MOV R2,#10 ;延时1秒 • LCALL DELAY • RET • STATUS3: ;南北红灯,东西绿灯 • MOV DPTR,#8300H • MOV A,#69H • MOVX @DPTR,A • MOV R2,#200 ;延时20秒 • LCALL DELAY • RET • STATUS4: ;南北红灯,东西绿灯
MOV DPTR,#8300H • MOV R3,#03H ;绿灯闪3次 • FLASH1: MOV A,#6FH • MOVX @DPTR,A • MOV R2,#03H • LCALL DELAY • MOV A,#69H • MOVX @DPTR,A • MOV R2,#03H • LCALL DELAY • DJNZ R3,FLASH1 • MOV A,#09H ;南北红灯,东西黄灯 • MOVX @DPTR,A • MOV R2,#10 ;延时1秒 • LCALL DELAY • NOP • RET
DELAY: ;延时子程序 • PUSH 2 • PUSH 1 • PUSH 0 • DELAY1: MOV 1,#00H • DELAY2: MOV 0,#0B2H • DJNZ 0,$ • DJNZ 1,DELAY2 ;延时 100 mS • DJNZ 2,DELAY1 • POP 0 • POP 1 • POP 2 • RET • END
练习题 P112-1 ORG 100H INBUF EQU 30H OUTBUF EQU 1000H MOV R0, #INBUF MOV DPTR, #OUTBUF MOV R7, #10H LOOP: CLR C MOV A, @R0 SUBB A, #0DH JZ END1 MOV A, @R0 MOV @R1, A INC R0 INC R1 DJNZ R7, LOOP END1: RET END
P112-3 ORG 100H MOV R7, #08H MOV B, R7 MOV DPTR, #TABLE LOOP: CLR A MOV R0, A MOVC A,@A+DPTR ADD A, R0 MOV R0, A INC DPTR DJNZ R7, LOOP DIV AB RET TABLE: DB 00H,01H,02H,03H,04H,05H,06H,07H END
P112-7 ORG 100H MOV DPTR, #TABLE MOV R7, #0AH LOOP: MOVX A, @DPTR SETB ACC.7 MOVX @DPTR, A INC DPTR DJNZ R7, LOOP RET TABLE: DB 00H,01H,02H,03H,04H,05H,06H,07H,08H,09H
P112-13 ORG 100H DATA1 EQU 30H MOV R0, #DATA1 MOV A, @R0 CPL A ADD A, 1 MOV @R0, A INC R0 MOV A, @R0 CPL A ADDC A, 0 RET END