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

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

[复制链接]
  • TA的每日心情
    开心
    2024-2-29 15:49
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    8

    主题

    18

    回帖

    94

    积分

    注册会员

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

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

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

    截图202403192154471552.jpg
    回复 送花

    使用道具 举报

  • TA的每日心情
    开心
    15 小时前
  • 签到天数: 164 天

    [LV.7]常住居民III

    9

    主题

    838

    回帖

    3281

    积分

    论坛元老

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

    使用道具 举报

    该用户从未签到

    550

    主题

    9339

    回帖

    1万

    积分

    管理员

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




    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    2024-2-29 15:49
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    8

    主题

    18

    回帖

    94

    积分

    注册会员

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

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

    使用道具 举报

  • TA的每日心情
    开心
    15 小时前
  • 签到天数: 164 天

    [LV.7]常住居民III

    9

    主题

    838

    回帖

    3281

    积分

    论坛元老

    积分
    3281
    发表于 2024-3-20 18:41:33 | 显示全部楼层
    Allspace 发表于 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, 2024-5-6 15:07 , Processed in 0.154227 second(s), 47 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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