2013-12-16 70 views
0

我在使用UART功能時遇到開關盒問題。我接收數據並將其存儲到eeprom中。我想調用switch語句來查看發送的內容。我讀了eeprom,信息是正確的,但我只是無法閱讀正確的。它總是以錯誤爲基礎(默認情況)。我正在使用高科技C編譯器。PIC16f877a開關沒有正確讀取

unsigned char tempVal; 
tempVal = eeprom_read(cmdByteAddr); 
switch(tempVal){ 
    //Get temperature 
    case 30: 
     writeByte('T'); 
     break; 
    //Get temp high 
    case 31: 
     writeByte('T'); 
     writeByte('H'); 
     break; 
    //Get temp low 
    case 32: 
     writeByte('T'); 
     writeByte('L'); 
     break; 
    //Get humidity 
    case 41: 
     writeByte('H'); 
     break; 
    //Get humidity high 
    case 42: 
     writeByte('H'); 
     writeByte('H'); 
     break; 
    //Get humidity low 
    case 43: 
     writeByte('H'); 
     writeByte('L'); 
     break; 
    //Error 
    default: 
     writeByte('E'); 
     writeByte(eeprom_read(cmdByteAddr)); 
     break; 
} 
+0

因此,當您達到默認值時,您再次從EEPROM執行(無意義)回讀,並在錯誤指示符「E」後打印結果。什麼打印?這裏的信息太少。 – unwind

回答

1

eeprom_read()返回的值不是您的情況之一。 switch()工作正常。使用相同的開關變量調整代碼以顯示更有意義的錯誤,而不是調用eeprom_read()

default: 
    writeByte('E'); 
    writeByte(tempVal); 
    break; // Not sure why you want `break` here. 

如果你仍然可以得到令人滿意的結果,嘗試unsigned tempVal。有時候,編譯器會對大小不一的數據感到困惑,儘管它不應該。您可能需要writeUnsigned(tempVal)或同等產品。您可能還想要打印cmdByteAddr。也許它在EE範圍之外。