串口通讯

串口通讯:各个字节一位一位传输

 

包括 异步通信和同步通信

同步通信:保持位同步也保持字符同步

传输速率:

            比特率:每秒钟传输二进制代码的位数

            波特率:每秒钟调制信号变化的次数,每秒钟发送的位数

在基带传输中,比特率和波特率相同

 

异步通信:前有 起始位,后有 校验位,停止位

 

一、工作方式寄存器SCON

RI 接收中断标志位;接收结束时,会由硬件置1,向CPU发出中断请求;同时由软件进行复位

TI 发送中断标志位;发送结束时,会由硬件置1,向CPU发出中断请求;同时由软件进行复位

TB8 用来存放发送的第九位,因为是8位进制,第九位没地方了

RB8 用来存放接收的第九位

REN 串行接收允许位;0--允许接收;1--禁止接收

串行口的工作方式,由SM0SM1两位共同控制

0 0  (方式0)位移寄存器

0 1   (方式1)10位异步收发器(8位数据)波特率可变

1 0  (方式2)11位异步收发器(9位数据)

1 1  (方式3)11位异步收发器(9位数据)波特率可变

 

 

二、工作方式寄存器PCON

只用到第七位SMOD,但是PCON 没有位寻址,操作SMOD直接操作这个寄存器

即  PCON=0xfe;

SMOD是波特率是否加倍的选择,0--加倍;1--不加倍

三、波特率

定义:串行口每秒钟发送的位数;用定时器T1作为波特率发生器(利用了工作方式2)

可用工具进行计算

四、串口的操作步骤

1、设置波特率,设置定时器T1为工作方式2 { 八位自动重装定时/计数器 }(TMOD寄存器)TMOD=0x20;赋初值高8位TH0和低8位TL0

2、设置工作方式;设置SCON寄存器为工作方式1 SCON=0x50--[0101 0000];设置PCON寄存器,决定波特率是否加倍(看最高位)

3、打开中断,EA=1ES=1(串行中断允许位)

4、开始工作计时,TR1=1,TCON控制寄存器(因为是用T1计时器,所以是TR1)

SCON=0x50---

 


 

#include <reg52.h>
#include"bstv51.h"
void UsartConfiguration()
{
   TMOD=0x20;//0010 0000;T1高4位控制,工作方式2 { 八位自动重装定时/计数器 }
   TH1=0xfd;//初始值
    TL1=0xfd;
    SCON=0x50;//0101 0000;0 1? ?(方式1)10位异步收发器(8位数据)波特率可变
    EA=1;//开大门
    ES=1;//开串行中断允许位
    TR1=1;//开始计时工作

}
void main()
{
     bstv51_init();
     UsartConfiguration();//调用串口通讯函数
     while(1)
     {}//空转

}
void xyh() interrupt 4//中断函数
{
    uchar date;
    date=SBUF;//取数据
    RI=0;//接收中断标志位,接收结束,软件复位=0
    SBUF=date;//发送数据,把数据传回去
    while(!TI);//发送中断标志位,当TI=0时,while语句内为真【真就是1】,执行这个语句,不断重复
               //当TI=1,即发送结束时,while语句为假,不执行,进行下一个语句
    TI=0;//软件复位
}





 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值