发新帖我要提问
12
返回列表
打印

PIC32延时程序

[复制链接]
楼主: ousj
手机看帖
扫描二维码
随时随地手机跟帖
21
gongche| | 2020-9-3 22:53 | 只看该作者 回帖奖励 |倒序浏览

你可以试试如下方法:
void sys40m_delay_1us(void)
{
    unsigned long t0 = _CP0_GET_COUNT();
    {
        while (_CP0_GET_COUNT() - t0 < (40/2)); // 为了补偿函数进出指令耗费的时间,这里数字需要微调一下去测量是否精确1us
    }   
}

使用特权

评论回复
22
huwr| | 2020-9-3 23:01 | 只看该作者
如果是确定的2微秒,不需要调整时间,可以用固定个数的_nop

使用特权

评论回复
23
ousj|  楼主 | 2020-9-3 23:05 | 只看该作者
但在我现在配置的情况下,用这个函数,目前只能停留在5us,其中,我把 “40/2”这个直接改为1。

使用特权

评论回复
24
bqyj| | 2020-9-3 23:11 | 只看该作者
拟示波器测得的波形是多少

使用特权

评论回复
25
ousj|  楼主 | 2020-9-3 23:14 | 只看该作者
5us。

使用特权

评论回复
26
ousj|  楼主 | 2020-9-3 23:17 | 只看该作者
   while (_CP0_GET_COUNT()-t0 < 1);

使用特权

评论回复
27
renyaq| | 2020-9-3 23:21 | 只看该作者
是不是要把晶振更换一下

使用特权

评论回复
28
ousj|  楼主 | 2020-9-3 23:25 | 只看该作者
我的晶振用的是8M的。晶振两脚上的电容用的是22pf。

使用特权

评论回复
29
ousj|  楼主 | 2020-9-3 23:32 | 只看该作者
这个us级别延时,需要随时更改延时时间

使用特权

评论回复
30
xxrs| | 2020-9-3 23:37 | 只看该作者
先关全局中断,在插入nop空操作,再开全局中断,微调里L面nop个数,应该可以完成实现,还有不要用函数,用宏实现,因为函数调用时间并不可控,每次可能有些差别。

使用特权

评论回复
31
ousj|  楼主 | 2020-9-3 23:40 | 只看该作者
谢谢大神的指点,但我这个,延时时间是可变的,也许这次是2us,下次就是20us,延时时间不定。

使用特权

评论回复
32
huwr| | 2020-9-3 23:44 | 只看该作者
频率提高到80MHz去调整

使用特权

评论回复
33
songqian17| | 2020-9-3 23:48 | 只看该作者
编译优化级别提高一下去测试;

使用特权

评论回复
34
ousj|  楼主 | 2020-9-3 23:52 | 只看该作者

嗯,那我按大家的说法挨个排查一下,谢谢哈

使用特权

评论回复
35
勇敢的大白菜| | 2020-9-7 13:27 | 只看该作者
感谢大家的分享,受益匪浅,学习到很多东西,感谢。

使用特权

评论回复
36
嵌入小菜菜| | 2020-9-7 13:33 | 只看该作者
我想知道PIC32的单片机的主时钟能够跑到多少Mhz,一般你们使用多少的?

使用特权

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

本版积分规则