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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 9203|回復: 1
收起左側

基于普中科技51單片機的簡單串口通信例程

[復制鏈接]
ID:432757 發表于 2019-1-21 20:31 | 顯示全部樓層 |閱讀模式
實現功能:當PC一次發送帶有“123”的字符串,或者依次輸入有“1”“2”“3”的字符時,點亮單片機的一個LED小燈,同時PC收到“Hello.x”的字符串,隨后LED小燈熄滅。


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

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

  8. typedef unsigned int u16;          //對數據類型進行聲明定義
  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. * 函數名         :UsartInit()
  17. * 函數功能                   :設置串口
  18. * 輸入           : 無
  19. * 輸出                  : 無
  20. *******************************************************************************/
  21. void UsartInit()
  22. {
  23.         SCON=0X50;                        //設置為工作方式1
  24.         TMOD=0X20;                        //設置計數器工作方式2
  25.         PCON=0X80;                        //波特率加倍
  26.         TH1=0xf3;                                //計數器初始值設置,注意波特率是4800的
  27.         TL1=0xf3;
  28.         ES=1;                                                //打開接收中斷
  29.         EA=1;                                                //打開總中斷
  30.         TR1=1;                                        //打開計數器
  31. }

  32. /*******************************************************************************
  33. * 函 數 名       : main
  34. * 函數功能                 : 主函數
  35. * 輸    入       : 無
  36. * 輸    出             : 無
  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,變為狀態1
  51. {
  52.         if(a=='1')
  53.                 {
  54.                 i=1;
  55.                 }
  56.         else
  57.                 {
  58.                 i=0;
  59.                 }
  60. }
  61. else if(i==1)  //判斷在上一個字符為‘1’的情況下,輸入字符是否為‘2’
  62. {
  63.         if(a=='2')          //若為‘2’,令i=2,變為狀態2
  64.                 {
  65.                 i=2;
  66.                 }
  67.         else if(a=='1')        //若為‘1’,回到狀態‘1’
  68.                 {
  69.                  i=1;
  70.                 }
  71.         else                        //其它情況,回到狀態0
  72.                 {
  73.                 i=0;
  74.                 }
  75. }
  76. else if(i==2)                //判斷在上兩個字符為‘1’‘2’的情況下,輸入字符是否為‘3’
  77. {
  78.         if(a=='3')                        //若為‘3‘,LED點亮,輸出“Hello.x”,LED熄滅,隨后回到狀態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‘,回到狀態1
  91.                 {
  92.                 i=1;
  93.                 }
  94.         else                         //其它情況,回到狀態0
  95.                 {
  96.                 i=0;
  97.                 }
  98. }
  99. }
  100. /*******************************************************************************
  101. * 函數名         : Usart() interrupt 4
  102. * 函數功能                  : 串口通信中斷函數
  103. * 輸入           : 無
  104. * 輸出                  : 無
  105. *******************************************************************************/
  106. void Usart() interrupt 4
  107. {
  108.         Usart_receive();
  109.         Usart_judge();
  110. }
復制代碼



評分

參與人數 1黑幣 +100 收起 理由
admin + 100 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:498471 發表于 2019-4-18 10:28 | 顯示全部樓層
不好使
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表