试编写初始化程序,设8255A的端口A工作在方式0输入,B口工作在方式0输出,使PC5端

试编写初始化程序,设8255A的端口A工作在方式0输入,B口工作在方式0输出,使PC5端,第1张

编写初始化程序,要先写控制字,所以先假设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 SEGMENT

ASSUME 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


欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/yw/12326081.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-22
下一篇2023-05-22

发表评论

登录后才能评论

评论列表(0条)

    保存