IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 51单片机——串口通信详解(STC89C51为例) -> 正文阅读

[嵌入式]51单片机——串口通信详解(STC89C51为例)

目录

一、什么是通信:

1、以信件为例进行理解:

2、推广到电子通信:

3、具体到串口通信:

二、具体到单片机STC89C51与电脑沟通(方式1):

1、总体思路:

2、了解51单片机串口硬件电路:(建议有数电基础的人了解)

3、编写程序


一、什么是通信:

1、以信件为例进行理解:

? ? ? ?试想在古代,我们怎么依靠信件来传递信息:写信-->传信-->读信,这个是我们表面理解的步骤,如果我们看的深层一点,可以理解为:

(假设写信人想让收信人去将XX屋子的椅子移动一厘米)

? ? ? ?写信人将“将XX屋子的椅子移动一厘米”用双方规定好意思的象形字即汉字表示,并记录在纸张载体上——》通过鸽子或者别人骑马把纸张载体送给收信人——》收信人把信中的象形字翻译成“将XX屋子的椅子移动一厘米”,并按照指示将XX屋子的椅子移动一厘米

2、推广到电子通信:

? ? 发送方用一种编码方式对信息进行编码——》通过一种传输介质发送编码信息——》接收方接受编码信息并进——》 接收方按照这一种编码方式进行解码,得到有效信息

3、具体到串口通信:

(1)发送字符帧的基本格式:(编码方式)

(a)起始位:起始位固定为0

(b)数据位:你所要发送的八位一字节数据

(c)校验位:初学时可设置为无校验位,则该位忽略不管

(d)停止位:停止位固定为1

在这里插入图片描述

(2)发送信息:通常是单片机直接一位一位发送出去,不过为了提高效率等原因,会存放在硬件电路中经过处理后再发送。

(3)传输介质:可以用蓝牙、WiFi、无线电等方式,这里使用的是用数据线和电脑直接连接进行简单测试,其他方式同理。

TXD:发送数据 Transmit(tx) Data?简写形式??

RXD:接受数据 Receive(rx) Data 简写形式??

GND:共地,以提供参考点电压

(4)接受信息:因为减轻单片机的负担,不需要每时每刻检测对方是否发送信息,通常会用到中断。

二、具体到单片机STC89C51与电脑沟通(方式1):

1.总体思路:

有以上分析可以,我们本次实验的步骤:了解51单片机串口硬件电路——》编写程序控制单片机发送信息给硬件电路,硬件电路按照字符帧格式发送信息——》通过USB转TTL模块发送给电脑(有下载功能的开发板都有)———》电脑收到后,我们通过串口调试助手(网上现成的软件)将收到的二进制信息转换成十进制数、字母等或者16进制数

2、了解51单片机串口硬件电路:(建议有数电基础的人了解)

??????????????

???????

?1、接收信息:当软件将允许接收标志位置1后,当RXD逐位收到发送10位字符帧并经过一系列处理后,RI会被硬件置1,将接下来的八位数据位存放入SBUF寄存器中,如果串口中断有开启,那么单片机就会进入中断执行中断服务函数中的内容。

2、发送信息:当单片机执行一段写SBUF命令时,发送硬件电路会将写入的八位数据位转换成完整的十位字符帧,最后由TXD口逐位发送出去。

4、由于我们使用的是异步通信,所以单片机内部也要通过内置的时钟,产生脉冲信号确定接收或发送的频率,而且该频率要与电脑的一致。

5、定时器1为串口通信提供脉冲信号:TH1,TL1确定时钟脉冲频率,具体查定时器的配置;SMOD确定产生的脉冲信号是否需要分频即降低接收的频率

6、接收和发送SBUF共用一个地址码

7、当且仅当TI=1或RI=1时中断才会发生,也就是说,接收和发送不能同时进行

?3、波特率的计算:

? (1)波特率:串口通信每秒能发送或接收多少位,也就是上面第五点指的频率

? (2)为什么要计算波特率:其实就像高铁帮信息一样,无论是乘客还是司机都要在相同的时间到达才能完成运输,而由于我们使用的是异步通信,没有使用时钟线,我们就要在接收和发送双方都规定好一个特定的频率,防止错过信息

? (3)计算方法:由上面的第五点可和由下面的电源控制寄存器PCON可知51单片机串口收发频率由TH1、TL1和SMOD位决定,所以我们要找到TH1,TL1,SMOD与波特率之间的关系:

计算过程较为复杂,初学者可使用该工具

(8条消息) 51单片机波特率计算器-单片机文档类资源-CSDN文库https://download.csdn.net/download/powern8520/405367?ops_request_misc=&request_id=&biz_id=103&utm_term=51%E6%B3%A2%E7%89%B9%E7%8E%87%E8%AE%A1%E7%AE%97%20%E5%85%8D%E8%B4%B9&utm_medium=distribute.pc_search_result.none-task-download-2~download~sobaiduweb~default-2-405367.pc_v2_rank_dl_default&spm=1018.2226.3001.4451.3

4、编写程序:

?(1)需要配置的寄存器:

????????(a)串口控制寄存器SCON(可位寻址——即直接操作某一位,如SM0=1)

SM0,SM1:工作方式选择位,具体看手册,这里我们选择方式1,令SM0=0,SM1=1

REN:允许串口接收位,令REN=1;

TI,RI:接收,发送标志位,在接收或者发送会由硬件置1,为了停止中断,要注意软件将TI、RI置0。

SM2,TB8,RB8:我们在这里没有用到

? ? ? ? (b)电源控制寄存器PCON(不可位寻址)

  1. SMOD:波特率选择位,SMOD=1时,波特率加倍
  2. 其他位没有用到全部置0,令PCON=0x80

? ? ? ? ?(c)中断允许寄存器IE(可位寻址)

  1. EA:CPU的总中断允许位,令EA=1
  2. ES:串口中断允许位,令ES=1

(2)STC89C51参考代码:

? ? ? ? ? ? ? ? 实现功能:接收电脑发来的信息后,再发送给回给电脑?

#include <reg52.h>
#define u8 unsigned char 
#define u16 unsigned int 	
u8  table[]="I get ";
u8 a,flag;
void Tim1_Init();
void Serial_Init();
void Serial_Interrupt_Init();
void delay(u16 time_out)
{
	while(time_out--);
}
void main()
{

	u8 i;
	Tim1_Init();
	Serial_Init();
	Serial_Interrupt_Init();	
	while(1)
	{
		if(flag==1)
		{
			//发送字符串
			for(i=0;i<6;i++)
			{
				SBUF=table[i];
				//等待发送发送完成
				while(!TI);
				//清除标志位
				TI=0;
			}
			//发送接收到字符
			SBUF=a;
			while(!TI);
			TI=0;
			flag=0;
		}
	 delay(1000);
	}
}
//定时器初始化,为串口提供时钟脉冲
void Tim1_Init()
{
	TMOD=0x20;
	//设置SMOD=1,波特率加倍
	PCON=0X80;			
	//波特率为9600 STC89C51 11.052MHZ
	TH1=0xfA;
	TL1=TH1;
	//启动定时器1
	TR1=1;
}
//串口初始化
void Serial_Init()
{
  //方式1
	SM0=0;
	SM1=1;
	//启动串口接收数据
	REN=1;
}
//打开中断
void Serial_Interrupt_Init()
{
	//打开串口中断
	ES=1;
	//打开总中断
	EA=1;
}
//中断服务函数,串口中断后会自动跳到这里
void Serial_Interrupt() interrupt 4
{
	//清除标志位
	RI=0;
	//将接收到的数据位记录到a中
	a=SBUF;
	flag=1;
}

(3) 串口调试助手的使用:

(a)下载:? ? ? ??

(7条消息) 串口调试工具XCOMV2.0_xcomv2.0-C++工具类资源-CSDN文库https://download.csdn.net/download/xiajhua/10147635?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167171191716782425640209%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=167171191716782425640209&biz_id=1&utm_medium=distribute.pc_search_result.none-task-download-2~download~sobaiduend~default-1-10147635-null-null.pc_v2_rank_dl_default&utm_term=XCOM%20V2.0&spm=1018.2226.3001.4451.2

(b)步骤:选择相应的串口——》选择相应的波特率——》打开串口——》发送信息

——》——》

——》

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-12-25 11:27:08  更:2022-12-25 11:27:20 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/26 20:09:13-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计