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

QQ登錄

只需一步,快速開始

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

基于普中科技51單片機(jī)的簡(jiǎn)單串口通信例程

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:432757 發(fā)表于 2019-1-21 20:31 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
實(shí)現(xiàn)功能:當(dāng)PC一次發(fā)送帶有“123”的字符串,或者依次輸入有“1”“2”“3”的字符時(shí),點(diǎn)亮單片機(jī)的一個(gè)LED小燈,同時(shí)PC收到“Hello.x”的字符串,隨后LED小燈熄滅。


注意:51單片機(jī)的時(shí)鐘頻率若不為11.052MHz,如本例使用的單片機(jī)時(shí)鐘頻率為11.938995MHz,只在波特率為4800,波特率加倍的情況下實(shí)現(xiàn)通信,其它波特率下無(wú)法收到51發(fā)送的數(shù)據(jù)。
  1. /**************************************************************************************
  2. *                              串口通信實(shí)驗(yàn)                                                                                                  *
  3. 實(shí)現(xiàn)現(xiàn)象:下載程序后打開串口調(diào)試助手,將波特率設(shè)置為4800,選擇發(fā)送的數(shù)據(jù)就可以顯示
  4.                         在串口助手上。
  5. 注意事項(xiàng):無(wú)。                                                                                                                                                                  
  6. ***************************************************************************************/

  7. #include "reg52.h"                         //此文件中定義了單片機(jī)的一些特殊功能寄存器

  8. typedef unsigned int u16;          //對(duì)數(shù)據(jù)類型進(jìn)行聲明定義
  9. typedef unsigned char u8;

  10. sbit LED=P2^2;
  11. u8 i=0;
  12. u8 m[8]="Hello.x";
  13. u8 k=0;
  14. u8 a;
  15. /*******************************************************************************
  16. * 函數(shù)名         :UsartInit()
  17. * 函數(shù)功能                   :設(shè)置串口
  18. * 輸入           : 無(wú)
  19. * 輸出                  : 無(wú)
  20. *******************************************************************************/
  21. void UsartInit()
  22. {
  23.         SCON=0X50;                        //設(shè)置為工作方式1
  24.         TMOD=0X20;                        //設(shè)置計(jì)數(shù)器工作方式2
  25.         PCON=0X80;                        //波特率加倍
  26.         TH1=0xf3;                                //計(jì)數(shù)器初始值設(shè)置,注意波特率是4800的
  27.         TL1=0xf3;
  28.         ES=1;                                                //打開接收中斷
  29.         EA=1;                                                //打開總中斷
  30.         TR1=1;                                        //打開計(jì)數(shù)器
  31. }

  32. /*******************************************************************************
  33. * 函 數(shù) 名       : main
  34. * 函數(shù)功能                 : 主函數(shù)
  35. * 輸    入       : 無(wú)
  36. * 輸    出             : 無(wú)
  37. *******************************************************************************/

  38. void main()
  39. {       
  40.         UsartInit();  //        串口初始化
  41.         while(1);               
  42. }
  43. void Usart_receive()
  44. {
  45. a=SBUF;
  46. RI=0;
  47. }
  48. void Usart_judge()
  49. {
  50. if(i==0)         //判斷輸入字符是不是‘1’,若為‘1’,令i=1,變?yōu)闋顟B(tài)1
  51. {
  52.         if(a=='1')
  53.                 {
  54.                 i=1;
  55.                 }
  56.         else
  57.                 {
  58.                 i=0;
  59.                 }
  60. }
  61. else if(i==1)  //判斷在上一個(gè)字符為‘1’的情況下,輸入字符是否為‘2’
  62. {
  63.         if(a=='2')          //若為‘2’,令i=2,變?yōu)闋顟B(tài)2
  64.                 {
  65.                 i=2;
  66.                 }
  67.         else if(a=='1')        //若為‘1’,回到狀態(tài)‘1’
  68.                 {
  69.                  i=1;
  70.                 }
  71.         else                        //其它情況,回到狀態(tài)0
  72.                 {
  73.                 i=0;
  74.                 }
  75. }
  76. else if(i==2)                //判斷在上兩個(gè)字符為‘1’‘2’的情況下,輸入字符是否為‘3’
  77. {
  78.         if(a=='3')                        //若為‘3‘,LED點(diǎn)亮,輸出“Hello.x”,LED熄滅,隨后回到狀態(tài)0
  79.                 {
  80.                 LED=0;
  81.                 for(k=0;k<8;k++)
  82.                         {
  83.                         SBUF=m[k];
  84.                         while(!TI);
  85.                         TI=0;
  86.                         }
  87.                 LED=1;
  88.                 i=0;
  89.                 }
  90.         else if(a=='1')          //若為’1‘,回到狀態(tài)1
  91.                 {
  92.                 i=1;
  93.                 }
  94.         else                         //其它情況,回到狀態(tài)0
  95.                 {
  96.                 i=0;
  97.                 }
  98. }
  99. }
  100. /*******************************************************************************
  101. * 函數(shù)名         : Usart() interrupt 4
  102. * 函數(shù)功能                  : 串口通信中斷函數(shù)
  103. * 輸入           : 無(wú)
  104. * 輸出                  : 無(wú)
  105. *******************************************************************************/
  106. void Usart() interrupt 4
  107. {
  108.         Usart_receive();
  109.         Usart_judge();
  110. }
復(fù)制代碼



評(píng)分

參與人數(shù) 1黑幣 +100 收起 理由
admin + 100 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:498471 發(fā)表于 2019-4-18 10:28 | 只看該作者
不好使
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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