2014-03-05 56 views
1

我期待配置我的PIC,以便我可以使用端口RB4並向設備發送脈衝,然後在同一端口上接收數據。爲此,我需要將RB4配置爲數字I/O端口,然後;PIC18f4550:爲雙向數據配置RB4

組作爲輸出 lowsignal 1ms的延遲 highsignal 1ms的延遲 集合作爲輸入 讀取輸入

然後,該代碼循環。所以我有;

for(i=0;i<10;i++) // There are 10 bits of data to read 
{ 
      ADCON0bits.ADON = 0; 
    TRISBbits.TRISB4 = 0; // set to output 
      ADCON0bits.ADON = 1; 

      LATBbits.LATB4 = 0; // output low 
      LATBbits.LATB4 = 1; // output high 

    delay(1); 

      ADCON0bits.ADON = 0; 
    TRISBbits.TRISB4 = 1; // configure for input 
      ADCON0bits.ADON = 1; 

    inData = inData<<1; 
      delay(1); 
    if (PORTBbits.RB4==1) 
     inData++; 
} 

但我似乎沒有得到輸入。我是PIC世界的新手。任何人都可以將我指向正確的方向嗎?是否可以像這樣在輸入和輸出之間切換?我正在做正確的事情,我配置的方式?

非常感謝!

+0

當我閱讀說明,然後檢查您的代碼時,我發現您不會在輸出lowsignal和輸出highsignal之間等待1 ms。 – LiveGen

+0

你爲什麼要打開和關閉ADC,而不是隻關閉整個時間?如果RB4被配置爲模擬引腳,我注意到您在讀取引腳之前重新啓用它,但我認爲在大多數PIC上它確實可以,但可能不是全部。 – PeterJ

+0

這是一個正在等待被炸的處理器。在讀取引腳B4狀態後,只需幾個時鐘週期,即可將該引腳設置爲再次輸出。如果對方碰巧發送數字信號爲高電平,那麼您將查看兩個設備之間的潛在電氣短路! – epichorns

回答

0

我對晚會有點遲。 建議您在等待接收數據的那部分代碼中使用中斷。輪詢通常不是一個好方法,您將面臨更復雜的實現,而不是在中斷服務例程中有一個簡單的計數器。

因此,您應該在PORTB的第4個引腳上使能電平變化中斷。