51单片机之串口通讯

2018/3/26

51单片机

1.说在前面

今天,将 51一些最基础的功能全部速通了一遍,问我有什么感受嘛,单片机的确挺好玩的,用心去钻研才最重要,当然,对于51而言,点一个灯,按一个键并不是终点,51还有很多可以玩的地方,等待去探索;

2.串口通信

1.为什么要实现串口通信

对于单片机而言,串口通信相当于单片机的交流工具,使用单片机的串口通讯可以让单片机和直连的电脑连接,或者和一些无线模块(esp8266,HC06)进行连接,达到近程或者远程的连接

2.串口通信的一些基础知识

1.同步通信:需要实现发送方对接收方时钟的直接控制,位和字符均同步

2.异步通信:每个字符要附加两到三位的起止位和校验位,操作方便但是传输效率不高

3.比特率(波特率):每秒传输二进制代码的位数

4.寄存器

SCON:

1.八位寄存器,用来设定串行口的工作方式,设置状态(主要对SM0和SM1进行设置)

在51单片机的工作方式中,采用10位异步收发器的时候较多(8位数据)

2.TI为发送中断位,当发送数据停止时,内部硬件设TI为1,然后用软件再次将其清零,取消中断申请

3.RI为接受中断位,当接受数据停止时,内部硬件设RI为1,然后用软件再次将其清零,取消中断申请

PCON

在PCON的第七位,存在波特率放大设备,当置于1,波特率放大;

3.串口的使用(设置串口初始化函数)

1.确定T1的工作方式(对寄存器TMOD进行编程),设置定时器

2.计算T1的初值(波特率),确定波特率一置

3.启动定时器

4.确定串行口的控制(SCON)

5.注意中断控制(启动中断器)

6.SBUF代表着数据的缓冲区,可以暂时用来存储数据

4.由此看来,串口通信和定时器和中断器可以一起使用的

   //实现串口通讯
	//确定T1的工作方式(TMOD)
	//计算TH1和TL1的初值(高四位和低四位)
	//启动串口工具 (启动T1)编程TCON的TR1位置
	//确定串行口的控制
	//中断控制
	#include
	typedef unsigned int u16;
	typedef unsigned char u8;
	void initusart()
	{
	  	TMOD=0X20;//0010 0000控制m1 mo为10,表示8位有效数字定时器
		//设置波特率
		TH1=0xf3;
		TL1=0xf3;
		PCON=0x80;//设置波特率翻倍
		TR1=1;//设置中断开关
		SCON=0X50;//设置单片机的模式:10位异步收发(常用)
		ES=1;//串口中断
		EA=1;//设置总中断
	}
	void main()
	{
	   initusart();
	   while(1);//循环
	}

	void usart() interrupt 4//注意设置中断号
	{
		u8 recdata=SBUF;//接受缓冲区
		RI=0;//由于硬件将电位拉高,中断,软件可以重新拉低
		SBUF=recdata;
		while(!TI);
		TI=0;//重新将中断标志位变为0;
	}


51单片机之串口通讯_第1张图片51单片机之串口通讯_第2张图片





你可能感兴趣的:(51单片机之串口通讯)