C51课程列表

单片机入门必学的一些课程

C51串口通信

原文:https://blog.csdn.net/weever7/article/details/121463398

串行通讯与并行通信

数字信号是八位二进制数,可以使用信号线传输,一种方案是使用一条数据线按照次序一位一位的传送,每传送完8位(一个字节),这就是串行通信。还有一种方法是使用八条数据线同时传送8个位的数据,一次传送一个字节,这就是并行通信。

同步通信和异步通信

1.同步通信

顾名思义,同步通信就是对发送方和接收方的时钟实行直接控制,使双方的数据传输达到完全同步。数据以位的形式连续发送,且传送的字符之间不留间隙,即保持位同步和字符同步。双方的同步可以通过外同步和自同步俩种方式实现。

2.异步通信

和同步通信不同,异步通信的发送方和接收方使用各自的时钟控制数据的发射接收。异步通信是一种很常见的通讯方式,其发送端可以在任意时候发送字符,但与同步通信不同的是异步通信是以帧的形式发送数据的(异步通信中一个帧数据有十位:分别是一个起始位、八个数据位、一个停止位)

同步通信好比打电话,同时的;而异步通信好比发短信,啥时候看见不确定。

6.SBUF寄存器

前面讲了一大堆铺垫,相信大家都有一个疑问:单片机是怎么发送数据呢?它又是如何接收数据呢?

如果要细讲这其中的传输原理,那会是复杂难懂的,好在单片机的内部硬件自带发送和接收数据的功能,它是通过SBUF寄存器实现的。

SBUF寄存器有俩个,一个是发送寄存器,另一个是接收寄存器(名字都一样),但在逻辑上SBUF只有一个(地址都为99H),物理结构上,这是俩个完全独立的寄存器。如果CPU写SBUF,数据就会被送入发送寄存器准备发送;如果CPU读SBUF,则读入的数据一定来自接收寄存器。

简单来讲:a=SBUF,代表单片机从计算机接收到了数据(接收到的数据自动存在接收寄存器SBUF中)并且从接收寄存器SBUF读取数据并赋给a。SBUF=a,代表单片机要给计算机发送a数据,只需将a赋给发送寄存器SBUF就行,发送寄存器SBUF会自动给计算机发送SBUF中的数据。

#include"reg52.h"
#define uint unsigned int
#define uchar unsigned char
uchar num;
 
void uart_init()  //初始化函数
{
	TMOD=0x20;//设置定时器1的工作方式2---8位自动装填
	TH1=0xfd;//设置初始值:使比特率为9600bps
	TL1=0xfd;
	PCON=0x00;//SMOD=0,不加倍
	TR1=1;//打开定时器中断开关
	REN=1;//打开允许串行接收位
	SM0=0;//设置串行口通讯方式为方式1
	SM1=1;
	EA=1; //打开总中断
	ES=1; //打开串口通讯中断
}
 
void uart() interrupt 4 //中断函数
{
    if(RI)	//检测是否接收完成
    {
	    num=SBUF; //从计算机接收数据,赋给num
	    RI=0;  //数据接收完毕后将RI软件置0
	    SBUF=num+1;//向计算机发送数据num
	    while(!TI); //TI=0时陷入死循环,直至数据发送完毕
	    TI=0; //数据发送完毕后软件将TI置0
    }
}
 
void main()//主函数就这么简单
{
	uart_init();
	while(1);
}
============================找指导老师布置任务吧==============================