久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6485|回復: 3
打印 上一主題 下一主題
收起左側

STC12C5A60S2雙串口通訊基礎程序

  [復制鏈接]
跳轉到指定樓層
樓主
ID:282419 發表于 2020-3-19 18:04 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  程序9600波特率 下 STC單片機雙串口通訊發基礎程序,程序內容,各自中斷接收,中斷轉發接收到的數據。需要兩個串口同時工作的可以用的上。

單片機源程序如下:

  1. /*-----------------------------------------------
  2.   名稱:STC12C5A60S2雙串口通信
  3.   編寫:Nico
  4.   日期:2009.5
  5.   修改:無
  6.   內容:9600波特率 雙串口收發
  7.         接線:串口1 發送P3.1,接收P3.0
  8.               串口2 發送P1.3,接收P1.2
  9. ------------------------------------------------*/

  10. #include"stc12c5a60s2.h"
  11. #include"delay.h"

  12. #define S2RI 0x01   //串口2接收中斷中斷請求標志位
  13. #define S2TI 0x02   //串口2發送中斷請求標志位
  14. unsigned char flag1,flag2,temp1,temp2;
  15. unsigned char uart2Receive[100];
  16. unsigned char uart1Receive[100];
  17. unsigned int point1=0,point2=0;
  18. unsigned char i;
  19. /*------------------------------------------------
  20.                    函數聲明
  21. ------------------------------------------------*/
  22. //void SendStr(unsigned char *s);
  23. void UART_1SendOneByte(unsigned char c);
  24. void UART_2SendOneByte(unsigned char c);
  25. void uart1SendStr(unsigned char *s);
  26. void uart2SendStr(unsigned char *s);
  27. /*------------------------------------------------
  28.                     串口初始化
  29. ------------------------------------------------*/
  30. void InitUART  (void)
  31. {

  32.     SCON  = 0x50;                        // SCON: 模式 1, 8-bit UART, 使能接收  
  33.     TMOD |= 0x20;               // TMOD: timer 1, mode 2, 8-bit 重裝
  34.     TH1   = 0xFD;               // TH1:  重裝值 9600 波特率 晶振 11.0592MHz  
  35.     TR1   = 1;                  // TR1:  timer 1 打開                    
  36.    EA    = 1;                  //打開總中斷
  37.     ES    = 1;                  //打開串口中斷
  38.        
  39.         S2CON = 0x50;   //  
  40.     BRT = 0xFD;    //  9600
  41.     AUXR = 0x10;    //
  42.     IE2 =0x01;  //
  43. }                           
  44. /*------------------------------------------------
  45.                     主函數
  46. ------------------------------------------------*/
  47. void main (void)
  48. {

  49.   InitUART();
  50.         DelayMs(100);
  51.         uart1SendStr("串口1初始化成功");
  52.         DelayMs(100);
  53.   uart2SendStr("串口2初始化成功");


  54. while (1)                       
  55.     {
  56.                         if(flag1==1)  
  57.         {  
  58.             flag1=0;
  59.                                        
  60.            // uart2SendStr("串口1中斷,串口2發送串口1接收的數據:");                               
  61.             uart1SendStr(uart1Receive);
  62.                                           for(i=0;i<=100;i++)
  63.                                                 {
  64.                                                         uart1Receive[i]=0;
  65.                                                         }
  66.         }  
  67.                         if(flag2==1)  
  68.         {  
  69.                                         flag2=0;   
  70.                                 //        uart1SendStr("串口2中斷,串口1發送串口2接收的數據:");
  71.             uart2SendStr(uart2Receive);  
  72.                                          for(i=0;i<=100;i++)
  73.                                                 {
  74.                                                         uart2Receive[i]=0;
  75.                                                         }
  76.         }  
  77.     }
  78. }

  79. /*------------------------------------------------
  80.                     1發送字符串
  81. ------------------------------------------------*/
  82. void uart1SendStr(unsigned char *s)
  83. {
  84. while(*s!='\0')// \0 表示字符串結束標志,
  85.                 //通過檢測是否字符串末尾
  86.   {
  87.   UART_1SendOneByte(*s);
  88.   s++;
  89.   }
  90. }
  91. /*------------------------------------------------
  92.                     2發送字符串
  93. ------------------------------------------------*/

  94. void uart2SendStr(unsigned char *s)
  95. {
  96. while(*s!='\0')// \0 表示字符串結束標志,
  97.                 //通過檢測是否字符串末尾
  98.   {
  99.   UART_2SendOneByte(*s);
  100.   s++;
  101.   }
  102. }

  103. void UART_1SendOneByte(unsigned char c)  
  104. {  
  105.     SBUF = c;  
  106.     while(!TI);    //?TI=0,????  
  107.     TI = 0;   
  108. }


  109. /****************串口2發送一個字符****************/  
  110. void UART_2SendOneByte(unsigned char c)  
  111. {  
  112.     S2BUF = c;  
  113.     while(!(S2CON&S2TI));  //?S2TI=0,????  
  114.     S2CON&=~S2TI;     //S2TI=0  
  115. }  
  116. /************串口1中斷函數*************/  
  117. void UART_1Interrupt(void) interrupt 4  
  118. {  
  119.     if(RI==1)  
  120.     {  
  121.         RI=0;  
  122.         flag1=1;  
  123.         temp1=SBUF;
  124.                                 uart1Receive[point1++]=temp1;
  125.                         if(temp1=='\n')
  126.                         {
  127.                                 flag1=1;
  128.                                 point1=0;
  129.                         }
  130.                         if(point1==100)
  131.                         {
  132.                                 point1=0;
  133.       }
  134.     }  
  135. }  
  136. /************串口2中斷函數*************/  
  137. void UART_2Interrupt(void) interrupt 8  
  138. {  
  139.          EA    = 0;                  //打開總中斷
  140.     if(S2CON&S2RI)  
  141.     {  
  142.         S2CON&=~S2RI;         
  143.         temp2=S2BUF;
  144.                         uart2Receive[point2++]=temp2;
  145.                         if(temp2=='\n')
  146.                         {
  147.                                 point2=0;
  148.                                 flag2=1;
  149.                         }
  150.                         if(point2==100)
  151.                         {
  152.                                 point2=0;
  153.       }
  154.     }
  155. EA    = 1;                  //打開總中斷               
  156. }
復制代碼

以上資料51hei提供下載:
12C5a60s2雙串口通訊.rar (50.5 KB, 下載次數: 196)




評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:312082 發表于 2020-8-16 23:50 | 只看該作者
96行,109行的S++,是什么目的?為什么要自加?而且上文中只有*S,沒有出現S啊?
回復

使用道具 舉報

板凳
ID:312082 發表于 2020-8-17 00:00 | 只看該作者
151,167行,是先開總中斷,后關總中斷,還是先關后開?
回復

使用道具 舉報

地板
ID:598743 發表于 2021-4-7 14:48 | 只看該作者
我測試了一下,用串口助手發送數據時候需要勾選“發送新行” 才可以 ,要不然就有一個接收不到另一個發送的。程序沒什么問題, 就是151行注釋錯了 ,代碼沒問題。
EA    = 0;  //打開總中斷
這里應該是
EA    = 0;  //關閉總中斷。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 韩国精品在线观看 | 狠狠影院| 久草青青草 | 在线视频亚洲 | 国内毛片毛片毛片毛片 | 亚洲精品久久嫩草网站秘色 | 日日噜噜噜夜夜爽爽狠狠视频, | 欧美日韩精品一区 | 99热在这里只有精品 | 久久成人一区二区三区 | 日韩欧美三级 | 国产精品一区二区在线 | 狠狠草视频 | 精品久久久久久亚洲综合网站 | 黄色网址在线免费观看 | 蜜桃黄网 | 日韩1区 | 国产精品免费观看 | 99热在线观看精品 | 国产中文视频 | 99视频在线免费观看 | 天堂av中文在线 | 久久久久电影 | 中文字幕免费观看 | 97av| 九九亚洲| 中文字幕亚洲精品 | 欧美人成在线视频 | 欧美福利视频一区 | 亚州无限乱码 | 国产成人精品亚洲日本在线观看 | 热久久久久 | 久久99精品国产 | 91社区视频 | 在线观看av中文字幕 | 蜜桃视频成人 | 成年女人免费v片 | 国产免国产免费 | 中国一级大毛片 | 国产999精品久久久 午夜天堂精品久久久久 | 国产精品视频在线观看 |