假设单片机晶振为12mhz,编写一段延时20秒的程序?

如题所述

12MHz 是什么嘛?晶振?频率?
时间和频率是怎么换算的呢<注意频率和时间并不是一个概念哦>?
T = 1/f
1Hz 等同于 1s
12MHz 等同于 1/12 us;
设一个变量T = 0;
每1/12us变化一次,(比如T++);
那么,20s中有多少个 1/12us,则T就需要自动加多少次;
当最后加完最后一个 1/12us的时候,延时计时变量就该溢出了嘛(清零了)
则用个for循环实现我的思路:

unsigned long long T = 0;
for(T = 0;T < (20s/(1/12us);T++))
{}
//处理代码
//计时变量恢复成0
T = 0; //如果你要进行第二轮处理的话。否则就没必要了

说明:for()循环里面的值不可以这么写哈,你得自己计算了;另外,也可以用while()结构;

当然楼上有人介绍用定时器,定时器还是考验了时间和频率之间的隐射关系。呵呵~~追问

是频率的 可以用汇编语言不

追答

怎么不可以?
比如:

mov ax,#1000
mov bx,0
F:
sub ax,1
BNP ax,bx
B F
-------
我只给你说了个思路,汇编指令没经常用过,很多都忘了,如果错误了,别见笑!
另外,单片机有定时器中断,用那个最舒服了。

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-12-16
ORG 0000H
JMP MAIN
ORG 000BH
TIMER0: ;50毫秒@12.000MHz
MOV TL0,#0B0H ; 重装定时初值
MOV TH0,#03CH
DJNZ R5, TT0
MOV R5, # 20 ; 50 x 20 = 1000 mS
SETB 30H ; 1 秒标志
TT0: RETI
MAIN: MOV TMOD,#01H ; 设置定时器模式
MOV TL0,#0B0H ; 设置定时初值
MOV TH0,#03CH
MOV IE, #82H ; 开T0 中断
SETB TR0 ; 定时器0开始计时
MOV R5, #20
MOV R6, #20
MIN1: JB 30H, $ ; 1 秒
CLR 30H
DJNZ R6, MIN1 ; 1 x 20 = 20 秒
MOV R6, #20
- - - ; 这里为 20 秒处理程序
CPL P1.0 ; 如 LED 20 秒 亮,20 秒 灭
JMP MIN1
END本回答被提问者和网友采纳
第2个回答  2013-02-28
单片机如果想有确延时的话,就用定时/计数器来实现,具体实法可以查资料,在这里一句两句也说不清。
如果不需要精确延时的话, 有一个小软件叫“单片机小精灵”可以帮你编写,你输入晶振,延时时间,就可以帮你编好了,自己编,不好编,因为涉及到时钟周期,指令占几个周期等等问题,用那个小软件很容易就实现了。
第3个回答  2013-03-01
用unsigned char或char型
一条do{}while(--i);反汇编是DJNZ 一次2us(中断时无法计算)

假设单片机晶振为12mhz,编写一段延时20秒的程序?
MOV R5, #20 MOV R6, #20MIN1: JB 30H, $ ; 1 秒 CLR 30H DJNZ R6, MIN1 ; 1 x 20 = 20 秒 MOV R6, #20 - - - ; 这里为 20 秒处理程序 CPL P1.0 ; 如 LED 20 秒亮,20 秒灭 JMP MIN1 END 本回答由提问者推荐 举报| 答案纠错 | 评论 2 0 GUEL86 采纳率:60% 来自:芝麻团...

试用循环转移指令编写延时20ms子程序。设单片机的晶振频率为12MHz
DELAY20MS: MOV R7,#04H ;1us NOP ;1us LOOP: MOV R6,#0F8H ;1us DJNZ R6,$ ;F8H * 2us=248x2us=496us DJNZ R7,LOOP ;2us RET ;2us ;总延时时间:t=1us+1us+(1us+496us+2us)*4+2us=20000us=20ms

...指令编写延时20ms的延时子程序。设单片机的晶振频率为12MHz。_百 ...
【答案】:fosc=12MHz,1机周为1μs。编程如下:DY20ms:MOV R7,#40 ;置外循环 DY21: MOV R6,#250 ;置内循环 DY22: DJNE R6,DY22 ;250×2=0.5ms DJNE R7,DY21 ;0.5ms×40=20ms RET

假设单片机的晶体振荡器的频率是12MHz,利用定时器1采用方式1定时20ms...
0.2秒方波,未说明是脉宽还是周期,只能认为是周期。则脉宽为0.2s÷2=100ms;define T100msAt20msCount 5 sbit WaveOut=P1^7;void Timer1()interrupt 3 { static unsigned char t20ms=0;TL1=tl1;\/\/ TH1=th1;\/\/按前面说的宏定义 if(++t20ms>=T100msAt20msCount){ t20ms-=T100msAt20msCoun...

求一个单片机的延时子程序延时20ms 谢谢
12M晶振 51单片机 (一)51C 循环 include <reg51.h> void delay_ms(unsigned int ms) \/\/ 延时子程序 { unsigned int a,b;for(a=ms;a>0;a--)for(b=123;b>0;b--);} void main (){ while(1){ delay_ms(20); \/\/20ms延时,数字即为多少毫秒 \/\/这里写自己的程序 } } (...

设MCS51单片机的晶振频率12MHz,请编程使得P1.0端输出频率为20kHz的方波...
20KHz,周期T=50us,半周期 t=25us;标准51单片机,12MHz晶振,机械周期为 1us,足以满足25us需求。使用定时器定时 25us,每次中断取反输出(P1.0)。小贴士:25us时间短,可以采用定时器的 8位自重装模式,程序就不需要在中断中继续赋初值了。

速回8051单片机的晶振为12MHz,下面是一段延时子程序,计算出该延时子程序...
R6,DEL2; 双周期2s ③这里循环20*125次,1000T DJNZ R7,DEL1; 双周期2s ④这里循环20次,40T RET; 单周期1s ⑤这里没有循环,1T 总共延时周期数=①+②+③+④+⑤=1062T 12M晶振时1T=1us,所以总延时时间=1062微妙=1.062毫秒 ...

单片机使用的晶体振荡器的频率是12MHz,运行下列延时程序的延时时间是多...
首先要明白,晶振12MHz时,机器周期1μs。MOV R7,#,指令周期1μs NOP,指令周期1μs DJNZ R,指令周期2μs RET,指令周期2μs 为计算程序执行时间,以注释形式给每条指令加上标号 DELAY: MOV R7,#250 ;1 LOOP2: MOV R6,#200 ;2 LOOP1:NOP ;3 NOP ;4 NOP...

51单片机晶振频率12MHz,编程实现P1.0输出频率为2KHz,占空比为50%的方波...
51单片机晶振频率12MHz,编程实现P1.0输出频率为2KHz,占空比为50%的方波,使用定时器 51单片机晶振频率12MHz,编程实现P1.0输出频率为2KHz,占空比为50%的方波,使用定时器T1工作方式2... 51单片机晶振频率12MHz,编程实现P1.0输出频率为2KHz,占空比为50%的方波,使用定时器T1工作方式2 展开 我来答 答题抽奖 首次...

和延时程序,最好简单点儿。基于单片机设计的红绿灯电路图。很狠很急...
可以循环嵌套结构:假设单片机晶振频率为12MHZ YS: MOV R6,#200 YS1: MOV R5,#250 YS2: NOP NOP DJNZ R5,YS2 DJNZ R6,YS1 DJNZ R7,YS RET 延时时间=((4×R5)×R6)×R7=((4×250)×R6)×R7=1000×200×5=1秒 延时子程序入口:R7=5 为定时1秒 R7=10 ...

相似回答