80C51串口通信

来源《霖锋带你征服嵌入式》

1、串行口结构

2、串行口的控制寄存器

区别与定时器中断的方式控制寄存器是TMOD,串口是SCON。

 

 fosc 是晶振频率,一般使用方式1----->SM0SM1 = 01;起始位+8位数据+停止位= 10位数据

 SM2我们一般置0;

REN =1;接受数据;

 因为方式2,3都是有9位数据,所以,TB8(发送),RB8(接受)存放的是第9位数据。

TB8、RB8这两位我们不管。

 TI:发送停止位的开始时,即数据发送完成,硬件置1(单片机自动完成);软件清0(我们去清0);取消中断申请,退出中断函数;(发完清零)

RI:接收停止位的中间时,即数据接收完成,硬件置1(单片机自动完成);软件清0(我们去清0);取消中断申请,退出中断函数;(接收完成清零)

3、PCON中只有一位SMOD与串行口工作相关:

 SMOD=1,波特率提高一倍。

4、串行口工作方式//主要应用方式1

 空闲时,高电平;起始位低电平+8位数据+停止位高电平+空闲高电平

写入SBUF: SBUF = 0X11;//将要传送的数据写入到SBUF中即可。

起始位1000 1000停止位 ,写入到缓冲区后,TI高电平,触发中断,发送数据。

 5、波特率的计算

 收发双方的波特率应该一样,否则会出现误码。

SMOD是波特率倍增位,值为0或1

 11.0592MHz,主要用来串口通信,用此值算出来的波特率为整数,用12MHz,算出来有误差。

 例如:1/32  *(11059200/12(256-TH1)) = 9600 计算的TH1= 253(0xFD);

6、串口使用步骤

首先对串口进行初始胡,设置产生波特率的定时器1、串口控制和中断控制。

1)确定T1的工作方式(编程TMOD寄存器)

2)计算T1的初值,装载TH1、TL1;

3)启动T1(编程TCON中的TR1位)

4)确定串行口控制(编程SCON寄存器)

串行口在中断方式工作时,要进行中断设置(编程IE、IP寄存器)

ps:使用以下软件来计算初值;

7、示例

//单片机接收计算机发过来的数据,并显示在数码上
#include <reg52.h>
unsigned char a;
void main()
{
    TMOD  = 0x20;    //T1定时器 方式2模式;
    TH1 = OXfd;    //装入初值
    TL1 = 0xfd;    //TL1一开始也要装入相同初值
    TR1 = 1;    //启动定时器1
    
    SM0 = 0;    //设置串口为方式1
    SM1 = 1;
    REN = 1;    //串口接收使能
    
    EA = 1;    //打开总中断开关
    ES = 1;    //打开串口中断开关
    
    while(1);
}

void serial() interrupt 4        //串口中断号是4
{
    
    a =  SBUF;
    P1 = a;  //P1口接的数码管
    RI = 0;    //软件清零
}
//单片机接收计算机发过来的数据,并显示在数码上,并返传回给电脑
#include <reg52.h>
unsigned char a;
unsigned char flag;
void main()
{
    TMOD  = 0x20;    //T1定时器 方式2模式;
    TH1 = OXfd;    //装入初值
    TL1 = 0xfd;    //TL1一开始也要装入相同初值
    TR1 = 1;    //启动定时器1
    
    SM0 = 0;    //设置串口为方式1
    SM1 = 1;
    REN = 1;    //串口接收使能
    
    EA = 1;    //打开总中断开关
    ES = 1;    //打开串口中断开关
    
    while(1)
    {
        if(flag ==1)
        {
            ES = 0;    //先把中断关上
            flag = 0;
            SBUF = a;
            while(!TI);    //等待数据发送完成
            TI = 0;        //需要手动清零
            ES = 1;        //打开中断
        }
    }
}

void serial() interrupt 4        //串口中断号是4
{
    
    a =  SBUF;
    P1 = a;  //P1口接的数码管
    RI = 0;    //软件清零
    flag = 1;
}

 

使用串口调试工具进行串口通信测试, 根据电脑 管理 配置好 com口号;

单片机晶振换成11.0592MHz的晶振;

使用串口线将单片机与电脑连接起来。

 

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值