找回密码
 立即注册

QQ登录

只需一步,快速开始

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

STC12C5A60S2单片机串口通信多波特率选择(51系列通用)

  [复制链接]
跳转到指定楼层
楼主
多种波特率封装成函数,方便使用。
11.0592Mhz,12.00Mhz波特率都配置好了,直接改参数调用就行,附详细注释方便学习
全部亲自试过了,误差0.00%




运行截图:
(注意串口通信波特率与程序一致)


单片机源程序如下:
  1. #include <STC12C5A60S2.H>


  2. void UART_Init(unsigned int BaudRate) //串口初使化函数  11.0592Mhz 12单片机
  3. {
  4.         unsigned char TH1_Dat;
  5.         unsigned char PCON_Dat;
  6.         switch(BaudRate)
  7.     {
  8.        case 1200:  TH1_Dat=0xE8; PCON_Dat=0x00; break;
  9.        case 2400:  TH1_Dat=0xF4; PCON_Dat=0x00; break;
  10.        case 4800:  TH1_Dat=0xFA; PCON_Dat=0X00; break;
  11.        case 9600:  TH1_Dat=0xFD; PCON_Dat=0x00; break;
  12.        case 14400:  TH1_Dat=0xFE; PCON_Dat=0X00; break;
  13.     }
  14.         TMOD &= 0x0F;         //清除高4位数据
  15.     TMOD |= 0x20;        //定时器工作模式,0x20-工作方式2:8位自动重装载模式
  16.     SCON = 0x50;          //串行口工作方式控制寄存器,当前为1
  17.                                         //Bit[7:6],00为工作方式0,01方式1,10方式2,11方式3
  18.     TH1 = TH1_Dat;         //8位自动重装载定时器模式下,TH1被用作自动重装载值寄存器
  19.     TL1 = TH1_Dat;             //TL1为计数寄存器
  20.     PCON |= PCON_Dat;         //Bit7-波特率倍增位:0-不培增  1-培增
  21.     EA = 1;               //打开总中断
  22.     ES = 1;               //串口中断允许位
  23.     TR1 = 1;                //定时器1开始计数
  24. }


  25. //void UART_Init(unsigned int BaudRate) //串口初使化函数  12.00Mhz 12单片机
  26. //{
  27. //        unsigned char TH1_Dat;
  28. //        unsigned char PCON_Dat;
  29. //        switch(BaudRate)
  30. //    {
  31. //       case 1200:  TH1_Dat=0xCC; PCON_Dat=0x80; break;
  32. //       case 2400:  TH1_Dat=0xE6; PCON_Dat=0x80; break;
  33. //       case 4800:  TH1_Dat=0xF3; PCON_Dat=0X80; break;
  34. //    }
  35. //        TMOD &= 0x0F;         //清除高4位数据
  36. //    TMOD |= 0x20;        //定时器工作模式,0x20-工作方式2:8位自动重装载模式
  37. //    SCON = 0x50;          //串行口工作方式控制寄存器,当前为1
  38. //                                        //Bit[7:6],00为工作方式0,01方式1,10方式2,11方式3
  39. //    TH1 = TH1_Dat;         //8位自动重装载定时器模式下,TH1被用作自动重装载值寄存器
  40. //    TL1 = TH1_Dat;             //TL1为计数寄存器
  41. //    PCON |= PCON_Dat;         //Bit7-波特率倍增位:0-不培增  1-培增
  42. //    EA = 1;               //打开总中断
  43. //    ES = 1;               //串口中断允许位
  44. //    TR1 = 1;                //定时器1开始计数
  45. //}

  46. void main()
  47. {
  48.         UART_Init(14400);
  49.         while(1);
  50. }


  51. void Usart() interrupt 4
  52. {
  53.         unsigned char receiveData;

  54.         receiveData=SBUF;        //出去接收到的数据
  55.         RI = 0;                                //清除接收中断标志位
  56.         SBUF=receiveData;        //将接收到的数据放入到发送寄存器
  57.         while(!TI);                        //等待发送数据完成
  58.         TI=0;                                //清除发送完成标志位
  59. }
复制代码

Keil代码工程51hei提供下载:
串口发送-12.zip (19.85 KB, 下载次数: 66)


评分

参与人数 3黑币 +95 收起 理由
gqzjl + 5 很给力!
咸鱼头 + 30 淡定
admin + 60 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

沙发
ID:853072 发表于 2021-7-19 17:31 | 只看该作者
57600波特率用串口2可以实现吗?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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