• 单片机原理期末复习笔记


    说明:

    • 参考内容:《单片机原理及应用(第三版)》 张毅刚 ; hfut单片机原理课程ppt
    • 博文仅做笔记备份,不定时更新
    • 文中部分图片来自ppt截图,侵删致歉
    • 每一章节的笔记分为文字版和思维导图版,思维导图是由文字版笔记导出的,部分章节有整理习题内容,可浏览目录了解哪些章节有习题部分、

    2022/7/5考完复盘

    • 题目比较基础,对基本的知识点考察较多
    • 选择、填空、判断和改错题基本上都是对基本知识点的考察,对存储器的考察基本都在这部分
    • 没有考察串行口的编程题,编程题也很基础,一道是把数据从片内移到片外;一道是输出波形,是对中断和定时器的考察
    • 然后我很想说:相信自己的第一直觉,第一直觉选了正确答案,检查试卷时搁那儿分析半天重选了错误答案,我真的会谢😭

    MCS-51硬件结构

    笔记思维导图

    在这里插入图片描述

    笔记文字部分

    • MCS-51硬件结构

      • CPU
        • 运算器
          • ALU
            • 操作数
              • 由累加器A通过暂存器2输入
              • 由暂存器1输入
            • 运算结果的状态送PSW
          • ACC
            • A的进位标志是 C y C_y Cy
          • B
            • 常用于乘除操作
              • 乘法: A × B → B A A\times B \rightarrow BA A×BBA
              • 除法: A ÷ B → A ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ B A\div B\rightarrow A······ B A÷BAB
            • 作为通用寄存器或RAM的一个单元使用
          • 暂存器
          • PSW——8位专用寄存器,可进行位寻址
            • C y ( P S W . 7 ) C_y(PSW.7) Cy(PSW.7):最高位进位/借位
            • A c ( P S W . 6 ) A_c(PSW.6) Ac(PSW.6):半进位,低四位向高四位的进位
            • F 0 ( P S W . 5 ) F_0(PSW.5) F0(PSW.5):用户标志位
            • R S 1   R S 0 ( P S W . 4   P S W . 3 ) RS1\ RS0(PSW.4\ PSW.3) RS1 RS0(PSW.4 PSW.3):工作寄存器组指针,用以选择CPU当前工作的寄存器组
            • O V ( P S W . 2 ) OV(PSW.2) OV(PSW.2)
            • F 1 ( P S W . 1 ) F1(PSW.1) F1(PSW.1):用户标志位
            • P ( P S W . 0 ) P(PSW.0) P(PSW.0):奇偶标志位
        • 控制器
          • PC
            • 可对64KB的程序存储器直接寻址(PC16位)
            • 对用户透明
          • 程序地址寄存器
          • IR
          • 指令译码器ID
          • 时序控制电路
      • 存储器
        • ![[Pasted image 20220703095115.png]]

        • 数据存储器RAM

          • 内部数据存储器
            • 8031有128byte,地址空间 00 H ∼ 7 F H 00H\sim 7FH 00H7FH
            • 8032有256byte,地址空间 00 H ∼ 7 F H 00H\sim 7FH 00H7FH 80 H ∼ 0 F F H 80H\sim 0FFH 80H0FFH(与SFR地址重叠)
            • 寻址:对片内高区128B( 80 H ∼ 0 F F H 80H\sim 0FFH 80H0FFH只能用寄存器间接寻址,对特殊功能寄存器区必须用直接寻址
          • 外部数据存储器
            • 片外可扩展64byte的RAM
        • 程序存储器 ROM/EPROM

          • 可寻址范围64KB,片内外程序存储器统一编址
          • 片内
            • E A ‾ = 1 \overline{EA}=1 EA=1时,PC在0~ 0 F F F H 0FFFH 0FFFH范围内执行片内中的程序,超出片内程序存储器容量后自动转向片外
          • 片外
            • E A ‾ = 0 \overline{EA}=0 EA=0时,PC在0~ 0 F F F F H 0FFFFH 0FFFFH范围内执行片外的程序
          • 7个特殊的地址单元
            • 0000H:复位后PC=0000H,即程序从0000H处开始执行指令
            • 0003H:外部中断0入口地址
            • 000BH:定时器0溢出中断入口地址
            • 0013H:外部中断1入口地址
            • 001BH:定时器1溢出中断入口地址
            • 0023H:串行口中断入口地址
            • 002BH:定时器2溢出中断入口地址(针对8032)
        • 特殊功能寄存器 SFR

          • 说明
            • 80 H ∼ 0 F F H 80H\sim 0FFH 80H0FFH共128个字节单元中,SFR只离散的占用了部分字节
            • 部分SFR可进行位寻址,可位寻址的SFR的字节地址末位只能是X0H或X8H
          • SP
            • 在调用子程序或进入中断服务程序时,断点地址的入栈和出栈是由硬件自动实现的
          • DPTR (DPH和DPL)
            • 主要存放16位地址
            • 某些情况下,DPH和DPL可单独使用
            • 对64KB外部数据存储器空间寻址时,作为间址寄存器使用;在访问程序存储器时,作为基址寄存器使用
          • I/O端口 P 0 ∼ P 3 P_0\sim P_3 P0P3
            • 特殊功能寄存器 P 0 ∼ P 3 P_0\sim P_3 P0P3分别是I/O端口 P 0 ∼ P 3 P_0\sim P_3 P0P3的锁存器
          • 寄存器B
            • 主要是为乘除运算
            • 不执行乘除运算时可作为普通寄存器使用
          • 串行数据缓冲器SUBF
            • 由发送缓冲器和接收缓冲器组成(共用一个地址99H)
          • 串行控制寄存器SCON
            • 主要用来选择串行通信的工作方式、接收或发送控制、设置状态标志
        • 位地址空间

      • 四个8位并行I/O端口
        • P 0 P_0 P0
          • 由一个输出锁存器、2个三态输入缓冲器、1个输出驱动电路、1个输出控制电路(1个与门、1个反相器、1个MUX)组成
          • 多路开关MUX的位置
            • P 0 P_0 P0口做地址/数据总线时,CPU发出1信号,MUX将非门输出端和T2的栅极接通
            • P 0 P_0 P0做I/O端口时,CPU发出0信号,MUX将输出锁存器 Q ‾ \overline{Q} Q与T2的栅极接通
        • P 1 P_1 P1
        • P 2 P_2 P2
        • P 3 P_3 P3
      • 一个串行口
      • 两个16位定时器(8032有3个)
      • 中断系统

      MCS-51指令系统

      指令表

      此图来自课本
      在这里插入图片描述

    指令系统习题

    1. 已知执行下列指令前,(A)=01H, (SP)=6AH, (69H)=50H, (6AH)=80H,执行后它们各自是多少?
    POP DPH		    ;((SP))->DPH, (SP)-1->SP
    		        ;(6AH)=80H->DPH, (SP)-1=6AH-1=69H->SP
    POP DPL		    ;((SP))->DPL, (SP)-1->SP
    		        ;(69H)=50H->DPL, (SP)-1=69H-1=68H->SP
    MOV DPTR, #3000H;30H->DPH, 00H->DPL
    RL A		    ;(A)=02H
    MOV B,A 		;(B)=02H
    MOVC A, @A+DPTR ;(A)=33H
    PUSH ACC	    ;(SP)+1->SP, (A)->(SP)
    		        ;68H+1=69H->SP, 33H->(69H)
    MOV A, B		;02H->(A)
    RL A		    ;(A)=04H
    MOVC A, @A+DPTR ;(A)=55H
    PUSH ACC	    ;(SP)+1->SP, (A)->(SP)
    		        ;69H+1=6AH->SP, 55H->(6AH)
    RET		        ;((SP))->PCH,(SP)-1->SP
                    ;((SP))->PCL,(SP)-1->SP
    		        ;(6AH)=55H->PCH, 6AH-1=69H->SP
    		        ;(69H)=33H->PCL, 69H-1=68H->SP
    ORG 3000H
    DB 11H, 22H, 33H, 44H, 55H, 66H
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    因此执行后,(A)=55H, (SP)=68H, (69H)=33H, (6AH)=55H, (PC)=5533H

    1. 假设(A)=57H, (R0)=63H, (63H)=0A1H,则执行后(A)=?
    ANL A, #63H ;(A)=43H
    ORL 63H, A  ;(63H)=E3H
    XRL A, @R0  ;(A)=A0H
    CPL A       ;(A)=5FH
    
    • 1
    • 2
    • 3
    • 4

    执行后(A)=5FH

    编写程序,查找在内部RAM的30H~50H单元中是否有0AAH这一数据,若有,则将51H单元置01H,否则,将51H单元置00H

          ORG 0000H
          MOV R0, #30H    ;内部单元起始地址
          MOV R2, #21H    ;查找次数
    LOOP: MOV A, @R0
          CJNE A, #0AAH, NOT
          MOV 51H, #01H
          SJMP DEND
    NOT:  INC R0
          DJNZ R2, LOOP
          MOV 51H, #00H
    DEND: SJMP DEND      
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    MCS-51的中断系统

    笔记思维导图

    在这里插入图片描述

    笔记文字部分

    • MCS-51的中断系统
      • 中断源
        • I N T 0 ‾ \overline{INT0} INT0,外部中断0请求,由P3.2输入。
        • I N T 1 ‾ \overline{INT1} INT1,外部中断1请求,由P3.3输入
        • 片内定时器T0溢出中断请求
        • 片内定时器T1溢出中断请求
        • 片内串行口发送/接收中断请求
        • 片内定时器T2溢出中断请求(8032)
      • 特殊功能寄存器TCON(专用寄存器)
        • 作用:锁存外部的中断请求标志,以及T0、T1的溢出中断请求标志

        • 在这里插入图片描述

        • IT0:选择 I N T 0 ‾ \overline{INT0} INT0触发方式控制位。IT0=0, I N T 0 ‾ \overline{INT0} INT0低电平触发中断;IT0=1, I N T 0 ‾ \overline{INT0} INT0负跳沿触发中断

        • IE0: I N T 0 ‾ \overline{INT0} INT0请求标志位。IE0=1,外部中断0向CPU申请中断

        • IT1、IE1功能同上

        • TF0:片内定时器T0溢出中断请求标志。T0启动后从初始值开始进行加1计数,当最高位产生溢出时,置TF0=1,向CPU申请中断

        • TF1功能同TF0

      • 特殊功能寄存器T2CON(专用寄存器)
        • 在这里插入图片描述

        • TF2:当T2的计数器(TH2、TL2)计数溢出回0时,由内部硬件置位TF2,向CPU发出中断请求。但当RCLK或TCLK为1时将不予置位。本标志位必须由软件清0

        • EXF2:当由引脚T2EX上的负跳变引起“捕捉”或“重新装载”且EXEN2=1时,则置位EXF2标志位(T2CON.6),向CPU发出中断请求

        • 上述2种中断请求,CPU响应时会转向同一个中断矢量地址进行处理,因此需在T2的中断服务程序中对TF2和EXF2进行查询判别

      • 特殊功能寄存器SCON(串行口控制寄存器)
        • 在这里插入图片描述

        • RI(SCON.0):串行口接收中断请求标志位。当允许串行口接收数据时,每接收完一个串行帧数据,由硬件置位RI,请求中断。(在中断服务程序中通过软件清零

        • TI(SCON.1):串行口发送中断请求标志位。CPU每将一个字节写入发送缓冲器SBUF,启动发送完一个串行帧数据时,由硬件置位TI,请求中断。(在中断服务程序中通过软件清零

      • 中断控制
        • 中断允许寄存器IE
          • 第一级:总开关中断控制位EA;另一个是各个中断源对应的中断请求允许位

          • 在这里插入图片描述

          • EX0:对应 I N T 0 ‾ \overline{INT0} INT0

          • ET0:对应 T 0 T0 T0

          • EX1:对应 I N T 1 ‾ \overline{INT1} INT1

          • ET1:对应 T 1 T1 T1

          • ES:对应串行口中断

          • ET2:对应T2

        • 中断优先级寄存器IP
          • MCS-51的中断系统有两个中断优先级

          • 在这里插入图片描述

          • PX0:对应 I N T 0 ‾ \overline{INT0} INT0

          • PT0:对应T0

          • PX1:对应 I N T 1 ‾ \overline{INT1} INT1

          • PT1:对应T1

          • PS:对应串行口中断优先级控制

          • PT2:对应T2

        • 中断优先基本规则
          • 低优先级可被高优先级中断
          • 任何一种中断一旦得到响应,不会再被同级中断源中断
          • 同时收到几个同级的中断请求时,同一优先级中断的查询次序(从高到低)
            • 外部中断0
            • T0溢出中断
            • 外部中断1
            • T1溢出中断
            • 串行口中断
            • T2中断
      • 中断响应条件
        • CPU开中断,即EA=1
        • 中断源未被屏蔽
        • 中断源发出中断请求
        • 没有同级或更高级的中断正在被服务,并且没有同级顺序更高的中断源正在请求中断
      • 中断被推迟响应的条件
        • CPU正在处理同级或更高优先级的中断
        • 现行机器周期不是正在执行的指令的最后一个机器周期
        • 正在执行的是中断返回指令RETI或访问专用寄存器IE或IP的指令
      • 中断请求的撤销
        • T0、T1中断请求的撤销:中断响应后,硬件自动清除TF0或TF1
        • 外部中断请求的撤销
          • 跳沿方式:中断响应后,硬件自动清除中断请求标志位IE0或IE1,负跳沿信号是瞬息过程,不会维持
          • 电平方式:硬件自动清除IE0或IE1,但中断请求低电平信号可能继续维持
        • 串行口中断请求的撤销:在中断服务程序中,用软件清除相应的中断标志位
        • 定时器T2中断请求的撤销:用软件清除TF2或EXF2的中断标志位

    MCS-51定时器/计数器

    在这里插入图片描述

    笔记思维导图

    笔记文字部分

    • MCS-51定时器/计数器
      • T0与T1的结构
        • 工作方式
          • 计数器方式
            • 计数脉冲来自外部输入引脚T0和T1,当引脚发生1到0的负跳变时,计数器加1
            • CPU在每个机器周期的S5P2节拍对外部计数脉冲进行采样
            • 由于计数脉冲是在两个机器周期进行的,因此最高计数频率是振荡频率的1/24
          • 定时器方式
            • 定时器的输入来自内部时钟发生器电路,每个机器周期计数器加1,而1个机器周期有12个振荡周期,所以定时器的计数频率是晶振频率的1/12
            • 例子:若单片机的时钟频率是12MHz,则计数频率是1MHz,即每个微秒计数器加一
        • 工作方式控制寄存器TMOD
          • 在这里插入图片描述

          • GATE:门控位

            • GATE=0,由运行控制位TRX启动定时器
            • GATE=1,由外部中断请求信号和TRX共同启动定时器
          • C / T ‾ C/\overline{T} C/T:定时/计数模式选择位

            • 0:定时工作方式
            • 1:计数工作方式,计数脉冲来自外部输入引脚T0和T1,负跳变有效
          • M1M0:工作方式选择位

            • 00:方式0,13位定时/计数器
            • 01:方式1,16位定时/计数器
            • 10:方式2,8位自动重装载定时/计数器
            • 11:方式3,仅适用于T0
        • 定时器/计数器控制寄存器TCON(仅介绍TR0、TR1)
          • TR0、TR1:定时器/计数器运行控制位
            • 1:启动定时器/计数器工作
            • 0:停止定时器/计数器工作
        • T0与T1的工作方式
          • 方式0
            • 13位计数器
            • 由TLx的低5位和THx的高8位组成
            • TLx的低5位溢出时,向THx进位;THx计数溢出时,则置位溢出标志TFx
          • 方式1
            • 16位计数器
            • 由TLx的低8位和THx的高8位组成
            • TLx低8位溢出,则向THx进位;THx计数溢出,则置位溢出标志TFx
          • 方式2
            • 是能自动重装计数初值的8位计数器
            • TLx作8位计数器用,THx用以保存计数初值
            • TLx计数溢出时,将溢出位TFx置1,同时将保存在THx中的计数初值重新装入TLx,继续计数循环不止
            • 方式2可以自动循环计数,通常用在定时精度高的场合,例如作为串行口的波特率发生器使用
          • 方式3
            • 仅适用于T0
            • 方式3下,TH0和TL0变为两个独立的计数器
            • TL0占用全部的T0控制位,仍可具有定时/计数功能
            • TH0只能用于定时方式,运行控制位和溢出标志位则借用定时器T1的TR1和TF1
            • T0工作于方式3时,一般将定时器T1作为串行口波特率发生器或用于不需要中断的场合
        • 对输入信号的要求
          • 定时器模式下,输入信号内部时钟,每个机器周期产生一个计数脉冲
          • 计数器模式下,输入信号是外部信号,负跳变有效,每个机器周期检查一次外部信号的状态(外部输入信号的高、低电平至少保持一个机器周期)
        • T0与T1的初始化
          • 初始化步骤
            • 确定工作方式、操作模式、启动控制方式,并写入TMOD、TCON
            • 设置定时或计数器的初值,直接将初值写入TH0、TL0或TH1、TL1、TH2、TL2中
            • 根据需要开放CPU和定时/计数器的中断,即对IE和IP寄存器编程
            • 启动
              • 若要求软件启动,编程时对TCON中的TR0或TR1置位即可
              • 若要求外部中断引脚电平启动,则对TCON中的TR0或TR1置位后,还需给外引脚加启动电平
          • 初值的计算
            • 若设最大计数值为 2 n 2^n 2n,n为计数器位数,则
              • 方式0: n = 13 ,   2 n = 8192 n=13, \ 2^n=8192 n=13, 2n=8192
              • 方式1: n = 16 ,   2 n = 65536 n=16, \ 2^n=65536 n=16, 2n=65536
              • 方式2: n = 8 ,   2 n = 256 n=8, \ 2^n=256 n=8, 2n=256
              • 方式3: n = 8 ,   2 n = 256 n=8, \ 2^n=256 n=8, 2n=256(TH0、TL0为两个独立的计数器,各自最大的计数值均为256)
            • T0和T1定时器都是加一计数器,当加到最大值时产生溢出中断,因此计数器初值X的计算公式为: X = 2 n − 计 数 值 X=2^n-计数值 X=2n
            • 计数模式
              • 对外部脉冲进行计数,计数初值: X = 2 n − 计 数 值 X=2^n-计数值 X=2n
            • 定时模式
              • 对机器周期进行计数,故计数脉冲频率为 f c o n t = f o s c 12 f_{cont}=\cfrac{f_{osc}}{12} fcont=12fosc、计数周期 T = 1 f c o n t T=\cfrac{1}{f_{cont}} T=fcont1
              • 定时模式的初值 X = 2 n − 计 数 值 = 2 n − t T = 2 n − t × f o s c 12 X=2^n-计数值=2^n-\frac{t}{T}=2^n-\frac{t\times f_{osc}}{12} X=2n=2nTt=2n12t×fosc f o s c f_{osc} fosc单位是MHz,定时时间t的单位是 μ s \mu s μs

    定时器/计数器习题

    说明:这题是往年考试的一道试题,自己写的正确性没验证。
    8031 单片机系统,晶振为 6MHz。请编写程序,采用定时器 T0 的方式二,在 P1.0 输出一个周期250μs、占空比为 2:5 的方波(如下图):
    在这里插入图片描述
    (1)计算初值
    采用定时器方式,计数值 = t × f o s c 12 = 50 μ s × 6 M H z 12 = 25 t\times \frac{f_{osc}}{12}=50\mu s \times \frac{6MHz}{12}=25 t×12fosc=50μs×126MHz=25,每 50 μ s 50 \mu s 50μs产生一次中断
    初始值 X = 2 8 − 25 = 231 = E 7 H 2^8 - 25 = 231 = E7H 2825=231=E7H
    (2)编写程序

          ORG 0000H
          LJMP MAIN 
          ORG 000BH        ;T0的中断入口地址
          LJMP INT
    
          ORG 0100H
    MAIN: MOV SP,#60H
          MOV TMOD, #02H   ;0010
          MOV TH0, #0E7H
          MOV TL0, #0E7H   ;T0赋初值
          SETB EA          ;开总中断
          SETB ET0         ;允许T0中断
          SETB TR0         ;启动T0
          SETB P1.0
          CLR F0           ;F0=0时,输出100微秒的高电平;F0=1,输出低电平
          MOV R0, #02H     ;输出两个50微秒的高电平
    WAIT: AJMP WAIT        ;等待中断
    INT:  JB INT1
    	  SETB P1.0        ;P1.0输出高电平
          DJNZ R0, INT     ;若高电平维持时间没有达到100微秒则继续维持高电平
          SETB F0          ;F0=1,输出低电平
          MOV R0, #03H     ;维持的时间段(一个时间段为50微秒)个数
          RETI
    INT1: CLR P1.0         ;P1.0输出低电平
          DJNZ R0, INT1    ;若低电平维持时间没有达到150微秒则继续维持低电平
          CLR F0           ;F0=0,输出高电平
          MOV R0, #02H     ;维持的时间段(一个时间段为50微秒)个数
          RETI   
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    MCS-51的串行口

    笔记思维导图

    在这里插入图片描述

    笔记文字部分

    • MCS-51的串行口
      • 串行口的结构
        • 全双工的串行异步通信口
        • 两个独立的发送、接收缓冲器(使用同一字节地址,但在物理上是两个独立的缓冲器)
          • 发送缓冲器:只能写入,不能读出
          • 接收缓冲器:只能读出,不能写入
        • 串行口控制寄存器SCON(可位寻址)
          • SM1、SM0:串行口工作方式选择
            • 00:方式0,同步移位寄存器方式(用于扩展I/O口)
            • 01:方式1,8位异步收发,波特率可变(由定时器控制)
            • 10:方式2,9位异步收发,波特率为 f o s c 64 \cfrac{f_{osc}}{64} 64fosc f o s c 32 \cfrac{f_{osc}}{32} 32fosc
            • 11:方式3,9位异步收发,波特率可变(由定时器控制)
          • SM2:多机通信控制位
            • 在工作方式2和3中
              • 若SM2=1,当接收到第9位数据为1,才将接收到的前8位数据装入SBUF,并置位RI;否则丢弃接收到的数据
              • 若SM2=0,不论第9位数据是否为1,都将接收到的前8位数据装入SBUF,并置位RI
            • 在工作方式1中
              • 若SM2=1,则只有接收到有效停止位时,才置位RI
            • 在工作方式0中
              • 必须使SM2=0
          • REN:允许串行接收位
            • 1:允许;0:禁止
          • TB8:发送的第9位数据
            • 在工作方式2或3中,TB8为发送的第9位数据,可由软件置位或清零
            • 在双机通信中,TB8可作为奇偶校验位
            • 在多机通信中,TB8用来表示发送的是地址帧(TB8=1)还是数据帧(TB8=0)
          • RB8:接收到的第9位数据
            • 在工作方式2或3中,RB8存放接收到的第9位数据
            • 在工作方式1中,RB8是已接收的停止位
            • 在工作方式0中,RB8未使用
          • TI:发送中断标志
            • TI在一帧数据发送结束时由硬件置1,表示一帧数据发送结束,此时可向SBUF写入下一帧要发送的数据
            • TI可供软件查询,也可申请中断,但必须由软件清零
          • RI:接收中断标志
            • RI在接收完一帧有效数据时由硬件置1,表示一帧数据接收结束,并申请中断,要求CPU从接收SBUF取走数据
            • RI可供软件查询,RI必须由软件清零
        • 电源控制寄存器PCON(只能字节寻址,不能位寻址
          • SMOD(PCON.7):串行口波特率选择位
            • SMOD=1时,串行口波特率加倍。复位时SMOD=0
              • 方式1、3: 波 特 率 = 2 S M O D 32 × 定 时 器 T 1 溢 出 率 波特率 = \cfrac{2^{SMOD}}{32}\times 定时器T1溢出率 =322SMOD×T1
              • 方式2: 波 特 率 = f o s c × 2 S M O D 64 波特率=f_{osc}\times \frac{2^{SMOD}}{64} =fosc×642SMOD
          • GF1、GF0:通用标志位
          • PD:掉电方式位
          • IDL:休眠方式位
      • 串行口的工作方式
        • 方式0
          • 同步移位寄存器输入输出方式,常用于外界移位寄存器,以扩展I/O口
          • 8位数据为一帧,没有起始位和停止位,发送或接收时,低位在先
          • RXD:数据输入/输出端
          • TXD:同步脉冲输出端,每个脉冲对应一个数据位
          • 固定波特率 = f o s c / 12 f_{osc}/12 fosc/12
          • 发送过程
            • CPU执行将数据写入SBUF的指令,启动发送
            • 串行口开始将SBUF中的数据以 f o s c / 12 f_{osc}/12 fosc/12的波特率从RXD引脚输出,TXD引脚输出同步移位脉冲
            • 一帧发送结束,TI置1
          • 接收过程
            • 写入控制字SCON置方式0、REN=1、RI=0,启动接收
            • 串行口开始将RXD引脚的数据以 f o s c / 12 f_{osc}/12 fosc/12的波特率输入SBUF,TXD输出同步移位脉冲
            • 一帧接收完毕,RI置1
        • 方式1
          • 为异步串行通信方式
          • 10位数据为一帧,1个起始位,8个数据位,1个停止位,发送或接收时,低位在先
          • RXD:数据接收端
          • TXD:数据发送端
          • 波特率 = 2 S M O D 32 × 定 时 器 T 1 溢 出 率 \frac{2^{SMOD}}{32}\times 定时器T1溢出率 322SMOD×T1
          • 发送过程
            • CPU执行将数据写入SBUF的指令,启动发送
            • 串行口开始将SBUF中的数据以方式1的波特率从TXD引脚输出
            • 8位数据位发送完成,TI置1
          • 接收过程
            • REN=1时允许接收,数据从RXD引入,当检测到起始位时开始接收
            • 接收完一帧,若同时满足(1)RI=0;(2)SM2=0或停止位为1,则接收有效
            • 接收有效时,将接收的数据装入SBUF,停止位装入RB8,并置RI为1;否则丢弃接收到的数据,不置位RI
        • 方式2和3
          • 都是异步串行通信方式
          • 11位数据为一帧,1个起始位,8个数据位,1个第9位,1额停止位,发送或接收数据时,低位在先
          • RXD:数据接收端
          • TXD:数据发送端
          • 方式2的波特率 = f o s c × 2 S M O D 64 f_{osc}\times \frac{2^{SMOD}}{64} fosc×642SMOD
          • 方式3的波特率 = 2 S M O D 32 × 定 时 器 T 1 溢 出 率 \frac{2^{SMOD}}{32}\times 定时器T1溢出率 322SMOD×T1
          • 发送过程
            • 先根据通信协议设置TB8(第9位),然后CPU执行将8位数据写入SBUF的指令,启动发送
            • 串行口开始将SBUF中的8位数据和TB8以波特率从TXD引脚输出
            • TB8发送结束时,TI置1
          • 接收过程
            • REN=1时允许接收,数据从RXD引入,当检测到起始位时开始接收
            • 接收完一帧,若满足(1)RI=0;(2)SM2=0或第9位为1,接收有效
            • 接收有效时,将接收到的8位数据装入SBUF,第9位装入RB8,并置RI为1;否则丢弃接收到的数据,不置位RI
      • 波特率的制定方法
        • 串行口每秒发送或接收的位数称为波特率
        • 设发送一位所需时间为T,则波特率为1/T
          • 方式0:波特率 = f O S C / 12 f_{OSC}/12 fOSC/12
          • 方式1:波特率 = 2 S M O D 32 × 定 时 器 T 1 溢 出 率 \cfrac{2^{SMOD}}{32}\times 定时器T1溢出率 322SMOD×T1
          • 方式2:波特率 = f O S C × 2 S M O D 64 f_{OSC}\times \frac{2^{SMOD}}{64} fOSC×642SMOD
          • 方式3:波特率 = 2 S M O D 32 × 定 时 器 T 1 溢 出 率 \frac{2^{SMOD}}{32}\times 定时器T1溢出率 322SMOD×T1
        • 定时器T1产生波特率的计算
          • 通常定时器T1在作为波特率发生器时,采用工作方式2(自动装初值),即TL1为8位计数器,TH1存放重装初值,溢出率计算公式:定时器T1的溢出率 = f o s c / 12 256 − T H 1 \cfrac{f_{osc}/12}{256-TH1} 256TH1fosc/12
          • 因此串行方式1、3的波特率 = 2 S M O D 32 × f o s c 12 × ( 256 − T H 1 ) \cfrac{2^{SMOD}}{32}\times \cfrac{f_{osc}}{12\times (256-TH1)} 322SMOD×12×(256TH1)fosc
  • 相关阅读:
    M365 E5 Insider Risk Management详细部署方案
    21_ue4进阶末日生存游戏开发[行为树]
    Python 猫的 2023 年终回顾
    云原生K8S精选的分布式可靠的键值存储etcd原理和实践
    私藏干货分享:关于企业架构中如何进行平台化
    工业路由器网关的网络协议之NAT技术
    web网站学习 apache (一)
    使用Http请求实现数据的批量导入
    db2数据库配置
    linux下无sudo权限安装MatlabR2016
  • 原文地址:https://blog.csdn.net/qq_45800517/article/details/125612237