標題: 利用STC15單片機的PCA進行脈沖計數(shù)程序,計算頻率 [打印本頁]

作者: 老古董2號    時間: 2022-7-3 17:22
標題: 利用STC15單片機的PCA進行脈沖計數(shù)程序,計算頻率
利用STC15的PCA進行脈沖計數(shù),計算頻率

單片機源程序如下:
  1. /********************************************************
  2. *
  3. * 平臺:keil5 + STC154K58S4
  4. *
  5. * 頻率:24MHz
  6. *
  7. * 功能:使用PCA模塊的捕獲功能,判斷脈沖個數(shù),計算頻率,使用串口輸出
  8. *
  9. * 作者: 李鐵
  10. *
  11. * 時間:2022年7月3日
  12. *
  13. ***********************************************************/
  14. #include "config.h"
  15. #include <stdio.h>
  16. #include "bsp_pca.h"
  17. #include "bsp_uart.h"
  18. #include "delay.h"
  19. #define uchar unsigned char
  20. #define uint unsigned int

  21. void Delay10ms();                //@24.000MHz

  22. sbit LED = P0^0;       //輸出脈沖端口

  23. bit flag;
  24. uint count;//脈沖數(shù)
  25. uchar count_L,count_H;
  26. uint over_count; //PCA計數(shù)器溢出次數(shù)
  27. float Fre;
  28. uint count1;
  29. void main()
  30. {
  31.         UART_InitConfig();
  32.         TI = 1; //使用printf()函數(shù)時,TI必須為1
  33.         PCA_InitConfig();
  34.         EA = 1;
  35.         while(1)
  36.         {
  37.                 LED = ~LED;
  38. //                printf("hello,world!\n\r");
  39.                 printf("脈沖數(shù):%d\n\r",count);
  40.                 printf("溢出數(shù):%d\n\r",over_count);
  41.                 printf("頻率:%fHz\n\r",Fre);
  42.                 delay_ms(100);
  43.         }
  44. }

  45. void PCA(void) interrupt 7
  46. {
  47.         if(CCF0 == 1)
  48.         {
  49.                 CCF0 = 0;
  50.                 CCAP0H = 0;
  51.                 CCAP0L = 0;
  52.                 flag = 1;
  53.                 count++;
  54.                 if(flag)
  55.                 {
  56.                  flag = 0;
  57.                  count_H = CCAP0H;
  58.                  count_L = CCAP0L;
  59.                  count1 = count_H;
  60.                  count1 = (count1<<8)|count_L;
  61.                  Fre = 1/((65535*over_count+count1)*0.0000000416);
  62.                  over_count = 0;
  63.                 }
  64.                
  65.         }
  66.         if(CF == 1)
  67.         {
  68.                 CF = 0;
  69.                 over_count++;
  70.         }
  71. }
復制代碼

1.png (14.22 KB, 下載次數(shù): 120)

邏輯分析儀頻率

邏輯分析儀頻率

2.png (8.92 KB, 下載次數(shù): 119)

串口輸出頻率

串口輸出頻率

PCA脈沖計數(shù).zip

68.66 KB, 下載次數(shù): 90, 下載積分: 黑幣 -5

Keil代碼


作者: aking991    時間: 2022-7-4 10:20
你的程序能測到0.999997---1.000003Hz的范圍值嗎?
作者: 老古董2號    時間: 2022-7-4 10:40
aking991 發(fā)表于 2022-7-4 10:20
你的程序能測到0.999997---1.000003Hz的范圍值嗎?

我沒試,你可以試試,輸入口在P1.1
作者: gazeo    時間: 2022-12-3 21:24
aking991 發(fā)表于 2022-7-4 10:20
你的程序能測到0.999997---1.000003Hz的范圍值嗎?

可以的
作者: gazeo    時間: 2022-12-3 21:32
芯片型號 : IAP15W4K58S4-Student,這款單片機可以使用這個程序嗎
作者: gazeo    時間: 2022-12-4 19:31
為什么頻率是這樣算的啊Fre = 1/((65535*over_count+count1)*0.0000000416);
作者: gazeo    時間: 2023-2-19 11:21
怎么現(xiàn)在代碼用不了了
作者: lozhen    時間: 2023-5-5 13:08
你好,15W404AS,用了你的例程,一直無法測出穩(wěn)定的輸入頻率,用廠家的例程也是,不知道問題出在哪里,能指導一下嗎,V18913989589
作者: lozhen    時間: 2023-5-5 13:08
你好,15W404AS,用了你的例程,一直無法測出穩(wěn)定的輸入頻率,用廠家的例程也是,不知道問題出在哪里,能指導一下嗎,V18913989589




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1