阅读以下关于某嵌入式处理器和8255的叙述。
[说明]
图2-1为使用某嵌入式处理器和8255对打印机进行控制的电路图,其中8255的中断请求PC3接到处理器的中断请求输入端
上,打印机的数据口接在8255的PAO~PA7上,打印机的输出电平
接在8255的PC6上。
为了使用嵌入式处理器对打印机进行控制,在程序设计时,需要将8255的PA口设置为工作方式1:PB口设置在工作方式0,配置为输入;PC口的PCO、PC1、PC2、PC3和PC4定义为输出。
为了在打印机输出为低电平时通过8255的PC3产生有效的中断请求信号INTRA,必须使得A口的中断请求使能INTE-1,实际上就是通过C口的按位复位操作将PC6置1,整个程序分为四部分:依次是8255的初始化,嵌入式处理器的中断初始化,嵌入式处理器的主程序和打印字符的中断处理程序。其中8255的端口配置功能如表2-1所示。嵌入式处理器的中断使能控制字含义如表2-2所示,该处理器的典型汇编指令如表2-3所示。
表2-1 8255的端口配置功能 | |||||||
CS | A1 | A0 | 寻址 | CS | Al | A0 | 寻址 |
0 | 0 | 0 | A口 | 0 | 1 | 0 | C口 |
0 | 0 | 1 | B口 | 0 | 1 | 1 | 控制及状态字 |
表2-2嵌入式处理器的中断使能控制字含义 | |||||||
EA | XX | XX | ES | ET1 | EX1 | ET0 | EX0 |
表2-3嵌入式处理器的汇编指令 | ||
指令分类 | 指令举例 | 含 义 |
传送指令 | Mov A, RO | 寄存器寻址 |
Mov B, @RO | 寄存器间接寻址 | |
Mov RO, direct | 直接寻址 | |
Mov @RO, #data | 立即数寻址 | |
算术运算指令 | ADD A, RO | 一般加法指令 |
ADDC A, RO | 带进位加法指令 | |
逻辑及移位指令 | CLRA | 单操作数指令,清0 |
ANL A, #data | 立即数逻辑与指令 | |
ANL A, RO | 寄存器逻辑与指令 | |
ANLA,@RO | 寄存器间接寻址逻辑与指令 | |
控制指令 | LJMP addr16 AJMP addr11 SJMP rel JMP @A+DPTR | 无条件转移指令 |
CJNE A, #data, rel CJNE A, direct, rel | 条件转移指令 | |
以下汇编程序用于打印机输出控制,请将下面汇编程序的空(1)~(5)补充完整,并将解答填入答题纸的对应栏中。
8255的A口工作在方式1输出,初始化程序:
INTI55:MOV DPTR, #8003H
MOV A, 10100 010B
MOVX @DPTR,A ;配置A口在工作方式1、B口在工作方式0
MOV A, 00001101B
MOVX @DPTR,A ;将PC6口置位
嵌入式处理器的中断初始化程序:
INT031:
MOV IE, (1) :开总中断及所有五个中断源用十六进制表示
ANL TCON,#OFEH;规定INTO下降沿低电平产生中断请求
嵌入式处理器主程序:
(打印存储单元20H开始向后的内容,中断处理程序中每次从20H中取到需要打印的存储单元地址,直到遇到存储单元里面内容不是OAH为止)
ORG
0100H
MOV RO,#20H ;取打印缓冲区地址
MOV DPTR, #8000H
MOV A, (2) ;取打印字符
INC RO
MOV 20H, RO
MOVX @DPTR,A ;输出打印
当字符打印结束会产生一次中断,中断服务程序如下:
ORG 1300H
PRINTER:PUSH PSW:压栈操作
PUSH Acc
PUSH RO
PUSH DPH
PUSH DPL
MOV RO, (3) ;用十六进制表示
MOV DPTR, #8000H
MOVX A,@RO;取打印字符
MOVX @DPTR,A ;输出打印
INC RO
MOV 20H,RO;将需要取打印内容的地址放置到20H单元
CJNE A,#OAH, NEXT
ANL IE, (4) ;关INTO中断,用十六进制表示
NEXT:POP DPL
POP DPH
POP (5)
POP Acc
POP PSW
RETI
参考答案:(1)#09FH (2)@RO (3) 20H (4) #09EH (5) RO
解析: 由表2-2知道,对于中断使能控制的访问也就是设置该寄存器的对应位为1或者0,为1表示开启对应的中断控制,为0表示关闭对应的中断控制,按照对应的各个位来进行立即数配置即可进行各个中断的控制。
程序中的空(2)处是表示使用寄存器寻址方式获取数据。空(3)处于中断程序的服务程序中,需要重复从20H中获取待打印的内容,使用直接寻址方式。空(4)是指使用“与指令”关闭对应的中断位。空(5)处为与入栈相对应的出栈操作。