对于串口,流,的编程一直是相当头疼的,总是分不清头尾,写出来的程序总是没有把握,传输间的的程序尚可,但是发送一些带协议的东西就受不了了。
经过查资料,学习,得到一些经验,可以使用定界符法,显式长度法来发送数据。
一贯习惯是使用定界符+显式长度,写的不论不类,现在想想没有这个必要,如果在单片机上的话使用定界符,在中断里快速判断定界符和过滤每一个字符是相当奢侈的事情。故而转用显式长度法
显式长度的具体用法是,先发送要发送数据的字节数,在发送数据
接收也比较简单,先接收数据长度区,判断大小是否适合自己的RAM空间,
确定需要接收的长度后,启动正常的接收,并设置一个超时(在有限的时间里没有收到完整的数据,则丢弃)。在实际的应用中,发送数据总是有个时间限制的,一组数据会在相对集中的时间内完成。
例子:发送abcdefg,
char[] data = "abcdefg";
char length = 0;//一个字节
char i = 0;
do{
length ++;
while(data[length] != '\0');
putc(length);
for(int i=0; i
{
putc(data[i]);
}
备注:该例子未经过验证,仅供参考
关键字:串口接收 发送程序
引用地址:
写一个串口接收发送程序
推荐阅读最新更新时间:2024-03-16 14:57
单片机(AVR)串口接收和发送
//串口初始化 void UART_Init(void) { UCSRB = UBRRH = 0; UBRRL = (ClockCPU/Baud)/16-1; UCSRB = (1 RXEN) | (1 TXEN); //enable UART receiver and transmitter UCSRC = (1 URSEL)|(1 USBS)|(3 UCSZ0);//设置帧格式: 8 个数据位, 2 个停止位 } //串口中断使能或屏蔽 void UART_int_enable(void) { UCSRB |= (1 RXCIE); // UCSRB &= ~(
[单片机]
串行通信口接收与发送程序
主程序中相应的位置打开串行中断(指令为SETB ES),设置好波特率,启动相应的定时器(因为波特率是由定时器产生的),串行中断即做好了接收数据的准备,下面是接收子程序: 串行发送数据程序 因为C51的硬件资源功能非常强大,程序编写则变得简单,我们常用单片机与上位机进行通信,例如向上位机(电脑)发送一个6个字节的握手协议(数据),数据的首地址在30H,程序如下: 主程序中相应的位置打开串行中断(指令为SETB ES),设置好波特率,启动相应的定时器(因为波特率是由定时器产生的),串行中断即做好了接收数据的准备,下面是接收子程序: 串行发送数据程
[单片机]
在Delphi中使用串口控件MSComm的0字符接收例程祥解
//以下是创建窗体时的MSCOMM参数设置过程 //MSComm1.InputMode := comInputModeBinary; //和MSComm1.InputMode := comInputModeText; //实验结果基本对Delghi不太起作用 procedure TForm1.FormCreate(Sender: TObject); var str: string; begin //MSCOMM参数设置 MSComm1.CommPort := 1;//使用COM1 MSComm1.Settings := ''9600,N,8,1'';//设置通信口参数 MSComm
[单片机]
单片机下串口(UART)协议包接收程序
代码编写在51单片机上,用于从接收缓冲区中提取有用数据(协议包)。基本逻辑亦可用于其他语言,其他情况下的接收程序。 数据的转移主要分了3步,接收缓冲区=》待处理数据=》有用数据。 接收缓冲区提取到待处理数据:由于可能下一个包马上就要过来,所以应把数据提取出来再做处理,以免直接处理的过程中收到新的数据造成混乱。 待处理数据提取到有用数据:例如在某些环境下,会收到其他协议的包(由其他程序处理),或者带有地址区分是否发给本机的包,所以需要设置一些条件来提取真正有用的数据。 单片机串口UART在接收中断程序中写入接收缓冲区,一定时间没有收到数据则标志为接收空闲(完成一个包的接收)。 本段代码先判断串口处于接收空闲状态,
[单片机]
STM32CubeMX串口接收数据(中断方式,HAL库)
系统:linux mint 18.3 xfce 64bit 软件: STM32CubeMX 4.24 SW4STM32 2.4 开发板芯片:STM32F103RCT6,STM32F407VET6 实现效果:打开两个串口助手窗口,一个是USART1的,一个是USART2的,任意一个串口(串口1或者串口2)发送数据过去就会马上通过该串口返回来。 开篇语: 使用STM32CubeMX和SW4STM32具有的优点: (1)跨平台开发的优势,win和linux系统都有现成的安装包,安装sw4stm32过程会提升自动安装STLINK驱动 (2)版本升级积极,我觉得这是一个好现象,说明开发者很重视 (3)最重要的是免费!!!不用到处找破解
[单片机]
单片机IO口模拟串口程序(发送+接收)
前一阵一直在做单片机的程序,由于串口不够,需要用IO口来模拟出一个串口。经过若干曲折并参考了一些现有的资料,基本上完成了。现在将完整的测试程序,以及其中一些需要总结的部分贴出来。 程序硬件平台:11.0592M晶振,STC单片机(兼容51) /*************************************************************** * 在单片机上模拟了一个串口,使用P2.1作为发送端 * 把单片机中存放的数据通过P2.1作为串口TXD发送出去 ***************************************************************/ #i nclude
[单片机]
STM8L101F3P6串口查询接收
/******************************Copyright (c)***********************************/ /* */ /* 老李电子工作 */ /* */ /*------------------------------File Info-------------------------------------*/ /* File name: main.c
[单片机]
51单片机的315M发射头发送汇编程序
;防盗器主机程序 FSDD EQU P1.7 ;发射控制D端,高电平控制有效 FSCC EQU P1.6 ;发射控制C端,高电平控制有效 FSBB EQU P1.5 ;发射控制B端,高电平控制有效 BJQ1 EQU P1.1 ;报警器,低电平报警 SPK1 EQU P1.0 ;喇叭,驱动方式为脉冲信号 LED1 EQU P3.0 ;指示灯 JSVT EQU P3.2 ;接收头VT端 JSDD EQU P3.3 ;接收头D输出端,有效高电平输出 JSCC EQU P3.4
[单片机]