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

 我来答
散盘打坐有效果吗
2013-03-01 · TA获得超过337个赞
知道小有建树答主
回答量:191
采纳率:0%
帮助的人:98.2万
展开全部
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
-------
我只给你说了个思路,汇编指令没经常用过,很多都忘了,如果错误了,别见笑!
另外,单片机有定时器中断,用那个最舒服了。
GUEL86
推荐于2017-12-16 · TA获得超过5857个赞
知道大有可为答主
回答量:5538
采纳率:86%
帮助的人:2817万
展开全部
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
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lucz8
2013-02-28
知道答主
回答量:29
采纳率:0%
帮助的人:18.1万
展开全部
单片机如果想有确延时的话,就用定时/计数器来实现,具体实法可以查资料,在这里一句两句也说不清。
如果不需要精确延时的话, 有一个小软件叫“单片机小精灵”可以帮你编写,你输入晶振,延时时间,就可以帮你编好了,自己编,不好编,因为涉及到时钟周期,指令占几个周期等等问题,用那个小软件很容易就实现了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友b12a2e039
2013-03-01 · TA获得超过1533个赞
知道小有建树答主
回答量:819
采纳率:0%
帮助的人:705万
展开全部
用unsigned char或char型
一条do{}while(--i);反汇编是DJNZ 一次2us(中断时无法计算)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式