使用Msp430的串口中断接收一包数据

原创 2010年06月25日 21:25:00

使用Msp430的串口中断接收一包数据

 

假设有一数据包,数据格式如表所示:

                                                                                                             

序号

项 目

长度(字节)

说明

1

数据包头(STX

1

常量:0x02

2

数据单元长度(Data_len

2

需传输的数据单元Data部分的长度,高字节在前,低字节在后。

例如:0x0010表示Data部分有16个字节。

3

需传输的数据单元(Data)

不定

长度由Data_len指出,数据单元头两个字节是命令码(终端发送命令到读写器)或状态码(读写器返回数据给终端),后面是其它参数。

4

冗余检验值(LRC

1

Data部分数据各字节异或值。

5

数据包尾(ETX

1

常量:0x03

数据包总长度为: Data_len + 5 字节,最长不能超过512字节。

 

程序实现如下所示:

本程序一个致命的bug就是,如果长度信息那两个字节的数据接收时出现错误,会导致不能正确组成一包数据,后面发送过来的数据包也不能正确接收。

如有一包数据(16进制):02 00 02 11 11 00 03,

如果接收过程出现错误,导致将长度的两个字节00 02在接收端变成了00 05,因此接收端会等待接收完5个字节的数据之后才认为完整的接收完一包数据,从而导致后面发送过来的完整的数据包的一部分会被拆分,周而复始的这样恶性循环下去,暂时还没想到好的解决办法!

MSP430F149单片机实现uart数据接收中断

/***************************************************** 程序功能:MCU不停向PC机发送数据,在屏幕上显示0~127对应           ...

MSP430精准配置高速串口波特率的方法

引言     在实际项目大批量生产调试设备时,笔者发现同样版本的程序在不同设备上运行时效果不一致,一部分设备串口通信正常,另外一部分串口通信不正常。通过示波器对多个设备的串口波特率及系统时钟频率测试...

C/C++语言中#的神奇作用:把宏参数字符串化/贴合宏参数

宏中"#"和"##"的用法  一、一般用法   我们使用#把宏参数变为一个字符串,用##把两个宏参数贴合在一起. #define STR(s)      #s   #define...

MSP430串口接收控制LED

/********************************************** *程序描述:单片机的P3.4、P3.5作为串口接收字符,将接受到的字符再发送出去 *并且根据接受...

msp430 fat16 记录串口1数据

  • 2015年09月08日 11:12
  • 105KB
  • 下载

MSP430单片机USART串口发送字符和字符串

在MSP430单片机的官方历程中有使用串口中断发送字符以及字符串的程序,但是移植性不高,我专门写了两个函数,用于发送单个字符合字符串,不需要使用中断,供大家参考。/******************...

个人总结之MSP430F5510串口通讯(485)

1.首先先介绍一下USCI模块 通用串行通信接口(USCI)模块支持多种异步通信模式。不同的 USCI 模块支持不同的模式。 每一个 USCI 模块以不同的字母命名。例如,USCI_A 不同于...

MSP430精准配置高速串口波特率的方法

引言     在实际项目大批量生产调试设备时,笔者发现同样版本的程序在不同设备上运行时效果不一致,一部分设备串口通信正常,另外一部分串口通信不正常。通过示波器对多个设备的串口波特率及系统时钟频率测试...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用Msp430的串口中断接收一包数据
举报原因:
原因补充:

(最多只允许输入30个字)