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

编程入门 行业动态 更新时间:2024-10-26 23:35:31

一、需要了解的寄存器

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

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

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

SM0SM1方式说明波特率000移位寄存器fosc/1201110位异步收发器(8位数据)可变10211位异步收发器(9位数据)fosc/64或fosc/3211311位异步收发器(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 intsbit 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; 	//波特率为9600TR1 = 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;}
}

更多推荐

串口,理论,通信

本文发布于:2023-05-20 22:50:25,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/156718.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:串口   理论   通信

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!