找回密码
 立即注册

QQ登录

只需一步,快速开始

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

STC12C5A60S2双串口程序(串口1和串口2信号通信)

  [复制链接]
跳转到指定楼层
楼主
STC12C5A60S2双串口程序。串口1P3.0和P3.1、串口2P1.3和P1.2。
  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.        
  55.         while(1)
  56.         {P0=temp2;
  57. //如果串口1接收到数据,将此数据由串口2发送
  58.                 if(flag1==1)
  59.                 {
  60.                        
  61.                         flag1=0;
  62.                         UART_2SendOneByte(temp1);
  63.                        
  64.                 }
  65.                 delay(300);
  66.                 P0=temp1;
  67. //如果串口2接收到数据,将此数据由串口1发送
  68.                 if(flag2==1)
  69.                 {
  70.                        
  71.                         flag2=0;
  72.                         UART_1SendOneByte(temp2);
  73.                 }
  74.                 delay(300);
  75.         }
  76. }
  77. /************串行口1中断处理函数*************/
  78. void UART_1Interrupt(void) interrupt 4
  79. {
  80.         if(RI==1)
  81.         {
  82.                
  83.                 RI=0;
  84.                 flag1=1;
  85.                 temp1=SBUF;
  86.         }
  87. }
  88. /************串行口2中断处理函数*************/
  89. void UART_2Interrupt(void) interrupt 8
  90. {
  91.         if(S2CON&S2RI)
  92.         {
  93.                
  94.                 S2CON&=~S2RI;
  95.                 flag2=1;
  96.                 temp2=S2BUF;
  97.         }
  98. }
复制代码


评分

参与人数 2黑币 +70 收起 理由
yousunny + 20 很给力!
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

来自 2#
ID:242954 发表于 2017-10-25 22:02 | 只看该作者
我想知道<STC12C5A60S2.h>这个头文件是自己写的吗?keil 里貌似没有这个东西。我是新手,在做一个项目,一个串口接收传感器232信号,一个上传给上位机,不会搞,求大佬赐教
回复

使用道具 举报

板凳
ID:164354 发表于 2017-4-7 22:46 | 只看该作者
多谢楼主,很好的例程
回复

使用道具 举报

地板
ID:95468 发表于 2017-4-8 11:10 | 只看该作者
感谢楼主,好资料
回复

使用道具 举报

5#
ID:219558 发表于 2017-8-5 10:48 | 只看该作者
这例程看的我想哭,对我真是太有用了
回复

使用道具 举报

6#
ID:5188 发表于 2017-8-31 10:39 | 只看该作者
楼主了不起啊啊,,,加油,,你是最棒的。
回复

使用道具 举报

7#
ID:130345 发表于 2017-9-2 22:14 | 只看该作者
感谢楼主
回复

使用道具 举报

8#
ID:1 发表于 2017-10-25 22:24 | 只看该作者
qunk 发表于 2017-10-25 22:02
我想知道这个头文件是自己写的吗?keil 里貌似没有这个东西。我是新手,在做一个项目,一个串口接收 ...

这个stc官方有提供的 ,不是自己写的,这里可以下载:http://www.51hei.com/bbs/dpj-36960-1.html
回复

使用道具 举报

9#
ID:242954 发表于 2017-10-27 14:07 | 只看该作者
谢谢!太感谢了!
回复

使用道具 举报

10#
ID:242954 发表于 2017-11-3 15:59 | 只看该作者
楼主,我用了你的程序做了测试,为什么接收的数据不是我发的呢?
回复

使用道具 举报

11#
ID:242954 发表于 2017-11-3 16:03 | 只看该作者
楼主,我用了你的程序做了测试,为什么接收到的不是我发送的呢?
回复

使用道具 举报

12#
ID:303441 发表于 2018-4-25 09:53 | 只看该作者
怎么把这个程序里面的波特率调为115200呢?
回复

使用道具 举报

13#
ID:303441 发表于 2018-4-25 09:55 | 只看该作者
还有晶振怎么设定为11.0592呢?
回复

使用道具 举报

14#
ID:293977 发表于 2018-5-14 18:59 | 只看该作者
太好了,正好需要呢
回复

使用道具 举报

15#
ID:76181 发表于 2018-6-15 22:44 | 只看该作者
qunk 发表于 2017-10-25 22:02
**** 作者被禁止或删除 内容自动屏蔽 ****

串口助手可以直接下载
回复

使用道具 举报

16#
ID:325058 发表于 2018-11-6 17:26 | 只看该作者
测试了,接收会乱码。不知道问题在哪里,请指教!

回复

使用道具 举报

17#
ID:325058 发表于 2018-11-7 17:28 | 只看该作者
是我搞错了,我的晶振是11.0592,初值应该改成FDH,初学者请谅解!
回复

使用道具 举报

18#
ID:464243 发表于 2019-1-8 00:27 来自手机 | 只看该作者
我想请教下。一定要用串口2和串口1一块工作嘛?我想只用串口二能发出数据可以吗
回复

使用道具 举报

19#
ID:464243 发表于 2019-1-8 00:29 来自手机 | 只看该作者
十万火急。因为要交作品了。就这个串口2的还没调试好。看到的话希望能够尽快得到回复谢谢啊
回复

使用道具 举报

20#
ID:160995 发表于 2019-7-24 13:26 | 只看该作者
谢谢楼主分享
回复

使用道具 举报

21#
ID:599677 发表于 2019-8-28 09:05 | 只看该作者
最近在搞双串口通信,有点懵逼的感觉,感谢楼主的例子,太有帮助了
回复

使用道具 举报

22#
ID:706655 发表于 2020-3-11 21:32 | 只看该作者
suinile 发表于 2018-11-7 17:28
是我搞错了,我的晶振是11.0592,初值应该改成FDH,初学者请谅解!

我的也是晶振11.0592,波特率设置的是9600 我应该改代码的什么地方,我是小白一个 能不能告诉一下万分感谢
回复

使用道具 举报

23#
ID:282431 发表于 2020-3-11 22:51 | 只看该作者
感谢楼主的例子,太有帮助了
回复

使用道具 举报

24#
ID:472300 发表于 2021-1-1 21:33 | 只看该作者
qunk 发表于 2017-10-25 22:02
**** 作者被禁止或删除 内容自动屏蔽 ****

使用宏晶的串口STC-ISP下载头文件即可
回复

使用道具 举报

25#
ID:1032822 发表于 2024-2-26 14:31 | 只看该作者
简直太棒啦
回复

使用道具 举报

26#
ID:1032822 发表于 2024-2-26 14:35 | 只看该作者
qunk 发表于 2017-10-25 22:02
**** 作者被禁止或删除 内容自动屏蔽 ****

这个是库里自带的吧,你看他用的就是这个芯片,应该是51单片机的一种
回复

使用道具 举报

27#
ID:1114439 发表于 2024-3-27 15:44 | 只看该作者
最近正好碰到双串口案例,需要资料参考。谢谢
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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