单片机重要考点
中断源入口地址(即LCALL指令的XXXX地址) 外中断0 0003H
定时/计数器T0溢出中断000BH
外中断1 0013H
定时/计数器T1溢出中断001BH
串行口中断0023H
定时/计数器T2溢出中断002BH
PX0H、PX0——外中断优先级高、低位。
PX1H、PX1——外中断优先级高、低位。
PT0H、PT0——定时/计数器T0优先级高、低位。
PT1H、PT1——定时/计数器T1优先级高、低位。
PSH、PS——串行口中断优先级高、低位。
PT2H、PT2——定时/计数器T2优先级高、低位。
可见,当IPH为XX000000B时,中断优先级仅由IP 寄存器决定,即与标准MCS-51内核CPU中断优先级兼容。
(3) 清除中断请求标志。进入中断服务程序后,CPU能自动清除下列中断请求标志位:
*定时器T0中断请求标志TF0;
*定时器T1中断请求标志TF1;
*边沿触发方式下外中断的中断请求标志IE0;
*边沿触发方式下外中断的中断请求标志IE1。
不能自动清除的中断请求标志
串行发送结束中断标志TI、
串行接收有效中断标志RI、
定时/计数器T2溢出中断标志TF2、
定时/计数器T2外触发标志EXF2
电平触发方式下的外中断标志IE0和IE1。
对于不能自动清除的中断请求标志,需要在中断服务程序中,用“CLR 位地址”指令清除。
主机与特定从机的通信过程如下:
(1) 主机发送从机地址(TB8位为1),然后进入接收状态,接收从机应答信号(实际上就是相应从机的地址信息)。
(2) 所有从机均接收主机送出的地址信息,并与本机地址比较,当接收到的地址信息与本机地址相符时,表示被选中,将本机地址信息发给主机,然后执行“CLR SM2”指令,使SM2位为0,以便接收主机随后送出的数据信息。对于未被选中的从机,SM2位依然为1,因此不接收主机送出的数据信息。
(3) 主机收到从机的应答信号后,发出数据信息(TB8位为0)。
(4) 从机正确接收主机数据信息后,发应答信号给主机,并将SM2置1,主机与从机通信过程结束。
从机与主机的通信过程如下:
(1) 发送前从机先检测TXD引脚,如果在(20/波特率)时间内,TXD引脚依然为高电平,则表明没有其他从机给主机发送信息,主机的RXD引脚处于空闲状态。
(2) 从机确认主机的RXD 引脚处于空闲状态后,发出地址信息 (TB8位为1) 到主机。
(3) 从机收到主机的应答信号(实际是从机地址信息)后,发送数据(TB8位为0)给主机,然后令从机的SM2为0,以便接收主机发送的接收正确信号。
(4) 主机正确接收后,再发接收正确信号给从机。 (5) 从机收到主机发来的“接收正确”信号后,表明通信过程结束——可将SM2位置1,以便从机能接收主机发送的地址信息。
MCS -51RXD TXD
0号从机
MCS -51RXD TXD
1号从机
…
MCS -51RXD TXD
n 号从机地线
MCS -51
主机
TXD RXD
P KB1.7P KB1.6P KB1.5P KB1.4P KB1.3P KB1.2P KB1.1P KB1.0
EKB(IEN1.1)
键盘中断允许
键盘中断标志KBF(AU XR1.7)
例如,键盘中断KBI寄存器内容为00000111B,且P0.0、P0.1、P0.2引脚被定义为准双向输入方式,则当P0.0、P0.1、P0.2之一为低电平时,或门输出高电平,如果中断允许寄存器IEN1的EKB(键盘中断允许)位为1,键盘中断标志KBF置位。如果中断开放(EA为1)并满足中断响应条件,将进入键盘中断服务程序(入口地址为003BH)。
【例6.1】某应用系统键盘接口电路如图6-9所示,写出中断监控方式下的键盘监控程序(键码存放在30H单元中,当有按键被按下时,按键编码存放在30H单元)。
; ---------键盘接口初始化--------
MOV A, P0M1
ANL A,#01111000B
MOV P0M1,A ; 将P0M1的b7、b2、b1、b0位清零
MOV A, P0M2
ANL A,#01111000B
MOV P0M2,A ; 将P0M2的b7、b2、b1、b0位清零
; 使P0.0、P0.1、P0.2、P0.7引脚处于准双
向输出(以便利用上拉电阻)
MOV A, P2M1
ORL A, #00100000B; 为了提高抗干扰能力,避免减少按键抖动
造成的干扰,P0口采用施密特输入MOV P2M1, A
SETB P0.0
SETB P0.1
SETB P0.2
SETB P0.7 ; 使P0.0-0.7位锁存器为1,即处于输入状态SETB EKB ; 允许键盘中断
SETB EA ; 开中断; 根据需要设置中断优先级ORG 003BH
LJMP KBIN ; 键盘中断服务程序入口地址
; ----------键盘中断服务程序-------
PROC KBIN
KBIN:
MOV 30H, #55H ; 无按键标志55H送30H单元
LCALL DELAY10ms ; 延迟10 ms
MOV A, P0 ; 读P0口
ANL A, #10000111B ; 屏蔽无关位
XRL A, #10000111B
JZ RETURN ; 为0,说明本次按键输入无效,退出
; 判别哪一按键被按下
MOV C, P0.0
JC K1
MOV 30H, 00H ; 如果P0.0引脚为0,则说明是K0键有输入SJMP EXIT
K1: MOV C, P0.1
JC K2
MOV 30H, 01H ; 如果P0.1引脚为0,则说明是K1键有输入SJMP EXIT
K2: MOV C, P0.2
JC K3
MOV 30H, 02H ; 如果P0.2引脚为0,则说明是K2键有输入SJMP EXIT
K3: MOV C, P0.7
JC RETURN ; P0.0~P0.2、P0.7均为高电平,按键输入无效MOV 30H, 03H ; 如果P0.7引脚为0,则说明是K3键有输入EXIT: MOV A, P0
ANL A, #10000111B ; 屏蔽无关位
XRL A, #10000111B
JNZ EXIT; 不为0,说明按键未释放,循环等待RETURN: MOV A, #AUXR1
ANL A, #01111111B
MOV AUXR1, A ; 清除中断标志KBF
RETI ; 返回
END