找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机双串口通信程序问题

[复制链接]
跳转到指定楼层
楼主
ID:303441 发表于 2018-4-25 11:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. /***********************************************************************
  2. 时间:2012.11.24
  3. 芯片:STC12C5A60S2
  4. 晶振:22.1184MHz  波特率:9600bps
  5. 引脚定义:串行口1:发送————TxD/P3.1; 接收———.000—RxD/P3
  6.           串行口2:        发送————TxD2/P1.3;接收————RxD2/P1.2
  7. 功能描述:STC12双串口通信(中断方式)
  8.           当串行口1接收数据后,将此数据由串行口2发送出去
  9.           当串行口2接收数据后,将此数据由串行口1发送出去
  10. ***********************************************************************/
  11. #include<STC12C5A60S2.h>

  12. #define S2RI 0x01        //串口2接收中断请求标志位
  13. #define S2TI 0x02        //串口2发送中断请求标志位
  14. unsigned char flag1,flag2,temp1=0xaa,temp2=0x55;
  15. /****************串行口初始化函数****************/
  16. void InitUART(void)
  17. {
  18.     TMOD = 0x20;    //定时器1工作在方式2  8位自动重装
  19.     SCON = 0x50;    //串口1工作在方式1  10位异步收发 REN=1允许接收
  20.     TH1 = 0xFA;           //定时器1初值
  21.     TL1 = TH1;
  22.     TR1 = 1;           //定时器1开始计数
  23.     EA =1;        //开总中断
  24.     ES =1;        //开串口1中断

  25.     S2CON = 0x50;   //串口2工作在方式1  10位异步收发 S2REN=1允许接收
  26.     BRT = 0xFA;           //独立波特率发生器初值
  27.     AUXR = 0x10;    //BRTR=1 独立波特率发生器开始计数
  28.     IE2 =0x01;        //开串口2中断  ES2=1
  29. }
  30. /****************串行口1发送****************/
  31. void UART_1SendOneByte(unsigned char c)
  32. {
  33.     SBUF = c;
  34.     while(!TI);           //若TI=0,在此等待
  35.     TI = 0;         
  36. }
  37. /****************串行口2发送****************/
  38. void UART_2SendOneByte(unsigned char c)
  39. {
  40.     S2BUF = c;
  41.     while(!(S2CON&S2TI));  //若S2TI=0,在此等待
  42.     S2CON&=~S2TI;          //S2TI=0
  43. }
  44. void delay(unsigned int z)
  45. {
  46.         unsigned int x,y;
  47.         for(x=z;x>0;x--)
  48.         for(y=600;y>0;y--);
  49. }
  50. /*****************主函数******************/
  51. void main(void)
  52. {
  53.     InitUART();        //串行口初始化

  54.         while(1)
  55.         {P0=temp2;
  56. //如果串口1接收到数据,将此数据由串口2发送
  57.                 if(flag1==1)
  58.                 {

  59.                         flag1=0;
  60.                         UART_2SendOneByte(temp1);

  61.                 }
  62.                 delay(300);
  63.                 P0=temp1;
  64. //如果串口2接收到数据,将此数据由串口1发送
  65.                 if(flag2==1)
  66.                 {

  67.                         flag2=0;
  68.                         UART_1SendOneByte(temp2);
  69.                 }
  70.                 delay(300);
  71.         }
  72. }
  73. /************串行口1中断处理函数*************/
  74. void UART_1Interrupt(void) interrupt 4
  75. {
  76.         if(RI==1)
  77.         {

  78.                 RI=0;
  79.                 flag1=1;
  80.                 temp1=SBUF;
  81.         }
  82. }
  83. /************串行口2中断处理函数*************/
  84. void UART_2Interrupt(void) interrupt 8
  85. {
  86.         if(S2CON&S2RI)
  87.         {

  88.                 S2CON&=~S2RI;
  89.                 flag2=1;
  90.                 temp2=S2BUF;
  91.         }
  92. }

复制代码


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

使用道具 举报

沙发
ID:303441 发表于 2018-4-25 11:13 | 只看该作者
提问:USB转TTL接stc12c5a60s单片机再接GA6-GSM模块,,,这个程序可用吗
回复

使用道具 举报

板凳
ID:303441 发表于 2018-4-25 11:15 | 只看该作者
还有我的单片机晶振为11.0592,串口波特率为115200,在如上代码中如何修改,谢谢
回复

使用道具 举报

地板
ID:303441 发表于 2018-4-25 11:18 | 只看该作者
审核这么慢吗?我就想问个问题啊~
回复

使用道具 举报

5#
ID:291539 发表于 2018-4-26 16:17 | 只看该作者
将串口初始化程序相应的改一下
回复

使用道具 举报

6#
ID:303441 发表于 2018-4-28 16:11 | 只看该作者
最小似然估计 发表于 2018-4-26 16:17
将串口初始化程序相应的改一下

初始化程序修改它的波特率和晶振之后,GSM模块怎么写进去呢?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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