重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
延时多少不是c语言决定的,是编译后的汇编语言执行时间和单片机晶振共同决定的;
成都创新互联是一家专注于成都网站制作、成都做网站、外贸营销网站建设与策划设计,泉山网站建设哪家好?成都创新互联做网站,专注于网站建设十余年,网设计领域的专业建站公司;建站业务涵盖:泉山等地区。泉山做网站价格咨询:18982081108
首先通过编译器,看看这个函数汇编之后,翻译成了什么,然后根据翻译过来汇编语言的时钟周期,计算该段程序的总执行周期(每条汇编语言指令执行的周期数都是确定的);
再用总周期乘以你的晶振时间(频率的倒数),就可以计算了。
你需要知道,机器周期、指令周期这些概念。也可以用其他的办法,很多单片机内置函数NOP,或者_delay_cycles这些内容。真想搞懂的话,希望多学学基础知识。
可以有很多办法,一是调整参数,使其延时5分钟或6分钟,循环24次或20次。二是将延时函数的形参改为长整型(32位)延时时间扩大65536倍。三是使用定时器,每次定时50mS,累计144000次,便是2小时,使用定时器(中断)的好处是在延时期间还可以干许多事情,例如显示剩余时间,检测设备工作状态或者调整延时时间等,而你的纯软件延时期间想干其它事情比较困难。
延时时间的计算与单片机的晶振频率有关。若晶振频率为12Mhz,那么单片机每震动一次所需要的时间是1/12M s。那么再来看看单片机执行一次自减所需要的振动次数是96次,假如我们对时间要求不是特别精确的话,可以约等于100来计算。现在通过上面两个数据可以得出:单片机每执行一次自减所需要的时间是1/12M *100(s),即1/120000 s,逆向计算一下,每1ms需要自减多少次?120次对吧。所以一个简单的延时功能就诞生了,我们只需要自减120次,就可以延时1ms,如果我们要延时50ms呢,那就自减50*120=6000次。那么在程序上如何表达呢?我们可以用两套for循环
void delay(int i){
int x,y;
for(x=i;x0;x--){
for(y=120;y0;y--)
}
}
参数 i 代表该函数延时多少ms