找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機(jī)串口需不需要中斷的問題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:367937 發(fā)表于 2018-9-14 13:03 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
單片機(jī)串口接收發(fā)送數(shù)據(jù)時(shí),到底需不需要引入中斷,下面這個(gè)程序就是沒引入中斷,結(jié)果是一直在重復(fù)顯示發(fā)送文本。如果我只想顯示一遍呢。
  1. #include <reg51.h>

  2. typedef   unsigned char  uint8;
  3. typedef   unsigned int   uint16;

  4. uint8 Buf[]="hello world!\n";

  5. void delay(uint16 n)
  6. {
  7.         while (n--);
  8. }

  9. /*波特率為9600*/
  10. void UART_init(void)
  11. {
  12.     SCON = 0x50;        //串口方式1

  13.     TMOD = 0x20;        // 定時(shí)器使用方式2自動(dòng)重載
  14.     TH1 = 0xFD;    //9600波特率對應(yīng)的預(yù)設(shè)數(shù),定時(shí)器方式2下,TH1=TL1
  15.     TL1 = 0xFD;

  16.     TR1 = 1;//開啟定時(shí)器,開始產(chǎn)生波特率
  17. }

  18. /*發(fā)送一個(gè)字符*/
  19. void UART_send_byte(uint8 dat)
  20. {
  21.         SBUF = dat;       //把數(shù)據(jù)放到SBUF中
  22.         while (TI == 0);//未發(fā)送完畢就等待
  23.         TI = 0;    //發(fā)送完畢后,要把TI重新置0
  24. }

  25. /*發(fā)送一個(gè)字符串*/
  26. void UART_send_string(uint8 *buf)
  27. {
  28.         while (*buf != '\0')
  29.         {
  30.                 UART_send_byte(*buf++);
  31.         }
  32. }

  33. main()
  34. {
  35.         UART_init();
  36.        
  37.         while (1)
  38.         {
  39.                 UART_send_string(Buf);
  40.                 delay(20000);
  41.         }

  42. }
復(fù)制代碼

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

使用道具 舉報(bào)

沙發(fā)
ID:359173 發(fā)表于 2018-9-14 13:45 | 只看該作者
應(yīng)該需要加一個(gè)中斷

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評分

回復(fù)

使用道具 舉報(bào)

板凳
ID:375092 發(fā)表于 2018-9-14 13:54 | 只看該作者
首先,51串口需不需要中斷是看你是發(fā)送還是接收,就比如你現(xiàn)在的這個(gè)發(fā)送程序吧,你沒有寫接收程序,所以就不需要中斷函數(shù),串口的發(fā)送程序一般不需要到中斷函數(shù)里面,還有就是要想值顯示的的只發(fā)送一次的數(shù)據(jù)那你就不能這么寫,不能把發(fā)送函數(shù)寫到死循環(huán)里面(也就是whi(1)這里面),直接這樣寫就好了UART_send_string(Buf);

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 回帖助人的獎(jiǎng)勵(lì)!

查看全部評分

回復(fù)

使用道具 舉報(bào)

地板
ID:392862 發(fā)表于 2018-9-14 14:54 | 只看該作者
如果需要指定間隔時(shí)間內(nèi)發(fā)送,那么需要一個(gè)定時(shí)中斷,然后在中斷中發(fā)射
如果沒有其他要求
那就看您心情了

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評分

回復(fù)

使用道具 舉報(bào)

5#
ID:211052 發(fā)表于 2018-9-14 15:12 | 只看該作者
你這樣當(dāng)然會間隔一段時(shí)間重復(fù)發(fā)送,把UART_send_string(Buf);移到while(1)的前面

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評分

回復(fù)

使用道具 舉報(bào)

6#
ID:213173 發(fā)表于 2018-9-14 15:19 | 只看該作者
你不設(shè)置發(fā)送的前提條件當(dāng)然不斷循環(huán)發(fā)送。

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評分

回復(fù)

使用道具 舉報(bào)

7#
ID:213173 發(fā)表于 2018-9-14 15:20 | 只看該作者
與中斷無關(guān)
回復(fù)

使用道具 舉報(bào)

8#
ID:387733 發(fā)表于 2018-9-14 19:22 | 只看該作者
用不用中斷要看你的系統(tǒng)決定,如果系統(tǒng)任務(wù)很簡單,可以不用中斷。但是不用中斷的話,就要反復(fù)去查詢,占用很多時(shí)間。如果系統(tǒng)復(fù)雜,要處理的事務(wù)很多,就不允許消耗時(shí)間用于空等,就必須用中斷方式。

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評分

回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

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

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