串口通信实验

一、简介

        本小节主要实现的是使用串口让单片机和PC进行通信。51单片机发送数据,计算机通过串口接收数据,或者PC发送数据,单片机接收数据。

二、串口通信

1、发送数据时:先要把数据写入到发送缓冲区SBUF,通过TXD口,发送出去。接收数据时:数据通过RXD口,写入接收缓冲区SBUF。

2、需要对串口进行初始化,初始化包括串口控制寄存器SCON,电源及波特率选择寄存器PCON,波特率的确定,中断是否开放。AUXR寄存器是用来调分频的。

3、串口初始化

串口控制寄存器SCON:用于设定串行口的工作方式,

SM0、SM1:串口工作方式选择位

SM2:多机通信控制位,主要用于方式2和方式3

REN:允许串行接收位

TI:发送中断标志位

RI:接收中断标志位

电源控制寄存器PCON设置:

SMOD:波特率倍增。SMOD=1时,波特率提高一倍,复位时,SMOD=0;

TMOD设置;用于设置定时器/计数器的工作方式。

GATE:0表示不需要外部中断,用软件设置TR0,TR1设置定时器启动,1表示需要外部中断,并且设置TR0或者TR1为1时,才会启动定时器。

C/~T:定时器/计数器模式选择位。C/T = 0为定时模式,C/T = 1为计数模式。

M1:M0:工作方式设置位。

三、串口通信初始化

1、串口初始化步骤

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

2)确定串口工作方式(SCON寄存器);

3)计算T1的初值(设定波特率),装载TH1,TL1。

4)启动T1(TCON中TR1位)。

5)如何使用中断,需开启串口中断控制位(IE寄存器)。

#include "reg52.h"

typedef unsigned char u8;
typedef unsigned int u16;

sbit KEY3 = P3^2;
sbit LED = P2^0;

void delay_10us(unsigned int us)
{
		while(us--);
}

void Uart_Init(u8 baud)
{
	TMOD |= 0x20;//设置计数器工作方式2
	SCON = 0x50;//设置工作方式1
	PCON = 0x80;//波特率加倍
	TH1 = baud;
	TL1 = baud;
	ES = 1;//打开串口中断
	EA = 1;//打开总中断
	TR1 = 1;//打开定时器
}

void main()
{
	Uart_Init(0xFA);
	while(1);
}

void uart() interrupt 4
{
	u8 rec_data;
	
	RI = 0;//清除接收中断标志位
	rec_data = SBUF;//存储接收到的数据
	SBUF = rec_data;//将接收到的数据放入到发送寄存器
	while(!TI);//等待发送数据完成
	TI = 0;//清除发送完成标志位
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_41392061

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值