机器周期 单片机访问一次存储器的时间,称之为一个机器周期,这是一个时间基准。 一个机器周期包括12个时钟周期。 如果一个单片机选择了12MHZ晶振,它的时钟周期是1/12us,它的一个机器周期是12x(1/12)us,也就是1US。
S5P2 每个 时钟周期 (以后常称状态S)有两个节拍即相位P1和P2,CPU就以两相时钟P1和P2为基本节拍指挥8051各们部件协调工作。 因此,S5P2指的就是第5个时钟周期的相位2(后半拍)。
S6 第6个时钟周期
PC = progammer counter //程序计数器
ACC = accumulate //累加器
PSW = progammer status word //程序状态字
SP = stack point //堆栈指针
DPTR = data point register //数据指针 寄存器
IP = interrupt priority //中断优先级
IE = interrupt enable // 中断使能
TMOD = timer mode //定时器 方式 (定时器/计数器 控制寄存器)
ALE = alter (变更,可能是)
PSEN = progammer saving enable //程序存储器使能(选择外部程序存储器的意思)
EA = enable all(允许所有中断)完整应该是 enable all interrupt PROG = progamme (程序)
SFR = special funtion register //特殊功能寄存器
TCON = timer control //定时器控制
PCON = power control //电源控制
MSB = most significant bit//最高有效位
LSB = last significant bit//最低有效位
CY = carry //进位(标志)
AC = assistant carry //辅助进位
OV = overflow //溢出
ORG = originally //起始来源
DB = define byte //字节定义
EQU = equal //等于
DW = define word //字定义
E = enable //使能
OE = output enable //输出使能
RD = read //读
WR = write //写
中断部分:
INT0 = interrupt 0 //中断0
INT1 = interrupt 1//中断1
T0 = timer 0 //定时器0
T1 = timer 1 //定时器1
TF1 = timer1 flag //定时器1 标志 (其实是定时器1中断标志位)
IE1 = interrupt exterior //(外部中断请求,可能是)
IT1 = interrupt touch //(外部中断触发方式,可能是)
ES = enable serial //串行使能
ET = enable timer //定时器使能
EX = enable exterior //外部使能(中断)
PX = priority exterior //外部中断优先级
PT = priority timer //定时器优先级
PS = priority serial //串口优先级
寄存器部分:
SFR:special funtion register //特殊功能寄存器(片内RAM 80H~FFH)
ACC:accumulate //累加器
PSW:progammer status word //程序状态字
SP:stack point //堆栈指针
DPL,DPH:DPTR(data point register //数据指针寄存器)的低8位和高8位
IE:interrupt enable // 中断使能
IP:interrupt priority //中断优先级
PCON:power control //电源控制
SCON:serial control //串行口控制
SBUF:serial buffer //串行数据缓冲
TCON:timer control //定时器控制
TMOD:timer mode //定时器方式
PSW:
CY:carry (psw.7) //进位(标志)
AC:auxiliary carry (psw.6) //辅助进位
F0: (psw.5) //用户自定义标志位
RS1,RS0:register select (psw.4,psw.3)//工作寄存器组选择位
OV:overflow (psw.2) //溢出
P:parity (psw.0) //奇偶校验位
IE:
EA:Enable All Interrupt //CPU开/关中断控制位
ET1:Enable Timer //定时器2溢出中断允许位
ES:Enable Serial Port //串行口中断允许位
EX:Enable External //外部中断1的中断允许位
IP:
PS:Priority Serial //串口优先级
PT:Priority Timer //定时器优先级
PX:Priority External //外部中断优先级
SCON:
RI:Receive Interrupt //串行口接收中断请求标志位
TI:Transmit Interrupt //串行口发送中断请求标志位
TCON:
TF1:Timer1 Overflow Flag //定时器1溢出中断请求标志
TR1:Timer1 Run //定时器1启动控制位
IE1:Interrupt Edge //外部中断1请求标志位
IT1:Interrupt Type //外部中断1触发方式选择位
8051引脚:
RST:RESET //复位,重启
P3: RXD:Received eXchange Data (10,p3.0)//接收串行数据
TXD:Transmit eXchange Data (11,p3.1)//发送串行数据
INT0:interrupt 0 (12,p3.2)//中断0
INT1:interrupt 1 (13,p3.3)//中断1
T0:timer 0 (14,p3.4)//定时器0
T1:timer 1 (15,p3.5)//定时器1
RD:ReaD (16,p3.6)//外部数据存储器(RAM)的读信号
WR:WRite (17,p3.7)//外部数据存储器(RAM)的写信号
XTAL2,XTAL1:External Crystal Oscillator (18,19) //外部晶体振荡器
PSEN:Program Store Enable (29) //程序存储器(ROM)使能
ALE:Address Latch Enable (30) //地址锁存
EA:External Address Enable (31) //外部程序存储器(ROM)地址允许
其它:
OE:output enable //输出使能
MSB = most significant bit//最高有效位
LSB = last significant bit//最低有效位
ORG = originally //起始来源
DB = define byte //字节定义
EQU = equal //等于
DW = define word //字定义
CLKOUT:Clock out,时钟输出
BUSWDITH:总线宽度
Vref:参考电压(带ADC的单片机中有的)
HSO:High Speed Output,高速输出
HSI:High Speed Input:高速输入
INST:Instruction,指令
READY就绪,总线中的就绪信号或引脚
NMI:No Mask Interruput (Input):不可屏蔽的中断请求(输入)
BHE:Bank High Enable:存储器的高位允许,如在80286系统中RAM的组织为16位的,分为高8位和低8位数据,分别的控制信号为BHE和BLE
MCS-51指令
(1)数据传送类指令(7种助记符)
助记符
英文注释
功能
MOV Move 对内部数据寄存器RAM和特殊功能寄存器SFR的数据进行传送
MOVC Move Code 读取程序存储器数据表格的数据传送
MOVX Move External RAM 对外部RAM的数据传送
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 中断返回
JMP Jump Indirect
SJMP Short Jump 短转移
AJMP Absolute Jump 绝对转移
LJMP Long Jump 长转移
CJNE Compare and Jump if Not Equal 比较不相等则转移
DJNZ Decrement and 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) B位为1则转移
JNB Jump if the Bit is Not set B位为0则转移
JBC Jump if the Bit is set and Clear the bit 位为1则转移,并清除该位
NOP No Operation 空操作
(5)位操作指令(1种助记符)
SETB Set Bit 置位
ORG Origin
DB Define Byte
DW Define Word
EQU Equal
DATA Data
XDATA External Data
BIT Bit
END End
51外部引脚
Reset 复位信号引脚
RxD (10–P3.0) Receive Data 串口接收端
TxD (11–P3.1) Transmit Data 串口发送端
INT0(————) (12–P3.2)
Interrupt0 外部中断0信号输入引脚
INT1(————) (13–P3.3)
Interrupt1 外部中断1信号输入引脚
T0 (14–P3.4)
Timer0 定时/计数器0输入信号引脚
T1 (15–P3.5)
Timer1 定时/计数器1输入信号引脚 WR(———) (16–P3.6)
write 写信号引脚 RD(———) (17–P3.7)
read 读信号引脚 PSEN(—————)
progammer saving enable 外部程序存储器读选通信号
ALE Address Latch Enable 地址锁存允许信号
EA(———) enable 外部ROM选择信号
51内部寄存器
SFR special funtion register 特殊功能寄存器
ACC accumulate 累加器A
PSW progammer status word 程序状态字
CY (PSW.7) carry 进位标志位
AC (PSW.6) assistant carry 辅助进位标志位
OV (PSW.2) overflow 溢出标志位
PC progammer counter 程序计数器
DPTR data point register 数据指针寄存器
SP stack point 堆栈指针
TCON timer control 定时器控制寄存器
TF1 (TCON.7) Timer1 flag T1中断标志位
TR1 (TCON.6) Timer1 Run T1运行控制位
TF0 (TCON.5) Timer0 flag T0中断标志位
TR0 (TCON.4) Timer0 Run T0运行控制位
IE1 (TCON.3) Interrupt1 exterior 外部中断1中断标志位
IT1 (TCON.2) Interrupt1 touch 外部中断1 触发方式选择位
IE0 (TCON.1) Interrupt0 exterior 外部中断0中断标志位
IT0 (TCON.0) Interrupt0 touch 0-电平触发 1-下降沿触发
IE (A8H) interrupt enable 中断允许寄存器
EA (IE.7) enable all interrupt 中断总允许位
ES (IE.4) enable serial 串行口中断允许位
ET1 (IE.3) enable timer 1 T1中断允许位
EX1 (IE.2) enable exterior 1 外部中断1中断允许位
ET0 (IE.1) enable timer 0 T0中断允许位
EX0 (IE.0) enable exterior 0 外部中断0中断允许位
IP (B8H) interrupt priority 中断优先级寄存器
PS (IP.4) priority serial 串口优先级标志位
PT1 (IP.3) priority timer 1 定时器1优先级标志位
PX1 (IP.2) priority exterior 1 外部中断1优先级标志位
PT0 (IP.1) priority timer 0 定时器0优先级标志位
PX0 (IP.0) priority exterior 0 外部中断0优先级标志位
PCON (87H) power control 电源控制和波特率选择
TMOD (89H) timer mode 定时器方式控制寄存器
MSB = most significant bit//最高有效位
LSB = last significant bit//最低有效位
OE = output enable //输出使能
一般一条完整的指令包括:取指周期、间址周期、执行周期、中断周期。
JMP X:该指令的指令周期只有取指周期。
ADD X:该指令只有取指周期、执行周期。
一个指令周期包含的机器周期个数亦与指令所要求的动作有关,如单操作数指令,只需要一个取操作数周期,而双操作数指令需要两个取操作数周期。实际上,不同的指令可以有不同的机器周期个数,而每个机器周期又可包含不同的时钟脉冲个数。
取指周期:在取指周期中CPU主要完成两个操作:(1)按程序计数器PC的内容取指令(2)形成后继指令的地址;
间址周期:当遇到间接寻址的指令时,由于指令字中只给出操作数有效地址的地址,因此,为了取出操作数,需先访问一次存储器,取出有效地址,然后再访问存储器,取出操作数。
执行周期:间址周期是取出操作数的有效地址。执行周期是取出操作数,并执行。
中断周期:当CPU采用中断方式实现主机与I/O交换信息时,CPU在每条指令执行阶段结束前, 都要发中断查询信号,以检测是否有某个I/O提出中断请求。如果有请求,CPU则要进入中断响应阶段,又称中断周期。在这阶段, CPU必须将程序断点保存到存储器中。
每个指令的CPU周期不同,每个CPU周期的长度也不同。
机器周期(CPU周期):CPU访问一次内存所花的时间较长,因此用从内存读取一条指令字的最短时间来定义。
指令周期的每个阶段都是一个机器周期。指令周期中所包含的CPU周期的长度并不是相同的,因此指令周期又有定长CPU周期组成的指令周期,不定长CPU周期组成的指令周期。
时钟周期:通常称为节拍脉冲或T周期。一个CPU周期包含若干个时钟周期。
PC(program counter)是CPU中用于存放下一条指令地址的寄存器,SP为堆栈指针。下面将介绍函数调用过程中CPU对PC和SP这两个寄存器的操作。
假设有如下函数Fun
[](javascript:void(0)
Fun()
{
…………………
Sub-fun(a, b);
…………………
}
[](javascript:void(0)
当函数Fun调用其子函数sub-fun时,CPU内部执行情况如下:
作用:主要用于实时监测与控制,及时地响应中断请求源提出的请求,快速响应、及时处理。由片内中断系统实现。采用中断技术完全消除了单片机在查询方式中的等待现象(长时间花在查询是否有服务请求发生的定时查询操作上);效率和实时性。
过程:
中断系统结构
响应过程
2.中断响应过程:
中断请求:中断源将相应请求中断的标志位置 “1”,表示发出请求,并由CPU 查询。
中断响应:在中断允许条件下响应中断。断点入栈→撤除中断标志→关闭低同级中断允许→中断入口地址送PC。 这些工作都是由硬件自动完成的。
中断服务:根据入口地址转中断服务程序,包含保护现场、执行中断主体、恢复现场。
中断返回:执行中断返回RETI指令→断点出栈→开放中断允许→返回原程序。
3.中断服务程序入口地址:
中断响应主要是由硬件自动生成一长调用指令(LCALL addr16),CPU执行它便是响应中断,转入相应的中断服务程序。addr16就是中断服务程序的入口地址,MCS-51的5个中断源的中断服务程序入口地址固定
中断函数编号 | 中断名称 | 中断标志位 | 中断使能位 | 中断向量地址 | 默认优先级 |
---|---|---|---|---|---|
0 | 外部中断 | IE0 | EX0 | 0x0003 | 1(最高) |
1 | T0 | TF0 | ET0 | 0x000B | 2 |
2 | 外部中断 | IE1 | EX1 | 0x0013 | 3 |
3 | T1 | TF1 | ET1 | 0x001B | 4 |
4 | UART | TI/RI | ES | 0x0023 | 5 |
5 | T2 | TF2/EXF2 | ET2 | 0x002B | 6 |
说明:在接受中断申请时,如遇下列情况之一时,硬件生成的长调用指令“LCALL”将被封锁:
⑴ CPU正在执行同级或高一级的中断服务程序中。
⑵ 查询中断请求的机器周期不是执行当前指令的最后一个周期。
⑶ 当前正在执行RETI指令或执行对IE、IP的读/写操作指令。
中断的执行过程与调用子程序相似点:
⑴ 都是中断当前正在执行的程序,转去执行子程序或中断服务程序。
⑵ 都是由硬件自动地把断点地址压入堆栈,然后通过软件完成现场保护。
⑶ 执行完子程序或中断服务程序后,都要通过软件完成现场恢复,并通过执行返回指令,重新返回到断点处,继续往下执行程序。
⑷ 二者都可以实现嵌套,如中断嵌套和子程序嵌套。
中断的执行与调用子程序差别:
⑴ 中断请求信号可以由外部设备发出,是随机的,比如故障产生的中断请求;子程序调用却是由软件编排好的。⑵ 中断响应后由固定的矢量地址转入中断服务程序,而子程序地址由软件设定。
⑶ 中断响应是受控的,其响应时间会受一些因素影响;子程序响应时间是固定的。
6.4.5 中断响应时间
正常中断响应时间至少为3~8个机器周期,如果有同级或高级中断服务,将延长中断响应时间。
6.4.2 外部中断请求采样(针对外部中断请求信号进行的)
而内部中断请求都发生在芯片内部,可以直接置位TCON或SCON中的中断请求标志。
在每个机器周期的S5P2期间,各中断标志采样相应的中断源,并置入相应标志。
6.4.3 中断查询
若查询到某中断标志为1,则按优先级的高低进行处理,即响应中断。
80C51的中断请求都汇集在TCON和SCON中。而CPU则在下一机器周期的S6期间按优先级的顺序查询各中断标志。
先查询高级中断,再查询低级中断。 同级中断按内部中断优先级序列查询。 如果查询到有中断标志位为“1” ,则表明有中断请求发生,接着从相邻的下一个机器周期的S1状态开始进行中断响应。
中断源 默认中断级别 序 号
INT0—外部中断0 最高 0
T0 —定时器/计数器0中断 第2 1
INT1—外部中断1 第3 2
T1 ----定时器/计数器1中断 第4 3
TX/RX—串行口中断 第5 4
T2 —定时器/计数器2中断 最低 5
Timing Controllor
定时器控制寄存器,作用是控制定时器的启、停,标志定时器溢出和中断情况。
TF1 | TF1 :TF1=1表示T1有中断产生。(Timer Flag,定时器标志位) |
---|---|
TR1 | TR1 :TR1=1表示T1开始运行。软件启动位(单片机中T0引脚,需要高低电平的驱动) |
TF0 | TF0 :TF0=1表示T0有中断产生。(溢出位) |
TR0 | TR0 :TR0=1表示T0开始运行。软件启动位(单片机中T1引脚,需要高低电平的驱动) |
IE1 | IE1 :IE1=1表示INT1有中断产生,当INT1引脚出现有效的请求信号,此位自动置1(外部中断请求标志位) |
IT1 | IT1 :IT1=1表示INT1为下降沿触发,IT1=0表示INT1为低电平触发。(外部中断触发方式控制位 ) |
IE0 | IE0 :IE0=1表示INT0有中断产生。 当INT0引脚出现有效的请求信号,此位自动置1(外部中断请求标志位) |
IT0 | IT0 :IT0=1表示INT0为下降沿(负跳变)触发,IT0=0表示INT0为低电平触发。(外部中断触发方式控制位 ) |
(TIMER/COUNTER MODE CONTROL REGISTER)
定时器/计数器模式控制寄存器TMOD是一个逐位定义的8位寄存器,但只能使用字节寻址,其字节地址为89H。
D0~D3 D4~D7 | 定时/计数器的设置 。 |
---|---|
GATE | 为门控位,GATE=0时,只要在编写程序时,使TCON中的TRO或TR1为1,就可以启动定时器/计数器工作。 GATE=1时,不仅要在编写程序时,使TCON中的TRO或TR1为1,且需要外部引脚也为高电平,才能 工作。 |
C/T | C/T :定时/计数模式切换,C/T=0时为定时模式,C/T=1时为计数模式。 |
M1,M0:用来选择定时计/计数器的工作方式,一般使用都是采用16位的计时计数器。 | M1,M0:用来选择定时计/计数器的工作方式,一般使用都是采用16位的计时计数器。 |
EA :整体中断允许位;EA=1允许中断。
ET2 :T2中断允许位;ET2=1允许中断(S52才有)。
ES :串行中断允许位;ES=1允许中断。
ET1 :T1中断允许位;ET1=1允许中断。
EX1 :INT1中断允许位;EX1=1允许中断。
ET0 :T0中断允许位;ET0=1允许中断。
EX0 :INT0中断允许位;EX0=1允许中断。
Serial Control Register
用于控制串行通信的方式选择、接收和发送,指示串口的状态。SCON既可以字节寻址,也可以位寻址,其字节地址为98H,地址位为98H~9FH。
相应的功能位定义如下:
RI:接收中断标志位,数据接收结束时,标志位会自动置1,需要通过程序将其置0
TI:发送中断标志位,数据发送结束时,标志位会自动置1,需要通过程序将其置0
RB8:存放发送数据的第9位
TB8:存放接收数据的第9位
REN:串行接收允许位,用于控制数据接收的允许和禁止,为1时允许接收,为0时禁止接收
SM2:多机控制位
SM1,SM0:串行工作方式
Power Control Register
功率控制寄存器。包含SMOD,SMOD0,LVDF,POF,GF1,GF0,PD,IDL等控制位。
在CHMOS型单片机中,除SMOD位外,其他位均为虚设的,SMOD是串行口波特率倍增位,当SMOD=1时,串行口波特率加倍,0波特率不加倍
CPU结构
8051内部CPU是一个字长为二进制8位的中央处理单元,也就是说它对数据的处理是按字节为单位进行的。与微型计算机CPU类似,8051内部CPU也是由算术逻辑部件(ALU)、控制器(定时控制部件等)和专用寄存器组三部分电路构成。
1.算术逻辑部件
8051的算术逻辑部件ALU是一个性能极强的运算器,既可以进行加、减、乘、除四则运算,还可以进行与、或、非、异或等逻辑运算,还具有数据传送、移位、判断和程序转移等功能。
8051算术逻辑部件ALU由一个加法器、两个8位暂存器(TMP1和TMP2)和一个性能卓越的布尔处理器组成。虽然TMP1和TMP2对用户并不开放,但可用来为加法器和布尔处理器暂存两个8位二进制操作数。
2.定时器控制部件
定时器控制部件起着控制器的作用,由**定时控制逻辑、指令寄存器和振荡器(OSC)**等电路组成。
指令寄存器IR用于存放从程序存储器EPROM/ROM中取出的指令(即操作)码,定时控制逻辑用于对指令寄存器中的操作码进行译码,并在OSC的配合下产生执行该指令的时序脉冲,以完成相应指令的执行。
3.专用寄存器组
专用寄存器组主要用来指示当前要执行指令的内存地址,存放操作数和指示指令执行后的状态。它是任何一台计算机都不可缺少的组成部件。专用寄存器组主要包括程序计数器PC、累加器A、程序状态字PSW、堆栈指示器SP、数据指针DPTR和通用寄存器B等。
(1)程序计数器PC
程序计数器PC是一个二进制16位的程序地址寄存器,专门用来存放下一条将要执行指令的内存地址,能自动加1。
8051程序计数器PC由16个触发器构成,故他的编码范围为0000H~FFFFH,共64K。也就是说,8051对程序存储器的寻址范围为64KB。
(2)累加器A
累加器A又记做ACC,是一个具有特殊功能用途的二进制8位寄存器,专门用来存放操作数或运算结果。在CPU执行某种运算前,两个操作数中的一个通常应放在累加器A中,运算完后累加器A中便可以得到运算结果。
(3)通用寄存器B
通用寄存器B是专门为乘法和除法设置的寄存器,也是一个二进制8位寄存器,由8个触发器组成。该寄存器在乘法或除法前,用来存放乘数或除数,在乘法或除法后用于存放乘积的高8位或除数的余数。
(4)程序状态字PSW
PSW是一个8位标志寄存器,用来存放指令执行后的有关状态。PSW中的各位状态通常是在指令执行过程中自动形成的,但也可以由用户根据需要采用传送指令加以改变。
PSW.7为最高位,PSW.0为最低位。
① 进位标志位Cy:用于表示加减运算过程中最高位A7(累加器最高位)有无进位或借位。在加法运算时,若累加器A中最高位A7有进位,则Cy=1;否则,Cy=0。在减法运算时,若A7有了借位,则Cy=1;否则Cy=0。此外,CPU在进行移位操作时也会影响这个标志位。
②辅助进位标志位AC:用于表示加减运算时低4位(A3)有无向高4位(即A4)进位或借位。若AC=0,表示加减过程中A3没有向A4进位或借位;若AC=1,表示加减过程中A3向A4有了进位或借位。
③用户标志位F0:F0标志位的状态通常不是机器在执行指令过程中自动形成的,而是由用户根据程序执行需要传送指令确定。一经设定便由用户程序自动检测,以决定用户程序流向。
④寄存器选择位RS1和RS0:8051共有8个工作寄存器,分别命名为R0R7,工作寄存器R0R7常常被用户用来进行程序设计,但它在RAM中的实际物理地址是可以根据需要选定的。RS1和RS0就是为了这个目的提供给用户使用,用户通过RS1和RS0的状态可以方便的决定R0~R7的实际物理地址。
⑤溢出标志位OV:可以指示运算过程中是否发生了溢出,在机器指令过程中自动形成。若在机器在执行运算指令过程中,累加器A中运算结果超过了8位能表示的范围,即-128~+127,则OV标志自动置1;否则OV=0。
⑥奇偶校验位P:PSW.1为无定义位,用户也不可使用。PSW.0为奇偶标志位P,用于指令运算结果中1的个数的奇偶性,若P=1,则累加器A中1的个数为奇数;若P=0,则累加器A中1的个数为偶数。
(5)堆栈指针SP
堆栈指针是一个8位寄存器,能自动加1或减1,专门用来存放堆栈的栈顶地址。堆栈是一种能按“先进后出”或“后进先出”规律存数据的RAM区域。这个区域可大可小,常称为堆栈区。8051片内RAM共有128B,地址范围为00H~FFH,故这个区域中任何一个子域都可以用作堆栈区,即作为堆栈来使用。
(6)数据指针DPTR
数据指针DPTR是一个16位寄存器,由两个8位寄存器DPH和DPL拼成。DPH为DPTR的高8位,DPL为DPTR的低8位。DPTR可以用来存放片内ROM的地址,也可以用来存放片外RAM和片外ROM地址,主要用于访问片外RAM。
A.倒数九秒且没有显示零的循环
在flag改变后进入紧接着的if语句,
设置break
B.倒数后一直为0不变
sec2没有设置好?,把break放在了cnt=0的前面,导致cnt一直不置零!
C.到3之后频繁闪烁,显示3不变
cnt未清零
若单片机的显示数组下标没有初始化,显示全段的数码管
D.显示完321后又是全段显示,在0显示完之后没有bereak;
H:bcefg 0x89
E:adefg 0x86
L:fed 0xC7
O:abcdef0xC0
!: 0x79
unsigned char code LedChar[] = { //数码管显示字符转换表
0xF9, 0xA4, 0xB0, 0x99, 0x92};
unsigned char LedBuff[6] = { //数码管显示缓冲区,初值 0xFF 确保启动时都不亮
0x89, 0x86, 0xC7, 0xC7, 0xC0, 0x79
};
解决了消隐问题
解决了数码管抖动