目录
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
串行方式的波特率
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位寄存器,各位都具有特殊含义 状态值可由硬件形成或由指令修改
CY(PSW.7)——进位标志 在进行加或减运算时,如果操作结果最高位有进位或借位时,CY由硬件置“1”,否则清“0”。 用途:1、可根据CY判断有无进位或借位;2、可作为位操作中的位累加器用。
AC(PSW.6)——辅助进位标志 在进行加或减运算时,如果操作结果的低四位数向高四位产生进位或借位时,将由硬件置“1”,否则清“0”。 用途:1、根据AC判断加减运算时有无半进位或半借位;2、在BCD码调整运算中要用到AC标志
F0(PSW.5)和 F1(PSW.1) ——用户标志位 用途: 可做为用户指定的状态标志
RS1(PSW.4)和RS0(PSW.3)——工作寄存器组指针 用途:用于指定CPU的当前工作寄存器组
OV(PSW.2) ——溢出标志 在有符号数加减运算或无符号数乘除运算中若有异常结果,OV硬件置1,否则硬件清0。 用途:判断运算的结果是否正确,正确 = 0;出错 = 1
P(PSW.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计数。
结构图与方式选择位
工作方式:T0有4种工作方式,T1有3种工作方式,每种工作方式都有定时和计数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的取值
|