|
發布時間: 2020-11-3 10:50
正文摘要:這個就是程序,我用得單片機開發板,接上串口以后,直接發送數據了,而不是通過我按下那個按鍵在發送那個數據,而是一直發送,但是我按下另一個按鍵以后,就變成另一個一直發送了,求大佬指點一下,為什么不 ... |
| 大佬們,怎么用printf(“打印一句話啊”),通過串口調試助手顯示出來 |
| 感謝大佬們,我把函數放在判斷里面,或者在加一個判斷就可以了 |
| 主程序一直在執行fasong(num)函數,肯定是一直在發送數據了,fasong(num)要有條件(就是你的按鍵)的執行、結束 |
| 當程序運行到fasong(num);串口就發送數據到上位機了,此時num= 0;如果要按鍵發送的話,就要在fasong()這個子函數加個判斷比如定義一個變量Switch=flag.if(Switch_flag){Switch_flag = 0;fasong();}按鍵將Switch置1,然后if里面清零 |
| 發送函數要放到按鍵函數的判斷成功里面 |
小白學51i 發表于 2020-11-3 11:27 while(1) { keypros(); //按鍵函數 fasong(num); //發送函數 } 你看看你寫的這個循環,執行按鍵處理之后就是發送,而不是判斷按下什么鍵去處理發送,所以就會一直發送 |
lovezjf234 發表于 2020-11-3 11:18 沒太懂,我得理解是這樣得:初始化以后不是進入while(1);循環了嘛?他不是要一直掃描我的按鍵函數嘛?我的按鍵按下以后才能發送num得值,不按下不就發送不了嘛?那么第一次不就是不能發送數據嘛?必須等我按下以后才能發送第一次得值? |
心有浮生 發表于 2020-11-3 11:20 不是有一個函數是 void fasong(u16 dat) { SBUF = dat; while(!TI); TI = 0; } num值給dat了 |
| 你這串口發的dat是在哪賦值的, |
|
fasong(num); //發送函數 你本來就一直在發送,沒有中斷過,最好用flag進行標記發送,或者用中斷進行發送更好 |