並行I/O端口擴展及I2C串行總線擴展
利用單片機51的並行I/O端口擴展,實現51與8255的PA端口按方式0輸出,PB口按方式0輸入,將PB口外接8個開關的狀態通過PA口外接的LED燈反應出來。
8255A控制字簡介
8255有3種工作方式:方式0、方式1、方式2。工作之前必須初始化,需要將方式控制字寫入控制字寄存器中,指定端口工作方式。
3種工作方式:
控制字格式:
有關8255A詳細資料參考這個博客
電路原理圖。
彙編代碼
ORG 0000H
PORTA EQU 7CFFH ;8255PA口地址
PORTB EQU 7DFFH ;8255PB口地址
PORTC EQU 7EFFH ;8255PC口地址
CADDR EQU 7FFFH ;8255控制端口
SJMP START
ORG 0030H
START: MOV A ,#82H ;方式0,PA PC端口輸出,PB口輸入
MOV DPTR,#CADDR
MOVX @DPTR,A
LOOP: MOV DPTR,#PORTB
MOVX A,@DPTR ;讀入PB口
MOV DPTR,#PORTA
MOVX @DPTR,A ;輸出到PA端口
LCALL DELAY
LJMP LOOP
DELAY: MOV R6,#0 ;延時程序
DELAY1: MOV R7,#0 ;延時程序
DELAY2: DJNZ R7,DELAY2
DJNZ R6,DELAY1
RET
END
C代碼
#include<reg52.h>
#include<absacc.h>
#define PORTA 0x7CFF //8255PA口地址
#define PORTB 0x7DFF //8255PB口地址
#define PORTC 0x7EFF //8255PC口地址
#define CADDR 0x7FFF //8255控制端口
void main()
{
XBYTE[CADDR]=0x82; //控制字指定方式
while(1)
{
XBYTE[PORTA]=XBYTE[PORTB];
}
}
仿真結果
使用匯編代碼和C語言都是同樣的效果,僅供參考學習。
仿真完成…