STC89C52开发学习(七)

##	串行口通信原理及操作

(1)并行通信方式:简单的来说,就是一次性传输8位数据(1字节),需要8条数据线。并行通信控制简单、相对传输速度快,但由于传输线较多,长距离传输的成本高且收、发方的各位同时接收存在困难
(2)串行通信方式:将数据字节分成一位一位的形式在一条传输线上逐个传输。必要过程——发送时把并行数据变成串行数据发送到线路上,接收时再把串行信号改变成并行数据,这样才能被计算机及其他设备处理,串行通信传输线少,长距离传输时成本低。串行通信两种方式:异步串行通信、同步串行通信(时间同步)。

串行通信的制式:
1.单工:指数据传输仅能沿一个方向,不能实现反向传输
2.半双工:指数据传输可以沿两个方向,但需要分时进行
3.全双工:指数据可以同时进行双向传输

波特率

单片机或计算机在串口通信时的速率用波特率来表示,收发双方要一致。
波特率计算

通过编程可以对单片机串行口设定为四种工作方式,其中方式0和方式2的波特率是固定的,方式1和方式3的波特率是可变的,由定时器T1的溢出率来决定。
计算公式如下:

在这里插入图片描述
51的波特率如果不想手算可以通过软件来进行TH1,TL1的初值计算。

在这里插入图片描述
PCON寄存器只需要了解最高位SMOD,如果SMOD=1则表示波特率加倍,SMOD=0表示波特率不加倍。

51单片机串行口结构

51单片机串行口是一个可编程的全双工的通信接口。
51单片机的串行口主要由两个独立的串行数据缓冲器SBUF(一个发送,一个接收)等各种寄存器及若干控制门电路组成。

串行口控制寄存器SCON

用来设定串行口的工作方式,接收/发送控制以及设置状态标志等。
在这里插入图片描述

SM0,SM1——工作方式选择位。通过对SM0,SM1设定,来对工作方式进行设定。

在这里插入图片描述
TI——发送中断标志位。串行发送停止位的开始时,由内部硬件使TI置1,向CPU发出中断申请。在中断服务程序中,必须用软件清0,取消此中断申请。
RI——接收中断标志位。串行接收停止位的中间时,由内部硬件使RI置1,向CPU发出中断申请。在中断服务程序中,必须用软件清0,取消此中断申请。
REN——允许串行口接收数据设置为1

串口方式1编程与实现

(1)确定T1工作方式(编程TMOD寄存器)
(2)计算T1的初值,装载TH1,TL1;
(3)启动T1(编程TCON中的TR1位)
(4)确定串行口在中断方式工作时,要进行中断设置

串口初始化代码

void init()
{
	TMOD=0x20;	//T1工作方式,8位重装载
	TH1=0xfd;
	TL1=0xfd;
	TR1=1;
	SCON=0x50;
	EA=1;
	ES=1;
}

串口中断服务函数代码

void usart()interrupt 4
{
	u8 receive_data=SBUF;//接收缓冲器
	RI=0;//接收到停止位时,软件清零

	SBUF=receive_data;//发送
	while(!TI);//当发送完TI=1,跳出循环
	TI=0;
}
发送字符串案例

/**发送字符串代码**/
void send_byte(char c)
{
	SBUF=c;
	while(!TI);//当发送完TI=1,跳出循环
	TI=0;
}

void send_string(char *p)
{
	while(*p!='\0')
	{
		send_byte(*p);
		p++;
	}
}

void usart()interrupt 4
{
	if(RI==1)
	{
		RI=0;
		command=SBUF;//获取接收到的信息赋值给command
	}
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值