找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2030|回复: 6
收起左侧

stc12c5a想要在串口1接收到的内容后加回车换行符号却实现不了

[复制链接]
ID:586906 发表于 2021-1-11 10:01 | 显示全部楼层 |阅读模式
50黑币
stc12c5a想要在串口1接收到的内容后加回车换行符号后由串口2发送出去却实现不了,有大佬能帮忙看看修改一下吗?初始学徒比较菜
  1. #include<stc12c5a.h>

  2. #define S2RI 0x01        
  3. #define S2TI 0x02
  4. sbit RW=P1^7;
  5. unsigned char *a,*b;
  6. unsigned char flag1,flag2;
  7. void InitUART(void)
  8. {
  9.     TMOD = 0x20;   
  10.     SCON = 0x50;   
  11.     TH1 = 0xFA;           
  12.     TL1 = TH1;
  13.     TR1 = 1;           
  14.     EA =1;      
  15.     ES =1;        

  16.     S2CON = 0x50;   
  17.     BRT = 0xFA;         
  18.     AUXR = 0x10;   
  19.     IE2 =0x01;        
  20. }
  21. void UART_1SendOneByte(unsigned char c)
  22. {
  23.     SBUF = c;
  24.     while(!TI);           
  25.     TI = 0;         
  26. }
  27. void UART_2SendOneByte(unsigned char c)
  28. {
  29.                 RW=1;
  30.     S2BUF=c;
  31.     while(!(S2CON&S2TI));  
  32.     S2CON&=~S2TI;
  33.                 RW=0;
  34. }
  35. void uart1SendStr(unsigned char *s)
  36. {
  37.         while(*s!='\0')
  38.   {
  39.                 UART_1SendOneByte(*s);
  40.                 s++;
  41.   }
  42. }
  43. void uart2SendStr(unsigned char *s)
  44. {
  45.         while(*s!='\0')            
  46.   {
  47.   UART_2SendOneByte(*s);
  48.   s++;
  49.   }
  50. }
  51. void delay(unsigned int z)
  52. {
  53.         unsigned int x,y;
  54.         for(x=z;x>0;x--)
  55.         for(y=600;y>0;y--);
  56. }
  57. void main(void)
  58. {
  59.     InitUART();        
  60.     delay(50);
  61.     while(1)
  62.     {
  63.                                          
  64.       if(flag1==1)
  65.       {
  66.         flag1=0;
  67.         uart2SendStr(a);
  68.                         
  69.       }
  70.       if(flag2==1)
  71.       {
  72.         flag2=0;
  73.         uart1SendStr(b);
  74.       }
  75.      }
  76. }
  77. void UART_1Interrupt(void) interrupt 4
  78. {
  79.         if(RI==1)
  80.         {
  81.           RI=0;
  82.                                         *a=SBUF;
  83.                                         a+='\r';
  84.                                         a+='\n';
  85.                
  86.         }
  87. }
  88. void UART_2Interrupt(void) interrupt 8
  89. {
  90.         if(S2CON&S2RI)
  91.         {
  92.           S2CON&=~S2RI;
  93.           *b=S2BUF;
  94.         }
  95. }
复制代码


04.zip

695 Bytes, 下载次数: 3

回复

使用道具 举报

ID:752974 发表于 2021-1-11 11:32 | 显示全部楼层
回车符0x0D,换行符0x0A,添加后发送即可。或者加 '\r'是回车符,'\n'是换行符。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:390416 发表于 2021-1-11 16:15 | 显示全部楼层
用我这个贴子的代码就行 多字节发送 带了 换行和回车 还支持软件复位
你是STC12 可能定时器寄存器需要修改一下.
http://www.51hei.com/bbs/dpj-200927-1.html
回复

使用道具 举报

ID:586906 发表于 2021-1-11 16:25 | 显示全部楼层
添加了,可能是添加的不对,实现不了
回复

使用道具 举报

ID:290373 发表于 2021-1-11 22:28 | 显示全部楼层
*a没申请内存
a+=是对地址操作而不是字符串
a申请时要用数组或者malloc
调用时用下标形式或者string库函数

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:373388 发表于 2021-1-11 23:39 | 显示全部楼层
把*a;定义成数组形式试一下, a[10];  a[0]  = SBUF;a[1] ='\r' ;a[2]  ='\n';a[3] = '\0';

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:586906 发表于 2021-1-12 15:05 | 显示全部楼层
谢谢各位大佬,我尝试一下
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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