永发信息网

单片机中延时100毫秒的程序

答案:4  悬赏:80  手机版
解决时间 2021-03-10 14:41
  • 提问者网友:饥饿走向夜
  • 2021-03-09 22:05
单片机中延时100毫秒的程序
最佳答案
  • 五星知识达人网友:独行浪子会拥风
  • 2021-03-09 22:41
这个要看什么单片机
首先有个晶振频率,然后有个PLL,相当于倍频,然后有个分频,才到总线频率。
为什么一直提频率呢,因为频率的倒数是周期,然后你算算100ms是多少总线周期,就知道循环几次了。
还有一种方法是用中断,计时比较准确。

基础知识不好哦~~~
全部回答
  • 1楼网友:时间的尘埃
  • 2021-03-10 00:45
51单片机 MOV R7,#13H
DL1:
MOV R6,#14H
DL0:
MOV R5,#82H
DJNZ R5,$
DJNZ R6,DL0
DJNZ R7,DL1
RET
C:
void delay(void) //误差 0us
{
unsigned char a,b,c;
for(c=19;c>0;c--)
for(b=20;b>0;b--)
for(a=130;a>0;a--);
}
  • 2楼网友:忘川信使
  • 2021-03-10 00:08
汗!问这个问题说明你对时钟周期、机器周期、定时器周期都不太了解吧。
延时100毫秒的程序可以是一个函数,也可以是利用定时器的一段代码。
如果是用汇编延时那么你要把单片机指令周期表翻一下了,看看整个循环语句用了哪些指令,每个指令多少个机器周期,然后计算每个机器周期耗时多少时长,你就知道循环多少次了。
如果用C语言延时,那么就要借助仪器了,你同样要估算一下机器周期和循环次数,然后要精确到100ms就需要把这个延时时间作为频率从单片机IO口输出,用仪器来辅助测量,最后得出叫准确的100ms的循环次数的值。
如:
void delay_100ms(uint8 n)
{
uint16 i;
while(n)
{
for(i=0;i }
}
  • 3楼网友:等灯
  • 2021-03-09 23:56
51单片机 12MHz
汇编:DELAY: ;误差 0us
MOV R7,#13H
DL1:
MOV R6,#14H
DL0:
MOV R5,#82H
DJNZ R5,$
DJNZ R6,DL0
DJNZ R7,DL1
RET
C:
void delay(void) //误差 0us
{
unsigned char a,b,c;
for(c=19;c>0;c--)
for(b=20;b>0;b--)
for(a=130;a>0;a--);
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯