打印
[MCU]

这段程序问什么能实现40MHz--?1ms

[复制链接]
717|23
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jiaxw|  楼主 | 2019-10-13 21:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
hz, TMS, TI

void delayms(int ms)
{   
   int ii,jj;
   if (ms<1) ms=1;
   for(ii=0;ii<ms;ii++)
     for(jj=0;jj<3338;jj++);    //40MHz--1ms      
}

使用特权

评论回复

相关帖子

沙发
spark周| | 2019-10-13 21:12 | 只看该作者


首先要先看系统系统和指令时钟的关系,实现1ms,靠的是指令的延时。

使用特权

评论回复
板凳
heweibig| | 2019-10-13 21:16 | 只看该作者
嗯,如果定时器有空余,最好用定时器来做延时。

使用特权

评论回复
地板
午夜粪车| | 2019-10-13 21:20 | 只看该作者

40mhz 没有分频了话 也就是说一个时钟周期是1/40us,,,这个程序是说   ms等于几 就是延时几毫秒。最少是延时1ms,因为这句话(  if (ms<1) ms=1;)
接着,,,两个for循环意思是 数这么多下:ms*3338
数一下的时间是一个机器周期,    机器周期=2n*时钟周期(n代表这个类型的mcu的一个机器周期是由几个状态周期组成的,而一个状态周期=2个时钟周期)

使用特权

评论回复
5
zhaoxqi| | 2019-10-18 17:03 | 只看该作者

假设你用的51内核,机器周期=12时钟周期
当ms=1时
delay=1*3338*1/40*12=1001.4us=1.0014ms

使用特权

评论回复
6
huangchui| | 2019-10-18 17:06 | 只看该作者
这种方法对定时要求不高的时候  可以用

使用特权

评论回复
7
jiajs| | 2019-10-18 17:10 | 只看该作者
可以实现   不过用C语言实现   精度可能不高   如果想要精确实现   建议使用汇编语言实现   采用混合编程   这一块   需要使用C语言实现汇编语言的调用

使用特权

评论回复
8
zhanghqi| | 2019-10-18 17:15 | 只看该作者
这种延迟精度很差劲的,不高的话可以用

使用特权

评论回复
9
zhenykun| | 2019-10-18 17:17 | 只看该作者
看你选什么晶振了,有公式的可以计算 不过精度不高

使用特权

评论回复
10
wyjie| | 2019-10-18 17:24 | 只看该作者
汇编的精度还是很不错的

使用特权

评论回复
11
jlyuan| | 2019-10-18 17:27 | 只看该作者

应该是分频了吧,要不怎么可能是1ms呢?

使用特权

评论回复
12
yszong| | 2019-10-18 17:30 | 只看该作者
可以用啊,用定时器也得有响应中断的时间,都不会特别准确,做一般的延时足够了。

使用特权

评论回复
13
dengdc| | 2019-10-18 17:33 | 只看该作者
这延时的时间系统时钟有关,但是如果这样延时有点浪费处理器资源。

使用特权

评论回复
14
jiaxw|  楼主 | 2019-10-18 17:37 | 只看该作者
嗯,我晓得了

使用特权

评论回复
15
yszong| | 2019-10-18 17:41 | 只看该作者
这个对应的时钟是40Mhz吗

使用特权

评论回复
16
dengdc| | 2019-10-18 17:44 | 只看该作者
这个也没有看懂,可能计算测量的。

使用特权

评论回复
17
heweibig| | 2019-10-18 17:48 | 只看该作者
数据大小这个根据系统时钟计算的 。

使用特权

评论回复
18
wuhany| | 2019-10-18 17:51 | 只看该作者
为什么是3338?

使用特权

评论回复
19
shimx| | 2019-10-18 17:54 | 只看该作者

40MHz--1ms这个是什么意思

使用特权

评论回复
20
lizye| | 2019-10-18 17:58 | 只看该作者

根本没计算的 依据。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

825

主题

9762

帖子

4

粉丝