小白跟做江科大51单片机之串口通信

本文详细介绍了串口通信的基本原理,包括串口的功能、电平标准(如TTL、RS232和RS485)、51单片机的UART工作模式、通信接口比较、以及如何通过STC89C52的UART进行串口初始化、数据发送和中断处理。还涉及了定时器1在波特率计算中的应用。
摘要由CSDN通过智能技术生成

原理部分

1.了解串口

串口——实现两个设备的互相通信。

单片机的串口可以使单片机与单片机、单片机与电脑、单片机与各式各样的模块互相通信,极大的扩展了单片机的应用范围,增强了单片机系统的硬件实力。

51单片机内部自带UARTUniversal Asynchronous Receiver Transmitter,通用异步收发器),可实现单片机的串口通信。

2.硬件电路

图1

3.电平标准

电平标准是数据1和数据0的表达方式,是传输线缆中人为规定的电压与数据的对应关系,串口常用的电平标准有如下三种:

TTL电平:+5V表示10V表示0

RS232电平:-3~-15V表示1+3~+15V表示0

RS485电平:两线压差+2~+6V表示1-2~-6V表示0(差分信号)

TTL和RS232电平只能传输10几米,而RS485电平可以传输几千米

51单片机不支持流控制

4.常用通信接口比较

图2

5.相关术语

全双工:通信双方可以在同一时刻互相传输数据

半双工:通信双方可以互相传输数据,但必须分时复用一根数据线

单工:通信只能有一方发送到另一方,不能反向传输

异步:通信双方各自约定通信速率,通俗来讲就是通信双方在发送数据之前,约定通信速率进行接收和发送信息。

同步:通信双方靠一根时钟线来约定通信速率

总线:连接各个设备的数据传输线路(类似于一条马路,把路边各住户连接起来,使住户可以相互交流)

图3

STC89C521UART

STC89C52UART有四种工作模式:

  模式0:同步移位寄存器

  模式18UART,波特率可变(常用)

  模式29UART,波特率固定

  模式39UART,波特率可变

此例中选用了UART模式1

6.串口模式图

图4

串口通信:先发低位,再发高位

SBUF当左值的时候,是被赋值,此时是写值状态,写完之后会自动发出此数据,发送完会有一个TI;SBUF当右值的时候,接收数据,接收完之后会有一个RI

7.串口和中断系统

图5

8.串口相关寄存器

图6

串行口控制寄存器SCON和PCON

图7

图8

PCON

图9

图10

图11

0x20表示是0010 0000表示进入8位的模式

波特率的计算

因为定时器1是8位计数,8位最高为256,即累加到256溢出一次,0XF3=243,256-243=13,即每隔13us溢出一次,溢出率为1/13us=0.07692MHZ。

0.07692MHZ/16=0.00480769MHZ=4807.69HZ 

工作原理

发送部分的原理就是SBUF写数据,自动发送,发完之后TI==1表示发送完毕,软件置为0表示归位。

SBUF接数据,RI为1表示接收到。


编写代码部分

1.新建项目,添加Delay.c及Delay.h

2.main.c编码

void UART_Init()
{
    SCON = 0x40;       //首先配这个串行口寄存器
    PCON |= 0x80;        //波特率加倍,不加倍时钟会变慢,会对之后的结果形成较大的误差

     //前两个SCON和PCON是串口的部分,剩下的都素定时器1的部分
    TMOD &= 0x0F;        //清除定时器1模式位

    //SCON选择的是使用定时器1,这里的TMOD|= 0x20表示设定定时器1为8位自动重装方式,看图11
    TMOD |= 0x20;        //设定定时器1为8位自动重装方式
    TL1 = 0xF3;        //定时器赋值这个可以得波特率值
    TH1 = 0xF3;        //设定定时器重装值
    ET1 = 0;        //禁止定时器1中断
    TR1 = 1;        //启动定时器1 
}

void UART_SendByte(unsigned char Byte)
{
    SBUF=Byte;//将Byte写入SBUF中
    while(TI==0);//TI为1时,说明产生了发送中断,表示发送数据完成
    TI=0;//数据发送完了,软件将TI置0
}

void main()
{
    UART_Init();
    while(1)
    {
        UART_SendByte(scd);
        scd++;
        Delay(1000);
    }
}

3.最终结果

串口介绍

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值