51串口通信(理论+实践)

一、需要了解的寄存器

1.SCON:串行通信控制寄存器(可以字节寻址,也可以位寻址)

位地址9FH9EH9DH9CH9BH9AH99H98H
SCONSM0SM1SM2(多机通信:【0:双机,1:多级】)REN(接受控制:【0:禁止,1为允许】)TB(发送数据第9位)RB(接收数据第9位)TI(发生中断标志位)RI(接收中断标志)

PS:其中SM0和SM1为工作方式选择位,可选择四种工作方式:

SM0SM1方式说明波特率
000移位寄存器fosc/12
01110位异步收发器(8位数据)可变
10211位异步收发器(9位数据)fosc/64或fosc/32
11311位异步收发器(9位数据)可变

PS:

(1)TI/RI在任何工作方式下都必须由软件清0

(2)单片机复位时,SCON所有位均清0

2.PCON:电源控制寄存器

PCOND7D6D5D4D3D2D1D0
位名称SMODGF1GF0PDIDL

(1)SMOD的作用:在串口工作模式为1、2、3下,其SMOD=1,则波特率加倍。SMOD=0,则波特率不加倍。

3.IE:中断允许控制寄存器

ES:串口中断控制允许位,ES=0,串口中断禁止,ES=1,串口中断允许

二、串口通信需要知识

1.异步通信和同步通信的区别

(1)异步通信:异步在于,发送方和接受方用的时钟不一样,控制其发送和接收。传输的字符有间隙,并且间隙任意。

(2)同步通信,同步在于,发送方和接收方要协调好各自的时钟,要能使得双方的时钟都能达到同步要求。而且传输的字符之间不留间隙。

2.串口通信的机制

(1)单工:只能发送或者接收,其中一种。

(2)半双工:能发送和接收,但是两者不能同时进行。

(3)全双工:能发送和接收,两者可以同时进行。

3.比特率:每秒传输的比特的位数。单位是:bit/s,简称:bps。

4.串行接口结构:

 逻辑上:发送SBUF和接收SBUF是指的同一个。但是物理上,其分别指的不一样。

eg:SBUF=a;则该SBUF指的是发送SBUF.

a=SBUF,则该SBUF指的是接收SBUF将数据赋值给变量a了。

5.波特率的计算公式:

方式0的波特率 =  fosc/12

方式2的波特率 =(2SMOD/64)· fosc

方式1的波特率 =(2SMOD/32)·(T1溢出率)

方式3的波特率 =(2SMOD/32)·(T1溢出率)

三、51串口通信实践代码:

/*
串口收发程序,把发送的数据接收后用P1口的LED灯以二进制的形式显示
并且蜂鸣器发出提示声,再把接收的数据加1发出。
操作流程:
(1)使用STC ISP 软件界面上的串口助手。选择对应的串口号
(2)设置波特率为9600,选择HEX模式发送和接收
*/
#include <reg52.h>

#define uchar unsigned char
#define uint  unsigned int

sbit beep = P2^3;//蜂鸣器接口
uchar num;//发送暂存变量

void delay(uint z)
{
	uint x,y;
	for(x = z; x > 0; x--)
		for(y = 114; y > 0 ; y--);
}	
void UART_init()
{
	TMOD = 0x20;  	//T1工作模式2,8位自动重装
	TH1 = 0xfd;
	TL1 = 0xfd; 	//波特率为9600
	TR1 = 1;		//启动T1定时器
	SM0 = 0;
	SM1 = 1; 		//串口工作方式1 10位异步
	REN = 1;		//串口允许接收
	EA  = 1;		//开总中断
	ES  = 1;		//开串口中断
}
void main()
{
	UART_init(); //串口初始化
	while(1);	
}


void UART() interrupt 4
{
	if(RI)	//检测是否接收完成
	{
		num = SBUF;	  //num 取出接收缓冲器的值
		P1 = SBUF;
		beep = 0;
		delay(100);
		beep = 1;//蜂鸣器发出滴提示声
		num++;//把接收的数据加1并发送
		RI = 0;
		SBUF = num;	
		while(!TI);
		TI = 0;
	}
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

flower in my heart

你的鼓励就是我最大的动力

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

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

打赏作者

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

抵扣说明:

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

余额充值