欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 為什么單片機串口一直發數據,我程序只想讓他發送一次 [打印本頁]

作者: 5anXR    時間: 2019-6-9 02:59
標題: 為什么單片機串口一直發數據,我程序只想讓他發送一次
主程序運行,while(1)
{
     當按下按鍵時,調用串口發送函數Uart1SendStr(strsend);
}
發送的數據沒有問題,就是在第一次按下按鍵后就一直開始發送,本意是想按一下發送一次的,求解答!
中斷程序:
void Uart1Isr() interrupt 4
{
    if (TI)
    {
        TI = 0;
    }
    if (RI)
    {
        RI = 0;
    }
    busy = 0;
}

作者: xuyaqi    時間: 2019-6-9 09:08
設個標志來判斷,只發一次。
作者: linxi8693    時間: 2019-6-9 10:04
清中斷標志位了?還有就是有可能按鍵按下多次觸發了,給按鍵加個延時試試
作者: suncat0504    時間: 2019-6-9 11:11
首先確認你的按鍵處理中有沒有防抖動處理。沒有的話,很容易出現連續發送情況。加入防抖動處理,并且要保證在按鍵松開以后,視為一次完整的按鍵按下,在這之后再執行按鍵的對應處理,就不會發生連續發送了。
你的按鍵的處理程序沒列出來,所以很難判斷是哪里出了問題。
防抖處理邏輯:
      按鍵按下?
         是
            延時20ms
               這個案件被按下?
                  是
                     按鍵是否被松開了?
                        是
                           執行這個按鍵被按下的處理
作者: ffggg    時間: 2019-6-9 11:16
給按鍵加個延時
作者: lxbeiming    時間: 2019-6-9 11:27
少個按鍵抖動的判斷
作者: 80649433    時間: 2019-6-9 15:31
初始化設置標志
作者: 5anXR    時間: 2019-6-9 17:18
suncat0504 發表于 2019-6-9 11:11
首先確認你的按鍵處理中有沒有防抖動處理。沒有的話,很容易出現連續發送情況。加入防抖動處理,并且要保證 ...

你好,我是在運行按鍵處理程序后,獲得其鍵值,再根據鍵值來執行相應的函數程序,這個相應的程序是發送數據
作者: lele5211314    時間: 2019-6-9 17:24
肯定是你按鍵的問題,好好看看按鍵的程序有沒有去抖動什么的
作者: suncat0504    時間: 2019-6-9 22:48
5anXR 發表于 2019-6-9 17:18
你好,我是在運行按鍵處理程序后,獲得其鍵值,再根據鍵值來執行相應的函數程序,這個相應的程序是發送數 ...

根據鍵值處理場合,判斷鍵值合適,立即清除這個鍵值(復位),然后執行對應鍵值的處理程序。鍵值不復位,下次即使沒有任何按鍵,由于這個鍵值依舊被保持,還會執行對應這個鍵值的處理程序。
就是說,在中斷處理中建立鍵值后,在鍵值的判斷處理過程中,在處理完成返回之前一定要清除這個鍵值。避免下次有效串口數據發送之前,依舊使用之前的鍵值進行處理。
串口中斷:收到鍵值,保存到變量中。
主循環處理:鍵值=xx?
                        是
                             {
                               鍵值=0;// 鍵值復位,等待下一次串口發送鍵值時設置
                               調用對應這個鍵值的處理
                             }
                          
作者: 闊愛的釗釗    時間: 2019-6-10 01:12
按一次發送一次就在按鍵函數里面處理RI 和 TI好了




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1