请选择 进入手机版 | 继续访问电脑版

EDABOSS电子论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 448|回复: 0

[资料共享] STC15F2系列单片机UART1使用定时器1做波特率发生器

[复制链接]

主题

0

回帖

E币

技术员

Rank: 2

积分
8
发表于 2019-10-30 21:04:14 | 显示全部楼层 |阅读模式
  1. #include <reg51.h>
  2. #include "main.h"
  3. #include "intrins.h"

  4. //使用T2定时器2 ,控制串口1 波特率

  5. #define  FOSC 18432000L  //系统频率
  6. #define  BAUD 9600     //串口1波特率
  7. #define  TM2  (65536-(FOSC/4/BAUD))

  8. #define NONE_PARITY      0   //无校验
  9. #define ODD_PARITY       1   //奇校验
  10. #define EVEN_PARITY      2   //偶校验
  11. #define MARSK_PARITY     3   //标记校验
  12. #define SPACE_PARITY     4   //空白校验
  13. #define PARITYBIT NONE_PARITY   //定义校验位

  14. bit busy1 = 0;
  15. BYTE c_data;
  16. BYTE s_data;


  17. void uart1_SendString(char *s);
  18. void uart1_SendData(BYTE dat);

  19. void main(void)
  20. {
  21.         SCON = 0x50;  //八位可变波特率
  22.         T2L   = TM2;
  23.         T2H   = TM2>>8;        
  24.         AUXR  = AUXR_T2R;
  25.         AUXR |= AUXR_T2x12
  26.         AUXR |= AUXR_S1ST2;//使用定时器2 作为串口1的波特率发生器
  27.         ES = 1;
  28.     EA = 1;
  29.         uart1_SendString("\r\n stc15f2k08s uart1 test \r\n");
  30.         while(1);
  31. }
  32. /*********************************
  33. 串口1应用
  34. **********************************/
  35. /*UART1 中断服务程序*/
  36. void uart1_ISR() interrupt 4 using 1
  37. {
  38.         uchar r_data;
  39.         if(RI)
  40.         {
  41.                 RI = 0;
  42.                 r_data  = SBUF;
  43.                 c_data = RB8;
  44.                 uart1_SendData(r_data);
  45.                
  46.         }
  47.         if(TI)
  48.         {
  49.                 TI = 0;   //清除TI位
  50.                 busy1 = 0; //清忙标志
  51.         }
  52. }

  53. void uart1_SendData(BYTE dat)
  54. {
  55.         while(busy1); //等待前面的数据发送完成
  56.         ACC = dat;   // 获取校验位
  57.         if(P)
  58.         {
  59.         #if (PARITYBIT == ODD_PARITY)
  60.                 {
  61.                         TB8 = 0;  //设置校验位为0
  62.                 }
  63.         #elif (PARITYBIT == EVEN_PARITY)
  64.                 {
  65.                         TB8 = 1;  //设置校验位为1
  66.                 }
  67.         #endif
  68.         }
  69.         else
  70.         {
  71.         #if (PARITYBIT == ODD_PARITY)
  72.                 {
  73.                         TB8 = 1;  //设置校验位为1
  74.                 }
  75.         #elif (PARITYBIT == EVEN_PARITY)
  76.                 {
  77.                         TB8 = 0;  //设置校验位为0
  78.                 }
  79.         #endif
  80.         }
  81.         busy1 = 1;
  82.         SBUF = ACC;  //写数据到UART 数据寄存器
  83. }
  84. void uart1_SendString(char *s)
  85. {
  86.         while(*s)                  //检测字符串结束标识
  87.         {
  88.                 uart1_SendData(*s++); //发送当前字符
  89.         }
  90. }
复制代码


uart_project.zip

23.76 KB, 下载次数: 0, 下载积分: E币 -5 元

积分规则
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|EDABOSS电子论坛

GMT+8, 2024-4-17 03:31 , Processed in 0.048009 second(s), 29 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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