
编写初始化程序,要先写控制字,所以先假设8255A的端口A、端口B和控制字寄存器的端口地址分别为20H、21H和22H,那么初始化程序为:MOV DX,023H;MOV AL,10010000B;OUT DX,AL······(其中控制字为:10010000B,肆唤PC端多为输出端)。
8255A的A,B,C三个端口的工作方式是在初始化编程时,通过向8255A的控制端口写入控制字来设定的。8255A由编程写入的控制字有两个:方式控制字和置位/复位控制字。
其中,方式控制字用于设置端口A,B,胡雹尺C的工作方式和数据传送方向,置位/复位控制字用于设置C口的PC7~PC0中某一条口线PCi(i=0~7)的电平,两个控制字公用一个端口地址。
扩展资料:
8255A具有3种基本的工作方式,在对8255A进行初始化编程时,应向控裤高制字寄存器 写入方式选择控制字,用来规定8255A各端口的工作方式。
这3种基本工作方式是:
1、方式0——基本输入输出方式:适用于不需要用应答信号的简单输入输出场合,这种方式端口A和B可作为8位的端口,端口C的高4位和低4位可作为两个4位的端口;
2、方式1——选通输入输出方式:端口A和B作为数据口,均可工作于输入或输出方式,端口C的6根线用来产生或接受联络信号。
3、方式2——双向总线I/O方式:只有端口A可以工作于这种方式,端口A工作于方式2 时,端口C的5位(PC3~PC7)作A口的联络控制信号。
参考资料来源:百度百科-8255A芯片
CODE SEGMENTASSUME CS:CODE
IOCONPT EQU 0FF2BH
IOAPTEQU 0FF28H
IOBPTEQU 0FF29H
IOCPTEQU 0FF2AH
ORG 10e0H
START: MOV DX,IOCONPT
MOV AL,80H
OUT DX,AL
MOV DX,IOBPT
MOV AL,00H
OUT DX,AL
MOV DX,IOCPT
MOV AL,0FH H
OUT DX,AL
CALL DELAY1
IOLED0: MOV AL,01011010B 13L 24H
MOV DX,IOCPT
OUT DX,AL
CALL DELAY1
CALL DELAY1
MOV AL,00001010B 13LN
OUT DX,AL
MOV CX,8H
IOLED1: MOV DX,IOBPT
MOV AL,50H
OUT DX,AL
CALL DELAY2
MOV AL,00H
OUT DX,AL
CALL DELAY2
LOOP IOLED1
MOV DX,IOCPT
MOV AL,10100101B
OUT DX,AL
CALL DELAY1
CALL DELAY1
MOV AL,00000101B
OUT DX,AL
MOV CX,8H
IOLED2: MOV DX,IOBPT
MOV AL,0A0H
OUT DX,AL
CALL DELAY2
MOV AL,00H
OUT DX,AL
CALL DELAY2
LOOP IOLED2
MOV DX,IOCPT
MOV AL,0FH
OUT DX,AL
CALL DELAY2
JMP IOLED0
DELAY1: PUSH AX
PUSH CX
MOV CX,0030H
DELY2:CALL DELAY2
LOOP DELY2
POP CX
POP AX
RET
DELAY2: PUSH CX
MOV CX,8000H
DELA1:LOOP DELA1
POP CX
RET
CODE ENDS
END START
下面是一渣拆个我机子上调试好的8255程序、希望对你有所帮助。、祝你好运~~~
8255扫描键盘、显示程序
利用8255可编程如睁枣并行口做一个扫描键盘实验,
把按键输入的键码,显示在由8279控制的七段数码管上。
8255PA口做键盘输入线,PB口作扫描线。
D8255 EQU 8506H 8255状态/数据口地址
D8255A EQU 8500H 8255 PA口地址
D8255B EQU 8502H 8255 PB口地址
Z8279 EQU 8701H 8279状态口地址
D8279 EQU 8700H 8279数据口地址
DISPTR EQU 08H 当前显示位置
KEYVAL EQU 09H 读到的键码
ORG 0000H
LJMP START
ORG 0040H
MAIN:
MOV SP,#60H
LCALL DELAY 延时
MOV DISPTR,#30H 显示缓冲区头指针
MOV DPTR,#D8255
MOV A,#90H 置8255状态
方式0,PB,PC口输出,PA口输入
MOVX @DPTR,A
MOV DPTR,#Z8279 置8279命令字
MOV A,#0D3H
MOVX @DPTR,A 清LED显示
MOV A,#00H
MOVX @DPTR,A
MOV A,#38H
MOVX @DPTR,A
MOV A,#0D1H
KB_DIS:
LCALL RD_KB 读键盘
MOV A,#0FFH
CJNE A,KEYVAL,DISBUF 判读到键
SJMP KB_DIS 没有则继续读键
DISBUF:
LCALL DISP 把键移入显存
LCALL DELAY 延时消抖
LCALL DELAY
SJMP KB_DIS
DISP: 显存依次前移
MOV R1,#31H 在最后加入新键值
MOVE:
MOV A,@R1
DEC R1
MOV @R1,A
INC R1
INC R1
CJNE R1,#38H,MOVE
MOV 37H,KEYVAL
MOV KEYVAL,#0FFH
MOV DPTR,#Z8279
MOV A,#90H
MOVX @DPTR,A
MOV R0,#08H
MOV R1,#30H
MOV DPTR,#D8279
LP: MOV A,@R1
MOVX @DPTR,A
INC R1
DJNZ R0,LP
RET
RD_KB: 键盘扫描
MOV A,#02H 扫描第一行
MOV DPTR,#D8255B
MOVX @DPTR,A
MOV DPTR,#D8255A
MOVX A,@DPTR
MOV R1,#00H
CJNE A,#0FFH,KEYCAL 判键是否按下
MOV A,#01H 扫描第二行
MOV DPTR,#D8255B
MOVX @DPTR,A
MOV DPTR,#D8255A
MOVX A,@DPTR
MOV R1,#08H
CJNE A,#0FFH,KEYCAL
SJMP NOKEY 无键按下
KEYCAL: 计算键码
MOV R0,#08H
SHIFT:
RRC A
JNC CALC
INC R1
DJNZ R0,SHIFT
CALC: 换算显示码
MOV DPTR,#DL_DAT
MOV A,R1
MOVC A,@A+DPTR
MOV KEYVAL,A
RET
NOKEY: MOV KEYVAL,#0FFH 返回无键标志
RET
DELAY: MOV R0,#0H 延时子程序早培
DELAY1: MOV R1,#0H
DJNZ R1,$
DJNZ R0,DELAY1
RET
DL_DAT: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H 0,1,2,3,4,5,6,7
DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H 8,9,A,B,C,D,E,F
END
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)