当前位置:网站首页>单片机原理期末复习笔记
单片机原理期末复习笔记
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×B→BA
- 除法: A ÷ B → A ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ B A\div B\rightarrow A······ B A÷B→A⋅⋅⋅⋅⋅⋅B
- 作为通用寄存器或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):奇偶标志位
- ALU
- 控制器
- PC
- 可对64KB的程序存储器直接寻址(PC16位)
- 对用户透明
- 程序地址寄存器
- IR
- 指令译码器ID
- 时序控制电路
- PC
- 运算器
- 存储器
数据存储器RAM
- 内部数据存储器
- 8031有128byte,地址空间 00 H ∼ 7 F H 00H\sim 7FH 00H∼7FH
- 8032有256byte,地址空间 00 H ∼ 7 F H 00H\sim 7FH 00H∼7FH和 80 H ∼ 0 F F H 80H\sim 0FFH 80H∼0FFH(与SFR地址重叠)
- 寻址:对片内高区128B( 80 H ∼ 0 F F H 80H\sim 0FFH 80H∼0FFH)只能用寄存器间接寻址,对特殊功能寄存器区必须用直接寻址
- 外部数据存储器
- 片外可扩展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 80H∼0FFH共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 P0∼P3
- 特殊功能寄存器 P 0 ∼ P 3 P_0\sim P_3 P0∼P3分别是I/O端口 P 0 ∼ P 3 P_0\sim P_3 P0∼P3的锁存器
- 寄存器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
- P 0 P_0 P0
- 一个串行口
- 两个16位定时器(8032有3个)
- 中断系统
MCS-51指令系统
指令表
此图来自课本
- CPU
指令系统习题
- 已知执行下列指令前,(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
- 假设(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中断
- 中断允许寄存器IE
- 中断响应条件
- 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:停止定时器/计数器工作
- TR0、TR1:定时器/计数器运行控制位
- 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作为串行口波特率发生器或用于不需要中断的场合
- 方式0
- 对输入信号的要求
- 定时器模式下,输入信号内部时钟,每个机器周期产生一个计数脉冲
- 计数器模式下,输入信号是外部信号,负跳变有效,每个机器周期检查一次外部信号的状态(外部输入信号的高、低电平至少保持一个机器周期)
- 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−计数值=2n−Tt=2n−12t×fosc( f o s c f_{osc} fosc单位是MHz,定时时间t的单位是 μ s \mu s μs)
- 若设最大计数值为 2 n 2^n 2n,n为计数器位数,则
- 初始化步骤
- 工作方式
- T0与T1的结构
定时器/计数器习题
说明:这题是往年考试的一道试题,自己写的正确性没验证。
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 28−25=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
- 在工作方式2和3中
- 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必须由软件清零
- SM1、SM0:串行口工作方式选择
- 电源控制寄存器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
- SMOD=1时,串行口波特率加倍。复位时SMOD=0
- GF1、GF0:通用标志位
- PD:掉电方式位
- IDL:休眠方式位
- SMOD(PCON.7):串行口波特率选择位
- 串行口的工作方式
- 方式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
- 方式0
- 波特率的制定方法
- 串行口每秒发送或接收的位数称为波特率
- 设发送一位所需时间为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} 256−TH1fosc/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×(256−TH1)fosc
- 串行口的结构
边栏推荐
- 《开源圆桌派》第十一期“冰与火之歌”——如何平衡开源与安全间的天然矛盾?
- HZOJ #235. Recursive implementation of exponential enumeration
- MySQL入门尝鲜
- Adopt a cow to sprint A shares: it plans to raise 1.85 billion yuan, and Xu Xiaobo holds nearly 40%
- 《ASP.NET Core 6框架揭秘》样章[200页/5章]
- 飞桨EasyDL实操范例:工业零件划痕自动识别
- ORACLE进阶(五)SCHEMA解惑
- . Net ultimate productivity of efcore sub table sub database fully automated migration codefirst
- Leetcode skimming: binary tree 21 (verifying binary search tree)
- @What is the difference between resource and @autowired?
猜你喜欢
10 张图打开 CPU 缓存一致性的大门
Practical example of propeller easydl: automatic scratch recognition of industrial parts
About how appium closes apps (resolved)
认养一头牛冲刺A股:拟募资18.5亿 徐晓波持股近40%
TPG x AIDU|AI领军人才招募计划进行中!
飞桨EasyDL实操范例:工业零件划痕自动识别
3D content generation based on nerf
About the problem of APP flash back after appium starts the app - (solved)
将数学公式在el-table里面展示出来
MySQL入门尝鲜
随机推荐
Layer pop-up layer closing problem
Cmu15445 (fall 2019) project 2 - hash table details
【学习笔记】zkw 线段树
学习突围2 - 关于高效学习的方法
Unity build error: the name "editorutility" does not exist in the current context
2022-07-07 Daily: Ian Goodfellow, the inventor of Gan, officially joined deepmind
Aosikang biological sprint scientific innovation board of Hillhouse Investment: annual revenue of 450million yuan, lost cooperation with kangxinuo
《开源圆桌派》第十一期“冰与火之歌”——如何平衡开源与安全间的天然矛盾?
人均瑞数系列,瑞数 4 代 JS 逆向分析
How to continue after handling chain interruption / sub chain error removed from scheduling
10 张图打开 CPU 缓存一致性的大门
[crawler] avoid script detection when using selenium
【无标题】
RecyclerView的数据刷新
. Net ultimate productivity of efcore sub table sub database fully automated migration codefirst
What are the benefits of ip2long?
Day-24 UDP, regular expression
事务的七种传播行为
MySQL导入SQL文件及常用命令
Test next summary