文章编号:587 .3676

『关闭窗口』

我96年在一个产品中,用AT89C51的I/O方式控制3个8255的实用程序,未作优化,见笑了。(豪气冲天)


;我96年在一个产品中,用AT89C51的I/O方式控制3个8255的实用程序

;硬件连接状况:

;1、8255的八位数据线接AT89C51的P1口

;2、3个8255的RESET全部接GND(未用硬件上电复位,改为上电后用软件初始化。)

;3、第1个8255的片选接AT89C51的P2.0

;4、第2个8255的片选接AT89C51的P2.1

;5、第3个8255的片选接AT89C51的P2.2

;6、3个8255的A1接AT89C51的P2.3

;7、3个8255的A0接AT89C51的P2.4

;8、3个8255的RD接AT89C51的P2.5

;9、3个8255的WR接AT89C51的P2.6

;10、8255-1和8255-2工作于方式0全输出

;11、8255-3的A、B、C口工作于方式0,A口输入、B口输出、C口低4位输入、C口高4位输出

;12、AT89C51内部RAM 41H--48H为待输出的数据


ORG 0000H
LJMP MAIN

ORG 0100H
MAIN:
MOV SP,#60H ;设堆栈指针从60H开始
MOV P1,#80H ;送控制字:8255A、B、C口工作于方式0全输出
MOV P2,#0BCH ;置8255为写控制字,8255-1和8255-2的CS=0、AT89C51
的WR=0
SETB P2.6 ;AT89C51的WR=1
MOV P1,#91H ;送控制字:8255A、B、C口工作于方式0,A口作输入、
B口作输出、C口低4位作输入、C口高4位作输出
MOV P2,#0BBH ;置8255为写控制字,8255-3的CS=0、AT89C51的WR=0
SETB P2.6 ;AT89C51的WR=1
MOV P2,#0FFH ;

;以上3个8255上电软件初始化完毕

MOV A,#0FFH ;AT89C51内部RAM 20H--7FH=1
MOV R0,#20H
MAI1: MOV @R0,A
INC R0
CJNE R0,#80H,MAI1

;以上AT89C51内部RAM 20H--7FH=1的初始化完毕


OUT:
MOV P1,41H ;将41H的内容送至8255-2的PA口
MOV P2,#0A5H ;8255-2的CS=0、A1=0、A0=0,AT89C51的WR=0
SETB P2.6 ;AT89C51的WR=1
MOV P1,42H ;将42H的内容送至8255-2的PB口
MOV P2,#0B5H ;8255-2的CS=0、A1=0、A0=1,AT89C51的WR=0
SETB P2.6 ;AT89C51的WR=1
MOV P1,43H ;将43H的内容送至8255-2的PC口
MOV P2,#0ADH ;8255-2的CS=0、A1=1、A0=0,AT89C51的WR=0
SETB P2.6 ;AT89C51的WR=1
MOV P2,#0FFH
MOV P1,44H
MOV P2,#0A6H
SETB P2.6
MOV P1,45H
MOV P2,#0B6H
SETB P2.6
MOV P1,46H
MOV P2,#0AEH
SETB P2.6
MOV P2,#0FFH
MOV P1,47H
MOV P2,#0B3H
SETB P2.6
MOV P1,48H
MOV P2,#0ABH
SETB P2.6
MOV P2,#0FFH
RET

END

(文章推荐人:挑战者)

 

返回大虾论坛 返回首页