打印

PIC32延时程序

[复制链接]
楼主: ousj
手机看帖
扫描二维码
随时随地手机跟帖
21
wyjie| | 2022-4-7 22:29 | 只看该作者 回帖奖励 |倒序浏览
你可以试试如下方法:
void sys40m_delay_1us(void)
{
    unsigned long t0 = _CP0_GET_COUNT();
    {
        while (_CP0_GET_COUNT() - t0 < (40/2)); // 为了补偿函数进出指令耗费的时间,这里数字需要微调一下去测量是否精确1us
    }   
}

使用特权

评论回复
22
dingy| | 2022-4-7 22:31 | 只看该作者
如果是确定的2微秒,不需要调整时间,可以用固定个数的_nop

使用特权

评论回复
23
ousj|  楼主 | 2022-4-7 22:35 | 只看该作者

但在我现在配置的情况下,用这个函数,目前只能停留在5us,其中,我把 “40/2”这个直接改为1。

使用特权

评论回复
24
bqyj| | 2022-4-7 22:37 | 只看该作者
拟示波器测得的波形是多少

使用特权

评论回复
25
ousj|  楼主 | 2022-4-7 22:39 | 只看该作者
5us。

使用特权

评论回复
26
ousj|  楼主 | 2022-4-7 22:42 | 只看该作者
   while (_CP0_GET_COUNT()-t0 < 1);

使用特权

评论回复
27
heweibig| | 2022-4-7 22:45 | 只看该作者
是不是要把晶振更换一下

使用特权

评论回复
28
ousj|  楼主 | 2022-4-7 22:47 | 只看该作者
我的晶振用的是8M的。晶振两脚上的电容用的是22pf。

使用特权

评论回复
29
ousj|  楼主 | 2022-4-7 22:49 | 只看该作者
这个us级别延时,需要随时更改延时时间

使用特权

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

使用特权

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

使用特权

评论回复
32
jiahy| | 2022-4-7 22:59 | 只看该作者
频率提高到80MHz去调整

使用特权

评论回复
33
songqian17| | 2022-4-7 23:02 | 只看该作者
编译优化级别提高一下去测试;

使用特权

评论回复
34
liliang9554| | 2022-4-7 23:04 | 只看该作者
我想知道PIC32的单片机的主时钟能够跑到多少Mhz,一般你们使用多少的?

使用特权

评论回复
35
ousj|  楼主 | 2022-4-7 23:06 | 只看该作者
嗯,那我按大家的说法挨个排查一下,谢谢哈

使用特权

评论回复
36
chenqianqian| | 2022-4-8 07:46 | 只看该作者
那估计是程序没写对了

使用特权

评论回复
37
tpgf| | 2022-5-2 15:09 | 只看该作者
这个应该没有问题啊

使用特权

评论回复
38
xiaoqizi| | 2022-5-2 15:15 | 只看该作者
实际延时时间是多久呢

使用特权

评论回复
39
木木guainv| | 2022-5-2 15:24 | 只看该作者
涉及到时钟的配置哈

使用特权

评论回复
40
磨砂| | 2022-5-2 15:31 | 只看该作者
为什么初始化代码这么多呢

使用特权

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

本版积分规则