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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 12673|回復: 11
收起左側

STC15單片機4串口中斷收發數據源代碼,親測能用

  [復制鏈接]
ID:309307 發表于 2018-9-11 17:04 | 顯示全部樓層 |閱讀模式
STC15W4K58s4單片機4路串口同時中斷收發數據代碼
0.png
單片機源程序如下:
  1. #include "uart.h"

  2. u8 Uart1_RecvBuf[11];  //串口數據緩存
  3. u8 point1 = 0;             //綬存指針
  4. u8 UART1_RecvFlag=0;

  5. u8 Uart2_RecvBuf[11];  //串口數據緩存
  6. u8 point2 = 0;             //綬存指針
  7. u8 UART2_RecvFlag=0;

  8. u8 Uart3_RecvBuf[11];  //串口數據緩存
  9. u8 point3 = 0;             //綬存指針
  10. u8 UART3_RecvFlag=0;          

  11. u8 Uart4_RecvBuf[11];  //串口數據緩存
  12. u8 point4 = 0;             //綬存指針
  13. u8 UART4_RecvFlag=0;


  14. void UartInit(void)                //9600bps@11.0592MHz
  15. {
  16.         P3M0 &= ~(1<<7);                //設置P3.7為準雙向IO
  17.         P3M1 &= ~(1<<7);

  18.         S1_USE_P30P31();

  19.         SCON = 0x50;                //8位數據,可變波特率
  20.         AUXR |= 0x40;                //定時器1時鐘為Fosc,即1T
  21.         AUXR &= 0xFE;                //串口1選擇定時器1為波特率發生器
  22.         TMOD |= 0x00;                //設定定時器1為16位自動重裝方式
  23.         TL1 = 0xE0;                //設定定時初值
  24.         TH1 = 0xFE;                //設定定時器重裝值
  25.         ET1 = 0;                //禁止定時器1中斷
  26.         TR1 = 1;                //啟動定時器1

  27.         S2CON = 0x50;                //8位數據,可變波特率
  28.         AUXR |= 0x04;                //定時器2時鐘為Fosc,即1T
  29.         T2L = 0xE0;                //設定定時初值
  30.         T2H = 0xFE;                //設定定時初值
  31.         AUXR |= 0x10;                //啟動定時器2

  32.         S3CON = 0x10;                //8位數據,可變波特率
  33.         S3CON |= 0x40;                //串口3選擇定時器3為波特率發生器
  34.         T4T3M |= 0x02;                //定時器3時鐘為Fosc,即1T
  35.         T3L = 0xE0;                //設定定時初值
  36.         T3H = 0xFE;                //設定定時初值
  37.         T4T3M |= 0x08;                //啟動定時器3

  38.         S4CON = 0x10;                //8位數據,可變波特率
  39.         S4CON |= 0x40;                //串口4選擇定時器4為波特率發生器
  40.         T4T3M |= 0x20;                //定時器4時鐘為Fosc,即1T
  41.         T4L = 0xE0;                //設定定時初值
  42.         T4H = 0xFE;                //設定定時初值
  43.         T4T3M |= 0x80;                //啟動定時器4

  44.         UART2_INT_ENABLE();
  45.         UART3_INT_ENABLE();
  46.         UART4_INT_ENABLE();
  47.         ES = 1;
  48.         EA = 1;
  49. }

  50. /*----------------------------
  51. 發送串口數據
  52. ----------------------------*/
  53. void Uart1_Sendbyte(unsigned char ch)
  54. {   
  55.         SBUF = ch;                 //寫數據到UART數據寄存器
  56.   while (!TI);               //等待前面的數據發送完成               
  57.   TI = 0;
  58. }

  59. void Uart1_SendData()
  60. {
  61.         int i;
  62.         for(i=0;i<11;i++)
  63.         {
  64.                 Uart1_Sendbyte(Uart1_RecvBuf[i]);
  65.         }
  66. }

  67. void Usart() interrupt 4 using 1            // 串口中斷函數
  68. {
  69.         ES = 0;
  70.         if (RI)
  71.         {
  72.                 RI = 0;                                //清除RI位
  73.                 Uart1_RecvBuf[point1] = SBUF;
  74.                 if (Uart1_RecvBuf[0] == 0x55)
  75.                 {               
  76.                         point1++;               
  77.                         if(point1>=11)         
  78.                         {
  79.                                 point1 = 0;
  80.                         }
  81.                 }       
  82.                 if(Uart1_RecvBuf[1] == 0x53)
  83.                 {
  84.                         UART1_RecvFlag=1;
  85.                 }               
  86.         }
  87.         ES =  1;
  88. }

  89. /*----------------------------
  90. 通過串口2發送串口數據
  91. ----------------------------*/
  92. void Uart2_Sendbyte(unsigned char ch)
  93. {
  94.         S2BUF = ch;   //寫數據到UART數據寄存器
  95.         while(!TI2);        //不忙后發送數據                 
  96.         CLR_TI2();
  97. }

  98. void Uart2_SendData()
  99. {
  100.         int i;
  101.         for(i=0;i<11;i++)
  102.         {
  103.                 Uart2_Sendbyte(Uart2_RecvBuf[i]);
  104.         }
  105. }

  106. void Usart2() interrupt 8 using 1
  107. {
  108.         UART2_INT_DISABLE();       
  109.         if(RI2)
  110.         {
  111.                 CLR_RI2();                               //清除RI位
  112.                 Uart2_RecvBuf[point2] = S2BUF;
  113.                 if (Uart2_RecvBuf[0] == 0x55)
  114.                 {               
  115.                         point2++;               
  116.                         if(point2>=11)         
  117.                         {
  118.                                 point2 = 0;
  119.                         }
  120.                 }       
  121.                 if(Uart2_RecvBuf[1] == 0x53)
  122.                 {
  123.                         UART2_RecvFlag=1;
  124.                 }                        
  125.         }
  126.         UART2_INT_ENABLE();       
  127. }

  128. /*----------------------------
  129. 通過串口3發送串口數據
  130. ----------------------------*/
  131. void Uart3_Sendbyte(unsigned char ch)
  132. {       
  133.         S3BUF = ch;                 //寫數據到UART數據寄存器
  134.   while(!TI3);        //不忙后發送數據
  135.         CLR_TI3();
  136. }

  137. void Uart3_SendData()
  138. {
  139.         int i;
  140.         for(i=0;i<11;i++)
  141.         {
  142.                 Uart3_Sendbyte(Uart3_RecvBuf[i]);
  143.         }
  144. }

  145. void Usart3() interrupt 17
  146. {
  147.         UART3_INT_DISABLE();       
  148.         if(RI3)
  149.   {
  150.                 CLR_RI3();                               //清除RI位
  151.                 Uart3_RecvBuf[point3] = S3BUF;
  152.                 if (Uart3_RecvBuf[0] == 0x55)
  153.                 {               
  154.                         point3++;               
  155.                         if(point3>=11)         
  156.                         {
  157.                                 point3 = 0;
  158.                         }           
  159.                 }
  160.                 if(Uart3_RecvBuf[1] == 0x53)
  161.                 {
  162.                         UART3_RecvFlag=1;
  163.                 }
  164.         }               
  165.         UART3_INT_ENABLE();       
  166. }

  167. /*----------------------------
  168. 通過串口4發送串口數據
  169. ----------------------------*/
  170. void Uart4_Sendbyte(unsigned char ch)
  171. {            
  172.         S4BUF = ch;                 //寫數據到UART數據寄存器
  173.   while(!TI4);        //不忙后發送數據
  174.         CLR_TI4();
  175. }

  176. void Uart4_SendData()
  177. {
  178.         int i;
  179.         for(i=0;i<11;i++)
  180.         {
  181. ……………………

  182. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
4路串中斷收發.rar (126.09 KB, 下載次數: 266)

評分

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

查看全部評分

回復

使用道具 舉報

ID:455729 發表于 2018-12-26 18:06 | 顯示全部樓層
希望有用
回復

使用道具 舉報

ID:485871 發表于 2019-3-17 22:04 | 顯示全部樓層
希望有用
回復

使用道具 舉報

ID:90212 發表于 2019-6-2 21:55 | 顯示全部樓層
整了個15w4k48S4回來做modbus從站用,正需要!
回復

使用道具 舉報

ID:47390 發表于 2019-7-10 09:08 | 顯示全部樓層
不錯,先下載來學習,學習
回復

使用道具 舉報

ID:234782 發表于 2019-7-18 15:46 | 顯示全部樓層
不是我想要的答案
回復

使用道具 舉報

ID:85480 發表于 2019-8-2 15:04 | 顯示全部樓層
希望能解決我的困惑,學習一下。
回復

使用道具 舉報

ID:59423 發表于 2019-10-18 10:23 | 顯示全部樓層
參考下樓主的歷程,寫的很清晰
回復

使用道具 舉報

ID:616436 發表于 2020-3-5 17:26 | 顯示全部樓層
參考下樓主的歷程
回復

使用道具 舉報

ID:625276 發表于 2021-3-31 09:39 | 顯示全部樓層
正在使用STC15w4k32s4寫多串口同時通訊程序,參考一下
回復

使用道具 舉報

ID:366088 發表于 2021-9-8 11:04 | 顯示全部樓層
沒啥用  調試了一下沒反應   白充了!!!!!
回復

使用道具 舉報

ID:899981 發表于 2022-6-28 10:42 | 顯示全部樓層
直接發送沒反應:delayms(200);
                Uart4_SendData1();
                        delayms(200);
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲国产成人av | 天天干狠狠操 | 每日在线更新av | 色爱综合网 | 91 在线| 日韩电影中文字幕 | 亚洲精品av在线 | 婷婷中文在线 | 欧美日韩免费在线 | 久久新| 亚洲第一av | 国产99久久久国产精品下药 | 色婷婷在线视频 | 成人九色 | 亚洲最大看片网站 | 欧美一级久久久猛烈a大片 日韩av免费在线观看 | 日本福利片 | 久久久久成人精品亚洲国产 | 91精品在线播放 | 91精品国产综合久久精品 | 国产欧美一区二区精品久导航 | 日本免费一区二区三区四区 | 亚洲精品99久久久久久 | 久久噜噜噜精品国产亚洲综合 | 91久久久久| 亚洲一区二区日韩 | 精品乱码久久久久 | 国产一级片在线观看视频 | 欧美精品一区二区三区在线播放 | www.日本在线播放 | 成人免费毛片在线观看 | 国产精品无码专区在线观看 | 国产精品一区二区三区在线 | 亚洲一区二区久久久 | 国产精品久久久久久久久 | 日韩二三区 | 日韩在线视频一区 | 日本成人在线观看网站 | 午夜在线视频 | 国产乱性| 免费网站国产 |