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

news2024/12/24 2:43:07

 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,如需要其他器件,请自选

        

        

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

cdn加速与ssl加速

cdn CDN的全称是Content Delivery Network,即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。 简单的来说,就是把原服务器上数据复制到其他服务器上,用户访…

论文笔记:SmartPlay : A Benchmark for LLMs as Intelligent Agents

iclr 2024 reviewer评分 5688 引入了 SmartPlay,一种从 6 种不同游戏中提取的基准 衡量LLM作为智能体的能力 1 智能代理所需的能力 论文借鉴游戏设计的概念,确定了智能LLM代理的九项关键能力,并为每项能力确定了多个等级: 长文…

Python杂记--使用asyncio构建HTTP代理服务器

Python杂记--使用asyncio构建HTTP代理服务器 引言基础知识代码实现 引言 本文将介绍 HTTP 代理的基本原理,并带领读者构建一个自己的 HTTP 代理服务器。代码中不会涉及到任何第三方库,全部由 asyncio 实现,性能优秀,安全可靠。 基…

[管理者与领导者-163] :团队管理 - 高效执行力 -1- 高效沟通的架构、关键问题、注意事项

目录 前言:沟通是管理者实施管理最重要的工作 一、人与人沟通模型 1.1 模型 1.2 完整过程 1.3 发送和接受方式 1.4 传输 1.5 关于编码与解码 1.6 反馈 1.7 沟通中常见问题 二、管理者如何提高沟通的效率 2.1 为什么管理者布置任务后,总有人…

MYSQL执行过程和顺序详解

一、前言 1.1、说明 就MySQL在执行过程、sql执行顺序,以及一些相关关键字的注意点方面的学习分享内容。 在参考文章的基础上,会增加自己的理解、看法,希望本文章能够在您的学习中提供帮助。 如有错误的地方,欢迎指出纠错&…

Web端Excel的导入导出Demo

📚目录 📚简介:✨代码的构建:💭Web端接口Excel操作🚀下载接口🚀导入读取数据接口 🏡本地Excel文件操作⚡导出数据🌈导入读取数据 📚简介: 使用阿里巴巴开源组件Easy Exce…

在Windows上安装Go编译器并配置Golang开发环境

文章目录 1、安装Go语言编译程序1.1、下载GoLang编译器1.2、安装GoLang编译器 2、配置Golang IDE运行环境2.1、配置GO编译器2.1.1、GOROOT 概述2.1.2、GOROOT 作用2.1.2、配置 GOROOT 2.2、配置GO依赖管理2.2.1、Module管理依赖2.2.2、GOPATH 管理依赖 2.3、运行GO程序2.3.1、创…

OpenCV 学习笔记2 C++

1.图像直方图 直方图(Histogram)是图像处理中常用的工具,它表示图像中每个像素强度值的分布情况。在OpenCV中,可以使用 cv::calcHist 函数来计算图像的直方图。 图像直方图是一种展示图像像素强度分布的统计图表。它显示了图像中…

Eclipse+Java+Swing实现图书信息管理系统-TXT存储信息

一、系统介绍 1.开发环境 操作系统:Win10 开发工具 :Eclipse2021 JDK版本:jdk1.8 存储方式:Txt文件存储 2.技术选型 JavaSwingTxt 3.功能模块 4.工程结构 5.系统功能 1.系统登录 管理员可以登录系统 2.查看图书 管理员…

Python数据分析案例42——基于Attention-BiGRU的时间序列数据预测

承接上一篇的学术缝合,排列组合模型,本次继续缝合模型演示。 Python数据分析案例41——基于CNN-BiLSTM的沪深300收盘价预测-CSDN博客 案例背景 虽然我自己基于各种循环神经网络做时间序列的预测已经做烂了.....但是还是会有很多刚读研究生或者是别的领…

Django处理枚举(枚举模型)以及source的使用

Django处理枚举-枚举模型 1、定义模型类、序列化器类2、对上面这些场景使用source参数3、支持连表查询4、自定义序列化输出方法5、案例5 1、定义模型类、序列化器类 定义模型类models.py;项目模型类、接口模型类、用例模型类 from django.db import modelsclass T…

【linux深入剖析】深入理解软硬链接 | 动静态库的制作以及使用

🍁你好,我是 RO-BERRY 📗 致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 🎄感谢你的陪伴与支持 ,故事既有了开头,就要画上一个完美的句号,让我们一起加油 目录 1.理解软硬链接1.1 操作观…

AskManyAI:一个GPT、Claude、Gemini、Kimi等顶级AI的决斗场

一直以来很多人问我能不能有个稳定,不折腾的全球AI大模型测试网站,既能够保证真实靠谱,又能够保证稳定、快速,不要老动不动就挂了、出错或者漫长的响应。 直到笔者遇到了AskManyAI,直接就惊艳住了! 话不多…

公布应用程序

📕作者简介: 过去日记,致力于Java、GoLang,Rust等多种编程语言,热爱技术,喜欢游戏的博主。 📘相关专栏Rust初阶教程、go语言基础系列、spring教程等,大家有兴趣的可以看一看 📙Jav…

亚马逊云科技官方重磅发布GenAI应用开发学习路线(全免费)

今天小李哥给大家分享的是亚马逊云科技(AWS)最近官方发布的GenAI应用开发最佳学习路线,不仅内容非常全面更主要的是全部免费!大家动动小手就能成为GenAI开发大🐮! 1️⃣这个GenAI开发学习路线包括什么&…

.cur 鼠标光标编辑器

详解透明贴图和三元光栅操作 - CodeBus 鼠标指针文件格式解析——Windows(二) (qq.com) [C/C] RGBA数组生成Windows下的ico文件_c ico格式-CSDN博客 色环设计 - CodeBus 左键绘制 右键选颜色 ctrl右键设置鼠标热点 F1导出.cur文件 //代码来源&…

web3项目自动连接小狐狸以及小狐狸中的各种“地址”详解

刚做web3的时候,比较迷糊的就是人们口中说的各种地址,小狐狸钱包地址,私钥地址,跳转地址,接口地址,交易地址,等等XX地址,常常感觉跟做链的同事们说话不在一个频道。 这一小节&#x…

力扣:49. 字母异位词分组

知识点: 散列函数 散列函数能使对一个数据序列的访问过程更加迅速有效,通过散列函数,数据元素将被更快地定位: 1. 直接寻址法:取关键字或关键字的某个线性函数值为散列地址。即H(key)key或H&a…

CentOS 7安装Zookeeper

说明:本文介绍如何在CentOS 7操作系统下使用Zookeeper 下载安装 首先,去官网下载所需要安装的版本,我这里下载3.4.9版本; 上传到云服务器上,解压 tar -xvf zookeeper-3.4.9.tar.gz修改配置 进入Zookeeper目录下的co…

ssm049基于Vue.js的在线购物系统的设计与实现+vue

在线购物系统 摘 要 随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势;对于在线购物系统当然也不能排除在外,随着网络技术的不断成熟,带动了在线购物系统,它彻底改…