24.5M晶振的单片机 延时函数怎么计算 ?和12M的有什么区别?请帮忙写出1us、2us、、、

用C语言啊

一般来说要是通过延时函数来得到一个精准的延时时间(比如你说的1us、2us)是让正常人无法忍受的工作量,你可以点击编辑环境中的放大镜图标,在左边会弹出显示栏,sys下sec就是延时时间(要通过设置断点),你可以改变函数中变量值大概地调出需要的时间(希望你不要固执地去尝试调出你要的时间,因为这会让你享受到一天都不止的漫长调试“乐趣”中)。晶振频率不同自然在相同参数的情况下得出延时时间不同。另外如果你确实需要得到一个比较精准的延时时间,建议你采用定时/计数器,至于怎么用这玩意儿,很简单!不到十分钟就能学会的事儿!这里就不提供教程了,用你调试的时间去学它会让你更有成就感。写了那么多,希望能帮助点什么.......
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-07-23
晕,延时1us、2us??
如果是12M的,一个机器周期就是1us。
如果一个单片机选择了12MHz晶振,它的时钟周期是1/12us,它的一个机器周期是12×(1/12)us,也就是 1us。12M延时程序,书上有很多范例。书上找。
--------------------------------------------------
你指24M吧。没见过24.5M的
下面是24M的1ms、2ms的延时.
void Delay1ms()
{
unsigned char a,b,c;
for(a=0;a<1;a++)
for(b=0;b<3;b++)
for(c=0;c<219;c++);
}
void Delay2ms()
{
unsigned char a,b,c;
for(a=0;a<2;a++)
for(b=0;b<3;b++)
for(c=0;c<210;c++);
}追问

可是我需要用18B20,,,必须延时7us 等等 我需要的是计算方法啊 不知道怎么改,帮帮忙啊

追答

用_nop_().for循环 12M 一个 _nop()_即一个T,也就是0.1us
如果是24M一个_nop_.大概 12*(1/24)=0.05us 。
用C不是很精确。
顺带给你一个排名第一的开源论坛 ourdev.cn

追问

能不能用这个延时函数帮忙改一下 我的晶振是24.5M 8分频 我用18b20需要30us、500us、180us、 这个元件时序很敏感。感谢!
//*****延时函数*****
void delay(unsigned int i){
while(i--);
}
用的时候应该delay(?)

第2个回答  2011-07-23
可以用单片机小精灵傻瓜式计算
网上有破解版,找不到可以留邮箱给我。追问

能不能用这个延时函数帮忙改一下 我的晶振是24.5M 8分频 我用18b20需要30us、500us、180us、 这个元件时序很敏感。感谢!
//*****延时函数*****
void delay(unsigned int i){
while(i--);
}
用的时候应该delay(?)

第3个回答  2011-07-24
你用的什么单片机啊? 去下个“单片机小精灵1.3” 直接百度搜第一个就是 把单片机型号 晶振型号 延时时间添进去 就自动生成了··追问

那个我不会用, 它给个函数 怎么套用啊 是delay(??),,要是我延长不一样的时间,我就不会改啊?帮帮忙啊
能不能用这个延时函数帮忙改一下 我的晶振是24.5M 8分频 我用18b20需要30us、500us、180us、 这个元件时序很敏感。感谢!
//*****延时函数*****
void delay(unsigned int i){
while(i--);
}
用的时候应该delay(?)

追答

。。。要是敏感的话·· 用定时器吧· 这样时间控制得更准

第4个回答  2011-07-23
精确延时需要用中断,去论坛搜索,有很多追问

请问去哪个论坛啊

追答

51单片机论坛,单片机论坛。或者直接去baidu搜。http://zhidao.baidu.com/question/293097619.html

追问

能不能用这个延时函数帮忙改一下 我的晶振是24.5M 8分频 我用18b20需要30us、500us、180us、 这个元件时序很敏感。感谢!
//*****延时函数*****
void delay(unsigned int i){
while(i--);
}
用的时候应该delay(?)

...和12M的有什么区别?请帮忙写出1us、2us、、、
一般来说要是通过延时函数来得到一个精准的延时时间(比如你说的1us、2us)是让正常人无法忍受的工作量,你可以点击编辑环境中的放大镜图标,在左边会弹出显示栏,sys下sec就是延时时间(要通过设置断点),你可以改变函数中变量值大概地调出需要的时间(希望你不要固执地去尝试调出你要的时间,因为这...

stc12c5a60s2单片机 延时函数怎么写 晶振11.0592Mhz 和 12M
软件延时并不精确,我都是用一个叫dpjxjl的小软件自动生成,具体准确否,没校验过,以1MS例:STC的1T单片机12MHz:void delay(void) \/\/误差 0us { unsigned char a,b;for(b=129;b>0;b--)for(a=45;a>0;a--);} 1T单片机11.0592MHz:void delay(void) \/\/误差 -0.018084490741us...

相似回答