终于到这一小节了。这一节讲扩展原理与接口技术。

那么什么是扩展原理&接口技术呢?其实主要是3种。

1、扩展一个程序存储器

2、扩展一个数据存储器

3、扩展IO口


1、扩展程序存储器

其实这个扩展外部程序存储器主要是硬件的连接,程序上没有需要额外控制的代码。

因此呢以下知识了解即可。

1、引脚:

EA: 当EA=1时单片机所有片内程序存储器有效。

当EA=0时,片内程序存储器无效。只能访问片外程序存储器。

ALE:在ALE的下降沿时,P0口出现稳定的程序存储器低八位地址,(配合锁存器74LS373)用ALE信号锁存这低8位地址。

P2口:在整个取指周期中,稳定输出程序存储器的高8位地址。

P0口: 分时输出程序存储器的低8位地址和8位的数据。

PSEN:在ALE的下降沿之后,PSEN由高变为低,此时片外程序存储器的内容(指令字)送到P0口,而后在PSEN的上升沿将指令字送入指令寄存器。

之前写数码管的程序的时候也用到了一款锁存器74HC573和这里的锁存器型号不同。但其实功能都是差不多的。

不过74LS373也叫地址锁存器,在这种扩展接口的地方会经常用到。


2、扩展数据存储器

连线图:

6264的CE  CS两个引脚都是片选引脚因为这里只用了一个6264芯片所以我这边直接给CE接地,CS接VCC。

首先先讲一下地址锁存器74LS373

LE为数据打入端:当LE为“1”时, 锁存器输出状态(1Q~8Q)同输入状态(1D~8D);当LE由“1”变“0”时,数据打入锁存器中。此时为“锁”状态。输出引脚的状态被锁定。

注意单片机的ALE引脚是接在锁存器74LS373的LE引脚上。锁存器的OE引脚相当于是锁存器的使能引脚,低电平有效。

当单片机执行MOVX @DPTR, A语句是就会实现ALE的下降沿。在ALE的下降沿时,P0口出现稳定的外部存储器低八位地址,用ALE信号锁存这低8位地址。

程序上主要是四条语句

MOVX A,@Ri

MOVX @Ri ,A

MOVX A,@DPTR

MOVX @DPTR, A

这里讲一下51单片机的地址总线 。

可以看到,P0、P2口它的第二功能标识:AD0~AD7  A8~A15

其中的A表示地址总线,D表示数据总线。也就是说P0口既可以作地址总线又可以作数据总线。

P0是地址总线的低8位,P2口是地址总线的高8位。

通过将两个芯片的地址线连到一起,达到传输信息的目的。当然这个信息时地址数据。也就是接下来传到数据总线上的数据要放到数据存储器里的哪个地方(地址)。

同理把数据总线接在一起。传输数据。

然后再回头看看这句话:当单片机执行MOVX语句是就会实现ALE的下降沿,在ALE的下降沿时,P0口出现稳定的外部存储器低八位地址,用ALE信号锁存这低8位地址

还是这个MOVX @DPTR, A语句。他是双周期指令,从第二个周期开始后单片机的WR引脚会出现低电平。

当WR出现低电平时,P0口将送出A寄存器的数据。从而将数据传出去。

那么第一个周期当然是,ALE出现下降沿,在ALE的下降沿时,P0口出现稳定的外部存储器低八位地址。而高位地址是直连的。

所以通过这个MOVX @DPTR, A语句,和上面的连线方式,就可把A寄存器中的数据传到外部数据存储器的任意一个地址里。

------------------------------------------------------------------------------------------------------------------------------

那么读取数据呢?

用的是MOVX A,@DPTR语句

从第二个周期开始后单片机的RD引脚会出现低电平。

当WR出现低电平时,允许片外数据存储器的数据传到P0口上将数据再送到A寄存器。从而将数据读取到A寄存器中。

第一周期仍然是对地址的控制。

--------------------------------------------------------------------------------------------------------------------------------

传输一个数据3D到外部数据存储器里,地址为00FF。

ORG 0000H
JMP MAINMAIN:MOV DPTR , #00FFH            ;目标地址MOV A,  #3DH                 ;目标数据MOVX @DPTR ,A                ;传输数据END

仿真结果:

-------------------------------------------------------------------------------------------------------------------------

对于同时使用多个扩展芯片请参考下图:


3、扩展IO口

这也是最重要的也是最实用的。

引脚图:


这里采用的是并行的IO扩展芯片8255A,这个芯片有三种工作方式,1、基本输入输出方式 2、选通输入输出方式 3、双向数据传送方式。

我们这里用的是方式0。

内部逻辑结构图:

可以看到它的控制是由读写控制逻辑来完成的。主要是靠A0,A1两个引脚来访问芯片的控制寄存器,然后写入命令字。就可以设定我们所需要的工作方式。

可以看到写控制字(访问控制寄存器)的时候要使A0,A1都为高电平(即 1,1)。访问A,B,C三个端口的寄存器分别是 0,0   0,1  1,0

那么控制字要怎么写呢?

先将A0,A1都置1,访问控制寄存器,然后在D0~7引脚将对应控制字输进去就可以了。用的仍然是MOVX指令。

其实这也就是初始化的工作。

然后这里给一个实例,用扩展芯片弄一个8位流水灯。

ORG 0000H
JMP MAININIT:                        ;初始化8255AMOV R0,    #03H            ;A0=1,A1=1MOV A, #80H               ;控制字1000 0000MOVX @R0,A                ;写入控制寄存器RETDELAY:                        ;延时函数MOV R6,#0FFH
W1: MOV R7,#0EFH
W2: DJNZ R7,W2DJNZ R6,W1RETMAIN:                        ;主函数ACALL INIT
STAR:   MOV R3,#8            ;用于循环MOV R0,#01H            ;A0=0,A1=1 访问B端口的寄存器MOV A,#01H            ;要输出的数据
LED:    MOVX @R0,A            RL A                        ;左移指令,实现流水灯ACALL DELAYDJNZ R3,LED                JMP STAR                        ;大循环END

当然了,你也可以发挥一下写一个16位的流水灯。


-------------------------------------------------------结束-------------------------------------------------------------------

51单片机汇编学习11——扩展原理与接口技术相关推荐

  1. 51单片机汇编学习(一)点亮你的LED灯

    本帖为使用汇编编写51单片机的学习笔记,本帖使用软件为keil5,因为没有实际硬件,所以选择porteus仿真软件,因为是第一篇,所以内容多有赘述,详细说明了工程建立等,因为文章太长所以编程和仿真分开 ...

  2. 51单片机汇编学习例程(9)——ADC0809篇

    ASM9_ADC0808:    ADC0808采集ADC参数,数码管显示 (注意代码显示不全,最下面有Keil源码和Proteus工程) /** ************************** ...

  3. 51单片机汇编学习10——串口通讯

    这一小节写一下串口通讯. 建议先去了解一下什么串行通讯. 推荐一个视频3分钟理解通信协议之串口UART到底是个啥?_哔哩哔哩_bilibili 因为串口通讯涉及的寄存器相对较多.所以尽量要自己去看看S ...

  4. 51单片机汇编学习笔记9——定时计数器

    这一小节介绍一下51单片机的一个重要外设定时计数器. 顾名思义定时计数器主要是两种功能:定时.计数. 定时:就是当你开启定时器后到了设定的时间他会触发中断,然后去执行中断服务函数里面的程序. 计数:主 ...

  5. 51单片机汇编学习例程(7)——74HC595数码管篇

    7.ASM7_Seg_595:    74HC595控制数码管静态显示 (注意代码显示不全,最下面有Keil源码和Proteus工程) /** **************************** ...

  6. 51单片机汇编学习例程(16)——AT24C02篇

    ​ASM16_AT24C02:EEPROM数据读写,LED显示 (注意代码显示不全,最下面有Keil源码和Proteus工程) /*********************************** ...

  7. 51单片机汇编学习例程(17)——KeyPad4X4篇

    ​ASM17_KeyPad4X4:矩阵键盘,LCD1602显示按键值. (注意代码显示不全,最下面有Keil源码和Proteus工程) 仿真视频 /** *********************** ...

  8. 51单片机汇编学习例程(10)——DAC0832篇

    ​ ASM10_DAC0832:    DAC0832输出各种波形 (注意代码显示不全,最下面有Keil源码和Proteus工程) /** ****************************** ...

  9. 51单片机汇编学习例程(13)——DC-Motor篇

    ​ ASM13_DCMotor:    DC-Motor电机控制 (注意代码显示不全,最下面有Keil源码和Proteus工程) /********************************** ...

最新文章

  1. 元宵节就要到了,花灯要不要来一盏?3D的那种
  2. Isometric Game 及译法漫谈
  3. apache基于ip如何配置虚拟主机
  4. oracle 触发器 upsert,数据库管理员
  5. 变量在内存中的值[c][code]
  6. jdk10 换成jdk8_JDK 10的摘要Javadoc标签
  7. C# 调用IP库(QQWry.Dat)查询IP位置及自动升级IP库方法(附IP库下载地址及相关dll下载)
  8. github 使用之--ssh配置(及解决ssh_add 报错)
  9. SQL各个关键字的顺序
  10. Julia : 小s与关于绝对路径的转义方式
  11. step7-micro/win 在win10系统下安装步骤
  12. word流程图怎么使箭头对齐_word里流程图的直角箭头怎么画
  13. 影子卫士和影子系统哪个好用_大小仅3M的影子系统,绿软爱好者必装软件
  14. 小议关键字del与实例方法__del__(self)
  15. 华为和荣耀的关系:亲兄弟,各自为王
  16. 小米r2d做nas_老生常谈, 小米路由器作为轻nas的好处和二级路由器设置.
  17. 汇编语言shl/shr与sal/sar的使用
  18. echarts5.0新特性
  19. 360,谷歌浏览器登录管家帐户密码查看
  20. 基于Java的酒店管理系统毕业论文

热门文章

  1. Halo博客网站添加天气插件
  2. ygbook和ptcms哪个好_杰奇CMS 和 PTCMS 有什么区别? 为什么很多人选择杰奇?
  3. Python之Django框架(一)
  4. [安卓]解决因为冻结了系统程序导致不能开机的问题
  5. Matlab 小球落地问题
  6. iphone自定义闹钟铃声
  7. GMSSL-SM9测试
  8. 【基础知识】事件模型
  9. hexdump-format
  10. 58同城上市半年股价沉浮录