📜  嵌入式系统串行通信

📅  最后修改于: 2021-01-01 02:56:45             🧑  作者: Mango

使用8051单片机的串行通讯计算和编程

计算机以两种不同的方式传输数据:

  • 串行传输:在串行传输中,数据被传输到位于数米之外的设备中,此方法用于长距离数据传输。
  • 让我们看一下串行数据传输的框图:

    Serila Communication1

  • 并行传输:在并行传输中,数据以8条或更多行传输。在该导线中,导线用于将数据传输到仅几英尺远的设备。
  • 让我们看一下并行数据传输的框图:

    Serila Communication2

串行通信主要用于发送和接收信号。 8051微控制器由用于串行通信的通用异步接收器发送器(UART)组成。信号通过微控制器的Rx和Tx引脚发送和接收。

UART接收数据的各个字节,并按顺序发送各个位。寄存器用于收集数据并将其存储在内存中。 UART基于半双工协议。半双工意味着传输和接收数据,但不能同时进行。

让我们看一下表示闪存和8051微控制器之间的串行通信的框图表示:

让我们看一下使用串行窗口以9600的波特率传输字符“ S”的程序:

考虑28800是8051微控制器的最大波特率。要获得9600作为波特率,计时器值为:

该波特率“ 3”存储在计时器内部。

#include
void main()
{
SCON=0x50;         //starting of a serial communication//
TMOD=0x20;       //selected the timer mode//
TH1=3;         // load the baud rate//
TR1=1;        //Timer is ON//
SBUF='S';  //store the character inside a register//
while(TI==0);    //check the interrupt register//
TI=0;
TR1=0;         //OFF the timer//
while(1);  //continuous loop//
}

让我们看一下用于从超级终端接收数据并将该数据以9600波特率发送到微控制器的PORT 0的程序:

考虑28800是8051微控制器的最大波特率。要获得9600作为波特率,计时器值为:

该波特率“ 3”存储在计时器内部。

#include
void main()
{
SCON=0x50;         //starting of a serial communication//
TMOD=0x20;     //selection of a timer mode//
TH1=3;         // load the baud rate//
TR1=1;         //Timer is ON//
PORT0=SBUF;     //send the data from SBUF to port0//
while(RI==0);         //checking of an interrupt register//
RI=0;
TR1=0;         //OFF the timer//
while(1); //stop the program when character is received//
}