PIC32延时程序

[复制链接]
1999|41
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
    }   
}
dingy 发表于 2022-4-7 22:31 | 显示全部楼层
如果是确定的2微秒,不需要调整时间,可以用固定个数的_nop
 楼主| ousj 发表于 2022-4-7 22:35 | 显示全部楼层

但在我现在配置的情况下,用这个函数,目前只能停留在5us,其中,我把 “40/2”这个直接改为1。
bqyj 发表于 2022-4-7 22:37 | 显示全部楼层
拟示波器测得的波形是多少
 楼主| ousj 发表于 2022-4-7 22:39 | 显示全部楼层
 楼主| ousj 发表于 2022-4-7 22:42 | 显示全部楼层
   while (_CP0_GET_COUNT()-t0 < 1);
heweibig 发表于 2022-4-7 22:45 | 显示全部楼层
是不是要把晶振更换一下
 楼主| ousj 发表于 2022-4-7 22:47 | 显示全部楼层
我的晶振用的是8M的。晶振两脚上的电容用的是22pf。
 楼主| ousj 发表于 2022-4-7 22:49 | 显示全部楼层
这个us级别延时,需要随时更改延时时间
xxrs 发表于 2022-4-7 22:54 | 显示全部楼层
先关全局中断,在插入nop空操作,再开全局中断,微调里L面nop个数,应该可以完成实现,还有不要用函数,用宏实现,因为函数调用时间并不可控,每次可能有些差别。
 楼主| ousj 发表于 2022-4-7 22:56 | 显示全部楼层
谢谢大神的指点,但我这个,延时时间是可变的,也许这次是2us,下次就是20us,延时时间不定。
jiahy 发表于 2022-4-7 22:59 | 显示全部楼层
频率提高到80MHz去调整
songqian17 发表于 2022-4-7 23:02 | 显示全部楼层
编译优化级别提高一下去测试;
liliang9554 发表于 2022-4-7 23:04 | 显示全部楼层
我想知道PIC32的单片机的主时钟能够跑到多少Mhz,一般你们使用多少的?
 楼主| ousj 发表于 2022-4-7 23:06 | 显示全部楼层
嗯,那我按大家的说法挨个排查一下,谢谢哈
chenqianqian 发表于 2022-4-8 07:46 来自手机 | 显示全部楼层
那估计是程序没写对了
tpgf 发表于 2022-5-2 15:09 | 显示全部楼层
这个应该没有问题啊
xiaoqizi 发表于 2022-5-2 15:15 | 显示全部楼层
实际延时时间是多久呢
木木guainv 发表于 2022-5-2 15:24 | 显示全部楼层
涉及到时钟的配置哈
磨砂 发表于 2022-5-2 15:31 | 显示全部楼层
为什么初始化代码这么多呢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部