找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3481|回復: 5
打印 上一主題 下一主題
收起左側(cè)

這個公式是什么意思?看不懂啊

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:546224 發(fā)表于 2019-9-23 16:34 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
5黑幣
((unsigned char*)&count1)[3]=CCAP0L;
((unsigned char*)&count1)[2]=CCAP0H;
((unsigned char*)&count1)[1]=cnt;
((unsigned char*)&count1)[0]=0;

最佳答案

查看完整內(nèi)容

你的count1 應該是一個unsigned long型,一個unsigned long是4個字節(jié)。 ((unsigned char *)&count1)[3]=CCAP0L :這句話是把CCAP0L數(shù)據(jù)存放在(count1 )的第4個字節(jié)中, 同樣CCAP0H存放在(count1 )的第3個字節(jié)中, cnt存放在(count1 )的第2個字節(jié)中, 0存放在(count1 )的第1個字節(jié)中。
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:155507 發(fā)表于 2019-9-23 16:34 | 只看該作者
你的count1 應該是一個unsigned long型,一個unsigned long是4個字節(jié)。

((unsigned char *)&count1)[3]=CCAP0L :這句話是把CCAP0L數(shù)據(jù)存放在(count1 )的第4個字節(jié)中,
同樣CCAP0H存放在(count1 )的第3個字節(jié)中,
cnt存放在(count1 )的第2個字節(jié)中,
0存放在(count1 )的第1個字節(jié)中。

  1. /*---------------------------------------------------------------------*/
  2. /* --- STC MCU Limited ------------------------------------------------*/
  3. /* --- STC15F4K60S4 系列 PCA實現(xiàn)16位捕獲舉例---------------------------*/
  4. /* --- Mobile: (86)13922805190 ----------------------------------------*/
  5. /* --- Fax: 86-755-82905966 -------------------------------------------*/
  6. /* --- Tel: 86-755-82948412 -------------------------------------------*/
  7. /* --- Web: www.STCMCU.com --------------------------------------------*/
  8. /* 如果要在程序中使用此代碼,請在程序中注明使用了宏晶科技的資料及程序   */
  9. /* 如果要在文章中應用此代碼,請在文章中注明使用了宏晶科技的資料及程序   */
  10. /*---------------------------------------------------------------------*/

  11. //本示例在Keil開發(fā)環(huán)境下請選擇Intel的8058芯片型號進行編譯
  12. //假定測試芯片的工作頻率為18.432MHz

  13. #include "reg51.h"
  14. #include "intrins.h"

  15. #define FOSC    18432000L

  16. typedef unsigned char BYTE;
  17. typedef unsigned int WORD;
  18. typedef unsigned long DWORD;

  19. sfr P_SW1       = 0xA2;             //外設(shè)功能切換寄存器1

  20. #define CCP_S0 0x10                 //P_SW1.4
  21. #define CCP_S1 0x20                 //P_SW1.5

  22. sfr CCON        =   0xD8;           //PCA控制寄存器
  23. sbit CCF0       =   CCON^0;         //PCA模塊0中斷標志
  24. sbit CCF1       =   CCON^1;         //PCA模塊1中斷標志
  25. sbit CR         =   CCON^6;         //PCA定時器運行控制位
  26. sbit CF         =   CCON^7;         //PCA定時器溢出標志
  27. sfr CMOD        =   0xD9;           //PCA模式寄存器
  28. sfr CL          =   0xE9;           //PCA定時器低字節(jié)
  29. sfr CH          =   0xF9;           //PCA定時器高字節(jié)
  30. sfr CCAPM0      =   0xDA;           //PCA模塊0模式寄存器
  31. sfr CCAP0L      =   0xEA;           //PCA模塊0捕獲寄存器 LOW
  32. sfr CCAP0H      =   0xFA;           //PCA模塊0捕獲寄存器 HIGH
  33. sfr CCAPM1      =   0xDB;           //PCA模塊1模式寄存器
  34. sfr CCAP1L      =   0xEB;           //PCA模塊1捕獲寄存器 LOW
  35. sfr CCAP1H      =   0xFB;           //PCA模塊1捕獲寄存器 HIGH
  36. sfr CCAPM2      =   0xDC;           //PCA模塊2模式寄存器
  37. sfr CCAP2L      =   0xEC;           //PCA模塊2捕獲寄存器 LOW
  38. sfr CCAP2H      =   0xFC;           //PCA模塊2捕獲寄存器 HIGH
  39. sfr PCA_PWM0    =   0xf2;           //PCA模塊0的PWM寄存器
  40. sfr PCA_PWM1    =   0xf3;           //PCA模塊1的PWM寄存器
  41. sfr PCA_PWM2    =   0xf4;           //PCA模塊2的PWM寄存器

  42. sbit EPCA       =   IE^6;           //PCA中斷允許位

  43. BYTE cnt;                           //存儲PCA計時溢出次數(shù)
  44. DWORD count0;                       //記錄上一次的捕獲值
  45. DWORD count1;                       //記錄本次的捕獲值
  46. DWORD length;                       //存儲信號的時間長度(count1 - count0)

  47. void main()
  48. {
  49.     ACC = P_SW1;
  50.     ACC &= ~(CCP_S0 | CCP_S1);      //CCP_S0=0 CCP_S1=0
  51.     P_SW1 = ACC;                    //(P1.2/ECI, P1.1/CCP0, P1.0/CCP1, P3.7/CCP2)
  52.    
  53. //  ACC = P_SW1;
  54. //  ACC &= ~(CCP_S0 | CCP_S1);      //CCP_S0=1 CCP_S1=0
  55. //  ACC |= CCP_S0;                  //(P3.4/ECI_2, P3.5/CCP0_2, P3.6/CCP1_2, P3.7/CCP2_2)
  56. //  P_SW1 = ACC;  
  57. //  
  58. //  ACC = P_SW1;
  59. //  ACC &= ~(CCP_S0 | CCP_S1);      //CCP_S0=0 CCP_S1=1
  60. //  ACC |= CCP_S1;                  //(P2.4/ECI_3, P2.5/CCP0_3, P2.6/CCP1_3, P2.7/CCP2_3)
  61. //  P_SW1 = ACC;  

  62.     CCON = 0;                       //初始化PCA控制寄存器
  63.                                     //PCA定時器停止
  64.                                     //清除CF標志
  65.                                     //清除模塊中斷標志
  66.     CL = 0;                         //復位PCA寄存器
  67.     CH = 0;
  68.     CCAP0L = 0;
  69.     CCAP0H = 0;
  70.     CMOD = 0x09;                    //設(shè)置PCA時鐘源為系統(tǒng)時鐘,且使能PCA計時溢出中斷
  71.     CCAPM0 = 0x21;                  //PCA模塊0為16位捕獲模式(上升沿捕獲,可測從高電平開始的整個周期),且產(chǎn)生捕獲中斷
  72. //  CCAPM0 = 0x11;                  //PCA模塊0為16位捕獲模式(下降沿捕獲,可測從低電平開始的整個周期),且產(chǎn)生捕獲中斷
  73. //  CCAPM0 = 0x31;                  //PCA模塊0為16位捕獲模式(上升沿/下降沿捕獲,可測高電平或者低電平寬度),且產(chǎn)生捕獲中斷

  74.     CR = 1;                         //PCA定時器開始工作
  75.     EPCA = 1;                       //使能PCA中斷
  76.     EA = 1;

  77.     cnt = 0;
  78.     count0 = 0;
  79.     count1 = 0;

  80.     while (1);
  81. }

  82. void PCA_isr() interrupt 7 using 1
  83. {
  84.     if (CF)
  85.     {
  86.         CF = 0;
  87.         cnt++;                      //PCA計時溢出次數(shù)+1
  88.     }
  89.     if (CCF0)
  90.     {
  91.         CCF0 = 0;
  92.         count0 = count1;            //備份上一次的捕獲值
  93.         ((BYTE *)&count1)[3] = CCAP0L;  //保存本次的捕獲值
  94.         ((BYTE *)&count1)[2] = CCAP0H;
  95.         ((BYTE *)&count1)[1] = cnt;
  96.         ((BYTE *)&count1)[0] = 0;
  97.         length = count1 - count0;   //計算兩次捕獲的差值,即得到時間長度
  98.     }
  99. }
復制代碼


回復

使用道具 舉報

板凳
ID:235200 發(fā)表于 2019-9-23 19:57 | 只看該作者
count1 是一個int型數(shù)據(jù),占4個字節(jié)。((unsigned char *)&count1)[3]=CCAP0L :這句話是把CCAP0L數(shù)據(jù)存放在(count1 )的第4個字節(jié)中,同樣CCAP0H存放在(count1 )的第3個字節(jié)中,cnt存放在(count1 )的第2個字節(jié)中,0存放在(count1 )的第1個字節(jié)中.
回復

使用道具 舉報

地板
ID:278179 發(fā)表于 2019-9-23 22:01 | 只看該作者
這個不是公式,是單片機外部捕捉信號計時脈沖用的
回復

使用道具 舉報

5#
ID:278179 發(fā)表于 2019-9-23 22:03 | 只看該作者
完整的數(shù)據(jù)是,CCAP0L定時器計時脈沖低位,CCAP0H定時器計時脈沖高位,cnt定時器溢出中斷次數(shù)
回復

使用道具 舉報

6#
ID:546224 發(fā)表于 2019-9-24 10:44 | 只看該作者
angmall 發(fā)表于 2019-9-23 16:34
你的count1 應該是一個unsigned long型,一個unsigned long是4個字節(jié)。

((unsigned char *)&count1)[3]= ...

謝了,原來是這個意思。我是說套用運算符算不通?磥硪鄬W習算法。我用這個算法捕獲的脈沖速度很快,不知道可行不?我用的是8A4K32S2
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表