帮忙看下这个单片机c语言程序什么意思

led灯的延时函数voidDelay10ms(unsignedintc)//误差0us{unsignedchara,b;for(;c>0;c--)for(b=38;b>0... led灯的延时函数
void Delay10ms(unsigned int c) //误差 0us
{
unsigned char a,b;
for(;c>0;c--)
for(b=38;b>0;b--)
for(a=130;a>0;a--);
是要延时10ms,但是abc又是什么意思?为什么b要=38?a要=130?
展开
 我来答
巴布罗大叔
推荐于2016-07-07 · TA获得超过539个赞
知道答主
回答量:124
采纳率:0%
帮助的人:84.2万
展开全部
这两个数字是经过计算后的结果,都是用软件生成的,你不用理它的。
其实就是3重循环,延长一段时间。
如果要求不高,直接
void delay(unsigned int i){while(i--);}
就行了,其中的i取值从0到65535,也能满足你的延时需求。
至于怎么生成,用单片机小精灵就可以了,设置你的单片机类型(时钟、速度)、要延长的时间长短,点击确定就OK。
这些东西不用去记的,浪费时间。多花点时间去研究IO端口、硬件定时器、中断,这3个才是关键。
梁昌仔
2014-12-21 · TA获得超过272个赞
知道小有建树答主
回答量:287
采纳率:0%
帮助的人:198万
展开全部
这是一个嵌套循环语句。根据调试经验可知。当b=38 a=130时,即执行了38*130条空指令,所需的时间为10ms,所以如参传进去c=10,即循环了10次10ms的延时,即延时100ms.
这种延时只适合固定频率固定型号的单片机。如果你这是51的单片机程序,换到X86上面运行,那就不准了,因为X86进行速度快
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
make1573
2014-12-21 · TA获得超过2075个赞
知道小有建树答主
回答量:535
采纳率:71%
帮助的人:145万
展开全部
由于不知道你单片机晶振频率多少,那么假设你的机器周期就是455KHz,即1/455ms
38*130=4550,ab的两个for循环将消耗4550*1/455=10ms的机器周期,所以延时10ms
c表示延时多少个10ms

祝楼主学习进步
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
思念不湿
2018-03-14 · TA获得超过470个赞
知道小有建树答主
回答量:219
采纳率:79%
帮助的人:33.9万
展开全部
首先,这个跟你的单片机晶振频率有关,我推算了下,你的晶振应该是6Mhz.给你算下10ms=10000us,而10000/38/130约2.0242914979us。
晶振6Mhz,所以一个晶振周期为1/6us,而单片机执行一个指令需要一个机器周期为12个晶振周期就是12*(1/6)=2us,所以10ms就是这么来的,2*38*130
两者是不是很接近,软件延迟就是有误差的.abc的意思就是让他循环这么多次,每次2us。c应该就是1啦,这个函数功能就是,c取1,延迟10ms,取2,延迟20ms。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2014-12-21
展开全部
这是软件延时子函数,a,b,c代表循环次数,a,b,c的具体值要根据软件仿真来设定。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式