;我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
(文章推荐人:挑战者)
|