单片机整理
8051单片机的引脚图
内存单元:
0000H:系统复位后PC值为0000H,一般0000H开始前三个单元放一个无条件转移指令0003H-0033H中断服务程序的入口地址:
0003H:外部中断0中断服务程序的入口地址
000BH:定时/计数器0中断服务程序的入口地址
0013H:外部中断1中断服务程序的入口地址
001BH:定时/计数器1中断服务程序的入口地址
0023H:串行口中断服务程序的入口地址
002BH:预留
0033H:LVD(内部低电压检测)中断服务程序的入口地址
特殊功能寄存器:
与运算相关
1、ACC---是累加器,通常用A表示
地址为E0H,复位值00H,自身带有全零标志Z,若A=0则Z=1;若A≠0则z=0。该标志常用作程序分枝转移的判断条件。
2、B--一个寄存器
地址为F0H,复位值00H,在做乘、除法时放乘数或除数,不做乘除法时,随你怎么用。
每个机器周期都有硬件来复位。改为用以累加器为1的位数是奇数还是偶数。若累加器A中为1位数是奇数,则P标志位置1,否则P标志位清0.在串行口通信中,此标志位具有重要的定义,用来传送奇偶校验位,以检验传输数据的可靠性,应用时将P 置入串行帧中的奇偶校验为即可。
(2) OV:溢出标志位
进行算术运算时,如果产生溢出,则由硬件将OV置1,可以理解为溢出为真,标识运算结果超出了目的寄存器A所能标识的有效数范围(-128~127),否则OV清0,可以理解为溢出为假。
(3) RS1、RS0:工作寄存器区选择
(4)F0:用户标志位
由用户置位或复位,可以作为一个用户自定义的状态标志
(5)AC:辅助进位标志
进行加法或减法运算时,若低4位向高4位有进位或借位时,AC将被元件置1,否则置0.AC位常用于十进制调整指令和压缩BCD运算等。
(6)CY:进位标志
进行算术运算时,由硬件置位或复位,表示运算过程中,最高位是否有进位或借位的状态,进行位操作时,CY被认为是位累加器,它的作用相当于CPU中的累加器A。
注意:PSW中的4个标志位P、OV、AC和CY 是由硬件根据指令的执行情况自动置位或复位的,一般用户不要轻易修改
指针类
1、SP:堆栈指针
8051单片机复位,SP默认07H即默认栈底为08H
2、DPTR(DPH、DPL)--数据指针
可以用它来访问外部数据存储器中的任一单元,如果不用,也可以作为通用寄存器来用,由我们自已决定如何使用。分成DPL(低8位)和DPH(高8位)两个寄存器。用来存放16位地址值,以便用间接寻址或变址寻址的方式对片外数据AM或程序存储器作64K字节范围内的数据操作。
与定时器/计数器相关
1、TH0、TL0:16位定时/计数器T0高低8位状态寄存器
TH1、TL1:16位定时/计数器T1高低8位状态寄存器
定时时间(微秒)=( M - T0(T1) ) * 系统时钟周期 * 12^( 1- T0x12(T1x12) )
M= 2^16 = 65536
系统采用12MHZ晶振,分频系数为12,即定时脉冲周期(机器周期)为1us,则T0(T1)的初值为:
T0(T1) = M-定时时间(微秒,即计数值)
注:1/N(秒)=N(HZ赫兹) 所以 12MHZ=1/(12*10^6) (秒)=1/12 us(微秒),即晶振周期例:12MHZ晶振做10毫秒定时计算:
T0(定时初值)=M-(10*10^3 us)=55536;
将55536化为16进制为0x D8F0,即T0=0xD8F0;
即:TH0=0xD8
TL0=0xF0
若24MHZ晶振做10毫秒定时计算:
T0(定时初值)=M-(2 * 10*10^3 us)=45536;
将45536化为16进制为0xB1E0,即T0=0xB1E0;
即:TH0=0xB1
TL0=0xE0
C//T=0,计时(内部定时器)
(3)GATE-门控位(可以不设置)定时操作开关控制位
GATE=0时,以运行控制位TRX(X=0,1)来启动定时器计数器的运行。
GATE=1时,用外中断引脚(/INT0或/INT1)上的高电平来启动定时器/计数器运行。
立波特率发生器作为波特率发生器;清零时,串行口在方式1、3时选择T1定时器作为波特率发生器。
(2)XRAM:XRAM=0允许访问内部扩展RAM,XRAM=1禁止访问内部扩展RAM
扩展了片外RAM或I/O时,应禁止访问内部RAM
(3)BRTx12:BRT定时器定时是脉冲分频系数控制位。置1时,BRT定时脉冲就是系统时钟信号;清0时,BRT定时计数脉冲为系统时钟周期(震荡周期)的12分频信号。
(4)BRTR:独立波特率发生的启动控制位。置1时,启动。
(5)UART_M0x6:串行口方式0波特率的分频系数控制位。清零时,串行口方式0波特率为系统时钟的12分频信号,置1时,串行口方式0波特率为系统时钟的2分频信号。(课本195页,BRT溢出率计算)
(6)T0x12(T1x12):S1BRS清0时,设置定时/计数器0(1)定时计数脉冲的分频系数。T0x12(T1x12)=0定时计数脉冲为系统时钟周期(震荡周期)的12倍,即12分频。T0x12(T1x12)=1,无分频,即T0(T1)定时脉冲就是系统时钟信号。
注:WAKE_CLKO、AUXR、BRT组合,课本161页
引脚为低电平,则置1 IE0,说明有中断请求,否则清0 IE0. 当IT0=1,即外部中断请求0设置为跳沿触发方式时,当第一个机器周期采样到/INT0为低电平时,则置1 IE0。IE0=1表示外部中断0正向CPU请求中断。当CPU响应该中断,转向中断服务程序时,由硬件清0 IE0.
(2)IT1-外部中断源1触发方式控制位。IT1=0,外部中断1程控为电平触发方式,当/INT1(P3.3)输入低电平时,置位IE1。
(3)IE0-外部中断请求0的中断请求标志位。
(4)IE1-外部中断请求1的中断请求标志位,其意义与IE0类似。
(5)TR1、TR0-计数运行控制位
TR1(TR0)=1,启动定时器/计数器工作
TR1(TR0)=0,停止定时器/计数器工作,该位可由软件置1或清0.
(6)TF0-片内定时器/计数器T0溢出中断请求标志位
T1:T1充许计数控制位,为1时充许T1计数。
T0:T0充许计数控制位,为1时充许T0计数。
当启动T0计数后,定时器/计数器T0从初值开始加1计数,当最高位产生溢出时,由硬件将TF0置1,向CPU申请中断,CPU响应TF0中断时,TF0清0,TF0也可以由软件
清0.
(7)TF1-片内的定时器/计数器T1的溢出中断请求标志位。
工作于常数自动再装入方式。当TCLK或CLK为1时,CP/L2被忽略,T2总是工作于常数自动再装入方式。
(2)C/T2:外部计数器/定时器选择位。C/T2=1时,T2为外部事件计数器,计数脉冲来自T2(P1.0);C/T2=0时,T2为定时器,振荡脉冲的十二分频信号作为计数信号。(3)T2:T2计数/定时控制位。T1为1时充许计数,为0时禁止计数。
(4)EXEN2:T2的外部中断充许标志。
(5)RCLK:串行接口的接收时钟选择标志位。RCLK=1时,T2工作于波特率发生器方式。
(6)TCLK:串行接口的发送时钟选择标志。TCLK=1时,T2工作于波特率发生器方式。(7)EXF2:定时器T2外部中断标志。EXEN2为1时,当T2EX(P1.1)发生负跳变时置1中断标志DXF2,EXF2必须由用户程序清“0”。
(8)TF2:T2溢出中断标志。TF2必须由用户程序清“0”。当T2作为串口波特率发生器时,TF2不会被置“1”。
注:下面对T2CON的D0、D2、D4、D5几位主要控制T2的工作方式,下面对这几位的组合关系进行总结
定时器/计数器的溢出率计算
T=Tc*(2n-Ta)=12Fosc*(2n-Ta) t:定时时间 Tc:机器周期 Fosc:振荡器频率 n:计数器的长度 Ta:初值
WDT溢出时间的计算方法:
WDT溢出时间=(12*预分频系数*32768)/时钟频率
(2)IDLE_WDT:IDLE模式(空闲模式)位,置1时,WDT在“空闲模式”计数。(3)CLR_WDT:看门狗清零位,置1时看门狗将重新计数。
启动后,硬件自动清零该位
(4)EN_WDT:看门狗允许位,置1时,看门狗启动。
(5)WDT_FLAG:看门狗溢出标志位,溢出时,该位由硬件置1,可用软件清零。
溢出率;清0时,不允许T0脚输出T0(P3.4)溢出脉冲。
(2)T1CLKO:置1时,允许T1脚输出T1(P3.5)溢出脉冲,输出时钟频率=1/2 T1溢出率;清0时,不允许T1脚输出T1(P3.5)溢出脉冲。
(3)BRTCLKO:置1时,允许P1.0脚输出时钟,输出时钟频率=1/2 BRT溢出率;清0时,不允许BRT在P1.0脚输出时钟。
(4)T0_PIN_IE:置1时,允许T1(P3.4)引脚的下降沿置位TF0标志,也也使能T0引脚唤醒单片机的空闲模式和停机模式。
(5)T1_PIN_IE:置1时,允许T1(P3.5)引脚的下降沿置位TF1标志,也使能T1引脚唤醒单片机的空闲模式和停机模式。
(6)RXD_PIN_IE:置1时,允许RXD/P3.0(RXD/P1.6)下降沿置位RI标志,也能使RXD唤醒停机模式和空闲模式。
8、WKTCH、WKTCL:内部停机唤醒专用定时器课本203页
与串行口相关
1
串行口工作在方式0时,接收完第8位数据时,RI由硬件置1.在其它工作方式中,串行口接收到停止位时,该位置1。RI=1表示一帧数据接收完毕,并申请中断,要求CPU 从接收SBUF取走数据。该位的状态也可供软件查询。RI必须由软件清0.
(2)TI-发送中断标志位
串行口工作在方式0时,串行发送第8位数据结束时由硬件置1.在其它工作方式中,串行口发送停止位的开始时置1.TI=1,表示一帧数据发送结束,可供软件查询,也可申请中断。CPU响应中断后,在服务程序中向SBUF写入要发送的下一帧数据。TI必须由软件清0.
(3)RB8:接收到的第9位数据,工作在方式2和3时,RB8存放接收到的第9位数据。在方式1,如果SM2=0,RB8是接收到的停止位。在方式0,不使用RB8。用于区别是地址还是数据。
(4)TB8:第9位发送的数据,多机通信时(方式2、方式3)TB8标明主机发送的是地址还是数据,TB8=0为数据,TB8=1为地址。TB8由指令置位或复位。
(5)REN:允许接收位。REN=1时允许接收,REN由指令置位或复位。REN=0 禁止串行口接收数据。
(6)SM2 :多级通信控制位。在方式2、方式3中用于多机通信控制。在方式2、方式3的接收状态中,若SM2=1,接收到第九位(RB8)为0时,舍弃接收到的数据,RI清0;RB8为1时将接收到的数据送接收SBUF中,将RI置1,对于方式1,接收到有效停止位时,激活RI;对于方式0,SM2应清0。
(7)SM0,SM1:串行口工作方式选择位。当电源控制寄存器MS0D0相关时用到FE
2、SBUF:串行口数据缓冲器
例: MOV SBUF,A
(2)PD:掉电方式控制位,PD=1,系统进入掉电(停机)模式。片内的外围结构均停MOV PCON,#00000010B
(3)GF0:通用标志0,用户可任意使用。
(4)GF1:通用标志1,用户可任意使用。
(4)POF:上电检测置1,记住是否是第一次工作
(5)LVDF:检测到低电压则LVDF=1;LVDF中断请求低电压标志由软件清零,与ELVD=1允许低电压对应
判断LVDF: MOV A,PCON
ANL A,#00100000B
JZ FY ;若FY=0,则LVDF不等于1
……
(6)SMOD0=1时,SCON寄存器中的SM0/FE用于帧错误检测,检测到一个无效停止位时,通过UART接收器设置该位,它必须由软件清零。SM0D0=0时,SCON寄存器中的SM0/FE 与SM1一起指定串行通信的工作方式
(7)SMOD:串行口波特率倍增系数选择位,影响方式1、2、3时串行通信的波特率。当SMOD=1时,串行口通信波特率加倍。系统复位默认为SMOD=0,串行口通信速度为基本波特率。(方式1波特率=2SMOD/32*定时器T1的溢出率)
4、AUXR:辅助寄存器(与计数器共用)
5、AUXR1:辅助寄存器1,其中AUXR_P1位用于串行口数据通道切换
(2)GF2:通用标志位
(3)UART_P1:清0时,工作在P3.0(RXD)与P3.1(TXD),与传统8051单片机相同;置1时,工作在P1.6(RXD)与P1.7(TXD)。
注:一般建议,用户将自己的工作串口设置在P1.6(RXD)与P1.7(TXD),将P3.0(RXD)与P3.1(TXD)作为ISP下载的专用通信口。
与中断管理有关
MCS-51复位以后,IE被清0,所有的中断请求被禁止EX0 EX0=0,禁止外部中断0中断
EX0=1,允许外部中断0中断
(2)ET0(IE.1)-定时器/计数器T0的溢出中断允许位
ET0=0,禁止T0溢出中断;
ET0=1,允许T0溢出中断
(3)EX1(IE.2)-外部中断1中断允许位
EX1=0,禁止外部中断1中断
EX1=1,允许外部中断1中断
(4)ET1(IE.3)-定时器/计数器T1的溢出中断允许位
ET1=0,禁止T1溢出中断;
ET1=1,允许T1溢出中断
(5)ES(IE.4)-串行口中断允许位
ES=0,禁止串行口中断;
ES=1,允许串行口中断;
(6)ET2(IE.5)-定时器/计数器T2的溢出中断允许位
ET2=0,禁止T2溢出中断;
ET2=1,允许T2溢出中断
(7)ELVD(IE.6):电压检测
(8)EA(IE.7)-中断允许总控制位
EA=0,CPU屏蔽所有的中断请求(CPU关中断);
EA=1,CPU开放所有中断(CPU开中断)
PX0=1,外部中断0定义为高优先级中断
PX0=0,外部中断0定义为低优先级中断
(2) PT0(IP.1)-定时器T0中断优先级控制位
PT0=1,定时器T0定义为高优先级中断;
PT0=0,定时器T0定义为低优先级中断
(3) PX1(IP.2)-外部中断1中断优先级控制位
PX1=1,外部中断1定义为高优先级中断
PX1=0,外部中断1定义为低优先级中断
(4) PT1(IP.3)-定时器T1中断优先级控制位
PT1=1,定时器T1定义为高优先级中断;
PT1=0,定时器T1定义为低优先级中断
(5) PS(IP.4)-串行口中断优先级控制位
PS=1,串行口定义为高优先级中断
PS=0,串行口定义为低优先级中断
(6) PT2(IP.5)-定时器T2中断优先级控制位
PT2=1,定时器T2定义为高优先级中断;
PT2=0,定时器T2定义为低优先级中断
MCS-51复位以后,IP的内容为0,各个中断源均为低优先级中断。
/INT0---T0---/INT1---T1---串行口(优先级由高到低)
3、TCON:定时计数控制器
4、SCON:串行口控制寄存器
5、PCON:电源控制寄存器
6、WAKE_CLKO:唤醒和时钟控制寄存器
与ISP/IAP有关的特殊功能寄存器
IAP_DATA:ISP/IAP数据寄存器
IAP_ADDRH:ISP/IAP地址寄存器高8位
IAP_ADDRL:ISP/IAP地址寄存器低8位
IAP_CMD:ISP/IAP命令寄存器
IAP_TRIG:ISP/IAP命令触发寄存器
IAP_CONTR:ISP/IAP控制寄存器
(2)CMD_FAIL:如果送了ISP/IAP命令,并对IAP_TRIG送5AH/A5H触发失败,则为1,须由软件清零。
(3)SWRST:置1时,产生软件系统复位,硬件自动清零;清0时,不操作。
(4)SWBS:软件选择从用户应用程序区启动(清0),还是从ISP监控程序区启动(置1)。要与SWRST直接配合才能实现。
例:MOV IAP_CONTR,#20H ;切换到用户程序区
MOV IAP_CONTR,#60H ;切换到ISP监控程序区
(5)IAPEN:ISP/IAP功能允许位;清0时,禁止;置1时,允许。
与并行口相关
1、P0、P1、P
2、P
3、P4--------输入输出口(I/O)寄存器
四个并行输入/输出口(I/O)的寄存器。它里面的内容对应着管脚的输出。
出
(2)RXD/INT:第二串口接收或INT输入
(3)TXD:第二串口发送
(2)RST:片外复位信号输入端
(2)P4.5:置1时,用作ALE所存信号,访问XRAM时起作用。
(2)P4.7引脚的功能选择是在ISP下载程序时进行选择的,可选择复位或I/O口P4.7,若选I/O口,单片机必须使用外部时钟。
2、4、8、16、32、64、128分频
汇编语言:CLK_DIV EQU 97H或CLK_DIV DATA 97H
C51:sfr CLK_DIV=0x97;
特殊功能寄存器SFR的名称和地址
常用的函数
INTRINS.H实现函数unsigned char _crol_(unsigned char a, unsigned char n) 可以使变量a循环左移n位。
单片机的指令助记符
MCS-51共有111条指令,可分为五类:
1.数据传送类指令(7种助记符)
MOV(英文为Move):对内部数据寄存器RAM和特殊功能寄存器SFR的数据进行传送;MOVC(Move Code)读取程序存储器数据表格的数据传送;(查表64K)
MOVX (Move External RAM) 对外部RAM的数据传送;(扩展+外部+64位)
XCH (Exchange) 字节交换;
XCHD (Exchange low-order Digit) 低半字节交换;
PUSH (Push onto Stack) 入栈;
POP (Pop from Stack) 出栈;
2.算术运算类指令(8种助记符)
ADD(Addition) 加法;
ADDC(Add with Carry) 带进位加法;
SUBB(Subtract with Borrow) 带借位减法;
DA(Decimal Adjust) 十进制调整;
INC(Increment) 加1;
DEC(Decrement) 减1;
MUL(Multiplication、Multiply) 乘法;
DIV(Division、Divide) 除法;
3.逻辑运算类指令(10种助记符)
ANL(AND Logic) 逻辑与;
ORL(OR Logic) 逻辑或;
XRL(Exclusive-OR Logic) 逻辑异或;
CLR(Clear) 清零;
CPL(Complement) 取反;
RL(Rotate left) 循环左移;
RLC(Rotate Left throught the Carry flag) 带进位循环左移;
RR(Rotate Right) 循环右移;
RRC (Rotate Right throught the Carry flag) 带进位循环右移;
SWAP (Swap) 低4位与高4位交换;
(4)控制转移类指令(17种助记符)
ACALL(Absolute subroutine Call)子程序绝对调用;
LCALL(Long subroutine Call)子程序长调用;
RET(Return from subroutine)子程序返回;
RETI(Return from Interruption)中断返回;
SJMP(Short Jump)短转移;
AJMP(Absolute Jump)绝对转移;
LJMP(Long Jump)长转移;
CJNE (Compare Jump if Not Equal)比较不相等则转移;
DJNZ (Decrement Jump if Not Zero)减1后不为0则转移;
JZ (Jump if Zero)结果为0则转移;
JNZ (Jump if Not Zero) 结果不为0则转移;
JC (Jump if the Carry flag is set)有进位则转移;
JNC (Jump if Not Carry)无进位则转移;
JB (Jump if the Bit is set)位为1则转移;
JNB (Jump if the Bit is Not set) 位为0则转移;
JBC(Jump if the Bit is set and Clear the bit) 位为1则转移,并清除该位;NOP (No Operation) 空操作;
5.位操作指令(1种助记符)
SETB(Set Bit) 位置1。
BIT 位定义