Microchip PIC24FJ64GA008 輸入捕捉(Input Capture)程式是捕捉 IC1 (Pin 54,IC1/RTCC/RD8)引腳上輸入信號的每個上升沿,通過 Timer3 時基值,當輸入信號是上升沿,便會捕捉時基計數值,然後等到下一個上升沿,再會捕捉第二個時基計數值,然後計算出時間值,顯示在 LCD1602 上。
PIC24FJ64GA008 輸入捕捉(Input Capture)程式顯示 |
捕捉模組可以在 ICx 引腳上輸入信號的每個上升沿和下降沿捕捉一個時基計數值。通過將 ICM<2:0> 2:0>(ICxCON<2:0>2:0>)位設置為 001 可以選中邊沿檢測模式。在該模式下,沒有使用預分頻捕捉計數器。
邊沿檢測模式時序圖 |
• 在每個邊沿(上升沿和下降沿)將輸入捕捉中斷標誌位元(ICxIF)置 1。
• 在該模式下,沒有使用捕捉時中斷模式位元 ICI<1:0> 1:0>(ICxCON<6:5>6:5>)。每個捕捉事件都將產生中斷。
與簡單捕捉事件模式相同,輸入捕捉邏輯電路根據內部相位時鐘檢測和同步捕捉引腳信號的上升沿和下降沿。如果出現了上升或下降沿,則捕捉模組邏輯電路將當前計時器計數寫到捕捉緩衝區,然後向中斷產生邏輯電路發出信號。相應的輸入捕捉中斷標誌位元 ICxIF 在捕捉緩衝寫事件發生後的兩個指令週期後被置 1。捕捉計時器計數值為在 ICx 引腳上的邊沿發生後的 1 或 2 個 TCY(指令週期)的值。
Microchip
PIC24FJ64GA008 Timer3 初始化程式:
#include
#include
void timer3init (void)
{
TMR3
= 0;
T3CONbits.TON
= 0;
T3CONbits.TCS
= 0; // Set Timer freq = Fcy/2
T3CONbits.TCKPS= 0; // prescale
1:1
T3CONbits.TGATE
= 0;
T3CONbits.TSIDL
= 0;
T3CONbits.TON
= 1; //Timer 3 Enable
}
|
Microchip
PIC24FJ64GA008 Capture1 初始化程式:
void capinit1(void)
{
IC1CONbits.ICM
= 3; //capture edge every rising edge
IC1CONbits.ICI
= 1; //interrupt on every second capture
IC1CONbits.ICTMR
= 0; //used tmr3
IC1CONbits.ICSIDL
= 0; // Idel Time Running
}
|
Microchip PIC24FJ64GA008 IC1 中斷程式:
// Capture IC1 Interrup
void __attribute__((interrupt,
no_auto_psv)) _IC1Interrupt(void) {
IFS0bits.IC1IF = 0;
cap1 = IC1BUF;
cap2 = IC1BUF;
}
|
Microchip PIC24FJ64GA008 IC1 主程式:
IPC0bits.IC1IP
= 1; //level 1 priority
IFS0bits.IC1IF
= 0; //clear the IC1 interrupt status
flag
IEC0bits.IC1IE
= 1; // Enable IC1 interrupts
TRISDbits.TRISD8=1;
// Make RD8/ IC1 pin 54 as an input
TRISDbits.TRISD9=1;
// Make RD9/ IC2 pin 55 as an input
timer3init();
IC1CON
= 0x0000;
capinit1();
while(1){
}
|
PIC24FJ64GA008 輸入捕捉(Input Capture)程式試驗 |
2016年 8月 23日 天氣報告
氣溫:28.0度 @ 20:00
相對濕度:百分之 65%
天氣:天色大致良好
沒有留言:
張貼留言