普中51单片机教程-7.串口通信

 1.串行口介绍

硬件电路

TXD:发送端       RXD:接收端

电平标准

常见通信接口

通信的基本概念

1)串行通信和并行通信

串行通信

并行通信

2)单工、半双工、全双工

3)异步和同步

总线

串口参数

串口内部结构

串口和中断

图中涉及的RI和TI,以及定时器的初值TH1和TL1会在接下里讲解

串行口相关寄存器(重要!!!

(1)SCON

1)SM0/FE

2)SM1

3)SM2

暂时不用管,会在汇编语言中运用 

4) REN

5)TB8

6)RB8

 

7)TI

8)RI 

(2) PCON

1)SMOD

注意的是SMOD=0时,波特率不加倍 !!!

2) SMOD0

(3)SBUF 

无需配置 

 (4)其他相关寄存器 

波特率计算 (重要!特别是在MCS51单片机汇编语言的学习中

STC89C52和MCS51单片机都使用相同的8051核心,都是基于8051架构的单片机

1)方式0 

波特率固定,为fosc/12

2)方式2 

SMOD=0,波特率=fosc/64

SMOD=1,波特率=fosc/32

3)方式1和方式3 

TH1=256-((2^SMOD)/32)*(fosc/12)* (1/波特率)

SMOD=0/1

例如串口向电脑发送数据时,设置初值为FC,即244

244=256-2/32*11059200/12*(1/波特率)

解得波特率为4800b/s 

2.串口向电脑发送数据

步骤

不使用串口中断时,定时器1的设置初值是用来实现定时发送数据的。通过定时器1的计数和溢出,可以控制每隔一定时间发送数据到串口,实现定时发送的功能。

(1)配置串口函数 

 运用STC进行波特率的计算

(2)发送子函数

(3)主函数 

#include <REGX52.H>
#include "Delay.h"

unsigned char Sec;

void UartInit(void)        //串口配置函数
{
    PCON |= 0x80;        //使能波特率倍速位SMOD
    SCON = 0x50;        //8位数据,可变波特率,0x50把REN置位,允许接收
    //我们要配置定时器1,使其找工作在模式2,
    //因为模式2是八位重装载,不需要再进行第二次赋初值,精度更高
    TMOD &= 0x0F;        //高位清零,低位不变
    TMOD |= 0x20;    //定时器1为8位自动重装方式,高位配置为0010,GATE C/T M1 M0
    TL1 = 0xF4;        //设定定时初值
    TH1 = 0xF4;        //设定定时器重装值
    ET1 = 0;        //禁止定时器1中断
    TR1 = 1;        //启动定时器1
}

void UART_SendByte(unsigned char Byte)//发送子函数
{
    SBUF=Byte;
    while(TI==0);//TI=0,表示没有发送完毕,等待发送完毕,即TI=1
    TI=0;//发送结束,软件清零
    
}


void main()
{
    UartInit();
    while(1)
    {
        UART_SendByte(Sec);//全局变量,默认为0
        Sec++;
        Delay(1000);//延时,达到更好的显示
    }
}

(4)STC配置

不用时,要先点击关闭串口,在断电

 效果如下:

普中51单片机串口向电脑发送数据

3.模块化

(1)UART.c

(2)UART.h

 4.电脑通过串口控制LED

 步骤:

(1) UART.c

此时需要用到串口中断,即ES

 (2)主函数

配置中断函数

#include <REGX52.H>
#include "Delay.h"
#include "UART.h"

void main()
{
    UartInit();
    while(1)
    {
        
    }
}

void UART_Routine() interrupt 4//串行口中断函数
{
    if(RI==1)//判断是否接受完数据
    {
        P2=~SBUF;//读数据
        UART_SendByte(SBUF);//接收我发送的数据
        RI=0;//软件清零
    }
}

 效果如下:

电脑通过串口控制LED

5.HEX模式和文本模式的区别 

在HEX模式下,发送的是0x30

在文本模式下,发送的是0

例如我想要个字母A

  • 34
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值