1、仿真电路图
2、 讲解分析电路图
你发现了吗? 上面单片机只用到了 P0 口 不是很好吗,省去了 按键 所需要的 8 个 口
我们来讲讲 8255 芯片以及外围电路的扩展
82C55 芯片 ———可编程的通用并行接口电路(3个8位I/O口)
D0-D7 :三态双向数据线,与 P0 口 连接, 用来与单片机传送信息
CS : 片选信号
RD :读信号, 低电平有效,用来读出 82C55 端口数据的控制信号
WR :写信号,低电平有效,用来向 82C55 写入端口数据的控制信号
A1,A0 : 地址线,用来选择 4 个端口
疑问: 数据输入锁存 和 数据输入缓冲 两者 会导致 在 编写 C语言代码的时候 区别大吗???????????????? tell me , help !!!
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
8255扩展芯片的口地址是怎么确定的?
单片机的P2口用作16位I/O地址的高8位,P0口作低8位地址线与数据线复用。
若使8255的片选脚CS低电平有效,单片机的P2.7必须为0,
P2其余位为1(以确保系统中的其余I/O芯片的CS脚全为1,不选),即高8位地址为7Fh;
低8位地址的最低两位P0.1、P0.0用于识别8255的四个端口(A、B、C口,及控制口)。
.
若程序中定义8255控制口地址为7FFFh,
即低8位地址全为1,(8255的的A1A0为11),由此可知:
A口地址为7FFCh ( 8255的的A1A0为00),
B口地址为7FFDh ( 8255的的A1A0为01),
A口地址为7FFEh ( 8255的的A1A0为10).
.
当然,编程时对8255四个端口地址还有别的选择,例如:
A口地址为7FF0h
B口地址为7FF1h
A口地址为7FF2h
控制口地址7FF3h
或者:
A口地址为7F00h
B口地址为7F01h
A口地址为7F02h
控制口地址7F03h
……对于此图的电路,8255端口地址,还可以有其它的选择,就不一 一枚举了。
______________________________________________________________________________________________________
关于8255 工作方式选择控制字 以及 端口PC 置位和复位 控制字 ,的讲解(*********重点*************),具体看百度文库
http://wenku.baidu.com/link?url=Cl1rarMHjatLOqt6X9BDoUqJh1RRf0T0mnVqSzhSsh50zx3ZPhHTiHyHz8B8fJ6LYyCJNWKms-S6RPbY76RKxrYT7wyFj0w-Iu7ONWl4zY3
___________________________________________________________________________________________________________________
1 #include<reg52.h> 2 #include<absacc.h> 3 #define uint16 unsigned int 4 #define uchar8 unsigned char 5 sbit xuanzhong = P2^7 ; 6 7 sbit rst_8255 = P3^5; 8 #define con_8255 XBYTE[0x7003] // 定义 82C55 芯片控制口地址 P2口和 P0口 , 为 0111 0000 0000 0011 是这样吗??? 不知道啊 这里也非常重要 9 #define pa_8255 XBYTE[0x7000] // 0111 0000 0000 0000 10 #define pb_8255 XBYTE[0x7001] // 0111 0000 0000 0000 11 12 void reset_8255(void); 13 void delayms(uint16); 14 15 void main(void) 16 { 17 uchar8 temp; 18 rst_8255=1; // 复位 82C55 芯片 19 delayms(1); 20 rst_8255=0; 21 22 xuanzhong=0; 23 24 con_8255=0x82; // 设置 PB 口 输入,PA口输出 1000 0010 , 至于 C口 先不考虑 25 //(这里我们就要学习 8255 工作方式选择控制字及端口 PC 置位/复位控制字, 这里是最重要的地方,懂了,就没问题了) 26 while(1) 27 { 28 temp=pb_8255; 29 pa_8255=temp; 30 31 } 32 33 } 34 35 void delayms(uint16 j) 36 { 37 uchar8 i; 38 for(;j>0;j--) 39 { 40 i=250; 41 while(--i); 42 i=249; 43 while(--i); 44 45 } 46 47 }
8255芯片地址的确定 和 工作方式控制字以及端口PC的设置/复位 才是 学习的难点!!!!!!!!!!!(要是会了基本就没问题了)