单片机_微总结

目录

51单片机的9个内部资源 

51单片机的结构图

四个I/0口

介绍部分SFR

B寄存器

​累加器A(Accumulator——A或ACC) 

程序状态字寄存器(Program State Word——PSW) 

中断优先级控制寄存器IP

中断允许控制寄存器IE

串行控制寄存器SCON

定时/计数器方式选择TMOD

定时/计数器控制寄存器TCON

电源控制及波特率选择PCON

微总结

比较定时计数器的4种方式

比较RS1 RS0、M1 M0与SM0 SM1

串行方式的波特率


51单片机的9个内部资源 

1个8位中央处理器(CPU)——,可以见“2.2.1MCS-51单片机的内部结构”,通常是单核的,它会使用8位来存储数据,但是会用16位(两个8位)来存储地址
1个片内振荡器和时钟电路——可以见“2.3.2 时钟电路
4KB片内程序存储器(ROM)——可以见“2.2.2 程序存储器”,4KB的空间可以用十六进制0~0FFFH来表示,这只是片内ROM,空间不够可以在外面添加
256字节的片内RAM——可以见“2.2.3 数据存储器”,256字节的空间可以用十六进制0~0FFH来表示,这只是片内RAM,空间不够可以在外面添加;这个256字节的片内RAM分为两个部分:前128B和后128B,其中包含着特殊功能存储器SFR
2个16位定时/计数器T/C(T0、T1)——可以见“第6章 单片机的定时/计数器”,分为定时器和计数器,其中定时器:多为12MHz,也可以为6MHz、24MHz等,甚至可以为11.0592MHz;计数器:通常是受时沿影响;52系列的还有T2
可寻址64KB外部程序存储器和64KB数据存储空间的控制电路——64KB的空间可以用十六进制0~0FFFFH来表示,是使用16位来存储地址
4个8位双向I/O口——可以见“2.4 并行I/O口”,P0~P3
1个全双工串行口UART——可以见“第7章 单片机的串行口及应用
5个中断源INT——可以见“第5章 单片机的中断系统”,有2个外中断和3个内中断,其中外部中断可以通过按键来进行,内部中断可以通过串行口和2个定时/计数器来进行

51单片机的结构图

四个I/0口

介绍部分SFR

B寄存器

寄存器B称为辅助寄存器,它是为乘法和除法指令而设置的。
在乘法运算时,累加器A和寄存器B在乘法运算前存放乘数和被乘数,运算完,通过寄存器B和累加器A存放结果。
除法运算前,累加器A和寄存器B存入被除数和除数,运算完用于存放商和余数。

​累加器A(Accumulator——A或ACC) 

存放操作数中间运算结果的寄存器

8位寄存器,简称为A,通过暂存器与ALU相连
其值可由指令修改
是最繁忙的寄存器

 

程序状态字寄存器(Program State Word——PSW) 

——存放程序运行过程中的各种状态信息的寄存器

存放程序运行过程中的各种状态信息的寄存器
8位寄存器,各位都具有特殊含义
状态值可由硬件形成或由指令修改

CYPSW.7——进位标志
在进行加或减运算时,如果操作结果最高位有进位或借位时,CY由硬件置“1”,否则清“0”。
用途:1、可根据CY判断有无进位或借位;2、可作为位操作中的位累加器用。

ACPSW.6——辅助进位标志
在进行减运算时,如果操作结果的低四位数向高四位产生进位或借位时,将由硬件置“1”,否则清“0”。
用途:1、根据AC判断加减运算时有无半进位或半借位;2、在BCD码调整运算中要用到AC标志

F0PSW.5F1PSW.1——用户标志位
用途: 可做为用户指定的状态标志

RS1PSW.4RS0PSW.3——工作寄存器组指针
用途:用于指定CPU的当前工作寄存器组

OVPSW.2——溢出标志
有符号数加减运算无符号数乘除运算中若有异常结果,OV硬件置1,否则硬件清0。
用途判断运算的结果是否正确,正确 = 0;出错 = 1

 PPSW.0——奇偶标志位
该位始终跟踪累加器A中含“1”个数的奇偶性
如果A中有奇数个“1”,则P置“1”,否则置“0”
举例    若A =1001 1111,则P=0
            若A =1100 0001,则P=1
用途:串行通讯中的数据校验,判断是否存在传输错误

中断优先级控制寄存器IP

中断优先级寄存器(Interrupt Priority Registers),字节地址为B8H,可位寻址。 

中断允许控制寄存器IE

中断允许寄存器(Interrupt Enable Register),字节地址为A8H,可位寻址
中断请求标志(在TCON中)硬件置1后,能否得到CPU的响应取决于CPU是否允许中断(在IE中)。

【注意】
单片机复位后IE初值为0——默认为禁止所有中断。
这里的位5和位6可以随意取值,取值与单片机无关。

串行控制寄存器SCON

串口控制寄存器(Serial control register),字节地址为98H,可位寻址。SCON中只有2位与中断有关。它只与串行口有关。

RI和TI——中断通信中断请求标志

RB8——接收数据第9位(D8)

TB8——发送数据第9位(D8)

REN——允许接收控制位

    1:允许接收

    0:禁止接收

SM2——多机通信控制位

    1:多机通信

    0:点对点通信

SM0和SM1——串行通信工作方式定义位(具体分析见本专栏的文章“单片机_第7章 单片机的串行口及应用”)

串行通信工作方式选择
SM0 SM1 方式 功能说明
0 0 0 8位数据异步通信方式——串并转换
0 1 1 10位数据异步通信方式——无可编程位
1 0 2 11位数据异步通信方式——时钟频率固定
1 1 3 11位数据异步通信方式——波特率可变

【注意】TI和RI虽然是2个中断请求标志位,但在SCON之后经或门电路合成为1个信息,统一接受中断管理。

            强调:TI和RI硬件置1后,需用软件方式清零(查询或中断法皆如此)
            SM2、TB8、RB8主要用于多机通讯或数据校验
            复位后默认状态:串行方式0,禁止接收,SBUF发为满,SBUF收为空,… 

定时/计数器方式选择TMOD

TMOD是定时方式控制寄存器(Timer/Counter Mode Control),字节地址为89H(不能位寻址),其定义格式如图。

TMOD的低4位为T0的方式字,高4位为T1的方式字。
TMOD不能位寻址,必须整体赋值
M1和M0:工作方式选择位
        两位可形成4种编码,对应4中工作方式(可以见下图)
C/T:定时和外部事件计数方式选择位*(C<counter,计数器>是高电平有效,T<timer,定时器>(上面有个横杠,电脑上打不出来)是低电平有效)
        0定时器方式。定时器以振荡器输出时钟脉冲的12分频信号(即机器周期)作为计数信号。定时器从初值开始在每个机器周期内自动加1,直至溢出。
        1外部事件计数器方式,以外部引脚的输入脉冲作为计数信号。计数器在外部脉冲信号的负跳变时使计数器加1,直至溢出。
GATE:门控位(具体介绍下面有)
        0:定时器计数不受外部引脚输入电平的控制,只受定时器运行控制器(TR0、TR1)控制
        1:定时器的计数受定时器运行控制位(TR0、TR1)和外部引脚输入电平(INT0、INT1)的控制。其中TR0和INT0控制T0的运行,TR1和INT1控制T1的运行。
        故通常令GATE=0,且无论GATE取何值时,都与TRx有关。

门控位的介绍
GATE为0时,Tx的技术仅由TRx控制,TRx为1时允许Tx计数,TRx为0时禁止Tx计数;
GATE为1时,仅当TRx为1且INTx输入为高电平时才允许Tx计数,TRx为0或INTx输入低电平都将禁止Tx计数。

 结构图与方式选择位

工作方式T04种工作方式,T13种工作方式,每种工作方式都有定时和计数2种方式,故共有14种组合关系。(因为T0的方式3借用了T1)

 

举例
例1:设置T0为定时方式1,允许TR0启动,T1为计数方式0,允许INT1启动,则   TMOD = 1100 0001B =0xc1

解析:根据TMOD的每一位的含义,有:
 T0为定时方式1:D2=0,M1M0=01

 T0允许TR0启动:D3=0

 T1为计数方式0:D6=1,M1M0=00

 T1允许INT1启动:D7=1
因此,TMOD为1100 0001,即TMOD=0xC1。

(注意TMOD只能以字节的形式给出,它不可以位寻址)

例2:系统上电默认值为TMOD = 0,则默认状态应为:T0和TI均为定时方式0,允许TR0、TR1启动。

定时/计数器控制寄存器TCON

定时/计数器的控制寄存器(Timer/Counter Control Register),字节地址为88H,可位寻址。该字节寄存器有6个位寄存器与中断有关,2个位寄存器与定时/计数器有关。

位7(TF1):定时器T1溢出标志位
       T1溢出时,硬件自动使TF1置1,并向CPU申请中断。当进入中断服务程序时,硬件自动将TF1清0。TF1也可以用软件清0。
位6(TR1):定时器T1运行控制位
        由软件置位和清0
        GATE为0时,T1的技术仅由TR1控制,TR1为1时允许T1技术,TR1为0时禁止T1计数;GATE为1时,仅当TR1为1且INT1输入为高电平时才允许T1技术,TR1为0或INT1输入低电平都将禁止T1计数。
位5(TF0):定时器T0溢出标志位。其功能和操作情况同位7
位4(TR0):定时器T0运行控制位。其功能和操作情况同位6
位3~0:外部中断INT1和INT0请求及请求方式控制位,其功能见第5章 

【注意】区分“中断请求标志位IEx、TFx、TI、RI”与“中断触发信号选择位ITx
中断请求标志:当中断源的突发情况出现时,单片机某些特殊功能寄存器的特殊标志位将被硬件方式自动修改,这些特殊标志位称为中断请求标志。

中断触发信号选择:ITx=0时,电平有效;ITx=1时,脉冲有效,且只有外部中断有ITx。

【注意】区分定时计数器溢出标志位TFx定时计数器启动控制位TRx
定时计数器溢出标志位TFx:硬件自动修改,与上面的“中断请求标志”介绍同

定时计数器启动控制位TRx:根据TMOD中GATE的取值来决定是否作用于定时器的计数

电源控制及波特率选择PCON

PCON为电源控制寄存器(Power Control Register),字节地址为87H不可位寻址

 

SMOD——波特率选择位

    1:波特率在原有基础上加倍(16分频)

    0:波特率保持原来数值(32分频)

位4~位6——没有定义

GF1和GF0——通用标志位

PD——掉电控制位

TDL——空闲控制位

SMOD可使由T1(T1的方式2)产生的波特率时钟频率加倍
复位后默认状态:波特率不加倍
通信时钟波特率原理

T1溢出脉冲有两种分频路径:16分频或32分频;

SMOD是决定分频路径的逻辑开关;波特率取决于T1的定时参数(a,n,fosc)和SMOD参数。
串口通信在不同工作方式时的波特率是不同的,上述波特率只适用于方式1和方式3。

微总结

对于单片机:
EA(IE^7)——中断允许总控制位

对于外部中断0(即INT0):
IT0(TCON^0)——中断触发方式控制位
IE0(TCON^1)——中断请求标志位
EX0(IE^0)——外部中断0中断允许位
PX0(IP^0)——外部中断0中断优先级控制位

对于外部中断1(即INT1):
IT1(TCON^2)——中断触发方式控制位
IE1(TCON^3)——中断请求标志位
EX1(IE^2)——外部中断1中断允许位
PX1(IP^2)——外部中断1中断优先级控制位

对于定时/计数器0(即T0):
TR0(TCON^4)——定时器T0运行控制位
TF0(TCON^5)——溢出中断请求标志位,定时器T0溢出标志位
ET0(IE^1)——定时/计数器T0中断允许位
PT0(IP^1)——定时/计数器T0中断优先级控制位
TMOD低4位——门控位GATE、定时和外部事件计数方式位C/T、工作方式选择位M0与M1

对于定时/计数器1(即T1):
TR1(TCON^6)——定时器T1运行控制位
TF1(TCON^7)——溢出中断请求标志位,定时器T1溢出标志位
ET1(IE^3)——定时/计数器T1中断允许位
PT1(IP^3)——定时/计数器T1中断优先级控制位
TMOD高4位——门控位GATE、定时和外部事件计数方式位C/T、工作方式选择位M0与M1

对于串行口:
RI(SCON^0)——串行口接收中断请求标志位
TI(SCON^1)——串行口发送中断请求标志位
RB8(SCON^2)——接收数据第9位(D8)
TB8(SCON^3)——发送数据第9位(D8)
REN(SCON^4)——允许接收控制位
SM2(SCON^5)——多机通信控制位
SM0(SCON^7)和SM1(SCON^6)——串行通信工作方式定义位
ES(IE^4)——串行口中断允许位
PS(IP^4)——串行口中断优先级控制位
SMOD(PCON^7)——波特率选择位
GF1(PCON^3)和GF0(PCON^2)——通用标志位
PD(PCON^1)——掉电控
TDL(PCON^0)——空闲控制位

比较定时计数器的4种方式

具体见同专栏的的文章“单片机_第6章 单片机的定时/计数器

比较RS1 RS0、M1 M0与SM0 SM1

RS1 RS0(用于选择片内RAM的工作寄存器的组别)

M1 M0(用于选择定时计时器的工作方式)

SM0 SM1(用于选择串行口的工作方式)

【注意】SM0SM1是0在前面 

串行方式的波特率

 

实验细节

P0口有时候需要上拉电阻
与LED相连的电阻的阻值不能太大,否则电流很小,会使LED不工作的
流水灯代码必须要进行延时
位码要先于赋值段码
行列式键盘需要上拉电阻
使用动态数码管时,显示的该位为0(共阳极)时,进行显示
cc是共阴极数码管,ca是共阳极数码管
中断请求标志位IEx、TFx、TI、RI
    中断控制的不用管,它们由硬件自动置1、清0

    但是查询方式的必须软件手动清0,且注意代码“while(!TFx);”
中断过程中的定时计数器的TRx需放在其他SFR初值的最后以及while(1);之前
中断过程中的数码管显示放在①“while(1)”里面或者②在主函数和中断函数中
在中断之前,注意晶振频率的取值以及初值的计算
在串行口运行中,注意波特率相关的初值a的取值

猜你喜欢

转载自blog.csdn.net/qq_59467552/article/details/125042125