
先将8个外设的状态通过a口读入al,然后送入ah
再将另8个外设的状态通过b口读入al
这样,ax中即为外设的16个状态信号。
判断ax中‘1’的方法:
将ax中的内容每次左移一位,将最高位移入标志寄存器中的cf,判断cf的值是否为1,连续左移、判断16次即可。
程序如下:
mov bl,0 ;存放ax中1的个数,初值为0
mov cx,16 ;循环次数初值
next:shl ax,1
jnc go
inc bl
go:loop next
mov al,bl
也可写为:
mov bl,0 ;存放ax中1的个数,初值为0
mov cx,16 ;循环次数初值
next:shl ax,1
adc bl,0;直接将移位后cf的值加到bl
loop next
mov al,bl
最后将al中的低四位通过c口送给所连的四个发光二极管
先写控制字,你没给控制端口地址,假设是是23H吧,这样的话A口地址为20H;B口为21H;C口为22H。PC5怎么?你你没打完吧?
8255A的端口A工作在方式0输入,B口工作在方式0输出。控制字为:10010000B。(PC口都设成输出了)
初始化程序:
MOV DX,023H
MOV AL,10010000B
OUT DX,AL
(送初值)
以上你给的信息就只能到写控制字了。
亲~记得给好评哦~
A做输入,B做输出,工作方式可选择90H,由译码器和A1A0决定其端口地址:G1是高电平有效,由与门输出,则A8A7=11,G2A、G2B是低电平有效则A6A5=00,又由于译码器输出为Y2则A4A3A2=010,所以其A、B、C、控制端口地址分别是188H、189H、18AH、18BH。
源程序:
mov al,90h
out 18bh,al
mov dx,188h
in al,dx
mov dx,189h
out dx,al
MY8255_A EQU 9C60H
MY8255_B EQU 9C61H
MY8255_C EQU 9C62H
MY8255_MODE EQU 9C63H
CODE SEGMENT
ASSUME CS:CODE
START: MOV DX,MY8255_MODE
MOV AL,82H
OUT DX,AL
A1: MOV DX,MY8255_B
IN AL,DX
MOV DX,MY8255_A
OUT DX,AL
CALL BREAK
JMP A1
BREAK PROC NEAR
MOV AH,06H
MOV DL,0FFH
INT 21H
JE RETURN
MOV AX,4C00H
INT 21H
RETURN:RET
BREAK ENDP
CODE ENDS
END START
MOV DX,203H
MOV AL,10010000B ;写控制字
OUT DX,AL;
IN AL,200H ;读A口的开关状态
TEST AL,1010B
JZ RED
TEXT AL,0101B
JZ GREEN
JMP YELLOW
RED: OUT 201H,11111110B ;红灯亮
GREEN: OUT 201H,11111101B ;绿灯亮
YELLOW:OUT 202H,11111110 ;黄灯亮
以上就是关于一个关于8255A应用实例求解全部的内容,包括:一个关于8255A应用实例求解、编写一程序,要求8255a的pc5端输出一方波信号、如图 1)分析各端口地址2)A口,B口工作在什么方式3)写出8255A的初始化程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)