找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机模拟串口源程序

[复制链接]
跳转到指定楼层
楼主
ID:397211 发表于 2021-1-2 04:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
单片机模拟串口实验,在没有串口的单片机上想使用串口功能这就需要模拟一个串口了

单片机源程序如下:
  1. #include "reg51.h"
  2. typedef unsigned char BYTE;
  3. typedef unsigned WORD;
  4. typedef bit BOOL;
  5. #define BAUD  0xFE80         /* 9600bps@11.0592MHz           */
  6. sfr AUXR = 0x8E;
  7. sbit RXB = P3^0;          /* 定义串口TX RX端口           */
  8. sbit TXB = P3^1;

  9. BYTE TBUF,RBUF;
  10. BYTE TDAT,RDAT;
  11. BYTE TCNT,RCNT;
  12. BYTE TBIT,RBIT;
  13. BOOL TING,RING;
  14. BOOL TEND,REND;

  15. BYTE t,r;
  16. BYTE buf[16];
  17. sbit led=P3^3;
  18. void UART_INIT()
  19. {
  20. TING = 0;
  21. RING = 0;
  22. TEND = 1;
  23. REND = 0;
  24. TCNT = 0;
  25. RCNT = 0;
  26. }
  27. void main()
  28. {
  29. TMOD = 0x00;       /* 定时器0 16位自动装置模式         */
  30. AUXR = 0x80;       /* 定时器0工作在1T模式          */
  31. TL0 = BAUD;
  32. TH0 = BAUD >> 8;         /* 初始化定时器0,并设置自动装置的值      */
  33. TR0 = 1;            /* 定时器0开始启动           */
  34. ET0 = 1;            /* 使能定时器0中断           */
  35. PT0 = 1;            /* 设置定时器0中断优先级         */
  36. EA = 1;             /* 开全局中断            */
  37. UART_INIT();            /* 串口初始化            */
  38. while(1)
  39. {

  40. if(buf[0]=='0')
  41. {
  42. led=0;
  43.         }
  44.         else
  45.         {
  46.        
  47.         led=1;
  48.         }
  49.   if(REND)
  50.   {
  51.      REND = 0;
  52.    buf[r++ & 0x0f] = RBUF;
  53.   }
  54.   if(TEND)
  55.   {
  56.    if(t != r)
  57.    {
  58.     TEND = 0;
  59.     TBUF = buf[t++ & 0x0f];
  60.     TING = 1;
  61.    }
  62.   }

  63. }
  64. }

  65. void tm0() interrupt 1 using 1
  66. {
  67. if(RING)
  68. {
  69.   if(--RCNT == 0)
  70.   {
  71.    RCNT =3;
  72.    if(--RBIT == 0)
  73.    {
  74.     RBUF = RDAT;
  75.     RING = 0;
  76.     REND = 1;
  77.    }
  78.    else
  79.    {
  80.     RDAT >>=1;
  81.     if(RXB)RDAT |= 0x80;
  82.    }
  83.   }
  84. }
  85. else if(!RXB)
  86. {
  87.   RING = 1;
  88.   RCNT = 4;
  89.   RBIT = 9;
  90. }
  91. if(--TCNT == 0)
  92. {
  93.   TCNT = 3;
  94.   if(TING)
  95.   {
  96.    if(TBIT == 0)
  97.    {
  98.     TXB = 0;
  99.     TDAT = TBUF;
  100.     TBIT = 9;
  101.    }
  102.    else
  103.    {
  104.     TDAT >>= 1;
  105.     if(--TBIT ==0)
  106.     {
  107.      TXB = 1;
  108.      TING = 0;
  109.      TEND = 1;
  110.     }
  111.     else
  112.     {
  113.      TXB =CY;
  114.     }
  115.    }
  116.   }

  117. }
  118. }
复制代码

如果您有需要可以下载以上代码的Keil工程文件: 模拟串口实验.zip (22.27 KB, 下载次数: 32)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

沙发
ID:849826 发表于 2021-1-2 16:01 | 只看该作者
我把蓝牙遥控开关程序给你,把串口程序和蓝牙遥控开关程序合并在一起,移植到STC15F104W里面,还没入门,不会合并
回复

使用道具 举报

板凳
ID:872412 发表于 2021-1-3 00:35 来自手机 | 只看该作者
买个有串口的不香么
回复

使用道具 举报

地板
ID:397211 发表于 2021-1-4 09:37 | 只看该作者
6313 发表于 2021-1-2 16:01
我把蓝牙遥控开关程序给你,把串口程序和蓝牙遥控开关程序合并在一起,移植到STC15F104W里面,还没入门,不 ...

蓝牙的就是把有线变成了无线,仅此而已
回复

使用道具 举报

5#
ID:397211 发表于 2021-1-4 09:39 | 只看该作者
op5726170 发表于 2021-1-3 00:35
买个有串口的不香么

有些单片机不带串口,单片机可以更加的灵活我们想要的操作
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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