单片机入门-C51语言用单片机串口实现双向数据收发的双机通信
单片机入门-C51语言用单片机串口实现双向数据收发的双机通信视频教程如下:
视频教程
一、单片机串行口简介
串行通信是指构成信息的二进制字符的各位数据一位一位顺序地传送的通信方式,串行通信又分为两种基本通信方式,即异步通信和同步通信。
AT89C51串行口,主要由发送器、接收器和串行控制寄存器组成。串行口中有两个缓冲寄存器SBUF,一个是发送寄存器,一个是接收寄存器,在物理结构上是完全独立的。它们都是字节寻址的寄存器,字节地址均为99H。代码段中SBUF = table[i] 都是CPU向SBUF写入数据,同时表示此时是发送状态, temp=SBUF 是CPU从SBUF读出数据存放在temp变量,同时表示此时是接收状态。也即0x99H这个重叠的地址靠读/写指令区分。
二、用单片机串口实现双工方式的双机通信硬件电路设计:
用单片机串口实现双工方式的双机通信,简单起见,这里两块单片机都具有收发功能,它们具有相同的电路,双机互相发送0~9,各自在数码管上循环显示。设计电路图如下:
双工通信
三、用单片机串口实现双工方式的双机通信软件设计:
软件编写的设计步骤如下:
1.设置通信速度(定时器TMOD/TH/TL/TR)
9600bit/s 11.0592MH
2.利用串口发送数据
(1)设置SCON
(2)发送数据放在SBUF
(3)查询TI,TI=1则清0,TI=0则等待
3.利用串行中断来接收数据:
(1)设置SCON,允许接收
(2)设置中断ES/EA
(3) 编写中断函数,完成设定的任务。
4.总体代码如下:
#include<reg51.H>
#define uchar unsigned char
#define uint unsigned int
uchar code buff[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void delay_1s(void)
{
uint i;
for(i=50000;i>0;i--);
}
void serial() interrupt 4 using 1
{
ES=0;
RI=0;
P0=SBUF; //用P0口驱动LED数码管
ES=1;
}
void main()
{
uchar i;
TMOD=0X20;//0X20=B(0010,0000),定时器1工作在方式2
TH1=0XFD;
TL1=0XFD;//设置初值为253,两机的波特率就是9600bit/s
SCON=0X50;//0x50=B(0101,0000),串口工作在方式1,允许接收
EA=1;//使能总中断
ES=1;//开启串行口中断
RI=0;
TR1=1;//启动定时器1
while(1)
{
for(i=0;i<10;i++)
{
SBUF=buff[i];//发送的内容送SBUF
while(!TI);//等待发送
TI=0;
delay_1s();
}
}
}
单片机串口通信的接收与发送
#所见所得,都很科学#
单片机串口通信是一种常见的通信方式,它可以实现单片机与外部设备的数据交换。在实际应用中,单片机串口通信常用于与电脑、传感器、LCD显示屏等外设进行数据传输。
首先,我们来了解一下单片机串口通信的原理。串口通信是通过发送和接收两根线来实现的,分别为发送线(Tx)和接收线(Rx)。当单片机发送数据时,数据通过发送线发送出去,而当外部设备发送数据时,数据则通过接收线输入单片机。
单片机串口通信的实现需要配置发送和接收的相关寄存器,其中包括波特率寄存器、模式寄存器和数据寄存器等。通过设置波特率寄存器可以确定通信的速率,通常有常用的9600、19200、38400等几种波特率可供选择。
在单片机中,一般使用中断的方式来接收和发送数据。接收数据时,单片机会配置接收中断,并在接收到数据后触发中断。在中断服务程序中,我们需要读取接收寄存器中的数据,并进行相应的处理。发送数据时,单片机会将要发送的数据放入发送寄存器,并配置发送中断。当发送寄存器为空时,单片机会触发中断,将数据发送出去。
接下来,我们来详细讲解单片机串口通信的接收和发送过程。首先,我们需要配置串口通信的参数,包括设置波特率、数据位、校验位和停止位等。在单片机的初始化阶段,我们需要将这些参数写入到相应的寄存器中。
接收数据时,我们需要将接收中断使能位设置为1,以便单片机能够在接收到数据时触发中断。此外,我们还需要在中断服务程序中读取接收寄存器中的数据,并进行相应的处理。比如,如果我们需要将接收到的数据显示在LCD屏幕上,我们可以将数据存储到一个缓冲区中,并调用LCD显示函数来显示数据。
发送数据时,我们首先将要发送的数据写入发送寄存器。在发送完成后,单片机会将发送中断使能位置为1,以便在发送寄存器为空时触发中断。在中断服务程序中,我们可以检查发送寄存器是否为空,如果为空,则将下一个数据写入发送寄存器,直到发送完所有数据。
在实际应用中,我们还需要考虑一些特殊情况的处理。比如,在接收数据时,如果出现数据错误或数据丢失的情况,我们可以设置相应的标志位,并在中断服务程序中进行处理。如果需要进行数据校验,我们可以在接收中断服务程序中进行校验,并将校验结果存储到一个标志位中。
另外,为了提高通信的可靠性,我们可以使用循环冗余校验(CRC)来进行数据校验。CRC是一种常用的校验方法,它可以在数据传输过程中检测出错误或数据丢失的情况。
除了上述的基本操作,单片机串口通信还可以进行扩展。比如,我们可以使用DMA(直接内存存取)来实现高速的数据传输。DMA是一种无需CPU干预的数据传输方式,可以大大提高通信速度。此外,我们还可以使用协议来进行通信,比如使用Modbus协议进行工业控制设备之间的通信。
总结起来,单片机串口通信是一种常见的通信方式,通过配置相关寄存器可以实现与外部设备的数据交换。在实际应用中,我们需要详细了解单片机串口通信的原理和操作步骤,并根据具体需求进行相应的配置和处理。单片机串口通信可以应用于多种场景,比如与电脑、传感器和LCD显示屏等外设进行数据传输。通过学习和掌握单片机串口通信技术,可以帮助我们更好地实现各种应用需求。
相关问答
传感器传出的数字信号输出要如何连接 单片机串口 ?首先,用单片机读取数字传感器数据,然后单片机通过串口将数据发送,PC端要有TTL电平的串口(不是RS232),将单片机的串口TXD、RXD及GND与PC端串口的RXD、TXD、G...
C51如何接收和 发送 , 串口 工具16位 数据 ?51单片机一次只能接收1个字节数据(8位),若要接收两个字节,串口工具应该分成两字节发送。比如先发送高字节,再发送低字节。对于100H,按十六进制发送0100...
单片机 上网, 单片机 如何连接到无线网络,并且能 发送 和接收 数据 ?某宝上WIFI模块很多,可以通过单片机串口发送AT指令实现网络通信,但是效率不高某宝上WIFI模块很多,可以通过单片机串口发送AT指令实现网络通信,但是效率不高
单片机 中如何将DS18b20测得的温度通过 串口发送 到上位机VB中?你的一位十进制数据+0x30,不就变成字符的数字了吗例如:TN是十进制温度fasong[0]=TN/10+0x30;fasong[1]=TN%10+0x30;DS18B20采集到的数据你可以在单片机中...
51 单片机 用 串口 跟pc通信进行收发 数据 ?程序中是19200.通讯不上有很多原因,你的电路不对、甚至是连线不对,也会导致通讯不上.你可以试试跟踪你的程序,看看可否正确地接收到PC发过去的数据,先把接收程...
请教大神,谁用过STC15W204S 单片机 ,怎么设置 串口 通信,简单的收或 发送 例程都行?SCON=0x50;//8位数据,可变波特率AUXR|=0x01;//串口1选择定时器2为波特率发生器AUXR|=0x04;//定时器2时钟为Fosc,即1TT2L=0xE0;//设定定时初值...
我想利用 单片机 通过 串口发送 几个16进制数FF 10 11 01 DD求高手指点,不胜感激?单片机通过串口发送几个16进制数FF101101DD,程序如下:voidSend(unsignedcharTx_Data)//向串口发字符{SBUF=Tx_Data;while(...
51 单片机串口 通讯, 数据 在 发送 后,上位机没有接收到 数据 。-ZOL问答而且,串口中断也没进去,弄了很久不知道是什么问题!----既然没有收到,也没有进入串口中断,那么,你怎么就知道,数据发送出去了?既然,你确信是发出去了,应该就...
STC12C5A60S2系列双 串口单片机串口 转发问题?不会一般串口的工作速率和单片机的速率相差很远再一个,按正常程序设计.必须等发送标志结束再送SBUF不会一般串口的工作速率和单片机的速率相差很远再一个...
单片机串口 通信原理我有一个8255的0-99的计时的,不知道对你有没有帮助;164串并转换程序,00~99循环显示;DCLK----PC0,DIN----PC1;FUNCTIONCODEMY_STACKSEGMEN...