大家好,又见面了,我是你们的朋友全栈君。
延时函数如何延时
**函数样例 编译软件编译后的 汇编指令
Delay_ms(200); // 1、 0x0000058C 20C8 MOVS r0,#0xC8
void Delay_ms(unsigned int time)
{
unsigned char n;
while(time>0) // 3、0x00000210 2800 CMP r0,#0x00
{
for(n=0;n<4;++n) // 4、 0x00000204 2100 MOVS r1,#0x00
{ // 5、 0x00000206 1C49 ADDS r1,r1,#1
; // 6、 0x00000208 B2C9 UXTB r1,r1
// 7、 0x0000020A 2902 CMP r1,#0x02
// 8、 0x0000020C D3FB BCC 0x00000206
// 9、 0x0000020E 1E40 SUBS r0,r0,#1
}
time--; // 2、 0x00000202 E005 B 0x00000210
}
}
所需要了解的信息
1、每一条汇编指令需要占用几个时钟周期,方便计算多少时间
2、时钟周期为1M时,其倒数为时间1us
文字解释
程序进入Delay_ms(200)延时函数后,其对应汇编指令运行顺序为1——2——3——4——5——6——7——8——9
其中的for空循环的汇编指令为5、6、7、8、9这四条,进入for循环这四条指令的运行次数为4(来源于自己设置的n<4)
本函数中对应的汇编指令一般占用一个时钟周期,其中第2和8条为跳转指令,占用2个时钟周期,本函数程序其硬件时钟设置为22MHz,故延时函数时间为(10+8*(n-1))*(1/22M)us
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/151107.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...