gpt4 book ai didi

无法正确调用子程序 微 Controller PIC18F

转载 作者:太空宇宙 更新时间:2023-11-04 03:01:49 27 4
gpt4 key购买 nike

我有一个项目要对微 Controller PIC18F 进行编程,我必须将一个开关电路连接到微 Controller 板上,这个开关电路有一个电锁和一个蜂鸣器要连接到它。

锁最初是通电的。假设当我发送'1'时,蜂鸣器将以方波供电并且锁将断电。当它接收到'0'时,蜂鸣器将关闭而不会再次给锁供电。当它收到“2”时,锁应该通电,但如果蜂鸣器之前没有通电,则不应再次通电。

我的困惑在最后一部分。当我通过 super 终端发送'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
}

谁能帮我解决这个问题?

最佳答案

您在 if(uart_rd='0') block 外将 buzzer 设置为 0。因此,当您进入 if(uart_rd='2') block 时,buzzer 始终为 0,因此 if(buzzer!=1) block 总是被调用。

您是否尝试过使用调试器单步执行此操作?很容易就会出现这种东西。您还可以将这些 if block 更改为 switch 语句或一系列 if/else if 语句以避免此类问题。

关于无法正确调用子程序 微 Controller PIC18F,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10700459/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com