单片机中时间问题
解决时间 2021-04-09 16:40
- 提问者网友:刺鸟
- 2021-04-09 13:45
1、delay(unsigned int x)
{ while(x--);}
以及
2、delay(unsigned int x)
{for (i=0,i这两个时间函数,他们所延迟的时间分别是X的多少倍?怎么结算的!
谢谢高手指点!
函数2中的I是定义的全局变量!单片机的晶振为12M。
最佳答案
- 五星知识达人网友:纵马山川剑自提
- 2021-04-09 14:26
C语言的执行时间,从来就没有计算公式。
C程序的执行时间,和操作系统有很大的关系,和编译软件也有关,在单片机中,更和变量的存储类型有关(如单字节变量、两字节变量)。
因为有如此多的不确定因素,所以,从来就没有办法计算C的执行时间。
只是可以在仿真调试的时候,进行实际测量,得到一些(难以通用的)经验数据。
楼主要想准确的控制时间,应该研究使用汇编语言,或者使用硬件定时器。
C语言,只能干些粗活。
全部回答
- 1楼网友:一袍清酒付
- 2021-04-09 18:16
这个取决于你使用晶振的大小!
比如说:12MHz的
每一个指令时间为:1us
如此类推!
当X为1000,就相当于1ms的延时作用
- 2楼网友:痴妹与他
- 2021-04-09 17:26
可以用定时器中断时现
比如用定时器1
通过写TMOD寄存器进行如下设置:
C/T=0 定时/计数器1工作于定时方式
M1=1;M0=0--选择工作模式1,构成最大定时器
GATE=0
再通过写TL1和TL0指定定时时间,
比如定时50ms可设为
TL1 = 0x13; TH1 = 0x2C; //指定定时时间为50ms
//65536-50/(11.0592/12)=11283=2C13h
然后开定时器中断
ET1 = 1
当计时满后会进入定时器中断服务程序
在中断服务程序中这样设计:
TL1 = 0x13; TH1 = 0x2C; //重新赋值
timer_count++;//定时器计数器加1
timer_count为自己定义的一个变量,每进入一次中断,对变量加1,然后再退出中断,这样可以实现任意时间的定时,比如定时1s,即当timer_count等于20时时定时时间即为1s。
我是用C语言写的,你可以转为汇编语言。
- 3楼网友:往事隔山水
- 2021-04-09 17:14
两个函数的延时时间都是一样的,随X的值变化
一般一个机器周期的时间都是1us,例如调用延时函数是写delay(1000);那就是延时1000us
- 4楼网友:枭雄戏美人
- 2021-04-09 15:48
随便找个51的书就有,写出公式你也不一定看得懂.
t = 12 * ( 65536 - m ) / fosc
其中:t 代表需要设定的时间
m 代表计时器初值
fosc 代表晶振频率
12 代表分频数
注:本公式仅限于12分频类51系列单片机,其他分频方式单片机请参照数据手册自行修改
多谢!
我要举报
大家都在看
推荐资讯