找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3285|回复: 8
收起左侧

利用STC15单片机的PCA进行脉冲计数程序,计算频率

[复制链接]
ID:739692 发表于 2022-7-3 17:22 | 显示全部楼层 |阅读模式
利用STC15的PCA进行脉冲计数,计算频率

单片机源程序如下:
  1. /********************************************************
  2. *
  3. * 平台:keil5 + STC154K58S4
  4. *
  5. * 频率:24MHz
  6. *
  7. * 功能:使用PCA模块的捕获功能,判断脉冲个数,计算频率,使用串口输出
  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;//脉冲数
  25. uchar count_L,count_H;
  26. uint over_count; //PCA计数器溢出次数
  27. float Fre;
  28. uint count1;
  29. void main()
  30. {
  31.         UART_InitConfig();
  32.         TI = 1; //使用printf()函数时,TI必须为1
  33.         PCA_InitConfig();
  34.         EA = 1;
  35.         while(1)
  36.         {
  37.                 LED = ~LED;
  38. //                printf("hello,world!\n\r");
  39.                 printf("脉冲数:%d\n\r",count);
  40.                 printf("溢出数:%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. }
复制代码

逻辑分析仪频率

逻辑分析仪频率

串口输出频率

串口输出频率

PCA脉冲计数.zip

68.66 KB, 下载次数: 90, 下载积分: 黑币 -5

Keil代码

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:65956 发表于 2022-7-4 10:20 | 显示全部楼层
你的程序能测到0.999997---1.000003Hz的范围值吗?
回复

使用道具 举报

ID:739692 发表于 2022-7-4 10:40 | 显示全部楼层
aking991 发表于 2022-7-4 10:20
你的程序能测到0.999997---1.000003Hz的范围值吗?

我没试,你可以试试,输入口在P1.1
回复

使用道具 举报

ID:980937 发表于 2022-12-3 21:24 | 显示全部楼层
aking991 发表于 2022-7-4 10:20
你的程序能测到0.999997---1.000003Hz的范围值吗?

可以的
回复

使用道具 举报

ID:980937 发表于 2022-12-3 21:32 | 显示全部楼层
芯片型号 : IAP15W4K58S4-Student,这款单片机可以使用这个程序吗
回复

使用道具 举报

ID:980937 发表于 2022-12-4 19:31 | 显示全部楼层
为什么频率是这样算的啊Fre = 1/((65535*over_count+count1)*0.0000000416);
回复

使用道具 举报

ID:980937 发表于 2023-2-19 11:21 | 显示全部楼层
怎么现在代码用不了了
回复

使用道具 举报

ID:387957 发表于 2023-5-5 13:08 | 显示全部楼层
你好,15W404AS,用了你的例程,一直无法测出稳定的输入频率,用厂家的例程也是,不知道问题出在哪里,能指导一下吗,V18913989589
回复

使用道具 举报

ID:387957 发表于 2023-5-5 13:08 | 显示全部楼层
你好,15W404AS,用了你的例程,一直无法测出稳定的输入频率,用厂家的例程也是,不知道问题出在哪里,能指导一下吗,V18913989589
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表