找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 8400|回復(fù): 6
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)串口發(fā)送數(shù)據(jù)為什么要先關(guān)串口中斷?發(fā)送數(shù)據(jù)與字符串有什么區(qū)別?

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:305703 發(fā)表于 2018-5-10 10:03 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
第一個(gè)是單片機(jī)串口發(fā)送數(shù)據(jù)的程序  可是為什么需要先關(guān)串口中斷?發(fā)送完數(shù)據(jù)再開(kāi)串口中斷呢??還有。!發(fā)送串口數(shù)據(jù)與發(fā)送字符串有什么區(qū)別呢?

單片機(jī)源碼:
  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í)表示一幀數(shù)據(jù)發(fā)送成功,要求CPU取走SBUF里的數(shù)據(jù)
  9.         TI=0;                                        //清除發(fā)送中斷標(biāo)志        TI必須軟件清零
  10.         ES=1;                                        //開(kāi)串口中斷
  11. }
  12. /*----------------------------
  13. UART1 發(fā)送字符串
  14. -----------------------------*/
  15. void UART1_SendString(char *s)
  16. {
  17.         while(*s)//檢測(cè)字符串結(jié)束符
  18.         {
  19.                 UART1_SendData(*s++);//發(fā)送當(dāng)前字符
  20.         }
  21. }
復(fù)制代碼

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:293864 發(fā)表于 2018-5-10 11:00 | 只看該作者
我知道的是,不需要關(guān)閉中斷的,中斷是為了接受數(shù)據(jù)而不是發(fā)送數(shù)據(jù)的。
發(fā)送數(shù)據(jù)和發(fā)送字符串是一樣的,字符串就是數(shù)據(jù)。只是發(fā)送只能一個(gè)一個(gè)字符去發(fā),所以發(fā)送字符串要拆開(kāi)來(lái)一個(gè)一個(gè)字符發(fā)
回復(fù)

使用道具 舉報(bào)

板凳
ID:213173 發(fā)表于 2018-5-10 11:27 | 只看該作者
1.串口發(fā)送數(shù)據(jù)時(shí)不能被接收中斷干擾,所以要關(guān)閉串口接收中斷。
2.串口發(fā)送程序一次只能發(fā)送一個(gè)字節(jié),如果要發(fā)送字符串,就要反復(fù)調(diào)用發(fā)送程序,直到發(fā)送完畢。
回復(fù)

使用道具 舉報(bào)

地板
ID:326705 發(fā)表于 2018-5-10 12:07 | 只看該作者
關(guān)串口中斷只是一種嚴(yán)謹(jǐn)?shù)姆绞,其?shí)不關(guān)你的程序應(yīng)該也可以。其次字符串的發(fā)送跟字節(jié)本質(zhì)上是一樣的,只不過(guò)是將字符串按一個(gè)個(gè)字節(jié)連續(xù)發(fā)送而已
回復(fù)

使用道具 舉報(bào)

5#
ID:137653 發(fā)表于 2018-5-10 15:02 | 只看該作者
是怕發(fā)送的過(guò)程中被接收中斷打斷吧
回復(fù)

使用道具 舉報(bào)

6#
ID:326954 發(fā)表于 2018-5-10 16:52 | 只看該作者
發(fā)送串口數(shù)據(jù)是指發(fā)送一個(gè)字節(jié),每個(gè)字符是2個(gè)字節(jié),因此發(fā)送字符串其實(shí)是發(fā)送2*n個(gè)字節(jié)
回復(fù)

使用道具 舉報(bào)

7#
ID:123289 發(fā)表于 2018-5-10 18:37 | 只看該作者
不知道是哪個(gè)高手老師教一招!
我是這樣做的:
1、將要發(fā)的數(shù)據(jù)統(tǒng)統(tǒng)放在一個(gè)緩沖區(qū)中,假設(shè)有N個(gè)字節(jié)。
2、打開(kāi)中斷
3、發(fā)一個(gè)字節(jié),發(fā)完后就干別的事了!之后,當(dāng)這個(gè)字節(jié)發(fā)完后就產(chǎn)生了中斷。
4、在發(fā)送中斷處理程序中,判斷一下是否N個(gè)字節(jié)是否全發(fā)完了,未完就續(xù)發(fā)下一個(gè)字節(jié),退出中斷服務(wù)程序。
5、退出后,又干別的事了!再之后,這個(gè)字節(jié)發(fā)完后就產(chǎn)生了中斷。
……4-5-4-5-4-5-……
自打開(kāi)機(jī)初始化后,就沒(méi)有關(guān)過(guò)串口中斷。!
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表