我的单片机用的11.0592M的晶振,想写一个大概延时1MS的子程序,应该怎样写?(用C语言)

如题所述

void delay(uint n)
{
uint i,j;
for(i=n;i>0;i--)
{
for(j=110;j>0;j--);
}
}
当n=1是延时大约是1ms,就是说n等于都少就延时多少ms,当然n的值不超过uint的最大值。
头文件下请定义宏
#define uchar unsigned char
#define uint unsigned int
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-04-05
11.0592的晶振,很熟悉,51系列单片机经常用,建议多看下书,我说下大致的原理,fosc=11.0592m,一条指令的时间是多少?可能有分频,可以设置,具体的单片机不一样,反正你要得到执行一条指令的时间,比如是1us,那么1usx1000=1ms,例如:
for(i=0;i<998,i++)
{
nop;
}追问

我知道 一个空操作-nop();是一个时钟周期,但我的想是,单片机执行for(i=0;i<998,i++)判断i<998,i++不也要时间了么

本回答被提问者采纳
第2个回答  2011-03-30
void delay(char x)
{
int i;
while(x--)
for(i=0;i<114;i++);
}
第3个回答  2011-03-28
void delay(uint)
{
uint x,y;
for(x=1000;x>0x--)
for(y=1000;y>0y--);
}
第4个回答  2011-03-28
void delay1ms()
{
unsigned int x,y;
for(x=1000;x>0;x--)
for(y=110;y>0;y--);
}

我的单片机用的11.0592M的晶振,想写一个大概延时1MS的子程序,应该怎样...
void delay(uint n){ uint i,j;for(i=n;i>0;i--){ for(j=110;j>0;j--);} } 当n=1是延时大约是1ms,就是说n等于都少就延时多少ms,当然n的值不超过uint的最大值。头文件下请定义宏 define uchar unsigned char define uint unsigned int ...

设51单片机晶振频率为12MHZ,延时1m的子程序
下面为你写出1ms的程序:用的是11.0592M的,你如果真的需要是12M的,那自己直接修改成12M就可以了。调用的时候直接把uinsigned int ms改成1就是1ms.void ConfigTimer0(unsigned int ms){ unsigned long tmp;tmp = 11059200\/12;tmp = (tmp * ms)\/1000;tmp = 65536 - tmp;tmp = tmp + 18;...

哪位高手知道 单片机精确延时1秒得C语言子程序 谢谢了
晶振12MHZ,延时1秒 程序如下:DELAY:MOV 72H,#100 LOOP3:MOV 71H,#100 LOOP1:MOV 70H,#47 LOOP0:DJNZ 70H,LOOP0 NOP DJNZ 71H,LOOP1 MOV 70H,#46 LOOP2:DJNZ 70H,LOOP2 NOP DJNZ 72H,LOOP3 MOV 70H,#48 LOOP4:DJNZ 70H,LOOP4 定时器延时:晶振12MHZ,延时1s,定时器0工作方式为...

如何在11.0592MHZ的频率下给单片机一个1US的延时。
1us?在11.0592MHZ晶振下,机器周期就是12\/11.0592M约等于1us,用一条空操作指令就行噻。汇编:NOP;C语言:用_nop_();时记得加上#include <intrins.h> 头文件

单片机C51,已知时钟周期为11.0592MHz,用延时做2ms的方波,延时次数i应该...
...和12m晶振一样的.要精确就算定时的时候把12m 用11.0592M带入计算初值.

...的单片机c语言延迟函数 要求延迟0.5s 单片机晶振为11.0592Mhz...
晶振为12Mhz,z=1,大约为1ms。 专家说治疗早泄,最好采用比较保守和安全的药物治疗,即使采用物理治疗、行为治疗、心理治疗,最好也要结合药物治疗,

晶振为11.0592的at89c51单片机用C语言能实现1微妙的延时吗?怎么写?要...
一个单片机工作于12M晶振,它的时钟周期是1\/12(微秒)。它的一个机器周期是12*(1\/12)也就是1微秒。你用的是11.0592的单片机,这就不能达到要求,而且你用C语言编程还要带形参,所以根本不可能实现1微妙延时,你可以用12M的晶振,然后用一个_NOP_()指令来延时1微妙。

单片机11.0592MHz的晶振延时1s为什么用for语句1000*110?怎么算的?
这个是在调试过程中,调试的,一般都是这么用的!但是这个不是1S,要想精确时间 ,还是用定时器 执行一行语句,一般都是一个或者两个机器周期!机器周期就是晶振决定的 一般都不是算的,在KEIL中调试出来的,更改两个for循环的值,一次一次试出来的!在keil中晶振设置不同 时间就不同 ...

C语言延时程序中,延时时间是如何计算出来的. (假如我想延时1s该如何计算...
你这个11.0592是匹配波特率所用的晶振,机器周期只是约等于1us。首先你要延时多长时间,us级别的必须使用汇编,C误差很大,10-100us级别的可以用C控制,单必须考虑C出栈入栈时间。ms以上的用时间除以机器周期(除以你则个1us是不行的,误差大)。另外,看着你好像用的是keil,keil里边单步调试里边不是...

单片机外接12M的晶振,1ms的基准延时函数用C语言怎么写?
晶振:12MHz 机器周期1us 时间计算:t=2+1+995+2=1000us =1.000ms ---*\/ void delay1ms(void) \/\/延时1ms子程序 { unsigned char i,j;for(i=5;i>0;i--)for(j=98;j>0;j--);} 对应汇编 \/*--- 名称:delay1ms 功能:延时1ms 晶振:12MHz 机器周期1us 时间计算:t=2+1+...

相似回答