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

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

时间: 2024-11-05 16:03:01

(十) 单片机 扩展并行 I/O 接口芯片 8255芯片的相关文章

(十)单片机扩展 8255 芯片 控制 交通灯

目的: 单片机扩展82C55 芯片 用作 输出口,控制 12只 发光二极管亮灭, 模拟对交通灯的管理. // 执行程序,初始化状态, 4个红灯全亮后, 东西路口的绿灯亮,南北路口的红灯亮,东西方向通车// 延迟一段时间后, 东西路口绿灯熄灭, 黄灯开始闪烁,闪烁几次后,东西路口红灯亮,同时南北路口绿灯亮,南北通车.// 延迟一段时间,南北路口的绿灯熄灭, 黄灯开始闪烁,再切换到东西路口绿灯亮,重复上述过程 仿真电路图: 参考代码: 1 2 3 #include<reg52.h> 4 #incl

Senparc.Weixin.MP SDK 微信公众平台开发教程(十):多客服接口说明

微信官方的多客服接口原理是通过用户发送的信息,开发者服务器返回一条指定类型的响应信息,使用户的对话状态切换到官方的多客服状态(持续一段时间),这段时间内用户发送的所有信息都不会到达开发者的服务器,而是转到多客服的软件上. 需要实现多客服,必须是通过验证的服务号,进入后台的[服务]>[服务中心]>[多客服]进行申请及设置,详细信息可以见官方公告:https://mp.weixin.qq.com/cgi-bin/readtemplate?t=news/vote_wkd_tmpl&lang=

扩展方法的几个实例,扩展基本类型、接口、通过反射让扩展方法使用私有成员等

.net扩展方法可以扩展很多类型,包括:基本数据类型.接口.类,等等.如果,需要扩展的类型包含私有成员,扩展方法如何运用这些私有成员呢?本篇逐一体验,包括: ■ 扩展基本数据类型■ 扩展接口■ 扩展包含私有字段的类 使用反射获取类的私有字段■ 扩展一个类的私有嵌套类 通过反射 扩展方法有几个必要前提:● 扩展方法所在的类必须是静态类● 扩展方法本身必须是静态方法● 扩展方法参数中,对类型的扩展参数前必须加this关键字 扩展基本数据类型 针对DateTime类型写一个扩展方法. public s

C++语言学习(十五)——C++抽象类与接口

C++语言学习(十五)--C++抽象类与接口 一.抽象类与接口 1.抽象类简介 面向对象的抽象类用于表示现实世界的抽象概念,是一种只能定义类型,不能产生对象的类(不能实例化),只能被继承并被重写相关函数,直接特征是相关函数没有完整实现.C++语言没有抽象类的概念,通过纯虚函数实现抽象类.纯虚函数是指定义原型的成员函数,C++中类如果存在纯虚函数就成为了抽象类.抽象类只能用作父类被继承,子类必须实现父类纯虚函数的具体功能,如果子类没实现纯虚函数,子类也为抽象类.抽象类不可以定义对象,但是可以定义指

C#编程(六十四)----------并行扩展

并行的扩展 扩展1. Parallel的使用: 在Parallel下面有三个常用的方法Invoke,For,ForEach Parallel.Invoke()方法是最简单,最简洁的将串行的代码并行化. 在这里先说一点,就是Stopwatch的使用,Stopwatch到底是个什么东西,首先Stopwatch在命名空间System.Diagnostics中. 使用方法如下: var StopWatch =new Stopwatch();//创建一个Stopwatch实例 StopWatch.Star

C#高级编程六十四天----并行扩展

并行的扩展 扩展1. Parallel的使用: 在Parallel下面有三个常用的方法Invoke,For,ForEach Parallel.Invoke()方法是最简单,最简洁的将串行的代码并行化. 在这里先说一点,就是Stopwatch的使用,Stopwatch到底是个什么东西,首先Stopwatch在命名空间System.Diagnostics中. 使用方法如下: var StopWatch =new Stopwatch();//创建一个Stopwatch实例 StopWatch.Star

十天学会单片机Day6 学会看数据手册 (IIC总线PCF859芯片( A/D D/A)应用)

1.实际电路 2.引脚图 3.地址 高四位为固定地址1001,A2A1A0可编程地址,通过观察实际电路,可知A2A1A0 为000.最低位为读写为,1为读,0为写. 4.控制字 控制寄存器的高半字节用于 允许模拟输出 将模拟输入编程为单端或差分输入 低半字节选择一个由高半字节定义的模拟输入通道.如果自动增量标志(AUTO-INCREMENT FLAG)置1,每次A/D转换后通道号将自动增加. 5.开始 停止信号 1 void Start() 2 { 3 SDA = 1; 4 delay(); 5

单片机扩展中断的4种方法

MCS—51系列单片机内部只有两个外部中断源输入端,当外部中断源多于两个时 ,就必须进行扩展,下面介绍两种简单的扩展方法: 一.采用硬件请求和软件查询的方法: 这种方法是:把各个中断源通过硬件“或非(高有效,如CD4002)”(与,低有效)门引入到单片机外部中断源输入 端(INT0或INT1),同时再把外部中断源送到单片机的某个输入输出端口,这 样当外部中断时,通过“或非”(与)门引起单片机中断,在中断服务程序中再通 过软件查询,进而转相应的中断服务程序.显然,这种方法的中断优先级取决于 软件查

Swift语言的扩展与协议(接口)

/* 类型转换 1.没有任何关系的两个类型之间的转换 2.继承链条里的向上与向下转型 */ //第一种形式 let i = 3 let str = "\(i)" let str2 = String(i) //第二种形式 class Parent { var p = 1 } class Child:Parent { var c = 2 } //as是用来转换的 let c: Parent = Child() let cc = c as? Child cc?.c if let ccc =