微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 关于PIC32延时程序的问题

关于PIC32延时程序的问题

时间:10-02 整理:3721RD 点击:
各位大神老师好:
请教一个问题。据说PIC32单片机的延时,可以用内部计数器进行延时。我想延时2us,但是,死活都不能达到2us,示波器显示是40us。示波器用的是虚拟示波器。系统时钟是40Mhz
下面的程序,在网上下的,但是不是很理解。哪位大神,帮忙讲解下。不理解我过不去这个梗,心里难受


  1. #define SYSCLK_FREQUENCY       40000000     //* 200MHz,修改成你自己的系统时钟
  2. #define PBCLK7_FREQUENCY        SYSCLK_FREQUENCY
  3. #define CORE_TIMER_FREQUENCY        (PBCLK7_FREQUENCY / 2)
  4. #define CORE_TIMER_MILLISECONDS     (CORE_TIMER_FREQUENCY / 100)
  5. #define CORE_TIMER_MICROSECONDS     (CORE_TIMER_FREQUENCY / 10000)

  6. unsigned int __attribute__((nomips16)) ReadCoreTimer(void)
  7. {
  8.     unsigned int timer;

  9.     asm volatile("mfc0   %0, $9" : "=r"(timer));

  10.     return timer;
  11. }

  12. void delay_us(unsigned int delayUs)
  13. {
  14.     unsigned int delayStart;

  15.     delayStart = ReadCoreTimer();
  16.     while ((ReadCoreTimer() - delayStart) < (delayUs * CORE_TIMER_MICROSECONDS));
  17. }

  18. void delay_ms(unsigned int delayUs)
  19. {
  20.     unsigned int delayStart;

  21.     delayStart = ReadCoreTimer();
  22.     while ((ReadCoreTimer() - delayStart) < (delayUs * CORE_TIMER_MILLISECONDS));
  23. }

复制代码


我碰到了和你类似的问题,我用得是16位的片子,我写延时函数,晶振12M 按理说,fcy是6M所以执行一条指令应该是1/6us,我很确定,我没有用任何分频,DONE也关闭了,我在主循环里让IO口电平翻转,但是,led=~led;nop;我用示波器看电平翻转,是3us,很是不理解

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top