stc12c5a60s2单片机,11.0592MHz晶振。5us和5ms精确延时函数

 我来答
774051719a
推荐于2017-09-22 · TA获得超过1231个赞
知道小有建树答主
回答量:113
采纳率:100%
帮助的人:148万
展开全部
哥们你想多了吧!
11.059200MHz晶振下,一个机器指令周期 t=((1*12)/11059200) = 1.0850694us,也就是一个空指令也要1.0850694us,所以5us的延时只能是5个空指令周期,并且误差很大,写成延迟函数误差更大。
在程序中直接:
_NOP_();_NOP_();_NOP_();_NOP_();_NOP_();
这就延时了 5*1.0850694us。
至于5ms的话可以使用定时器,但是误差较大:
void delay_5ms(void)
{
TMOD = 0x01;

TH0 = 0x12;

TL0 = 0x00;

TR0 = 1;

while(TF0 == 0);

TF0 = 0;

TR0 = 0;

}
执行该函数时间会略大于5ms,略大于的部分主要是:
1、进入和退出函数的入栈和出栈操作会占用几个机器周期,具体的自己可以算。
2、初始化定时器和停止定时器也需要几到十几个机器周期那样,具体自己调试算一下。
整体来说,这样误差会在0.1%--1%那样,你可以根据情况来适当的缩小TH0和TL0里面的值。
更多追问追答
追问
这款单片机默认情况是12T还是1T
跟延时有关么
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式