白话微机:10.民风淳朴的MCS-51小镇(小镇方言:汇编)

 1. 基本结构与周期

  • MCS-51系列单片机属于8位单片机
  • 用 8051单片机构成最小应用系统时,只要将单片机接上时钟电路复位电路即可
  • MCS-51单片机由CPU、存储器和I/O三部分组成
  • CPU是指:运算器控制器

   “PC = CPU + 3BUS + RAM + I/O”

        在执行指令过程中,CPU的控制器所发出的一系列特定的控制信号在时间上的相互关系成为机器周期。MCS-51系列单片机的基本操作周期,也就是执行一个机器周期需要的时钟周期数,通常为12个时钟周期

2. 寻址方式

  • MCS-51单片机四个I/O口,每个I/O口均有两种读入方式,即:位寻址方式(Bit-addressable)和 字节寻址方式(Byte-addressable),其中P口作一般的I/O口使用时需要外接上拉电阻(Pull-up resistors)驱动MOS输入。

  • 访问8031片外数据存储器采用寄存器间接寻址方式

  • JNC(Jump if No Carry)是条件跳转指令,当标志寄存器中的进位标志C0时,程序跳转到指定的相对地址。
  • MCS-51 单片机用 12 根地址线可寻址的地址空间是 (000H ~ FFFH) 或 (0 ~ 4KB)。
  • 三种寻址方式:
  • 立即寻址方式:     MOV AX,1290H
  • 寄存器寻址方式: 直接:MOV AX,BX     间接:MOV A, @R0
  • 存储器寻址方式:  MOV AX,[3000H]
  • 选D,  将累加器A的内容写入到外部数据存储器中的由DPTR指定的地址是一个读入的过程
  • 变址寻址是使用基址(通常是某个寄存器的值)加上偏移量(另一个值)来确定最终的地址,即以A作为变址寄存器,以PC或DPTR作基址寄存器

例如:MOVC A, @A+PC

8051单片机支持的四种寻址方式:

  • 寄存器间接寻址方式 使用寄存器来存储目标数据的地址。
  • 立即寻址方式 直接在指令中给出数据值。
  • 直接寻址方式 通过直接指定目标数据的地址来访问数据。
  • 位寻址方式 用于访问单片机内部特定位地址的数据。
  • (不包括:变址间接寻址方式)

3. 定时器/计数器

  1. 8051有两个16位可编程定时/计数器,其中定时作用是指对单片机 时钟脉冲进行计数,而计数器作用是指对单片机 外部脉冲进行计数。

  2. 用作定时器时,每经过12个机器周期,计数器就自动加 1。 用作串行口的波特率发生
    器的定时/计数器是定时器1

  • MCS-51单片机内部有两个16位可编程的定时/计数器,简称定时器0(T0)和定时器1(T1),由方式寄存器TMOD控制寄存器TCON数据寄存器TH0、TL0,TH1、TL1组成

  • 使用定时器T1时,有4种工作模式:
  • (1)模式0: 13位定时
  • (2)模式1:16位定时
  • 答案错了
  • (3)模式2:8位自动重装载
  • 定时时间 = (256 - 初值) × 机器周期。机器周期 = 1 / (时钟频率 / 12)

  • (注意:是256,不是255)
  • (4)模式3:分裂定时
  • 例1:定时模式2时,计数初值为6,若振荡频率为6MHz,求定时时间。定时时间 = (256 - 6) × (1 / (6 × 10^6 / 12)) = 250 × 2 × 10^-6 = 500us。
  • 例2:在单片机的串行异步通讯方式1中,SMOD=0,定时器工作在方式2,时钟频率是6MHz,若要求波特率是1200波特,则定时器的计数初值是。根据波特率的设定,定时器的计数初值 = 256 - (2 × 时钟频率 / (12 × 波特率))。对于1200波特率,计数初值 = 256 - (2 × 6 × 10^6) / (12 × 1200) = 256 - 1000 = 256 - 3E8H(十六进制)= F18H。最接近的八位数是 F1H。
  • 例3:当T0/T1设置成模式2定时器(8位自动重装初值模式)时,若晶振为6MHz频率,则要得到10μs的溢出定时,其初值应为(256 - (10μs / (1 / (6MHz / 12)))) = 256 - (10μs / (1 / 0.5MHz)) = 256 - 5 = 251。
  • 例4:T0、T1设置成模式 2 定时器(8 位自动重装初值模式)时,若振荡频率为6MHz,则要得到 10μs的溢出定时,其初值应为 246
  • 定时/计数器工作方式 1 通常支持更大的计数范围,对于MCS-51系列单片机,这意味着它使用16位计数器,因此最大计数值是 (2^{16} - 1 = 65535)
  • 可以实现计数初值自动重装的定时/计数器工作方式是方式2
  • 对于定时/计数器工作方式 0,最大的计数值是 (2^13 - 1 = 8191)

       单片机P1口的引脚,具有定时/计数器外部输入端、外部中断请求等第二功能。

        最高的输入计数频率为f时钟/12,当f时钟=12M时,则最高的输入计数频率为1MHz

4. 中断系统

  • MCS-51单片机有5个中断源,有2个中断优先级,优先级由软件填写特殊功能寄存器IP加以选择,可以实现二级中断服务程序嵌套   --“5源2优” “我愿爱幼”
  • MCS-51单片机有五个中断源,提供个中断优先级,其中自然优先级最高的是外部中断0 (INT0)
  • MCS-51单片机响应中断时,当前指令执行完毕和中断是开放的是必须条件,而没有同级或高级中断服务不是必须条件
  • 外部中断1所对应的中断入口地址为 0013H。城市中不同紧急服务部门(中断服务程序)有不同的地址或联系方式
  • 中断服务子程序的返回指令是RET  (return)
  • 在MCS-51中,必须要由软件实现中断撤除的是串行通讯中断。
  • MCS-51单片机响应中断的过程是断点 PC自动压栈,对应中断矢量地址装入PC,程序转到该矢量地址,再转至中断服务程序首地址。(选最长的)

5. 存储器与总线

        外部数据存储器RAM)地址空间:0x0000 到 0xFFFF,共有64KB的地址空间。

        外部程序存储器ROM)地址空间:0x0000 到 0xFFFF,也是64KB的地址空间

        MCS-51 系列单片机在存储器结构上,严格将程序存储器(ROM)和数据存储器(RAM)在空间上分开,并使用不同的寻址方式,使用两个不同的地址指针分别是 程序计数器(PC) 和 数据指针(DPTR),存储器这样的结构又称为哈佛结构。

  • 8031是无程序存储器供应状态的芯片,因此,其最小应用系统必须在片外扩展EPROM,那么EA必须接低电平以表明选择外部程序存储器; 外部程序存储器的取指控制信号为PSEN
  • CPU 专门提供一个控制信号 (PSEN) 来区分片内 ROM片外 ROM。当其接 (GND) 单片机从片内 ROM取指令;当其接 (VCC) CPU 从片外 ROM 取指令。

        MCS-51系列单片机的地址总线宽度为16位,因此,外部存储器直接寻址范围为64KB。由P0口提供16位的低8位地址,而由P2口提供高8位地址。

       ☆ 存储单位换算:1KB = 1024B, 1B = 8bit

        1K = 1024 = 2的10次方

       ☆ n根地址线可以选择2^n个存储单元,而mKB存储单元需要x根地址线(m *1024 = 2^x) 

        MCS-51系列单片机设计有独立的地址空间用于外部程序存储器(即ROM)和外部数据存储器(即RAM),每个空间能够寻址高达64KB,这是因为它们的地址总线宽度为16位,2的16次方等于65536,即64KB。2^16 = n*1024 => n = 64 

        单片机的片外三总线结构,包括地址总线数据总线控制总线

         EA接低电平时,CPU 只能从片外 ROM 取指令

         MCS-51系列单片机片外程序存储器的地址范围从16位十六进制的0000H地址开始,到FFFFH地址结束,这表示了64KB的地址空间。即用 16根地址线可寻址的地址空间是 (0~64KB)。

        MCS-51单片机用12根地址线可寻址的地址空间是000H-FFFH

         在8051体系结构中,如果PSEN有效,则P0端口通常用于低8位地址(或数据)传输,而P2端口用于传输高8位地址。因此,当进行外部程序存储器扩展时,低8位地址线通过P0端口连接,高8位地址线通过P2端口连接。

6. 串行通信

      波特率 = (字符数 × 每字符位数) / 时间。每个字符由9位组成(假设包括一个起始位、一个停止位和一个奇偶校验位)在这种情况下,每分钟传输25000个字符,时间为一分钟,即60秒。因此,对应的波特率 = (25000 × 9) / 60 = 3750 b/s。

      单片机串行通信时,其波特率分为固定和可变两种方式,在波特率可变的方式中,可采用计时器的溢出率来设定和计算波特率。

      CPU执行一条 SETB SCON.0 (或SETB SCON.1) 指令后,便启动串行口发送。

        外部中断 1 所对应的中断入口地址为 0013H。在串行通讯中,收发双方对波特率的设定 应该是相同

  • 串行口扩展并行口时,串行接口的工作方式应选为方式0
  • 当MCS-51进行多机通讯时,串行接口的工作方式应选为方式2
  • MCS-51系列单片机具有全双工的串行通信接口,它可以进行同步和异步通信。所以说它有一个单工同步通讯接口是错误的
  • 通常用于扩展并行 I/O 口的是串行口工作方式1
  • 波特率与振荡频率有关
  • RI 是串行通讯接收中断标志,当串行口完成接收一个字节时,硬件会设置RI标志。RI标志必须由软件清零
  •  MCS-51单片机有一个的异步通讯串行接口,数据传送的方向可实现: 单工方式 、全双工方式 、半双工方式 。
    当外部中断 0 发出中断请求后,中断响应的条件是  MOV IE, #81H

7. AD与DA

  • 74LS273和74LS244芯片的应用,分别用来作简单输出接口扩展和简单输入接口扩展
  • A/D转换器的三个重要指标是转换速度、分辨率和转换精度
  • ADC0809是一种采用逐次逼近进行A/D转换的8位接口芯片。
  • 当DAC0832 D/A转换器的CS接8031的P1时,程序中0832的地址指针DPTR寄存器应置可以为0832H, FE00H, FEF8H    (选以上三种都可以)
  • ADC0809 采集的数字式x,参考电压为+5V,则输入转换器的模拟电压是(x/255)*5V。(如果x是16进制,先转化为十进制)注:FFH不是256,是255

8. 进制转换和编码

  • 各种进制之间的转换,包括十进制与二进制、十六进制的相互转换
  • 带符号数的三种表示方法:原码、反码和补码
  • 计算机中使用的编码,如BCD码和ASCII码

9. I/O口

       单片机P1口的引脚,具有定时/计数器外部输入端、外部中断请求等第二功能。

  • P1为准双向口,若要从P1口读数据,必须先用输出指令置P1为高阻态
  • P1口的每一位能驱动4个TTL低电平负载

        8031、8051单片机P3口的引脚,具有定时/计数器外部输入端、外部中断请求等第二功能。

10. 特殊功能寄存器

        PSW = 18H时,当前工作寄存器是第3

11. 时钟/晶振

        MCS-51单片机晶振频率为12MHz时,其最高输入计数频率为时钟频率的1/12。因此,最高输入计数频率应为12MHz / 12 = 1MHz。

        MCS-51单片机的时钟最高频率12MHz

12.并行接口

        8051内部有4个8位的并行口,P口直接作输出口时,必须外接上拉电阻;并行口作输入口时,必须先设置为输入模式,才能读入外设的状态。

13.复位

        8051单片机复位后,PC(程序指针) 的值为  0000H。 SP (堆栈指针)的初值为 07H。 P0~P3口的锁存器的状态是高阻。

        “sp07”:"收破烂去"

14.汇编指令

(1)基本指令

汇编语言程序设计的基本结构形式,包括顺序结构分支结构循环结构

(2)定时器

(3)while(1)

(4)DAC0832

注:CJNE 后面可以以接立即数,但是一定要是16进制

(5)IO口

(6)移数

1、编写一程序实现将1000H单元开始的100个单元的数据转移到2000H开始的单元中。(8分)

(7)查数/次数
(1)从某段内存中找某个数

编程查找内部 RAM 的 32H~41H 单元中是否有 0AAH 这个数据,若有这一数据,则将 50H 单
元的内容置为 0FFH,否则清 50H 单元为 0。(8 分)

(2)某一内存段的个数

1、编程实现查找 20H~4FH 单元中出现 00H的次数,并将査找结果存入 50H 单元的功能。
(8分)

(3)IO口输入值的次数

测试 P1 口输入的 100 个数中 0~9 各数各有多少个,并将结果存储在 30H-39H的地址中。(不考虑提前清理内存,因为不好记,考到就送分给它算了)

(8)组合数


(9)点灯
(1)按键按下:灯亮

(2)闪烁

电路原理:当Vb = Vcc时,三极管会饱和,此时Vc ≈ Ve

所以:P1.7给高电平时,三极管①导通且饱和,Vb② = VCC - 0.7V, 三极管②饱和,Vc = GND,灯就会亮;反之同理,给低电平就会灭

程序如下:

ORG 0000H ; 程序起始地址

 MOV TMOD, #01H ; 设置定时器0为模式1 (16位定时器/计数器)

MOV TH0, #0D8H ; 定时器高8位初值

MOV TL0, #F0H ; 定时器低8位初值

MOV IE, #82H ; 允许定时器0中断 (EA = 1, ET0 = 1)

CLR P1.7 ; 初始化P1.7为0 (LED关闭)

SETB TR0 ; 开始定时器0

ORG 0030H ; 定时器0中断服务程序入口地址

TIMER0_ISR:

        CPL P1.7 ; 取反P1.7引脚的状态, 切换LED的亮灭状态

        RETI ; 返回中断

或者分块写(但是怕改卷老师看得太快没看仔细)

ORG 0000H           ; 程序起始地址
SJMP START          ; 跳转到初始化部分

ORG 0030H           ; 定时器0中断服务程序入口地址
TIMER0_ISR:         
    CPL P1.7        ; 取反P1.7引脚的状态, 切换LED的亮灭状态
    RETI            ; 返回中断

START:              
    MOV TMOD, #01H  ; 设置定时器0为模式1 (16位定时器/计数器)
    MOV TH0, #0D8H  ; 定时器高8位初值
    MOV TL0, #F0H   ; 定时器低8位初值
    MOV IE, #82H    ; 允许定时器0中断 (EA = 1, ET0 = 1)
    CLR P1.7        ; 初始化P1.7为0 (LED关闭)
    SETB TR0        ; 开始定时器0

MAIN_LOOP:          
    SJMP MAIN_LOOP  ; 主程序循环

END
(10)比大小

CLR C;

MOV R1, #30H;

MOV R2, #31H;

MOV A, @R1;

SUBB A, @R2;

JC LABEL;

(11)特定表达式

把A当成一个容器,先把值赋入,然后处理好后,再把值赋出

(1)异或

51里没有XOR,所以只能用定义写(或者有?我也不确定)

(2)平方

MOV A, 30H;

ACALL SQR;

(12)ADC0809

(13)扩展EEPROM

为什么要加地址锁存器?因为8031的IO口不够用,需要引脚即接地址又接数据位置,给了地址后要通过锁存器把EEPROM的地址状态给锁住,然后再给高低电平给数据位

(14)十六进制运算

(15)双机

        利用2816A在8031单片机外部扩展4K字节程序存储器,同时利用6264SRAM扩展8K字节数据 存储器,其中2816A为2K字节的EEPROM, 6264是8K字节的RAM,如需要其他器件,请自选

        

        

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/544090.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java-Scanner类进阶+题目

Scanner进阶 接收整数数据时: 接收小数数据时: 例子: 可以先这样弄出scanner的框架: 未完待续... ...

介绍set和map容器

文章目录 1.什么是关联式容器2.什么是键值对3.树形结构的关联式容器3.1set3.1.2set的使用set的构造set的迭代器set的容量set的常用操作set的简单使用 3.2 mapmap的构造map的迭代器map的容量map的常用操作map的使用 3.3multiset3.4 multimap 在介绍set和map容器前先了解什么是关…

《GVL》论文笔记

原文链接 [2303.06378] Learning Grounded Vision-Language Representation for Versatile Understanding in Untrimmed Videos (arxiv.org) 原文笔记 What 《Learning Grounded Vision-Language Representation for Versatile Understanding in Untrimmed Videos》 全文一…

编曲知识19:自动化处理 发送原理 混响 延迟

自动化处理 发送原理 混响 延迟小鹅通-专注内容付费的技术服务商https://app8epdhy0u9502.pc.xiaoe-tech.com/live_pc/l_661a68eae4b023c0a96a8b36?course_id=course_2XLKtQnQx9GrQHac7OPmHD9tqbv 自动化处理 自动化 鼠标挪动到轨道左下角打开自动化轨道 或右键轨道-左键单击…

Node.js 中的 RSA 加密、解密、签名与验证详解

引言 在现代的网络通信中,数据安全显得尤为重要。RSA加密算法因其非对称的特性,广泛应用于数据的加密、解密、签名和验证等安全领域。本文将详细介绍RSA算法的基本原理,并结合Node.js环境,展示如何使用内置的crypto模块和第三方库…

RT-Thread 多级目录 scons 构建

前言 RT-Thread 默认使用 scons 进行工程的构建,虽然 RT-Thread BSP 中的 hello world 例程比较简单,实际项目开发,可能源码的工程会由多级目录,如何让多级的目录参与构建? scons 构建时,除了依赖工程的根…

libbpf-bootstrap库的代码结构介绍(用户层接口介绍),编译链接语句详细介绍,.skel.h文件介绍+示例,bpf程序的后续处理+文件关系总结

目录 libbpf-bootstrap 代码结构介绍 用户层函数 编译 查看 生成内核层的.o文件 第一模块 第二模块 第三模块 第四模块 第五模块 生成辅助文件(.skel.h) 介绍 示例 生成代码层的.o文件 第一模块 第二模块 第三模块 链接出可执行文件 后续总结 libbpf-bootst…

云服务器web环境之mariadb

1.安装mariadb服务 yum install mariadb-server 启动mariadb服务 systemctl start mariadb.service 输入mysql就能使用数据库了。 2.服务相关操作 systemctl stop mariadb.service systemctl restart mariadb.service 2.配置开机自启动 systemctl enable mariadb.serv…

AI克隆语音(基于GPT-SoVITS)

概述 使用GPT-SoVITS训练声音模型,实现文本转语音功能。可以模拟出语气,语速。如果数据质量足够高,可以达到非常相似的结果。相比于So-VITS-SVC需要的显卡配置更低,数据集更小(我的笔记本NVIDIA GeForce RTX 4050 Lap…

深入剖析MongoDB集群架构设计

目录 一、MongoDB集群架构介绍 1.1 主从复制 1.2 副本集 1.3 分片集群 二、副本集 3.1 主节点选举 3.2 oplog 3.2 主从同步 三、分片集群 3.1 分片策略 3.2 分片键的选择 3.3 何时选择分片集群 四、总结 一、MongoDB集群架构介绍 MongoDB 有三种集群架构模式,分…

(七)PostgreSQL的用户管理

PostgreSQL的用户管理 1 创建用户(角色) CREATE USER现在是CREATE ROLE的别名。唯一的区别是,当命令的拼写为CREATE USER时,默认情况下会使用LOGIN,而当命令拼写为CREATE ROLE时会使用NOLOGIN。 官方文档&#xff1a…

系统架构最佳实践 -- 统一身份认证系统

目录 1.系统架构设计: 2.用户认证与授权: 3.用户身份管理: 4.安全性保障: 5.日志记录与审计: 6.高可用性与容错性: 7.用户体验优化: 随着互联网的快速发展和应用的普及,人们在…

边缘计算【智能+安全检测】系列教程--使用OpenCV+GStreamer实现真正的硬解码,完全消除马赛克

通过现有博客的GST_URL = "rtspsrc location=rtsp://admin:abcd1234@192.168.1.64:554/h264/ch01/main/av_stream latency=150 ! rtph264depay ! avdec_h264 ! videorate ! videoconvert ! appsink sync=false" GStreamer的解码方式解码,大多情况应该存在上图马赛克…

基于机器学习的人脸发型推荐算法研究与应用实现

1.摘要 本文主要研究内容是开发一种发型推荐系统,旨在识别用户的面部形状,并根据此形状推荐最适合的发型。首先,收集具有各种面部形状的用户照片,并标记它们的脸型,如长形、圆形、椭圆形、心形或方形。接着构建一个面部…

STM32之DHT11温湿度传感器

目录 一 DHT11温湿度传感器简介 1.1 传感器特点 1.2 传感器特性 1.3 传感器引脚说明 二 测量原理及方法 2.1 典型应用电路 2.2 单线制串行简介 2.2.1 串行接口 (单线双向) 2.2.2 数据示例 2.3 通信时序 三 单片机简介 3.1 STM32F103C8T6最小系统板 四 接线说明 …

LLM-大模型演化分支树、GPT派发展阶段及训练流程图、Infini-Transformer说明

大模型是怎么演进的? Encoder Only: 对应粉色分支,即BERT派,典型模型: BERT 自编码模型(Autoencoder Model):通过重建句子来进行预训练,通常用于理解任务,如文本分类和阅…

架构师系列-搜索引擎ElasticSearch(五)- 索引设计

索引创建后,要非常谨慎,创建不好后面会出现各种问题。 索引设计的重要性 索引创建后,索引分片只能通过_split和_shrink 接口对其进行成倍的增加和缩减。 ES的数据是通过_routing分配到各个分片上的,所以本质上不推荐区改变索引的…

记录一下MySQL8版本更改密码规则

#查看当前密码策略 show variables like validate_password%;#修改密码等级为low set global validate_password.policy LOW; #注意MySQL8版本这是点,不是_#修改密码长度为6 set global validate_password.length 6;#查询我的数据库中user表host和user select host,…

【前端面试3+1】16 TCP与UDP的区别、如何清除浮动、哪些原因造成阻塞页面渲染、【相同的树】

一、TCP与UDP的区别 TCP(Transmission Control Protocol)和UDP(User Datagram Protocol)是两种常用的网络传输协议,它们有以下几点区别: 1、连接性: TCP是面向连接的协议,通信双方在…