求助单片机软件延时10ms的程序和计算方法(急)

谁能帮忙弄个单片机软件延时10ms的程序并解释计算方法???希望能够得到你的帮助!!!12MHZ的晶振!要单片机的!不要C语言的!... 谁能帮忙弄个单片机软件延时10ms的程序并解释计算方法???希望能够得到你的帮助!!!
12MHZ的晶振 !要单片机的!不要C语言的!
展开
 我来答
做而论道
高能答主

2010-01-11 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.2亿
展开全部
程序如下.
ORG 0000H
SJMP START
ORG 0030H
START:
MOV TMOD, #01H ;T0定时方式1
MOV TH0, #0D8H ;10ms@12MHz
MOV TL0, #0F0H ;65536-10000=D8F0H
SETB TR0 ;启动.

WAIT: ;下面使用查询方式.
JNB TF0, WAIT ;没有溢出就循环等待.
MOV TH0, #0D8H ;到了10ms,重新写入初始值.
MOV TL0, #0F0H ;65536-10000=D8F0H
CLR TF0
;-----------------------------------------------
;在这里编写 每到10ms 应该执行的指令.
CPL P1.0 ;可以使外接的LED闪光.
;-----------------------------------------------
SJMP WAIT ;继续查询.
END
北京康思
2018-09-20 广告
单片机延时计算方法  用延时函数就可以实现;  首先,设置定时zd器工作方式,也就是TMOD,在设置TH0/1,TL0/1的初版值,也就是定时间的设置,然后设置中断允许,并开中断就可以; 权 参考例子如下:  #include  void ... 点击进入详情页
本回答由北京康思提供
思香学8
2010-01-16 · TA获得超过3672个赞
知道小有建树答主
回答量:2110
采纳率:69%
帮助的人:500万
展开全部

要单片机的!不要C语言的!--------同志,我不懂这句话哦,“单片机的”是什么意思啊?

我有几个延时程序,如图

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
t_cl
2010-01-10 · TA获得超过497个赞
知道小有建树答主
回答量:150
采纳率:0%
帮助的人:89.4万
展开全部
不建议使用程序delay延时,有中断时经常被打断,你经常又不能关中断。下面是给另一个人的程序。T0定时10ms,T1计数1次溢出,就不把T1部分删了。TH0,TL0的计算很简单,12M晶振,1个周期1us,10ms10000个周期,655356-10000结果赋给他们即可。
另一个人的问题在http://zhidao.baidu.com/question/132559414.html

/*
testT0T1.c
芯片:AT89C51
晶振:12MHz
*/

#include <reg51.h>

bit g_bitT0Over; //T0定时到标志
bit g_bitT1Over; //T1计数到标志

void Init(void)
{
EA = 0;
//假设T0定时10ms
TMOD = 0x01;
TH0 = 0xD8;
TL0 = 0xF0;
//假设T1计数1次溢出
TMOD |= 0x50; //不知道你要计数多少,使用16计数器
TH1 = 0xFF;
TL1 = 0xFF;
//启动
TF0 = 0;
TF1 = 0; //可以不清这两个
TR0 = 1;
TR1 = 1;
EA = 1;
ET0 = 2;
ET1 = 1;
}

void main (void)
{
g_bitT0Over = 0;
g_bitT1Over = 0;
Init();
while(1)
{
if (g_bitT0Over)
{
g_bitT0Over = 0;
//do something else
}
if (g_bitT1Over)
{
g_bitT1Over = 0;
//do something else
}
}
}

//T0中断
void T0_Int(void) interrupt 1
{
TH0 = 0xD8;
TL0 = 0xF0;
g_bitT0Over = 1;
}

//T1中断
void T1_Int(void) interrupt 3
{
TH1 = 0xFF;
TL1 = 0xFF;
g_bitT1Over = 1;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hychyc_2008
2010-01-10 · TA获得超过9741个赞
知道大有可为答主
回答量:1099
采纳率:100%
帮助的人:685万
展开全部
答:C程序设计的。
#include<reg51.h> //假设晶振12MHZ,80C51系列单片机
void delay(unsigned char s); //延时函数 ,延时s毫秒

void delay(unsigned char s) //延时函数延时s毫秒是根据12MHZ晶振得到
//的,略有误差
{
unsigned char i=0;
while(s--)
for(i=125;i>0;i--)
{;}
}
void main()
{
do
{
delay(10); //延时10ms
....
}
while(1);

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lwb807
2010-01-21 · TA获得超过128个赞
知道小有建树答主
回答量:190
采纳率:0%
帮助的人:120万
展开全部
12M的晶振就是执行一条单周期的指令是1US
10ms=10000US,上两个寄存器延时下就行
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式