下面这段是不带参数的,怎么改带参数的20MS延时?
void Delay10ms() //@12.000MHz
{
unsigned char i, j;
i = 117;
j = 184;
do
{
while (--j);
} while (--i);
}
可以改for语句延时吗?
单片机c语言带参数延时怎么写?
答案:2 悬赏:60 手机版
解决时间 2021-12-17 03:23
- 提问者网友:心裂夏天
- 2021-12-16 03:11
最佳答案
- 五星知识达人网友:请勿打扰哥的哥
- 2021-12-16 04:20
12MHz的晶振,一个机器周期是1uS.
void Delay_ms(unsigned char i, unsigned char j) //@12.000MHz
{
unsigned char n = 0;
unsigned char m = 0;
for(n = 0; n < i; n++)
for(m = 0; m < j; m++);
}
然后调用:
Delay_ms(117, 184);//Delay 20 mS
117 × 184 = 21528, 约等于 20mS.
这样很不准确,实际计算指令周期的话,接近了40mS
下面这中方法能准确一些:
void Delay_ms(uchar count)
{
uchar i, j, k;
for(k = count; k > 0; k--)
for(i=5; i>0; i--)
for(j=98; j>0; j--);
}
void Delay_ms(unsigned char i, unsigned char j) //@12.000MHz
{
unsigned char n = 0;
unsigned char m = 0;
for(n = 0; n < i; n++)
for(m = 0; m < j; m++);
}
然后调用:
Delay_ms(117, 184);//Delay 20 mS
117 × 184 = 21528, 约等于 20mS.
这样很不准确,实际计算指令周期的话,接近了40mS
下面这中方法能准确一些:
void Delay_ms(uchar count)
{
uchar i, j, k;
for(k = count; k > 0; k--)
for(i=5; i>0; i--)
for(j=98; j>0; j--);
}
全部回答
- 1楼网友:少年与梦
- 2021-12-16 05:51
在循环里判断是否满足跳出的条件,满足则跳出循环,不满足就继续延时直到延时结束。
具体的条件要有程序的要求来,比如说某个io口的电平的状态。
sbit state=p1^7;
delay(uint)
{
uint x,y;
for(x=1000;x>0;x--)
for(y=1200;y>0;y--)
{
if(state==1) return ;//当p1.7口为高时跳出循环
}
}
//由于加入了一条语句,延时要重新计算
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯