
C8051
F单片机C程序精确延时的方法*
■闽江学院
薛小铃 刘志群
贾俊荣
关键词
C8051F单片机C循环语句
精确延时
引
言
单片机延时一般有定时器延时和程序延时两种方法。
当CPU运行延时程序而无需做其他工作时,为了节省单
片机定时器的硬件资源,降低结构编程的难度。往往采用
程序延时的方法实觋延时。采用C语言编写延时程序
时,关键是循环语句的使用。如果使用不当,延时时间的
精度就不好控制,需要通过程序的反复调试进行算法补
偿,给使用者带来诸多小便。
C8051F单片机是完全集成的混合信号系统级芯片
(S0c),其MCU系统控制器的内核是CIP一51微控制器。
CIP一51的指令集与标准8051指令集完全兼容。CIP一
51采用流水线指令结构,指令时序与标准805l不同:
70%指令的执行时间为l或2个系统时钟周期;所有指令
时序都以时钟周期计算;大多数指令执行所需的时钟周期
数与指令的字节数一致;条件转移指令在不发生转移时和
发生转移时的时钟周期数不同。同标准8051相比,
C8051F单片机实现程序延时的方法更复杂些。
在充分考虑Keil软件编译循环语句特点和C8051F
单片机指令时序特点的基础上,利用Keil软件仿真调试
的技巧。可以编出灵活、方便、精度高的延时程序。下面以
C8051F020单片机为调试器件,说明C8051F单片机C程
序精确延肘的方法。
1
C语言3种循环语句的编译特点
下面是C语言3种单层循环语句的程序代码;
void
SingleCircle(unsigned
char
t){
unsigned
char
X=t,Y
5
tl
t基金项目:福建省教育厅科技硬目(jB07277)。
do(
;
}while(一一t);
while(x一一);
for(;y--一;);
}
使用Keil
C51
V7.50编译器编泽,得到的汇编代码如
下:
C:0x0080
AE07
C:ox0082
AD07
C:0x0084
DFFE
C:0x0086
AF06
C:0x0088
1E
C:0x0089
EF
C:0x00BA
70FA
C:0x00BC
AF05
C:0xOOBE
1D
C:0x00BF
EF
C:0xOOCO
70FA
C:0x00C2
22
MOV
R6,0x07
M(】V
K5.0x07
DJNZ
R7,C:00134
M()V
R7,0x06
DEC
R6
MOV
A.R7
JNZ
C:0086
MOV
R7,Ox05
DEC
R5
M()V A.R7
JN2
C:00BC
RET
程序中3种单循环语句实现的功能一样.但分析汇编
代码可以看出编泽效率并不相同。其中,do—while循环
语句编译的汇编代码最简单,while和{or循环语句编译
效率一样。再看双层循王f=语句的程序代码:
void
DoubleCircle(unsigned
char
t,{
unsigned
char
x,i=t,j—t;
do{
×一2:
do(
77
万方数据