문제

나는 프로젝트를 프로그래밍 마이크로 컨트롤러 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
}

수십시오 사람이 좀 도와 이?

도움이 되었습니까?

해결책

당신이 설정 buzzer 0 밖 if(uart_rd='0') 니다.그래서 올 때 if(uart_rd='2') 블록, buzzer 은 항상 0 고 if(buzzer!=1) 블록이 항상 호출됩니다.

당신은 시도를 밟을 통해 이와 디버거를 사용하시겠습니까?를 보여줄 것입니다 이런 종류의 것은 쉽습니다.변경할 수 있습 그 if 블록이나 switch 문 또는 일련의 if / else if 문을 피하기 위해 이러한 종류의 문제입니다.

다른 팁

여기에 실행중인 코드가 있습니다.

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,
 {
  uart_rd = UART1_Read();     // read the received data,
  if(uart_rd =='1') {
    RB5_bit = 0x00;  //lock closed
    buzzertest();
    buzzer=1  ;
   }
  else if(uart_rd =='0' ){   //disable buzzer
    RB1_bit = 0x00;   //buzzer
    buzzer=0;
   }//end else if

   else if(uart_rd =='2'){   //disable lock
     RB5_bit=0xFF;
     if(buzzer==1){
       buzzertest();
      }
    }//end else 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
}
.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top