关于51单片机延时问题.....看下面的程序

[复制链接]
查看11 | 回复3 | 2011-7-28 21:25:22 | 显示全部楼层 |阅读模式
void DelayUs(unsigned char us)//delay us
{
unsigned char uscnt;
uscnt=us>>1;/* Crystal frequency in 12MHz,1微秒*/

while(--uscnt);
}
不明白这个函数us向有移了一位,就相当于除以2嘛,但这这这么还是微秒级的延时??求解

回复

使用道具 举报

千问 | 2011-7-28 21:25:22 | 显示全部楼层
执行了uscnt=us>>1这条语句用了一个机器周期,在12MHZ的晶振下,一个机器周期是1US 所以这是一个微秒的延时。...
回复

使用道具 举报

千问 | 2011-7-28 21:25:22 | 显示全部楼层
假如DelayUS(4)那么uscnt=2?那么while是执行2次吗 。那么这个延时的变量US有什么用?...
回复

使用道具 举报

千问 | 2011-7-28 21:25:22 | 显示全部楼层
while(--uscnt);这句话没看到吗,要等到uscnt这个值减到零才会退出while语句,延时才结束,延时时间的大小取决于参数的大小...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行