找回密码
 立即注册

QQ登录

只需一步,快速开始

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

stc15系列单片机与pc串口检测子程序程序

[复制链接]
跳转到指定楼层
楼主

晶振18.432MHz


  1. #include"SERIAL_OUTOUT.H"
  2. #include "reg51.h"
  3. #include "intrins.h"



  4. #define FOSC 18432000L          //系统频率
  5. #define BAUD 115200             //串口波特率

  6. #define NONE_PARITY     0       //无校验
  7. #define ODD_PARITY      1       //奇校验
  8. #define EVEN_PARITY     2       //偶校验
  9. #define MARK_PARITY     3       //标记校验
  10. #define SPACE_PARITY    4       //空白校验

  11. #define PARITYBIT EVEN_PARITY   //定义校验位

  12. bit busy;

  13. sbit P22 = P2^2;
  14. #define S1_S0 0x40              //P_SW1.6
  15. #define S1_S1 0x80              //P_SW1.7

  16. /*----------------------------
  17. 发送串口数据
  18. ----------------------------*/
  19. void Init_serial()
  20. {
  21.           ACC = P_SW1;
  22.    ACC &= ~(S1_S0 | S1_S1);    //S1_S0=0 S1_S1=0
  23.     P_SW1 = ACC;                //(P3.0/RxD, P3.1/TxD)
  24.    
  25. //  ACC = P_SW1;
  26. // ACC &= ~(S1_S0 | S1_S1);    //S1_S0=1 S1_S1=0
  27. // ACC |= S1_S0;               //(P3.6/RxD_2, P3.7/TxD_2)
  28. //P_SW1 = ACC;  
  29. //  
  30. //  ACC = P_SW1;
  31. //  ACC &= ~(S1_S0 | S1_S1);    //S1_S0=0 S1_S1=1
  32. //  ACC |= S1_S1;               //(P1.6/RxD_3, P1.7/TxD_3)
  33. //  P_SW1 = ACC;  

  34. #if (PARITYBIT == NONE_PARITY)
  35.     SCON = 0x50;                //8位可变波特率
  36. #elif (PARITYBIT == ODD_PARITY) || (PARITYBIT == EVEN_PARITY) || (PARITYBIT == MARK_PARITY)
  37.     SCON = 0xda;                //9位可变波特率,校验位初始为1
  38. #elif (PARITYBIT == SPACE_PARITY)
  39.     SCON = 0xd2;                //9位可变波特率,校验位初始为0
  40. #endif

  41.     T2L = (65536 - (FOSC/4/BAUD));   //设置波特率重装值
  42.     T2H = (65536 - (FOSC/4/BAUD))>>8;
  43.     AUXR = 0x14;                //T2为1T模式, 并启动定时器2
  44.     AUXR |= 0x01;               //选择定时器2为串口1的波特率发生器
  45.     ES = 1;                     //使能串口1中断
  46.     EA = 1;

  47. }


  48. void SendData(BYTE dat)
  49. {
  50.     while (busy);               //等待前面的数据发送完成
  51.     ACC = dat;                  //获取校验位P (PSW.0)
  52.     if (P)                      //根据P来设置校验位
  53.     {
  54. #if (PARITYBIT == ODD_PARITY)
  55.         TB8 = 0;                //设置校验位为0
  56. #elif (PARITYBIT == EVEN_PARITY)
  57.         TB8 = 1;                //设置校验位为1
  58. #endif
  59.     }
  60.     else
  61.     {
  62. #if (PARITYBIT == ODD_PARITY)
  63.         TB8 = 1;                //设置校验位为1
  64. #elif (PARITYBIT == EVEN_PARITY)
  65.         TB8 = 0;                //设置校验位为0
  66. #endif
  67.     }
  68.     busy = 1;
  69.     SBUF = ACC;                 //写数据到UART数据寄存器
  70. }

  71. /*----------------------------
  72. 发送字符串
  73. ----------------------------*/

  74. void SendString(char *s)
  75. {
  76.     while (*s)                  //检测字符串结束标志
  77.     {
  78.         SendData(*s++);         //发送当前字符
  79.     }
  80. }

  81. void Uart() interrupt 4 using 1
  82. ……………………

  83. …………限于本文篇幅 余下代码请从51黑下载附件…………
  84. 单片机源程序如下:
复制代码

所有资料51hei提供下载:
SERIAL_OUTOUT使用说明18.432MHz - 副本.zip (2.64 KB, 下载次数: 14)




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

使用道具 举报

沙发
ID:140302 发表于 2017-8-15 10:27 | 只看该作者
谢谢分享!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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