マイクロコントローラーPIC18Fをプログラムするプロジェクトがあります。スイッチング回路をマイクロコントローラーボードに接続する必要があります。このスイッチング回路には、電気ロックとブザーが接続されています。
ロックは最初は電源が入っています。「1」を送信すると、ブザーが方形波で作動し、ロックがオフになると思われます。「0」を受信すると、ブザーはロックに再び電力を供給せずにオフになります。「2」を受信すると、ロックに電力が供給されますが、ブザーが以前に電力を供給されていなかった場合は、再び電力を供給されるべきではありません。
私の混乱は最後の部分にあります。ハイパーターミナル経由で「2」を送信し、その前に「0」を送信すると、ブザーが再び作動します。
ここにコードがあります、
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
}
誰でもこれを解決するのを手伝ってもらえますか?