matlab实时读取串口数据_用单片机的模拟串口读取TFmini的数据

用单片机的模拟串口读取TFmini的数据用单片机的模拟串口读取TFmini的数据

朱铮南

STC15W104单片机只有8个针脚,刚好满足读取激光测距模块TFmini的数据并用74HC595驱动的四位数码管显示所需要的针脚。遗憾的是STC15W104不具有串口功能,只能用普通针脚来模拟串口。

本文代码里的“读1帧函数”就是模拟串口。

激光测距模块TFmini输出的串口信号的波特率是115200,起始位和结束位各占1位,数据占8位,可以算出传输一位数据的时长是1000000us/115200=8.68us。

本例中的模拟串口采用了代码延时和定时器溢出中断相结合的方法,起始位开始后用代码延时3us再启动定时器,定时器溢出中断产生8.68us的时间间隔用来读取每一位的数据。定时器的初始化代码放在主函数一开头的地方。

6396e16034c14925aaf8f5aee2d0c915.png

实践证明这个模拟串口工作非常稳定。

完整的代码如下。

/******************************************************************

**STC15W104模拟串口读TFmini,74HC595驱动数码管显示。朱铮南编写

*******************************************************************/

#include <STC15W.h>

#define uint unsigned int

#define uchar unsigned char

sbit DIO=P3^4; //串行数据输入

sbit RK=P3^2; //时钟脉冲信号——上升沿有效

sbit SK=P3^3; //打入信号——上升沿有

sbit RXD=P3^0; //模拟串口读入针脚

sbit SW_out = P3^5; //开关输出针脚

uchar K; //标志定时器0溢出中断是否发生

uchar END; //结束位

uchar MySBUF; //存放1帧数据

uchar value[9]; //存放9字节数据的数组

uint dist,dist1; //存放距离的变量

uint HEADER = 0x59; //帧头

uint th_value = 100; //设定开关阈值厘米

uchar code table[ ]= { 0xC0, //"0"

0xF9, //"1"

0xA4, //&

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值