[mw_shl_code=c,true]int main(void)
{
IIC_Init();
delay_init();
uart_init(9600);
dht11_init();
gy30_init();
usart3_init();
Adc_Init();
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
while(1)
{
if(control==0xAA) //¿aÆô′«êä
{
Send485_humiture();
delay_ms(500);
Send485_light();
delay_ms(500);
Send485_soil();
delay_ms(500);
Send485_pm();
delay_ms(500);
}
if(control==0x55)
{
}
}
}
void USART1_IRQHandler(void)
{
if (USART_GetITStatus(USART1,USART_IT_RXNE))
{
USART_ClearITPendingBit(USART1,USART_IT_RXNE);
control=USART_ReceiveData(USART1);
}
}[/mw_shl_code]
我想通过电脑给单片机发送 0xAA数据 单片机通过485开始传数据 发送0x55就停止发送数据 但是我这样编程过后发送0xAA过后 只发送一轮数据也就是只走了if(control==0xAA)里面一次 不能自己一直循环呢?我的control值难道不是该一直等于0xAA么 请问问题在哪呢?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
换新行发送的话除了 有效数据AA之外还会发送0A和0D,是基础知识
因为程序串口接收中断,control的值均可能是这三个值,才被if判断
等于0x0D的可能最大,你可以试一下加上“换新行发送” ,if(control==0x0D) {Send485_humiture();...}
哦哦,我知道了 谢谢您!
一周热门 更多>