8255 的直接连接方法
扫描二维码
随时随地手机看文章
8255 是用来扩充接口的芯片。
用上一片 8255,就可以为系统增加 3 个 8 位的 IO 接口。
在单片机的教材上,总是使用“三总线”的方式来连接 8255。
在这样的条件下,输入/输出数据的速度确实是比较快,一般用 2 个机器周期,就可以读/写一次。
但是,采用这种形式,电路则是相当麻烦的,必须加上一个锁存器芯片(74LS373);
并且,对于单片机的引脚,占用的也太多了,如 P0、P2,还要占用 P3.6、P3.7。
呵呵,占用了单片机自身 2 个半的接口,仅仅换来 3 个接口,有点得不偿失。
如果搞清楚了 8255 的读写时序,使用单片机的接口引线“直接控制” 8255,效果则要好的多。
下图就是一个“直接控制” 8255 的电路。
在图中可以看出,仅仅使用了 P0 和 P2 的四个引脚,就近,和 8255 进行连接。
不但节省了引脚数目,而且非常灵活。
在设计实际应用的电路板时,可以随意的就近使用引脚,而不必拘泥于 P0、P3.6、P3.7 等引脚。
当把 8255 PA 输入的开关量,输出到 PC 口,使用如下的程序即可。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
汇编语言:
;-----------------------------------
sbit RD_8255 = P2^0 ;设定相关引脚
sbit WR_8255 = P2^1 ;
sbit A0_8255 = P2^2 ;
sbit A1_8255 = P2^3 ;
;-----------------------------------
ORG 0000H
MOV P0, #92H ;PA输入, PB PC输出
CLR WR_8255 ;写入控制寄存器
SETB WR_8255
;---------------------
LOOP:
MOV P0, #255 ;输出1
CLR A1_8255 ;选定PA
CLR A0_8255
CLR RD_8255 ;读
NOP ;稍延时,以保证宽度
MOV A, P0 ;读出
SETB RD_8255
;---------------------
SETB A1_8255 ;选定PC
CLR A0_8255
MOV P0, A ;写
CLR WR_8255 ;写入
SETB WR_8255
;---------------------
SJMP LOOP
END
;-----------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
C 语言:
//----------------------------------
#include
sbit RD_8255 = P2^0;
sbit WR_8255 = P2^1;
sbit A0_8255 = P2^2;
sbit A1_8255 = P2^3;
main()
{
char aa;
P0 = 0x92; //控制字: PA输入, PB PC输出
A1_8255 = 1; A0_8255 = 1; //选中控制寄存器
WR_8255 = 0; WR_8255 = 1; //写
while(1) {
P0 = 0xff; //先输出1
A1_8255 = 0; A0_8255 = 0; //选中PA
RD_8255 = 0; aa = P0; RD_8255 = 1; //读
P0 = aa; //这是刚才读入的
A1_8255 = 1; A0_8255 = 0; //选中PC
WR_8255 = 0; WR_8255 = 1; //写
}
}
//----------------------------------
如果需要用 PB 输出数据,如下即可:
P0 = 0xB0; //输出数据
A1_8255 = 0; A0_8255 = 1; //选中PB
WR_8255 = 0; WR_8255 = 1; //写
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
因为没有使用“三总线”方式,所以,也就没有接口地址的问题。
那么,一般的教材中所说的片外地址,就没有用了。
下面这些 C 语言中的头文件、宏定义,也用不上了:
#include
#define PA XBYTE[0xE000] /*PA口地址*/
#define PB XBYTE[0xE001] /*PB口地址*/
#define PC XBYTE[0xE002] /*PC口地址*/
#define CON XBYTE[0xE003] /*控制字地址*/
呵呵,好多知识,统统都没有用了,罪过罪过...
按照这种方式,读写 IO 口的速度,确实是降低了一些,但是,对于速度要求不太敏感的场合,还是非常适用的。
因为节省了一个锁存器芯片,PCB 板的面积,也可以缩小,这就直接使硬件成本得到降低。
有时,一个产品,是否能够占领市场,成本才是关键,读写速度慢上几个微秒,对性能的影响极其微小。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~