导航:首页 > 操作系统 > 单片机串口接收

单片机串口接收

发布时间:2022-09-13 08:10:47

A. 单片机串口接收到数据后,如果不读取数据,再次发送会不会产生串口中断

如果不读取数据,对应的标志位不会被清零,再次发送会产生中断标志,但是会有溢出错误。

B. 单片机接收串口数据

你通过串口助手要接受字符串或一组数据需要在单片机端开辟一个缓冲区,否则可能丢失数据。
以下程序是较为通用的串口收发例程,开辟一个16字节的缓冲区,两个指针,一个存数指针,一个取数指针,两指针相等,证明没有新的接收数据。
#include<reg51.h>
#define uchar unsigned char
uchar buf[16],getptr,putptr;
void uart_isr() interrupt 4
{
if(RI)
{
RI=0;
buf[putptr]=SBUF;
putptr++;
putptr&=0x0f;
}
}
main()
{
TMOD=0x20;
SCON=0x50;
TH1=TL1=0xfd;
TR1=1;
ES=1;
EA=1;
putptr=0;
getptr=0;
while(1)
{
if(getptr!=putptr) //取数指针和存数指针如果不等
{
SBUF=buf[getptr];
getptr++;
getptr&=0x0f;
while(!TI);
TI=0;
}
}
}

C. 怎么用单片机确定串口接收数据的时间间隔

肯定是先要设置定时器,但是定时器也不能设置那么长的时间间隔,可以设置100mS,然后再定时器中断里用一个变量计数,计10次就是1S咯,一个单元最大值为255,也就是最长可以255*100mS,如果要更长,就用两个单元计数,最长就变成255*255*100mS,依次类推就行了。

关于换行的问题,换行符也是一个ASII码,找到对应的ASII码,然后发送就行了。

1. 什么是波特率

不管是什么单片机,在使用串口通信的时候,有一个非常重要的参数:波特率。什么是波特率:波特率就是每秒传送的字节数。双方在传输数据的过程中,波特率一致,这是通讯成功的基本保障。下面以STM32单片机为例,讲解一下串口波特率的计算方法。

STM32波特率相关的寄存器

STM32单片机设置波特率的寄存器只有一个:USART_BRR寄存器,

波特率寄存器

该寄存器的有效位数为16位,前4位用于存放小数部分,后12位用于存放整数部分。将波特率算出来后,数值填入这个波特率就可以了。

D. 51单片机的串口接收一帧数据有几位

发送的位数跟工作方式有关。51单片机的发送和接受,只有10位和11位两种。

先说单片机串口的工作方式:
单片机串口的工作方式共4种,方式0--方式3.
方式0:用移位脉冲。RXD做输入/输出,TXD进行移位。收发的数据为八位。
方式1:传送一帧信息为10位,即1位起始位(0),8位数据位(低位在先)和1位停止位(1)。数据位由TXD发送,由RXD接收
方式1:一帧信息也是10位;即 1位起始位,8位数据位(先低位),1位停止位。在起始位到达移位寄存器的最左位时,它使控制电路进行最后一次移位。
方式2和方式3:发送(通过TXD)和接收(通过RXD)一帧信息都是 11位: 1位起始位(0), 8位数据位(低位在先),1位可编程位(即第9位数据)和1位停止位(1)。
可见:不论单片机串口接收还是发送一帧数据是多少位,实际有效位数据位都是8位,其余位是为了奇偶校验、做起始位或终止位用的。
以前所述有误,特修正。

E. 编程实现stm32单片机串口的数据收发

int main(void)
{
u16 t;
u16 len;
u16 times=0;
delay_init(); //延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
uart_init(115200); //串口初始化为115200
LED_Init(); //LED端口初始化
KEY_Init(); //初始化与按键连接的硬件接口
while(1)
{
if(USART_RX_STA&0x8000)
{
len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度
printf("\r\n您发送的消息为:\r\n\r\n");
for(t=0;t<len;t++)
{
USART_SendData(USART1, USART_RX_BUF[t]);//向串口1发送数据
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束
}
printf("\r\n\r\n");//插入换行
USART_RX_STA=0;
}
}
}

F. 关于单片机串口发送和接收问题:连续发送过来的数据如何接收

不会的了
设备与设备之间要有一定的通信协议才能有良好的通信过程
比较明显的就是要配置一样的波特率
如用9600的波特率
那代表1S发送9600位也就是9600/8=1200个字节
也就是1S/1200约为1MS左右的时间发送字节
单片机处理速度都是微秒级别的
在接收到第一个字节后完全有时间处理再接收
不过时间不能太长
另外串口接收用中断接收比较保险
中断程序中只做存储数据很简单的判断
接收完整后再处理所有的数据

G. C51单片机如何从PC机串口接收字符串

1、单片机串口不管从哪
接收数据
都是遵循串口协议的。字符串就是一个挨一个的ASKII码,中间没有加任何东西。2、不发字符串结束标志。3、回车符可以发送,但具体发不发送看你程序了。

H. 51单片机串口接收字符串

51单片机串口接收字符串,接收的字符串长度不定,无结束符,要判断这个字符串结束,确实比较难。如果每个字符串还是连续发送,几乎是无法判断的。如果每个字符串之前有一定的空闲时间,可以根据最短的空闲时间来判断结束。即接收每一个字符都开始计时,接收下一个字符结束计时,如果计时的时间超过最短的空闲时间,则前一个字符为结束,且新字符串开始。并再重新计时。

I. 单片机串口为什么接收数据开中断

串口接收寄存器SBUF收到数据后会把接收标志位RI置位的,
电脑发送数据是一个字节接着一个字节,两个字节之间会有延时,所以收到数据你需要尽快处理,不然可能会被新的数据覆盖,配置中断就是为了及时响应把数据读出存储起来。所以SBUF内收到数据后RI就会置1,在中断里把数据存储
然后及时把RI清零接收下一字节数据。

J. 单片机串口如何接收

在主程序中对接收到的数据串进行处理,查找帧头、提取有效数据、进行业务判断。
首先,要知道中断应当尽量简洁,所以中断里面只做数据接收和下标移动。
其次,要知道每帧的最大长度。帧长度要是毫无限制那缓冲区就不好开了,得采用适用性更强的缓冲技术,这里就不提了。举例假定数据量最多10字节,则最长帧为13字节,可开辟16字节缓冲区。
再次,要知道通信协议是怎么样的,传输速率如何(与单片机处理能力相比),每帧的数据之间有多少间隔,帧与帧之间有多少间隔。
间隔太短的话需要增加许多额外的处理,例如帧头识别、帧分割,必要时又得用较大容量的循环缓冲区……这里也不提了。举例假定帧间有足够多的间隔时间。

阅读全文

与单片机串口接收相关的资料

热点内容
程序员级别数学算法逻辑 浏览:897
2k21公园怎么换服务器 浏览:724
php释放数据库连接 浏览:722
php网页抓取工具 浏览:726
android设置对齐方式 浏览:23
linux创建网页 浏览:280
净化车间门算法 浏览:934
安卓怎么搞jpg 浏览:546
如来佛祖命令雷神去下界 浏览:856
新电脑管家下载好怎么解压 浏览:530
php获取接口数据 浏览:767
最后的命令 浏览:921
如何添加手机app桌面快捷图标 浏览:427
ui设计师与程序员 浏览:417
寿司pdf 浏览:828
pythonbg是什么 浏览:248
c数值算法程序大全 浏览:787
android整点报时 浏览:221
稀土pdf 浏览:536
单片机电子锁 浏览:596