2011-05-27 77 views
0

我使用microchip v8.63的pic18F4550:我使用picdem的C程序語言:我們創建了以下程序:我們檢索轉換.wav文件的二進制數據到8位8000Hz(聲音是:別人說是「紅色」),我們將數據寫入picdem的'ROM'。每個值將寫入端口=>有一個盒子連接到。其他聲音然後原始的.wav文件

問題:我不能在這裏聽到原始聲音(有人說:「紅色」),而不是聽到大聲的其他聲音(沒有噪音或crack啪聲),而是聽到其他聲音。

這是代碼:

unsigned int b = 0; 
unsigned int i = 0; 
unsigned int j= 0; 

#pragma romdata const_table = 0x1200 

const rom char my_const_array[] = "0b01010101 
,0b10101010 
,0b10101010 
,0b10101010 
,0b10101001 
,0b01010101 
,0b01010110 
,0b10100101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010100 
,0b10110101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01001010 
,0b10101010 
,0b11010101 
,0b00101010 
,0b10101011 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01001010 
,0b10101010 
,0b11010100 
,0b10101010 
,0b10101010 
,0b10110101 
,0b01010101 
,0b01010101 
,0b01001010 
,0b10101010 
,0b10101010 
,0b10101010 
,0b10101010 
,0b10101010 
,0b10101101 
,0b01010100 
,0b10101010 
,0b10011010 
,0b10101010 
,0b10101010 
,0b10101010 
,0b10101010 
,0b10101010 
,0b10110010 
,0b10100101 
,0b01010110 
,0b10101010 
,0b10100101 
,0b01011010 
,0b10101010 
,0b10101010 
,0b11001010 
,0b10010101 
,0b01011010 
,0b10101001 
,0b01010101 
,0b01101010 
,0b10101010 
,0b10101101 
,0b00101001 
,0b01010101 
,0b10101010 
,0b10010101 
,0b01010101 
,0b10101010 
,0b10101010 
,0b11010010 
,0b10010101 
,0b01011010 
,0b10101001 
,0b01010101 
,0b01011010 
,0b10010101 
,0b10101101 
,0b00101001 
,0b01010101 
,0b10101010 
,0b01010100 
,0b11010101 
,0b10100101 
,0b01011010 
,0b11001010 
,0b01010101 
,0b01011010 
,0b10100101 
,0b00101101 
,0b01010101 
,0b01010110 
,0b10110010 
,0b10010011 
,0b01010110 
,0b10010101 
,0b00101011 
,0b01010101 
,0b01010101 
,0b01101010 
,0b01010100 
,0b10101011 
,0b01100101 
,0b00101010 
,0b10110101 
,0b01010101 
,0b01011010 
,0b10010101 
,0b00101011 
,0b01010101 
,0b00101010 
,0b10110101 
,0b01010011 
,0b00110101 
,0b10100100 
,0b10101010 
,0b11010101 
,0b01001010 
,0b10101010 
,0b11010010 
,0b10101101 
,0b01100100 
,0b10101010 
,0b11010101 
,0b01001010 
,0b10101010 
,0b10101010 
,0b10101011 
,0b01101001 
,0b00101010 
,0b10110101 
,0b01001010 
,0b10101010 
,0b11001010 
,0b10101011 
,0b01010101 
,0b00101010 
,0b10101101 
,0b01010010 
,0b10101010 
,0b10110010 
,0b10101010 
,0b11010101 
,0b00101010 
,0b10101011 
,0b00101010 
,0b10101010 
,0b10101010 
,0b10101010 
,0b10110101 
,0b00100101 
,0b01011010 
,0b10101010 
,0b10010101 
,0b01101010 
,0b10011010 
,0b10101101 
,0b00100101 
,0b01010110 
,0b10101010 
,0b10010101 
,0b01010110 
,0b10100101 
,0b10101011 
,0b01001001 
,0b01010101 
,0b10101010 
,0b10010101 
,0b01010110 
,0b10100101 
,0b01101010 
,0b10101001 
,0b01010101 
,0b01101010 
,0b10100101 
,0b01010101 
,0b01100101 
,0b01010110 
,0b10101010 
,0b01010101 
,0b01010110 
,0b10010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01101010 
,0b10010101 
,0b01001101 
,0b01010101 
,0b01001011 
,0b01010101 
,0b01010101 
,0b01010101 
,0b10100100 
,0b10101010 
,0b11010101 
,0b01010010 
,0b10101011 
,0b01010100 
,0b10110101 
,0b01010101 
,0b01001010 
,0b10101011 
,0b01010101 
,0b00101010 
,0b10101010 
,0b10101010 
,0b10101011 
,0b01010100 
,0b10101010 
,0b10101010 
,0b10101010 
,0b10101010 
,0b10101010 
,0b10101010 
,0b10101101 
,0b01010010 
,0b10100101 
,0b10101010 
,0b10101010 
,0b01011010 
,0b10101010 
,0b10101010 
,0b10110101 
,0b01001010 
,0b10010101 
,0b10101010 
,0b10101001 
,0b01010110 
,0b10101010 
,0b10101010 
,0b10101010 
,0b10101010 
,0b01010101 
,0b01011010 
,0b10101010 
,0b10101010 
,0b01010110 
,0b10101010 
,0b10101010 
,0b10101010 
,0b10101010 
,0b01010101 
,0b01010110 
,0b10101010 
,0b10101010 
,0b10100101 
,0b01011010 
,0b10101010 
,0b10101010 
,0b10010101 
,0b01010101 
,0b10010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b01010101 
,0b00000000"; 

#pragma romdata 

//void Delay(unsigned int); 
void main (void) 
{ 

    TRISD = 0x00;    // PORTD als uitgang 
    TRISB = 0b00110000;   // RB4 en RB5 als ingang 
    TRISA = 0x00;    // RA output 

    RCONbits.IPEN = 0;   // prioriteit uit 
    INTCONbits.GIE = 1;   // enable interrupt 
    INTCONbits.RBIE = 1;  // interrupt portB aan 

    while(1) 
    { 
     _asm sleep _endasm 
    } 
} 

#pragma interrupt ISR 
void ISR (void) 
{ 

    if (INTCONbits.RBIF==1) 
    { 
     if(PORTBbits.RB5==0) 
     { 
      TBLPTR = (short long) 0x1200; 

      for(i = 0 ; i<sizeof(my_const_array); i++) { 
       _asm TBLRDPOSTINC _endasm 
       LATAbits.LATA2=TABLAT; 

       b = 0; 

       do{ 
        b++; 
       }while(b < 200); 



      } 
     } 
    } 
    INTCONbits.RBIF = 0; 

} 
+0

您是否檢查過MAP文件以檢查ROM數據是否真的以數據分段0x1200結尾? – 2011-05-31 19:30:33

回答

4

這是一個開放式的問題,我不能給你絕對的答案,但我可以給你一些想法去嘗試。

  1. 您確定的數據是正確的?以數組my_const_array []並寫一個小程序將其轉換回8位wav,並確保您聽到正確的聲音。對我來說,你列出的波形數據看起來非常短,只有430個樣本,所以在8000Hz時,聲音大約需要50ms才能播放。那是對的嗎?同樣,大約一半(200+)的樣本值爲'0b01010101'。

  2. 嘗試切換每個字節的位排序,所以翻轉每個二進制值。 IE 0b01010101變爲0b10101010

  3. 您是否以正確的速度計時?

我建議你用更方便的方波替代你的錄音語音樣本,然後記錄輸出以作比較。

1

你的程序可能是錯的!

我假設你使用的是單位DAC這樣:

線..

LATAbits.LATA2=TABLAT; 

將只複製第一個(零)位CPU引腳RA2其餘7都將丟失。