并行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语言都是同样的效果,仅供参考学习。
仿真完成…