码迷,mamicode.com
首页 > 其他好文 > 详细

(十) 单片机 扩展并行 I/O 接口芯片 8255芯片

时间:2015-12-28 14:15:03      阅读:379      评论:0      收藏:0      [点我收藏+]

标签:

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的设置/复位 才是 学习的难点!!!!!!!!!!!(要是会了基本就没问题了)

 

(十) 单片机 扩展并行 I/O 接口芯片 8255芯片

标签:

原文地址:http://www.cnblogs.com/shengruxiahua/p/5082189.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!