全球旧事资料 分类
51单片机软件延时分析
朱铮南
一、单片机的时钟周期和机器周期时钟周期也叫做振荡周期,是指为单片机提供时钟信号的振荡源的频率的倒数。CPU可以完成一个独立的操作的最短时段叫做机器周期。89C51等老一代单片机将振荡频率12分频后作为机器频率,所以机器周期是12个时钟
周期的长度。一般振荡频率为110592MHz,机器周期是1085μs。现在的高速单片机如STC15系列,工作在1T模式,即振荡频率不再分频,机器周期等
于时钟周期。振荡频率在从110592MHz到331776MHz的范围内可以选择,如果振荡频率为30MHz,它的机器周期即为003333μs。
二、指令占用的机器周期每条指令执行时所要占用的机器周期不同,下面列出的是软件延时代码中经常用到的指
令及这些指令占用的机器周期:
指令
MOVR
dataMOVAR
DJNZR
,re1LJMPaddr16RETDECR
JNZre1JZre1SJMPre1SETBCSUBBA,dataJCrel
说明
立即数送入寄存器寄存器内容送入累加器寄存器值减1,如结果非0就跳到rel指定地址跳转到16位地址(调用子函数)从子函数返回寄存器减1累加器不等于0就跳转到rel指定地址累加器等于0就跳转到rel指定地址跳转到rel指定地址将进位位C置1累加器减借位位C减立即数进位位C为1就跳转到rel指定地址
89C51机器周期
112221222112
STC15机器周期
214442443123
软件延时就是利用循环来占用机器周期,达到延时的目的。
三、几种循环结构的比较为了比较几种循环结构,特意用C语言编写了以下几段主函数和延时子函数,在uVisi
o
2里建造可执行文件以后,点击菜单“调试”里的“开始停止调试”,再点击“反汇编窗口”工具,就可以看由C语言编译成的汇编语言代码。1第一种的延时子函数用的是do循环和i结构,最外层有一层x循环,以便调用时可以指定延时时间的整倍数。
左边是C语言代码,右边是反汇编窗口显示的汇编代码截图。汇编代码里红色的是对应的C语言语句,黑色的才是汇编代码,只有8行。底下的两行是主函数,一行是实参赋值,另一行是对子函数的调用。上面的6行是延时子函数,分别是两行赋值,三行寄存器减1非0跳转,最后一行是返回。
1
fvoiddelayu
sig
edcharx
u
sig
edcharijdo
i2j240do
whilejwhileiwhilex}
voidmai
delay1
2第二种和第一种循环结构相同,仅将“j”、“i”变成了“j”、“i”。汇编代码变化很大,变成了17行,结构复杂多了。
voiddelayu
sig
edcharx
u
sig
edcharijdo
i2j240do
whilejwhileiwhilex
voidmai
delayr
好听全球资料 返回顶部