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口后扩展口的地址如何确定相关推荐

  1. c语言编写51单片机中断程序,执行过程是怎样的?

    Q:c语言编写51单片机中断程序,执行过程是怎样的? 例如程序: #include<reg52.h>   void main(void)   {    EA=1;      //开放总中断 ...

  2. 怎么用C语言写程序控制单片机,如何用用C语言编写的单片机来控制流水灯

    描述 用C语言编写的单片机流水灯程序的软件和硬件,可以让八个LED轮流点亮,每个灯点亮和熄灭时间均为1秒.是利用单片机I/O口控制外部设备的简单例子.当然,在你掌握了本程序后,完全可以充分发挥你的想象 ...

  3. 用单片机c51电子秤的c语言,基于51单片机的电子秤系统设计

    微机原理论文第八篇:基于51单片机的电子秤系统设计 摘要:本文主要分析51单片机下的数字电子秤.在设计过程中,这种电子秤具体包括电源.传感器.蓝牙.转换器.单片机.键盘.开关.显示器等组成部分,在实践 ...

  4. 单片机检测电机频率c语言,基于51单片机的电动机测速表的设计.doc

    基于51单片机的电动机测速表的设计 基于51单片机的电动机测速表设计 摘 要 本文介绍了采用光电传感器实施电机转速测量的方法.基本原理,完成了一种基于AT89C51单片机平台的电动机测速表的软硬件设计 ...

  5. golang python扩展_Python 利用Go语言编写 CPython 扩展 goPy的简单示例

    对python这个高级语言感兴趣的小伙伴,下面一起跟随编程之家 jb51.cc的小编两巴掌来看看吧! goPy 是一个新的开源项目,实现了用 Go 语言来编写 CPython 扩展. 示例代码: # ...

  6. 51单片机dds信号发生器 扫频 c语言,基于AT89C51单片机和DDS器件实现频率特征测试仪的设计...

    1. 引 言 频率特性是一个系统(或元件)对不同频率正弦输入信号的响应特性.如图1所示,被测系统输入幅值为Ar.角频率为ω的正弦信号,如果该系统是线性的,则其稳态输出也是正弦信号,频率ω不变,幅值为A ...

  7. 51单处片机c语言编程,51单片c语言总结.doc

    51单片c语言总结 入门有针对性的解决一些简单的实际问题,边理论边实践学一样会一样 基本实验:LED流水灯,数码管显示,键盘控制,音乐播放,继电器控制I2C通信实验,串口通信实验,红外线遥控信号解码实 ...

  8. 基于单片机的倒车雷达系统设计c语言,基于AT89C2051单片机实现超声波倒车雷达系统的设计...

    描述 倒车雷达(Car Reversing Aid Systems)的全称是"倒车防撞雷达",也称"泊车辅助装置",是汽车泊车安全辅助装置,能以声音或者更为直观 ...

  9. 51单片机io位与 c语言,【51单片机】普通I/O口模拟SPI口C语言程序

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 89C51系列单片机都不带SPI口,所在在这种情况下,我们可以模拟SPI口来现实我们要的功能,程序如下: //---------------------- ...

最新文章

  1. 查看网页js数据接口
  2. STM8中GPIO的12种模式
  3. 常考数据结构与算法:反转链表
  4. python跟java 效率_Python和Java该如何选择?老男孩Python人工智能
  5. 国家开放大学2021春1295社会心理学(本)题目
  6. bzoj1705[Usaco2007 Nov]Telephone Wire 架设电话线(dp优化)
  7. xmlhttprequest 跨域_跨域资源共享(CORS)安全性
  8. Mybatis源码阅读(一):Mybatis初始化1.3 —— 解析sql片段和sql节点
  9. Could not find an NgModule. Use the skip-import option to skip importing in NgModule.
  10. python万年历代码_利用python实现万年历
  11. python小学生教程-python 小学生教程|怎么让一个小学生学会Python?
  12. cr3格式是什么意思_佳能rp的cr3如何打开?修图为什么要用raw格式?转码又是什么?...
  13. oracle list分区添加,oracle 11g 如何创建、修改、删除list-list组合分区
  14. C语言自学指南(总觉 光阴不够)
  15. 1296. 划分数组为连续数字的集合
  16. 《我喜欢生命本来的样子》读后感作文2100字
  17. tp5系统常量对应的目录路径
  18. 软件测试的7个基本原则
  19. tkinter 的界面美化库:ttkbootstrap 使用教程
  20. 计算机快捷键40个,如何快速记住计算机快捷键

热门文章

  1. MySql 5.7数据迁移8.0问题
  2. 【官方文档】京东商城商品分析
  3. Java学习笔记(持续更新中)
  4. 折半查找判定树——(快速判断某棵树是否为折半查找判定树)
  5. 缺货商品实时监控上货提醒
  6. 地下水数值模拟Visual modflow Flex实例讲解
  7. 环境科学需要的计算机技术,环境科学计算机技术论文
  8. 项目:畅所欲言聊天室---网页IM通信聊天室
  9. 3D 打印未来,变革开创无限可能!
  10. @ConditionalOnClass等注解使用