A. 51单片机 串口发送几组数据
单片机 串口发送多字节数据,可以一个一个的发送,即
发送 一个 字节,等待发送 完毕,接着发送 下一个字节,再等待发送 完毕。
再发送 一个 字节,- - -
接收也是一样,一个一个接收,
一般 多字节发送 与 接收,可以设计一个 通讯 协议,如 发送
指令码 - 数据1 - 数据2 - - - 数据n - 校验码 - 结束码
这样的 通讯 可以不出错误。
B. 有谁知道怎么用串口大师一次向单片机发送多个字节数据
直接在窗口输入待发送的数据,设置好发送间隔时间,再点击发送,就可以一次发送多个数据了。
C. 请问51单片机如何解决多字节串口发送 接收问题
void init_serialcom 没在main里面调用,你们的串口没初始化。那句 TI=1;
什么用。while (TI== 0); TI= 0 ;中断里面清了 这里再清一遍??
cont++;只有加,没有清零,你只准备接受一次???不带包头识别,你怎么知道什么时候cont应该等于0.总之还有很多问题。
D. 51单片机串口发送
//这是一个单片机C51串口接收(中断)和发送例程,可以用来测试51单片机的中断接收
//和查询发送,另外我觉得发送没有必要用中断,因为程序的开销是一样的
//程序编写: 龚建伟 [email protected]
//技术主页:http://www.gjwtech.com
//您有这方面的问题可以和我讨论
#include <reg51.h>
#include <string.h>
#define INBUF_LEN 4 //数据长度
unsigned char inbuf1[INBUF_LEN];
unsigned char checksum,count3;
bit read_flag=0;
void init_serialcomm(void)
{
SCON = 0x50; //SCON: serail mode 1, 8-bit UART, enable ucvr
TMOD |= 0x20; //TMOD: timer 1, mode 2, 8-bit reload
PCON |= 0x80; //SMOD=1;
TH1 = 0xF4; //Baud:4800 fosc=11.0592MHz
IE |= 0x90; //Enable Serial Interrupt
TR1 = 1; // timer 1 run
// TI=1;
}
//向串口发送一个字符
void send_char_com(unsigned char ch)
{
SBUF=ch;
while(TI==0);
TI=0;
}
//向串口发送一个字符串,strlen为该字符串长度
void send_string_com(unsigned char *str,unsigned int strlen)
{
unsigned int k=0;
do
{
send_char_com(*(str + k));
k++;
} while(k < strlen);
}
//串口接收中断函数
void serial () interrupt 4 using 3
{
if(RI)
{
unsigned char ch;
RI = 0;
ch=SBUF;
if(ch>127)
{
count3=0;
inbuf1[count3]=ch;
checksum= ch-128;
}
else
{
count3++;
inbuf1[count3]=ch;
checksum ^= ch;
if( (count3==(INBUF_LEN-1)) && (!checksum) )
{
read_flag=1; //如果串口接收的数据达到INBUF_LEN个,且校验没错,
//就置位取数标志
}
}
}
}
main()
{
init_serialcomm(); //初始化串口
while(1)
{
if(read_flag) //如果取数标志已置位,就将读到的数从串口发出
{
read_flag=0; //取数标志清0
send_string_com(inbuf1,INBUF_LEN);
}
}
}
E. 怎么样通过51单片机串口一次发送3个16进制数据
配置好串口,然后写到SBUF里面就能自动发送
F. 51单片机接收上位机发送的多个字节的串口通信
具体程序可以参考楼下的例程
串口通信的概念非常简单,串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。它很简单并且能够实现远距离通信。比如IEEE488定义并行通行状态时,规定设备线总长不得超过20米,并且任意两个设备间的长度不得超过2米;而对于串口而言,长度可达1200米。典型地,串口用于ASCII码字符的传输。
通信使用3根线完成:(1)地线,(2)发送,(3)接收。由于串口通信是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据。其他线用于握手,但是不是必须的。串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。对于两个进行通信的端口,这些参数必须匹配:
a,波特率:这是一个衡量通信速度的参数。它表示每秒钟传送的bit的个数。例如300波特表示每秒钟发送300个bit。当我们提到时钟周期时,我们就是指波特率例如如果协议需要4800波特率,那么时钟是4800Hz。这意味着串口通信在数据线上的采样率为4800Hz。通常电话线的波特率为14400,28800和36600。波特率可以远远大于这些值,但是波特率和距离成反比。高波特率常常用于放置的很近的仪器间的通信,典型的例子就是GPIB设备的通信。
b,数据位:这是衡量通信中实际数据位的参数。当计算机发送一个信息包,实际的数据不会是8位的,标准的值是5、7和8位。如何设置取决于你想传送的信息。比如,标准的ASCII码是0~127(7位)。扩展的ASCII码是0~255(8位)。如果数据使用简单的文本(标准 ASCII码),那么每个数据包使用7位数据。每个包是指一个字节,包括开始/停止位,数据位和奇偶校验位。由于实际数据位取决于通信协议的选取,术语“包”指任何通信的情况。
c,停止位:用于表示单个包的最后一位。典型的值为1,1.5和2位。由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。
d,奇偶校验位:在串口通信中一种简单的检错方式。有四种检错方式:偶、奇、高和低。当然没有校验位也是可以的。对于偶和奇校验的情况,串口会设置校验位(数据位后面的一位),用一个值确保传输的数据有偶个或者奇个逻辑高位。例如,如果数据是011,那么对于偶校验,校验位为0,保证逻辑高的位数是偶数个。
如果是奇校验,校验位位1,这样就有3个逻辑高位。高位和低位不真正的检查数据,简单置位逻辑高或者逻辑低校验。这样使得接收设备能够知道一个位的状态,有机会判断是否有噪声干扰了通信或者是否传输和接收数据是否不同步。
G. 如何51单片机的串口发送多个数据和接受多个数据
你发送时,用循环控制,发几个字节,循环几次。连续发送多个数据,都是小意思,也是最基本的了。
接收更好办了,用中断接收,中断一次接收一次,你就保存一次呗,这有什么难的。
H. 51单片机串口怎么连续发送数据
这个很容易,直接一个一个的发送就可以了。比如:
#include<reg51.h>
main()
{
unsigned char str="this is a test",a;
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
while(1)
{
while(*str!='\0')
{
SBUF=*str;
str++;
a=200;
while(a--);
}
}
}
I. 51单片机串口实验,用STC ISP(V6.60)里自带的串口助手,一次只能发送两个字母或者数字吗
发送多个汉字:
把你要发送的 汉字或字符 定义到数组里面,然后一个字节一个字节发送就可以了。
注意:一个汉字占2个字节;
例如:
hz[]={"收到的数据"};
发送时, SBUF= hz[0];