当前位置:网站首页>单片机原理期末复习笔记

单片机原理期末复习笔记

2022-07-07 11:11:00 10000hours

说明:

  • 参考内容:《单片机原理及应用(第三版)》 张毅刚 ; 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

因此执行后,(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

执行后(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      

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   

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
原网站

版权声明
本文为[10000hours]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_45800517/article/details/125612237