51单片机扩展io口C语言编写,51单片机扩展IO口后扩展口的地址如何确定
1. 然后它说8255的A口、B口、C口、控制寄存器的地址分别为7FFCH、7FFDH、7FFEH、7FFFH。这个是怎么算出来的?
高八位7F是因为p2.7为0是选通8255的cs片选端,第八位是FC,FD,FE,FF是由8255内部结构决定的,芯片的技术手册上会有,其实也是由最后两位的组合进行选择本文引用地址:http://www.eepw.com.cn/article/201611/315857.htm
2.在用C51的P0,P2口做外部扩展时使用,其中XBYTE [0x0002],P2口对应于地址高位,P0口对应于地址低位。一般P2口用于控制信号,P0口作为数据通道。
比如:P2.7接WR,P2.6接RD,P2.5接CS,那么就可以确定个外部RAM的一个地址,想往外部RAM的一个地址写一个字节时,地址可以定为XBYTE [0x4000],其中WR,CS为低,RD为高,那就是高位的4,当然其余的可以根据情况自己定,然后通过
XBYTE [0x4000] = 57;
这赋值语句,就可以把57写到外部RAM的0x4000处了,此地址对应一个字节。
个人总结:
以下图为例
P0口接了8根 低地址 地址线
P2口低4位接了4根 高地址 地址线
P2口高3位接了3根 控制信号线 RD WR CS
P2口P2.7没用
这样P0,P2口接的外围设备有12位的 地址线,3根控制线,1根未使用的线,
那么这个外围器件的地址范围是
XXXX 0000 0000 0000-XXXX FFFF FFFF FFFF
XXXX 是从0000-FFFF的16种不同的组合,那么由 XXXX 0000 0000 0000-XXXX FFFF FFFF FFFF组成的地址范围就会有16中不同的表示范围,但是这16中不同的地址表示都是指同以物理地址。这就是 物理地址对应的映射地址不唯一。
例如:0000 0000 0000 0000和1111 0000 0000 0000都是指同一物理地址
0000 0000 0000 0000和0000 0000 0000 0001指的是不同的物理地址
这样XXXX就可以作为控制信号线来使用
如果想对XXXX 0000 0000 0000地址进行RD=0 WR=1 CS=1 这样的操作
RD,WR,CS分别对应P2.4 P2.5 P2.6
X110 0000 0000 0000(X可以是1或者0,这里选1,那么1110 0000 0000 0000=0xe000)
那么可以通过命令:XBYTE[0xe000]=0 来实现
这句C语言命令的汇编命令如下:
mov dptr,#e000h
mov a,#0h
movx @dptr,a
如果把 X110 0000 0000 0000中X=0,那么 0110 0000 0000 0000=0x6000
那么实现以上操作是:XBYTE[0x6000]=0 来实现
从上面可以看出 最高位 未用的位设置位0或者1没有任何影响,只是形式不同而已,
此处XBYTE[0xe000]=0 和 XBYTE[0x6000]=0 等价
如果想对XXXX 0000 0000 0000地址进行RD=1 WR=0 CS=1 这样的操作
X101 0000 0000 0000=0xc000(X=1) 或者=0x5000(X=0)
命令为XBYTE[0xc000]=0,或者XBYTE[0x5000]=0
如果想对想对XXXX 0000 0000 0000地址进行RD=1 WR=0 CS=1 这样的操作,并且向A0-A12这12位数据线输出数值57,那么命令为:XBYTE[0xc000]=57或者XBYTE[0x5000]=57
如果想对想对XXXX 0000 0000 0001地址进行RD=1 WR=0 CS=1 这样的操作,并且向A0-A12这12位数据线输出数值57,那么命令为:XBYTE[0xc001]=57或者XBYTE[0x5001]=57
3.、程序存储器扩展实例
1、用一片2716芯片扩展2K程序存储器
1)地址线连接:2716的存储容量为2K*8,需11位地址(A10~A0)进行存储单元的选择。为此先把芯片的A7~A0与地址锁存器的8位地址输出对应联接,剩下的高位地址(A10~A8)与P2口的P2.2~P2.0相连。这样2716芯片的内存储单元的问题就解决了。
2)数据线的连接:程序存储器的数据输出引脚到P0口对应连接。
3)控制信号线的连接:程序存储器的扩展只涉及到外部存储器选通信号PSEN,此信号与2716的OE端相接,以便进行存储单元的读出选通。
4)片选线的连接:因为这是一个小规模存储器扩展系统,采用线选法比较方便,为此只需在剩下的高位地址线中选取P2.7作芯片选择信号与2716的CE端相连即可。
5)扩展芯片的地址范围:
最低地址:当A0~A10取值为0000000000时。
A15
P2.7A14
P2.6A13
P2.5A12
P2.4A11
P2.3A10
P2.2A9
P2.1A8
P2.0A7
P0.7A6
P0.6A5
P0.5A4
P0.4A3
P0.3A2
P0.2A1
P0.1A0
P0.0
0XXXX00000000000
00
.
10
.
10
.
10
.
100000000000
0000H、0800H、1000H、1800H、2000H、2800H、…..7800H、7FFFH
最高地址:当A0~A10取值为11111111111时。
A15
P2.7A14
P2.6A13
P2.5A12
P2.4A11
P2.3A10
P2.2A9
P2.1A8
P2.0A7
P0.7A6
P0.6A5
P0.5A4
P0.4A3
P0.3A2
P0.2A1
P0.1A0
P0.0
0XXXX11111111111
00
.
10
.
10
.
10
.
111111111111
07FFH、0FFFH、17FFH、17FF H、27FFH、2FFFH…..7FFFH
所以,该联接方式程序存储器的地址范围为:0000H~07FFH、0800H~0FFFH、
1000H~17FFH………
这种地址范围重叠是线选法本身造成的。因此地址范围的非惟一性是线选法的一大缺点。
A15接的是CE(片选)
当A15=0时:16位二进制地址范围0XXX X000 0000 0000-0XXX X1111 1111 1111
当A15=1时:16位二进制地址范围1XXX X000 0000 0000-1XXX X1111 1111 1111
此处X表示该位可为 0或1 中的任意值,那么XXXX的范围 0000-1111(16)
那么0XXX X000 0000 0000-0XXX X1111 1111 1111(有16种地址表示)
1XXX X000 0000 0000-1XXX X1111 1111 1111(也有16种地址表示)
这就意味着:
当A15=0时,对于同一物理地址,有16种不同的地址值可以表示(同一地址,地址值不唯一)
同样,当A15=1时,对于同一物理地址,有16种不同的地址值可以表示(同一地址,地址值不唯一)
51单片机扩展io口C语言编写,51单片机扩展IO口后扩展口的地址如何确定相关推荐
- c语言编写51单片机中断程序,执行过程是怎样的?
Q:c语言编写51单片机中断程序,执行过程是怎样的? 例如程序: #include<reg52.h> void main(void) { EA=1; //开放总中断 ...
- 怎么用C语言写程序控制单片机,如何用用C语言编写的单片机来控制流水灯
描述 用C语言编写的单片机流水灯程序的软件和硬件,可以让八个LED轮流点亮,每个灯点亮和熄灭时间均为1秒.是利用单片机I/O口控制外部设备的简单例子.当然,在你掌握了本程序后,完全可以充分发挥你的想象 ...
- 用单片机c51电子秤的c语言,基于51单片机的电子秤系统设计
微机原理论文第八篇:基于51单片机的电子秤系统设计 摘要:本文主要分析51单片机下的数字电子秤.在设计过程中,这种电子秤具体包括电源.传感器.蓝牙.转换器.单片机.键盘.开关.显示器等组成部分,在实践 ...
- 单片机检测电机频率c语言,基于51单片机的电动机测速表的设计.doc
基于51单片机的电动机测速表的设计 基于51单片机的电动机测速表设计 摘 要 本文介绍了采用光电传感器实施电机转速测量的方法.基本原理,完成了一种基于AT89C51单片机平台的电动机测速表的软硬件设计 ...
- golang python扩展_Python 利用Go语言编写 CPython 扩展 goPy的简单示例
对python这个高级语言感兴趣的小伙伴,下面一起跟随编程之家 jb51.cc的小编两巴掌来看看吧! goPy 是一个新的开源项目,实现了用 Go 语言来编写 CPython 扩展. 示例代码: # ...
- 51单片机dds信号发生器 扫频 c语言,基于AT89C51单片机和DDS器件实现频率特征测试仪的设计...
1. 引 言 频率特性是一个系统(或元件)对不同频率正弦输入信号的响应特性.如图1所示,被测系统输入幅值为Ar.角频率为ω的正弦信号,如果该系统是线性的,则其稳态输出也是正弦信号,频率ω不变,幅值为A ...
- 51单处片机c语言编程,51单片c语言总结.doc
51单片c语言总结 入门有针对性的解决一些简单的实际问题,边理论边实践学一样会一样 基本实验:LED流水灯,数码管显示,键盘控制,音乐播放,继电器控制I2C通信实验,串口通信实验,红外线遥控信号解码实 ...
- 基于单片机的倒车雷达系统设计c语言,基于AT89C2051单片机实现超声波倒车雷达系统的设计...
描述 倒车雷达(Car Reversing Aid Systems)的全称是"倒车防撞雷达",也称"泊车辅助装置",是汽车泊车安全辅助装置,能以声音或者更为直观 ...
- 51单片机io位与 c语言,【51单片机】普通I/O口模拟SPI口C语言程序
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 89C51系列单片机都不带SPI口,所在在这种情况下,我们可以模拟SPI口来现实我们要的功能,程序如下: //---------------------- ...
最新文章
- 查看网页js数据接口
- STM8中GPIO的12种模式
- 常考数据结构与算法:反转链表
- python跟java 效率_Python和Java该如何选择?老男孩Python人工智能
- 国家开放大学2021春1295社会心理学(本)题目
- bzoj1705[Usaco2007 Nov]Telephone Wire 架设电话线(dp优化)
- xmlhttprequest 跨域_跨域资源共享(CORS)安全性
- Mybatis源码阅读(一):Mybatis初始化1.3 —— 解析sql片段和sql节点
- Could not find an NgModule. Use the skip-import option to skip importing in NgModule.
- python万年历代码_利用python实现万年历
- python小学生教程-python 小学生教程|怎么让一个小学生学会Python?
- cr3格式是什么意思_佳能rp的cr3如何打开?修图为什么要用raw格式?转码又是什么?...
- oracle list分区添加,oracle 11g 如何创建、修改、删除list-list组合分区
- C语言自学指南(总觉 光阴不够)
- 1296. 划分数组为连续数字的集合
- 《我喜欢生命本来的样子》读后感作文2100字
- tp5系统常量对应的目录路径
- 软件测试的7个基本原则
- tkinter 的界面美化库:ttkbootstrap 使用教程
- 计算机快捷键40个,如何快速记住计算机快捷键