標(biāo)題: 單片機串口發(fā)送數(shù)據(jù)為什么要先關(guān)串口中斷?發(fā)送數(shù)據(jù)與字符串有什么區(qū)別? [打印本頁]

作者: 不想12453    時間: 2018-5-10 10:03
標(biāo)題: 單片機串口發(fā)送數(shù)據(jù)為什么要先關(guān)串口中斷?發(fā)送數(shù)據(jù)與字符串有什么區(qū)別?
第一個是單片機串口發(fā)送數(shù)據(jù)的程序  可是為什么需要先關(guān)串口中斷?發(fā)送完數(shù)據(jù)再開串口中斷呢??還有。!發(fā)送串口數(shù)據(jù)與發(fā)送字符串有什么區(qū)別呢?

單片機源碼:
  1. /*----------------------------
  2. UART1 發(fā)送串口數(shù)據(jù)
  3. -----------------------------*/
  4. void UART1_SendData(uchar dat)
  5. {
  6.         ES=0;                                        //關(guān)串口中斷
  7.         SBUF=dat;                           //將數(shù)據(jù)放入發(fā)送數(shù)據(jù)緩沖器中
  8.         while(TI!=1);        //等待發(fā)送成功                TI=1時表示一幀數(shù)據(jù)發(fā)送成功,要求CPU取走SBUF里的數(shù)據(jù)
  9.         TI=0;                                        //清除發(fā)送中斷標(biāo)志        TI必須軟件清零
  10.         ES=1;                                        //開串口中斷
  11. }
  12. /*----------------------------
  13. UART1 發(fā)送字符串
  14. -----------------------------*/
  15. void UART1_SendString(char *s)
  16. {
  17.         while(*s)//檢測字符串結(jié)束符
  18.         {
  19.                 UART1_SendData(*s++);//發(fā)送當(dāng)前字符
  20.         }
  21. }
復(fù)制代碼


作者: liunian17    時間: 2018-5-10 11:00
我知道的是,不需要關(guān)閉中斷的,中斷是為了接受數(shù)據(jù)而不是發(fā)送數(shù)據(jù)的。
發(fā)送數(shù)據(jù)和發(fā)送字符串是一樣的,字符串就是數(shù)據(jù)。只是發(fā)送只能一個一個字符去發(fā),所以發(fā)送字符串要拆開來一個一個字符發(fā)
作者: wulin    時間: 2018-5-10 11:27
1.串口發(fā)送數(shù)據(jù)時不能被接收中斷干擾,所以要關(guān)閉串口接收中斷。
2.串口發(fā)送程序一次只能發(fā)送一個字節(jié),如果要發(fā)送字符串,就要反復(fù)調(diào)用發(fā)送程序,直到發(fā)送完畢。
作者: top_行癲    時間: 2018-5-10 12:07
關(guān)串口中斷只是一種嚴(yán)謹(jǐn)?shù)姆绞,其實不關(guān)你的程序應(yīng)該也可以。其次字符串的發(fā)送跟字節(jié)本質(zhì)上是一樣的,只不過是將字符串按一個個字節(jié)連續(xù)發(fā)送而已
作者: guo6339419    時間: 2018-5-10 15:02
是怕發(fā)送的過程中被接收中斷打斷吧
作者: zfgansuchina    時間: 2018-5-10 16:52
發(fā)送串口數(shù)據(jù)是指發(fā)送一個字節(jié),每個字符是2個字節(jié),因此發(fā)送字符串其實是發(fā)送2*n個字節(jié)
作者: yzwzfyz    時間: 2018-5-10 18:37
不知道是哪個高手老師教一招!
我是這樣做的:
1、將要發(fā)的數(shù)據(jù)統(tǒng)統(tǒng)放在一個緩沖區(qū)中,假設(shè)有N個字節(jié)。
2、打開中斷
3、發(fā)一個字節(jié),發(fā)完后就干別的事了!之后,當(dāng)這個字節(jié)發(fā)完后就產(chǎn)生了中斷。
4、在發(fā)送中斷處理程序中,判斷一下是否N個字節(jié)是否全發(fā)完了,未完就續(xù)發(fā)下一個字節(jié),退出中斷服務(wù)程序。
5、退出后,又干別的事了!再之后,這個字節(jié)發(fā)完后就產(chǎn)生了中斷。
……4-5-4-5-4-5-……
自打開機初始化后,就沒有關(guān)過串口中斷!!




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