Frage

Ich habe ein Projekt zum Programmieren eines Mikrocontrollers PIC18F. Ich muss einen Schaltkreis an die Mikrocontrollerplatine anschließen. Dieser Schaltkreis verfügt über ein elektrisches Schloss und einen Summer, die daran angeschlossen werden müssen.

Das Schloss ist zunächst mit Strom versorgt.Es wird angenommen, dass, wenn ich „1“ sende, der Summer mit einer Rechteckwelle betrieben und das Schloss ausgeschaltet wird.Wenn es „0“ empfängt, wird der Summer ausgeschaltet, ohne dass das Schloss erneut mit Strom versorgt wird.Wenn es „2“ empfängt, sollte das Schloss mit Strom versorgt werden. Wenn der Summer jedoch zuvor nicht mit Strom versorgt wurde, sollte er nicht erneut mit Strom versorgt werden.

Meine Verwirrung liegt im letzten Teil.Wenn ich „2“ über das Hyperterminal sende und davor „0“ sende, wird der Summer wieder eingeschaltet.

Hier ist der Code,

void buzzertest();
char uart_rd;
int buzzer;
void main() {
TRISB=0X00;
PORTB=0x00;
RB5_bit = 0xFF;                  //lock  open
UART1_Init(9600);               // Initialize UART module at 9600 bps
while (1) {                     // Endless loop
 if (UART1_Data_Ready())       // If data is received,
 {
    buzzer=1;
    uart_rd = UART1_Read();     // read the received data,
    if(uart_rd =='1') {
       RB5_bit = 0x00;  //lock closed
       buzzertest();
     }
     if(uart_rd =='0' ){   //disable buzzer
        RB1_bit = 0x00;   //buzzer
        buzzer=0;
       }//end if
      buzzer=0;

      if(uart_rd =='2'){   //disable lock
        RB5_bit=0xFF;
        if(buzzer!=1){
            buzzertest();
         }
       }//end if
     } //end outer if
    } //end while
}//end main
void buzzertest(){
 while(1){
  RB1_bit = 0xFF;  //buzzer
  Delay_ms(1000);
  RB1_bit = 0x00; //buzzer
  Delay_ms(1000);
  if (UART1_Data_Ready())
  break;
 }//end while loop
}

Kann mir bitte jemand bei der Lösung dieses Problems helfen?

War es hilfreich?

Lösung

Du stellst ein buzzer auf 0 außerhalb der if(uart_rd='0') Block.Also, wenn Sie zum kommen if(uart_rd='2') Block, buzzer ist immer 0 und so if(buzzer!=1) Block wird immer aufgerufen.

Haben Sie versucht, dies mit einem Debugger durchzugehen?So etwas würde leicht auftauchen.Sie könnten diese auch ändern if Blöcke entweder zu a switch Aussage oder eine Reihe von if / else if Anweisungen, um solche Probleme zu vermeiden.

Andere Tipps

Hier ist der laufende Code:

generasacodicetagpre.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top