图10-2
【答】参考程序如下:
MOV OUT
L1: 10.10
IN TEST JZ MOV OUT JMP MOV OUT IN TEST JZ MOV OUT JMP MOV OUT IN TEST JZ MOV OUT JMP MOV OUT IN TEST JZ MOV OUT JMP MOV OUT JMP
AL,10000001B 63H,AL AL,62H AL,01H L11
AL,00000001B 63H,AL L2
AL,00000000B 63H,AL AL,62H AL,02H L21
AL,00000011B 63H,AL L3
AL,00000010B 63H,AL AL,62H AL,04H L31
AL,00000101B 63H,AL L4
AL,00000100B 63H,AL AL,62H AL,08H L41
AL,00000111B 63H,AL L1
AL,00000110B 63H,AL L1
;循环查询K0状态
;查询K3状态
;查询K2状态
;查询K1状态 ;不正常,L0灭
;正常,L0亮
;8255方式设置 ;查询K0状态
L11: L2:
L21: L3:
L31: L4:
L41:
8255芯片的A口和B口分别与8个LED灯和8个开关连接好,通过开关控制LED等的开和
闭。8255的端口地址为40, 42, 44和46H。画出译码电路图,编写初始化程序和控制程序。 【答】参考程序如下:
MOV
OUT IN OUT JMP
L1:
AL,10000010B 46H,AL AL,42H 40H,AL L1
;8255方式设置 ;读B口开关状态 ;写A口控制LED
9.11 如图10-3为用一片8255A控制八个8段共阴极LED数码管的电路。现要求按下某个开关,其代表
的数字( K1为1,K2为2,?K8为 8)在数码管从左到右循环显示(已有一个延时子程序DELAY可以调用),直到按下另一个开关。假定 8255A的口 A、B、C及控制口的地址依次为FFF0H~FFF3H。编写完成上述功能的程序,应包括8255A的初始化、控制程序和数码管的显示代码表。
【答】参考程序: TAB DB
PB PC
06H,5BH,4FH,66H,6DH,7DH,07H,7FH DB 1 DB 0 MOV MOV MOV MOV MOV OUT MOV MOV OUT CALL ROL MOV IN MOV MOV RCR JC MOV SUB XALT MOV OUT LOOP JMP
;位选定义 ;开关状态暂存
;LED数码管1~8的显示段码
BX,0 DS,BX
BX,OFFSET TAB AL,10001001B DX,0FFF3H DX,AL DX,0FFF1H AL,PB DX,AL DELAY PB,1
;位选转换 ;读开关状态 ;开关状态暂存
;移位8次查询开关状态,同时按下最高位优先
DX,0FFF2H AL,DX PC,AL CX,8 PC,1 L3 AL,8 AL,CL
;获得开关位 ;查表获得显示段码 ;显示开关位
;位选通
;8255方式设置 ;段码表指针
图10-3
L1:
L2:
DX,0FFF0H DX,AL L2 L1
L3:
9.12 8255工作在方式1,输入和输出时中断服务程序各完成什么功能?
【答】输入中断服务程序从8255输入数据寄存器读数据。输出中断服务程序向8255输出数据寄存器写数据。
9.13 有个 1 m s的脉冲信号源送8253的计数器1利用软件方式扩大定时1秒,每秒钟从8255的PA
口读入一组开关数并送PB口的LED管显示,设8253,8255的端口地址分别为40H~43H和60H~63H,且只用10条地址线(A0~A9)用于端口译码。请完成:① 硬件连接。② 编写对8253计数器1初始化程序段(仅50ms)。③ 编写对8255的初始化程序以及1秒到后从PA口读入一个字节开关数并送PB口显示的程序段。 【答】8253计数器1输入为1ms脉冲,输出中断请求。
MOV OUT MOV OUT MOV OUT JMP STI IN OUT IRET
AL,01100101B 43H,AL AL,10H 41H,AL 63H,AL $
;1秒中断 ;读A口 ;送B口显示
AL,60H 61H,AL
;计数值为1000,并启动计数器1计数 ;8255方式设置
AL,10010000B
;8253计数器1方式设置
INTP: