[51单片机] 想用STC的PCA捕获功能实现时间测量,发现捕获计数器值不变

[复制链接]
2039|3
 楼主| any_014 发表于 2015-4-7 14:39 | 显示全部楼层 |阅读模式
本帖最后由 any_014 于 2015-4-7 15:38 编辑

本来是个双积分AD测量,对基准电压积分固定时间后,转为对被测电压反向积分,运放产生的中断触发PCA中断,然后就是下个周期,周而复始。
想用PCA测量对被测电压的反向积分时间,发现能进了中断(有LED灯亮/灭),但串口发上来的数始终为0。PCA相关代码已贴上,附件工程文件。


PCA相关部分:
  1. void PCAInit()
  2. {
  3.         CCON = 0;                       //Initial PCA control register
  4.                                     //PCA timer stop running
  5.                                     //Clear CF flag
  6.                                     //Clear all module interrupt flag
  7.     CL = 0;                         //Reset PCA base timer
  8.     CH = 0;
  9.     CMOD = 0x00;                    //Set PCA timer clock source as Fosc/12

  10.     CCAPM0 = 0x11;                  //PCA module-0 capture by a negative tigger on CEX0(P3.7) and enable PCA interrupt
  11. //  CCAPM0 = 0x21;                  //PCA module-0 capture by a rising edge on CEX0(P3.7) and enable PCA interrupt
  12. //  CCAPM0 = 0x31;                  //PCA module-0 capture by a transition (falling/rising edge) on CEX0(P3.7) and enable PCA interrupt
  13.    
  14. //        value = T4KHz;                  //Disable PCA timer overflow interrupt
  15. //    CCAP1L = value;                 //P3.5 output 4KHz square wave
  16. //    CCAP1H = value >> 8;            //Initial PCA module-0
  17. //    value += T4KHz;
  18. //    CCAPM1 = 0x4d;                  //PCA module-1 work in 16-bit timer mode and enable PCA interrupt, toggle the output pin CEX1(P3.5)

  19.     CR = 1;                         //PCA timer start run
  20.     EPCAI = 1;

  21. }

  22. void PCA_isr() interrupt 6 using 1
  23. {
  24.         EPCAI = 0;
  25.         if(CCF0 == 1)
  26.         {
  27.                 CCF0 = 0;
  28.                 PCAFlag = 1;
  29.                 temp1 = CCAP0H;
  30.                 temp2 = CCAP0L;
  31.                   RUNLED = !RUNLED;      //work LED flash
  32.         }
  33. //        if(CCF1 ==1)
  34. //        {
  35. //                CCF1 = 0;
  36. //                CCAP1L = value;
  37. //                CCAP1H = value >> 8;
  38. //                value += T4KHz;
  39. //        }
  40.         EPCAI = 1;
  41. }


主函数部分:
  1. void main(void)
  2. {
  3.         init();
  4.         Delay20ms();
  5.         while(1)
  6.         {
  7.                 if(PCAFlag == 1)
  8.                 {                                 
  9.                         P1 &= 0xf0;                                                  //Çл»µ½»ù×¼µçѹͨµÀ
  10.                         P1 |= 0x02;
  11.                         TimerFlag = 1;                    
  12.                         TR0 = 1;                                                  //Timer0 start run   ¶¨Ê±Æ÷T0ÖжÏÑÓʱ20ms
  13.                         while(TimerFlag);

  14.                         CH = 0;                                                          //PCA¼ÆÊýÆ÷ÇåÁã
  15.                         CL = 0;
  16.                         P1 &= 0xf0;                                                  //Çл»µ½±»²âͨµÀ
  17.                         P1 |= 0x07;
  18.                         PCAFlag = 0;

  19.                         temp_value1 = temp1;
  20.                         temp_value1 = temp_value2<<8;
  21.                         temp_value1 |= temp1;
  22.                         temp_long_value = temp_long_value * 0x6b;
  23.                         temp_long_value = temp_long_value / 0x4800;

  24.                         temp2 = temp_long_value;
  25.                         temp1 = temp_long_value>>8;
  26. //                        SendDate(temp_value);
  27.                         
  28.                         SendData(temp1);                                  //·¢ËͲ¶»ñʱ¼äµÍλ
  29.             SendData(temp2);                                  //·¢ËͲ¶»ñʱ¼ä¸ßλ
  30.                 }
  31.         }
  32. }




---------------------------------------------------------------------------------------------------------------
自己糊涂,PCA计数是没问题的,是我数据处理的问题。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
coody 发表于 2015-4-7 21:52 | 显示全部楼层
直接去STC官网下载例程吧

STC15系列库函数与例程测试版V1.0.rar
http://www.****ducst/STC-LIB/STC ... 95%E7%89%88V1.0.rar
 楼主| any_014 发表于 2015-4-27 09:28 | 显示全部楼层
额,是自己程序写的有问题。
gaoxe 发表于 2015-8-24 13:23 | 显示全部楼层
谢谢分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

132

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部