找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1310|回复: 1
打印 上一主题 下一主题
收起左侧

ST15F2K60S2单片机同时使用两个串口,单此程序只能实现串口一的数据发送到串口二

[复制链接]
回帖奖励 50 黑币 回复本帖可获得 5 黑币奖励! 每人限 1 次
跳转到指定楼层
楼主
ID:324319 发表于 2018-12-20 19:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
单片机代码:
  1. #include <stc15f2k60s2.h>
  2. #include <STDIO.H>
  3. #include <INTRINS.H>

  4. #define U8 unsigned char
  5. #define U16 unsigned int
  6. #define U32 unsigned long
  7. #define FOSC 11059200L  
  8. #define BAUD 9600   
  9. #define TM (65536 - (FOSC/4/BAUD))
  10. sbit DIR = P3^2;
  11. sbit DIR2 = P3^3;

  12. #define S2RI 0x01
  13. #define S2TI 0x02

  14. bit flagTxd = 0;
  15. bit flagTxd2 = 0;
  16. U8 cntRxd = 0;
  17. U8 cntRxd2 = 0;
  18. U8 flagRxd = 0;
  19. U8 flagRxd2 = 0;
  20. U8 pdata bufRxd[64];
  21. U8 pdata bufRxd2[64];


  22. void Delay1ms()
  23. {
  24. unsigned char i, j;
  25. _nop_();
  26. _nop_();
  27. _nop_();
  28. i = 11;
  29. j = 190;
  30. do
  31. {
  32.   while (--j);
  33. } while (--i);
  34. }

  35. void Delay(unsigned int i)
  36. {
  37.   do
  38. {
  39.    Delay1ms();
  40. } while (--i);
  41. }


  42. void UartInit(void)
  43. {
  44. SCON = 0x50;
  45. S2CON =0X50;
  46. AUXR |= 0x01;
  47. AUXR |= 0x04;
  48. T2L = 0xE0;
  49. T2H = 0xFe;
  50. AUXR |= 0x10;
  51. ES = 1;
  52. IE2 = 0x01;
  53. EA = 1;
  54. }
  55. void UartWrite(U8 *buf, U8 len)
  56. {
  57. DIR = 1;
  58. while (len--)
  59. {
  60.   flagTxd = 0;
  61.   SBUF = *buf++;
  62.   while (!flagTxd);
  63. }
  64.   Delay(1);
  65.   DIR = 0;
  66. }
  67. void UartWrite2(U8 *buf, U8 len)
  68. {
  69.   DIR2 = 1;
  70.   while (len--)
  71. {
  72.   flagTxd2 = 0;
  73.   S2BUF = *buf++;
  74.   while (!flagTxd2);
  75. }
  76.   Delay(1);
  77.   DIR2 = 0;
  78. }
  79. void main (void)
  80. {
  81. U8 pdata Data[64];
  82. U8 pdata Data2[64];
  83. U8 i;
  84. UartInit();
  85. while(1)
  86. {
  87.    DIR = 0;
  88.    if (flagRxd==1)
  89.    {
  90.     Delay(7);
  91.     for (i=0;i<cntRxd;i++)
  92.       {
  93.         Data[i]=bufRxd[i];
  94.    }
  95.       UartWrite2(Data,cntRxd);
  96.       cntRxd=0;
  97.       flagRxd=0;
  98. }
  99.    DIR2 = 0;
  100.      if (flagRxd2==1)
  101.     {
  102.   Delay(7);
  103.   for (i=0;i<cntRxd2;i++)
  104.        {
  105.          Data2[i]=bufRxd2[i];
  106.        }
  107.      UartWrite(Data2,cntRxd2);
  108.      cntRxd2=0;
  109.      flagRxd2=0;
  110.   }
  111. }
  112. }


  113. void InterruptUART() interrupt 4
  114. {
  115. if (RI)
  116. {
  117. RI = 0;
  118. flagRxd=1;
  119. if (cntRxd < sizeof(bufRxd))
  120. {
  121. bufRxd[cntRxd++] = SBUF;
  122. }
  123. }
  124. if (TI)
  125. {
  126. TI = 0;
  127. flagTxd = 1;
  128. }
  129. }


  130. void InterruptUART2() interrupt 8
  131. {
  132. if (S2CON & S2RI)
  133. {
  134. S2CON &= ~S2RI;
  135. flagRxd2=1;
  136. if (cntRxd2 < sizeof(bufRxd2))
  137. {
  138.    bufRxd2[cntRxd2++] = S2BUF;
  139. }
  140. }
  141. if (S2CON & S2TI)
  142. {
  143. S2CON &= ~S2TI;
  144. flagTxd2 = 1;
  145. }
  146. }
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:324319 发表于 2018-12-20 19:12 | 只看该作者
来个大佬帮忙看看啊,串口一的数据可以发到串口二,但是串口2的数据无法发到串口一
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表