单片机中,设晶振频率为 6MHz ,试编制50 ms 延时子程序?
答案:4 悬赏:50 手机版
解决时间 2021-04-07 08:48
- 提问者网友:送舟行
- 2021-04-06 13:26
单片机中,设晶振频率为 6MHz ,试编制50 ms 延时子程序?
最佳答案
- 五星知识达人网友:孤老序
- 2021-04-06 13:36
DELAY50MS:
MOV R2,#50 ;2
DELAY1:
MOV R3,#249 ;2*50
DJNZ R3,$ ;4*249*50
DJNZ R2,DELAY1 ;4*50
RET ;4
TOTAL:2+100+49800+200+4=50106us=50.106ms
MOV R2,#50 ;2
DELAY1:
MOV R3,#249 ;2*50
DJNZ R3,$ ;4*249*50
DJNZ R2,DELAY1 ;4*50
RET ;4
TOTAL:2+100+49800+200+4=50106us=50.106ms
全部回答
- 1楼网友:山河有幸埋战骨
- 2021-04-06 16:41
什么型号的单片机?
- 2楼网友:胯下狙击手
- 2021-04-06 15:28
先说明你用的是什么类型的单片机?
- 3楼网友:woshuo
- 2021-04-06 15:07
这个延时,各个单片机不确定,有一种方法是采用延时子函数
void delay(int k)
{
int i,j;
for(i=0;i {
for(j=0;j<100;j++);
}
}
这里是可以设定延时时间,当然,需要用示波器测试,比如你的while(1)死循环里,
void main()
{
while(1)
{
输出1;
delay(1);
输出0;
delay(1);
}
}
然后测试周期,50ms对应的周期是100ms,因为是方波,有高低电平的时间,如果测试的时间长了,就减小j的值100,如果时间断了,就增加100那个数,直到周期为100ms。
如果100设为1了时间还是超过100ms(你这里频率6MHz如果是CPU的时钟,频率太低)那就用nop这个指令,每个单片机的这条指令书写不同,delay()子函数里就用几个nop延时
void delay(int k)
{
int i,j;
for(i=0;i
for(j=0;j<100;j++);
}
}
这里是可以设定延时时间,当然,需要用示波器测试,比如你的while(1)死循环里,
void main()
{
while(1)
{
输出1;
delay(1);
输出0;
delay(1);
}
}
然后测试周期,50ms对应的周期是100ms,因为是方波,有高低电平的时间,如果测试的时间长了,就减小j的值100,如果时间断了,就增加100那个数,直到周期为100ms。
如果100设为1了时间还是超过100ms(你这里频率6MHz如果是CPU的时钟,频率太低)那就用nop这个指令,每个单片机的这条指令书写不同,delay()子函数里就用几个nop延时
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯