当前位置:网站首页>单片机原理期末复习笔记
单片机原理期末复习笔记
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
- 串行口的结构
边栏推荐
- MySQL导入SQL文件及常用命令
- [untitled]
- 飞桨EasyDL实操范例:工业零件划痕自动识别
- Day-24 UDP, regular expression
- 【学习笔记】线段树选做
- HZOJ #240. 图形打印四
- What kind of methods or functions can you view the laravel version of a project?
- ISPRS2021/遥感影像云检测:一种地理信息驱动的方法和一种新的大规模遥感云/雪检测数据集
- Go language learning notes - structure
- Enterprise custom form engine solution (XII) -- experience code directory structure
猜你喜欢
2022a special equipment related management (boiler, pressure vessel and pressure pipeline) simulated examination question bank simulated examination platform operation
MATLAB中polarscatter函数使用
leecode3. 无重复字符的最长子串
2022 practice questions and mock examination of the third batch of Guangdong Provincial Safety Officer a certificate (main person in charge)
.Net下极限生产力之efcore分表分库全自动化迁移CodeFirst
3D content generation based on nerf
10 张图打开 CPU 缓存一致性的大门
Leetcode brush question: binary tree 24 (the nearest common ancestor of binary tree)
2022 polymerization process test question simulation test question bank and online simulation test
Leetcode skimming: binary tree 27 (delete nodes in the binary search tree)
随机推荐
What kind of methods or functions can you view the laravel version of a project?
自定义线程池拒绝策略
@Resource和@Autowired的区别?
Four functions of opencv
在字符串中查找id值MySQL
Common text processing tools
How to reset Google browser? Google Chrome restore default settings?
MySQL导入SQL文件及常用命令
[untitled]
Awk of three swordsmen in text processing
将数学公式在el-table里面展示出来
Steps of building SSM framework
Aosikang biological sprint scientific innovation board of Hillhouse Investment: annual revenue of 450million yuan, lost cooperation with kangxinuo
JNA学习笔记一:概念
详细介绍六种开源协议(程序员须知)
测试下摘要
服务器到服务器 (S2S) 事件 (Adjust)
【Presto Profile系列】Timeline使用
Query whether a field has an index with MySQL
About the problem of APP flash back after appium starts the app - (solved)