2013-12-16 7 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을 시도합니다. 때로는 컴파일러가 혼란스럽지 만, int 크기의 데이터에는 혼동해서는 안됩니다. writeUnsigned(tempVal) 또는 그와 동등한 내용이 필요할 수 있습니다.

cmdByteAddr도 인쇄 할 수 있습니다. EE 범위 밖에 있을지도 모릅니다.