C# 串口接收数据单片机发回总是8位8位接收,如何将他们整合一起?

作者&投稿:井炭 (若有异议请与网页底部的电邮联系)
单片机串口一次接受8位数据,如果有个16位的数据,他怎么知道16位是个整体,不会把它当成2个8位?~

两个字节以上的数据传输,就必须制定协议。

规定一个《头字节》,以后才是数据字节,最后还要有《校验字节》。

接收方,收到一连串字节后,经过校验无误,才认为收到的数据是有效的。

11.0592晶振,9600波特率
#include
#define uchar unsigned char
#define uint unsigned int
uchar code dat[]="人是人他妈生的,妖是妖他妈生的!";
//bit tp;
void uart_init();//band=fosc/(32*12*(256-TH1))
void uart_send(uchar dat);
void main()
{
uchar i;
uart_init();
for(i=0;i<32;i++)
{
uart_send(dat[i]);
}
while(1);
}
void uart_init()
{
TMOD=0x20;
TH1=0xfd;//波特率9600
TL1=0xfd;
SCON=0x50;//串口工作方式1
TR1=1;
ES=1;
EA=1;
}
void uart_send(uchar dat)
{
ES=0;
SBUF=dat;
while(!TI);
TI=0;
ES=1;
}
/*
void uart_inter() interrupt 4
{
temp=SBUF;
RI=0;
tp=1;
}
*/

我没看你的程序只想提醒你,接受字符串也可以转化成任何类型的的数据,包括数组等等!关键是单片机发回的数据的格式够用就可以了!

涉及到 通信协议的 问题

其实,后续的 数据 处理 是编程问题


建宁县17847754352: C# 串口接收数据单片机发回总是8位8位接收,如何将他们整合一起? -
芝祥川百: 我没看你的程序只想提醒你,接受字符串也可以转化成任何类型的的数据,包括数组等等!关键是单片机发回的数据的格式够用就可以了!

建宁县17847754352: 单片机通过串口发送12位的十六进制数据,先发高4位,后发低8位,用C#做了一个串口,用于接收数据 -
芝祥川百: 发送:int ii;char i; ii=data;//待发送数据 i=ii>>8;//取高8位 i&=0x0f;//取高4位 putchar(i);//发送高4位 i=ii&0xff;//取低8位 putchar(i);//发送低8r 接收:int ii; char i; i=getchar();//收到高4位 ii=i; ii<<=8;//ii左移8位 i=getchar(); ii+=i;// 得到12位数据

建宁县17847754352: 串口发送多个字节从电脑用VC++发送到单片机,一次有8个字节的数
芝祥川百: 串口一次发送的数据长度几乎不受限制,在API函数里长度参数数据类型是long. 一次发送多少字节取决于自己通信的需求,在VC里编程只需要调用一次WriteFile就行,在参数中指定发送缓冲区的地址和需要发送的长度,至于底层如何实现发送,不用去关心. 接收端如何处理也取决于双方约定的通信协议,采用适当的处理方式. 串口发送本身不难,需要考虑比较多的是整个通信的流程,特别是异常情况的处理.

建宁县17847754352: C#串口通信,为什么单步调试输入大于8个字符,可以收到,但是直接运行输入大于8个字符时,只收到前8个字符 -
芝祥川百: 仅供参考:private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e) { //你要写一个循环,让他一直读取串口数据,再把存到一个字节数组中.}

建宁县17847754352: C# 串口接收数据不对 -
芝祥川百: 你运行两个串口调试工具(一发一收),然后用你的软件也同样做这种测试看看,或者也可用你的软件发送数据到串口调试工具(也可以多试几种串口调试工具,有些也有问题的)

建宁县17847754352: 自己用C#编了一个串口接收程序接收单片机传回的数据,为什么不能接受RS232转USB传回的数据. -
芝祥川百: 如果确认 串口号, 波特率, 位数, 奇偶校验 设置都正确 可以考虑是不是设备有问题 我以前就遇到过一次,串口调试器可以正确接收 而c# 里面的serialport 接收不正常 最后发现是设备的问题

建宁县17847754352: 我的C#上位机 接收 单片机发送来的数据时,一直是 ? 号,为什么啊 -
芝祥川百: 估计发送方没错,上位机接收方式可能有问题,估计是十六进制方式惹的祸1的ASCI码是0x31,而?的ASCI码是十进制 31 哪有这么巧?你发3看是不是收到 !如果是,就是说明上位机程序中数制转换出现了问题

建宁县17847754352: 您好,请教.C#如何实现接收单片机串口发送的大于100的数和负数? -
芝祥川百: 单片机送的是8位二进制的数,一次的话可以接收0-255或者-127-128.如果你想书更大的话就分开高位低位送,可以在接收端自己再将数据处理

建宁县17847754352: C#编写的上位机从 51单片机 串口读取的 数据 一直是 ? 为什么 -
芝祥川百: 那是 字符串 3F 等于?你需要转换下 串口初始化不对 特别看下波特率 调好了再说

建宁县17847754352: vc与单片机串口通信问题,帮帮忙 -
芝祥川百: 1.一个字符就是一个8位的二进制数据,等同于C语言的一个char类型 2.com.GetInput(); 接收到得数据不是简单的二进制数据,是一个串口通信协议标准的数据,在VC中,该函数返回的是一个结构体,需要通过如下方式转换成byte型,即...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网