PIC18x Timer 分享 IV

這一次我們就來看看 CCP1 的輸出功能




有人可能會問,CCP1 是甚麼東東?有這一 pin 嗎?


原來 CCP1 就是 RC2,因為 PIC 的功能很多,但接腳有限,所以經常會有這種共用接腳的方式。


接下來讓我們來看看 Compare mode 的另一項功能:Toggle output。顧名思義就是每次 Timer1 與 CCPR1 比較相符時就反轉輸出,這樣要產生一個固定頻率的輸出就很方便了。有興趣的人可以參考前面的方式觀察一下,以下我們就直接用程式碼從 CCP1 產生一個 500KHz 的方波輸出。

#include <myapp.h>

void main(void)
{
 TMR1H = TMR1L = 0; // Reset timer1
 CCPR1 = 1000;  // 1us x 1000 = 1ms
 
 CLR(TRISC, BIT2); // Enable CCP1 (RC2) output
 CLR(LATC, BIT2); // Clear CCP1
 
 CCP1CON = 0x02;  // CCP1 compare mode toggle output
 T1CON = 0x01;  // Timer1 Enable
 
 while (1)
 {
  CLR(PIR1, BIT2); // Clear CCP1IF flag
  while (!GET(PIR1, BIT2))
  {
  }
  
  CCPR1 += 1000;  // Set next timeout point
 }
}

執行的結果如下


程式前半段都是一些初始化的設定,唯一比較特殊的是,這個模式在 Timer1 與 CCPR1 比較相符並設定 CCP1IF 旗標後,並不會重置 Timer,所以變成我們要用手動的方式將 CCPR1 往後加 1000 cycles。

看到這裡有一些 Idea 嗎?我們是不是可以設定非 50% Duty cycle 的方波呢?我們下次再見吧!

留言

這個網誌中的熱門文章

Linux 批次檔的寫法

【分享】如何顯示 Debug Message

[分享] Visual Studio 遠端偵錯