找回密码
 立即注册
查看: 752|回复: 4

STC8G1K08 DFN8封装的芯片有脉冲计数功能吗?

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2024-02-29 15:49:17

15

主题

27

回帖

143

积分

注册会员

积分
143
发表于 2024-3-19 21:56:41 | 显示全部楼层 |阅读模式
数据手册已经看了,想再确认一下。

有的地方说不支持:
截图202403192154542152.jpg

有的地方又说支持:
截图202403192156185052.jpg

截图202403192154471552.jpg
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:527
  • 最近打卡:2025-05-07 00:40:41

10

主题

1162

回帖

5197

积分

论坛元老

积分
5197
发表于 2024-3-20 00:27:02 | 显示全部楼层
你用的是STC8G1K08 DFN8封装  还是STC8G1K08A DFN8封装的?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:60
  • 最近打卡:2025-05-07 11:01:36

718

主题

1万

回帖

1万

积分

管理员

积分
15682
发表于 2024-3-20 05:51:41 | 显示全部楼层
脉冲计数,STC8 足够的快,就用
===INT0/INT1/INT2/INT3/INT4 有中断就软件计数就行了
===T0/T1 也可以计数,你要设置计多少个脉冲就溢出中断




回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2024-02-29 15:49:17

15

主题

27

回帖

143

积分

注册会员

积分
143
发表于 2024-3-20 08:50:53 | 显示全部楼层
angm*** 发表于 2024-3-20 00:27
你用的是STC8G1K08 DFN8封装  还是STC8G1K08A DFN8封装的?

STC8G1K08A DFN8. 所以根据上面的表格,STC8G1K08A DFN8是有PCA功能的,而STC8G1K08 DFN8是没有PCA功能的?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:527
  • 最近打卡:2025-05-07 00:40:41

10

主题

1162

回帖

5197

积分

论坛元老

积分
5197
发表于 2024-3-20 18:41:33 | 显示全部楼层
Alls*** 发表于 2024-3-20 08:50
STC8G1K08A DFN8. 所以根据上面的表格,STC8G1K08A DFN8是有PCA功能的,而STC8G1K08 DFN8是没有PCA功能的 ...

是的,STC8G1K08A DFN8是有PCA功能的


可以用这个程序来做脉冲计数
  1. /*
  2. STC8G 系列 STC8G1K08A  SOP8/DFN8/DIP8
  3. Pin 1. CCP2_2/CCP2/MCLKO/NRST/SCL_2/MOSI/RxD_3/T1CLKO/T0/INT2/ADC4/P5.4
  4. Pin 2. Vcc/AVc
  5. Pin 3. ECI_2/ECI/CCP2_3/SDA_2/SS/TxD_3/T0CLKO/T1/INT3/ADC5/P5.5
  6. Pin 4. Gnd/AGnd
  7. Pin 5. P3.0/ADC0/RxD/INT4
  8. Pin 6. P3.1/ADC1/TxD/CCP0_2/ECI_3
  9. Pin 7. P3.2/ADC2/RxD_2/INT0/SCLK/SCL/CCP0/CCP0_3
  10. Pin 8. P3.3/ADC3/TxD_2/INT1/MISO/SDA/CCP1/CCP1_2/CCP1_3
  11. */
  12. //PCA 捕获测量脉冲宽度
  13. #include "reg51.h"    //包含头文件 reg51.h
  14. #include "intrins.h"
  15. sfr     CCON    =   0xd8;
  16. sbit    CF      =   CCON^7;
  17. sbit    CR      =   CCON^6;
  18. sbit    CCF2    =   CCON^2;
  19. sbit    CCF1    =   CCON^1;
  20. sbit    CCF0    =   CCON^0;
  21. sfr     CMOD    =   0xd9;
  22. sfr     CL      =   0xe9;
  23. sfr     CH      =   0xf9;
  24. sfr     CCAPM0  =   0xda;
  25. sfr     CCAP0L  =   0xea;
  26. sfr     CCAP0H  =   0xfa;
  27. sfr     PCA_PWM0 =  0xf2;
  28. sfr     CCAPM1  =   0xdb;
  29. sfr     CCAP1L  =   0xeb;
  30. sfr     CCAP1H  =   0xfb;
  31. sfr     PCA_PWM1 =  0xf3;
  32. sfr     CCAPM2  =   0xdc;
  33. sfr     CCAP2L  =   0xec;
  34. sfr     CCAP2H  =   0xfc;
  35. sfr     PCA_PWM2 =  0xf4;
  36. sfr     P_SW1   =   0xa2;
  37. sfr     P0M1    =   0x93;
  38. sfr     P0M0    =   0x94;
  39. sfr     P1M1    =   0x91;
  40. sfr     P1M0    =   0x92;
  41. sfr     P2M1    =   0x95;
  42. sfr     P2M0    =   0x96;
  43. sfr     P3M1    =   0xb1;
  44. sfr     P3M0    =   0xb2;
  45. sfr     P4M1    =   0xb3;
  46. sfr     P4M0    =   0xb4;
  47. sfr     P5M1    =   0xc9;
  48. sfr     P5M0    =   0xca;
  49. unsigned char cnt;                              //存储PCA计时溢出次数
  50. unsigned long count0;                           //记录上一次的捕获值
  51. unsigned long count1;                           //记录本次的捕获值
  52. unsigned long length;                           //存储信号的时间长度
  53. void PCA_Isr() interrupt 7
  54. {
  55.     if (CF)
  56.     {
  57.         CF = 0;
  58.         cnt++;                                  //PCA计时溢出次数+1
  59.     }
  60.     if (CCF0)
  61.     {
  62.         CCF0 = 0;
  63.         count0 = count1;                        //备份上一次的捕获值
  64.         ((unsigned char *)&count1)[3] = CCAP0L;
  65.         ((unsigned char *)&count1)[2] = CCAP0H;
  66.         ((unsigned char *)&count1)[1] = cnt;
  67.         ((unsigned char *)&count1)[0] = 0;
  68.         length = count1 - count0;               //length保存的即为捕获的脉冲宽度
  69.     }
  70. }
  71. void main()
  72. {
  73.     P0M0 = 0x00;
  74.     P0M1 = 0x00;
  75.     P1M0 = 0x00;
  76.     P1M1 = 0x00;
  77.     P2M0 = 0x00;
  78.     P2M1 = 0x00;
  79.     P3M0 = 0x00;
  80.     P3M1 = 0x00;
  81.     P4M0 = 0x00;
  82.     P4M1 = 0x00;
  83.     P5M0 = 0x00;
  84.     P5M1 = 0x00;
  85.        
  86.     P_SW1 = 0x00;        //ECI/P5.5, CCP0/P3.2, CCP1/P3.3, CCP2/P5.4
  87. //  P_SW1 = 0x10;        //ECI_2/P5.5, CCP0_2/P3.1, CCP1_2/P3.3, CCP2_2/P5.4
  88. //  P_SW1 = 0x20;        //ECI_3/P3.1, CCP0_3/P3.2, CCP1_3/P3.3, CCP2_3/P5.5
  89.     cnt = 0;                                    //用户变量初始化
  90.     count0 = 0;
  91.     count1 = 0;
  92.     length = 0;
  93.     CCON = 0x00;           //PCA 控制寄存器( CCON)停止PCA定时器, 清除CF和CCF0标志。
  94.     CMOD = 0x09;                                //PCA时钟为系统时钟,使能PCA计时中断
  95.     CL = 0x00;             //PCA 计数器寄存器( CL, CH)清零。
  96.     CH = 0x00;             //CH 计数器寄存器清零。
  97.     CCAPM0 = 0x11;                              //PCA模块0为16位捕获模式(下降沿捕获)
  98. //  CCAPM0 = 0x21;                              //PCA模块0为16位捕获模式(上升沿捕获)
  99. //  CCAPM0 = 0x31;                              //PCA模块0为16位捕获模式(边沿捕获)
  100.     CCAP0L = 0x00;             //PCA 模块模式捕获值/比较值寄存器( CCAPnL, CCAPnH)
  101.     CCAP0H = 0x00;         //清零
  102.     CR = 1;                                     //启动PCA计时器
  103.     EA = 1;                // CPU 允许响应中断请求。
  104.     while (1);
  105. }
复制代码



回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-7 14:41 , Processed in 0.117962 second(s), 74 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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