#include <reg51.h>
#include <intrins.h>//定义波特率常量
//BAUD = 65536 - FOSC/3/BAUDRATE/M (1T:M=1; 12T:M=12)
//NOTE: (FOSC / 3 / BAUDRATE)必须大于98,(建议增加110)//#define BAUD  0xF400                  // 1200bps @ 11.0592MHz
#define BAUD  0xFA00                  // 2400bps @ 11.0592MHz
//#define BAUD  0xFD00                  // 4800bps @ 11.0592MHz
//#define BAUD  0xFE80                  // 9600bps @ 11.0592MHz
//#define BAUD  0xFF40                  //19200bps @ 11.0592MHz
//#define BAUD  0xFFA0                    //38400bps @ 11.0592MHz//#define BAUD  0xEC00                  // 1200bps @ 18.432MHz
//#define BAUD  0xF600                  // 2400bps @ 18.432MHz
//#define BAUD  0xFB00                  // 4800bps @ 18.432MHz
//#define BAUD  0xFD80                  // 9600bps @ 18.432MHz
//#define BAUD  0xFEC0                  //19200bps @ 18.432MHz
//#define BAUD    0xFF60                //38400bps @ 18.432MHz//#define BAUD  0xE800                  // 1200bps @ 22.1184MHz
//#define BAUD  0xF400                  // 2400bps @ 22.1184MHz
//#define BAUD  0xFA00                  // 4800bps @ 22.1184MHz
//#define BAUD  0xFD00                  // 9600bps @ 22.1184MHz
//#define BAUD  0xFE80                  //19200bps @ 22.1184MHz
//#define BAUD  0xFF40                  //38400bps @ 22.1184MHz
//#define BAUD  0xFF80                  //57600bps @ 22.1184MHzsfr AUXR = 0x8E;
sbit RXB = P3 ^ 0;                      //define UART TX/RX port
sbit TXB = P3 ^ 1;typedef bit BOOL;#ifndef uchar#define uchar unsigned char
#endif
#ifndef uint#define uint unsigned int
#endifuchar TBUF, RBUF;
uchar TDAT, RDAT;
uchar TCNT, RCNT;
uchar TBIT, RBIT;
BOOL TING, RING;
BOOL TEND, REND;uchar t, r;
uchar buf[16];//UART的定时器中断
void tm0() interrupt 1
{if(RING) {if(--RCNT == 0) {RCNT = 3;                   //重置发送波特率计数器if(--RBIT == 0) {RBUF = RDAT;            //将数据保存到RBUFRING = 0;               //停止接收REND = 1;               //设置接收完成标志} else {RDAT >>= 1;if(RXB) RDAT |= 0x80;   //将RX数据移至RX缓冲区}}} else if(!RXB) {RING = 1;                       //设置开始接收标志RCNT = 4;                       //初始化接收波特率计数器RBIT = 9;                       //初始化接收位号(8个数据位+1个停止位)}if(--TCNT == 0) {TCNT = 3;                       //重置发送波特率计数器if(TING) {                      //判断是否发送if(TBIT == 0) {TXB = 0;                //发送起始位TDAT = TBUF;            //将数据从TBUF加载到TDATTBIT = 9;               //初始发送位数(8个数据位+1个停止位)} else {TDAT >>= 1;             //将数据转移到CYif(--TBIT == 0) {TXB = 1;TING = 0;           //停止发送TEND = 1;           //设置发送完成标志} else {TXB = CY;           //将CY写入TX端口}}}}
}//初始UART模块变量
void UartInit()
{TMOD = 0x00;                        //timer0 16位自动重载模式AUXR = 0x80;                        //timer0 1T模式TL0 = BAUD;TH0 = BAUD >> 8;                      //初始Timer0并设置重载值TR0 = 1;                            //tiemr0开始运行ET0 = 1;                            //使能定时器0中断PT0 = 1;                            //提高定时器0的中断优先级//打开全局中断开关TING = 0;RING = 0;TEND = 1;REND = 0;TCNT = 0;RCNT = 0;
}//发送串口数据
void SendChar(uchar dat)
{while(!TEND);TEND = 0;TBUF = dat;TING = 1;
}//发送字符串
void SendString(uchar *s)
{while(*s) {                //检测字符串结束标志SendChar(*s++);         //发送当前字符}
}

STC15F104W使用定时器0模拟串口相关推荐

  1. [15单片机] STC15F104W开发入门及模拟串口程序

    STC15F104W开发入门及模拟串口程序 Saturday, 31. March 2018 09:42AM - beautifulzzzz 前言 最近找到一款51内核的SOP8封装的8脚单片机STC ...

  2. stc15f104w模拟串口使用

    stc15f104w单片机体积小,全8个引脚完全够一般的控制使用,最小系统也就是个电路滤波----加上一个47uf电容和一个103电容即可,但因为其是一个5V单片机,供电需要使用5V左右电源. 该款单 ...

  3. 单片机IO口模拟串口程序(发送+接收

    单片机IO口模拟串口程序(发送+接收)[转] qcmc 发表于 - 2011-6-23 0:42:00 前一阵一直在做单片机的程序,由于串口不够,需要用IO口来模拟出一个串口.经过若干曲折并参考了一些 ...

  4. c语言如何创建虚拟串口,模拟串口的C语言源程序代码

    本程序是模拟串口硬件机制写的,使用时可设一定时中断,时间间隔为1/4波特率,每中断一次调用一次接收函数, 每中断4次调用一次发送函数,不过.对单片机来说时钟并须要快.要知道9600的波特率的每个BIT ...

  5. UART通信协议(三)GPIO模拟串口

    前言:上一篇文章中说到了UART的数据帧格式以及它的几种工作模式,在实际应用场合中,UART协议大多通过集成在MCU模块中的硬件逻辑来实现.为了更好的理解UART,在这里写篇文章用软件模拟串口通信,加 ...

  6. 串口发送程序linux,单片机IO口模拟串口程序(发送+接收

    前一阵一直在做单片机的程序,由于串口不够,需要用IO口来模拟出一个串口.经过若干曲折并参考了一些现有的资料,基本上完成了.现在将完整的测试程序,以及其中一些需要总结的部分贴出来. 程序硬件平台:11. ...

  7. avr模拟串口通讯c语言,AVR的模拟串口的问题

    不知道谁做过模拟串口,现在手上有STC的模拟串口,自己也尝试在上面修改,可惜水平有限. 大家做STC的话可以参考下,谁有现成的AVR模拟串口的程序能不能发出来参考下,谢谢 #include sfr16 ...

  8. 51单片机模拟串口发送接收数据(不使用SBUF)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 51单片机.模拟串口.串口发送.串口接收.逻辑分析仪 前言 一.配置定时器 二.串口发送 三.串口接收 四.主函数 五.波形图 5.1 ...

  9. STM32模拟串口驱动(带校验位)

    背景 年前一个项目中,由于串口的资源紧张,硬件使用的是主MCU-STM32F030C8T6,其两个硬件串口都被使用了,而另外一个器件间的通信也需要串口通信,故不得不采用模拟串口的方式,该器件的通信要求 ...

最新文章

  1. oracle配置oracle Database Configuration Assistant失败是什么原因?
  2. [Codeforces50C]Happy Farm 5 凸包
  3. php如何对几G的文本数据去重,Linux下导出数据库文件进行统计+去重
  4. Spring实战之二:装配Bean
  5. python_模块学习
  6. 隐藏esp_?吉利帝豪GL到店实拍,7.78万起,配鹰眼LED大灯+ESP,家用首选
  7. qn模块java脚本_BAT批处理实现自动安装软件功能
  8. hadoop为什么出现
  9. Git简单命令 学习资源贴
  10. 疫情下的远程办公:理解Linux虚拟网络设备之tun/tap
  11. mysql投票网站_PHP+Mysql实现网站顶和踩投票功能实例
  12. 机会是留给有准备的人
  13. vue-happy-scroll:vue中借助vue happy scroll实现局部文字滚动
  14. 全网首发:char数组矩阵转bit的算法
  15. Computer:Todesk(远程控制软件)的简介、安装、使用方法之详细攻略
  16. Ubuntu16.04安装WPS(个人记录)
  17. 异或为什么满足结合律,布尔代数与布尔环简介
  18. 计算机专业的创新方向和创业情况,计算机专业创新创业教育模式探究
  19. Python调用OpenAI API示例
  20. 每个人都应该遵循的12个 SEO 最佳实践

热门文章

  1. Java版Word开发工具Aspose.Words功能解析:在Word(DOCX / DOC)中插入或删除注释
  2. Git回退到某个历史版本
  3. [附源码]Nodejs计算机毕业设计母婴用品店管理系统Express(程序+LW)
  4. 一博科技通过注册:年营收7亿拟募资8亿 汤昌茂等人控制85%股权
  5. Mysql经典面试题汇总
  6. i技术会 | 大数据应用与数据中台实践
  7. python计算N年一遇的降水经历
  8. Unity Shader之几何着色器(Geometry Shader)实现面片飞散的爆炸效果
  9. VS2022-scanf返回值忽略报错解决方案
  10. Windows单机下Spark环境搭建