南昌航空大学单片机之间RS-232串行通信的实现
更新时间:2024-05-05 04:11:01 阅读量: 综合文库 文档下载
专业课程设计报告
题 目:
单片机之间RS-232串行通信的实现
姓 名:
专 业: 班级学号: 同组人 :
指导教师:
南昌航空大学信息工程学院
20 16 年 6 月 25 日
单片机 课程设计任务书
2015-2016 学年第 2学期 第 16 周- 18 周
题目 单片机之间RS-232串行通信的实现 内容及要求 1.通过键盘输入数据和显示要传输的数据; 2.通过串口利用RS-232总线,将数据发给单片机主机,并显示。 进度安排 16周:查找资料,进行系统硬件设计、软件方案设计; 17周:硬件制作、软件的分模块调试; 18周:设计结果验收,报告的提交。 学生姓名: 指导时间:周一、周三、周四下午 任务下达 2016年6月15日 任务完成 考核方式 指导教师 √ 2.答辩 □ 3.实际操作 □√ 4.其它□ 1.评阅 □指导地点:E 楼610室 2016 年 6 月25日 温靖 系(部)主任 徐新河 注:1、此表一组一表二份,课程设计小组组长一份;任课教师授课时自带一份备查。 2、课程设计结束后与“课程设计小结”、“学生成绩单”一并交院教务存档。
摘要
本次设计是利用RS-232实现两个单片机之间的串行通信,通信的结果用数码管进行显示。在两个单片机中,主机主要通过对键盘的操作将数据发送给从机,作为发送方,从机主要负责主机的调度与支配,作为接收方。本设计用AT89C51芯片,并用C语言程序来控制AT89C51,使之能实现两个单片机之间的通信。利用MAX232芯片来实现单工通信。
该系统具有使用方便、操作简单、结构简单、成本低、可靠性高、可扩展性强、易于维护等特点,在实际生活中有广泛的应用前景。
关键字:单片机、AT89C51、RS-232总线、串行通信
目 录
前 言---------------------------------------------------------------1 第一章 系统总体方案-----------------------------------------------------------------------------2 第二章 硬件电路的设计--------------------------------------------------------------------------3
2.1 单片机系统--------------------------------------------------------------------------------3 2.2 电平转换电路-----------------------------------------------------------------------------6 2.3 总体电路设--------------------------------------------------------------------------------7 第三章 软件设计------------------------------------------------------------------------------------8
3.1 串行通信的实现 .................................................................................................... 8 3.2 程序流程图 ............................................................................................................ 9 第四章 实验调试 ................................................................................................................ 11 第五章 结论 ....................................................................................................................... 12 参考文献 ............................................................................................. 错误!未定义书签。 附录
前 言
随着单片机技术的发展,单片机在通信方面得到了广泛的运用。通信的关键在于互传数据信息,在以单片机为基础的数据采集和实时控制系统中,通过RS-232接口进行单片机之间的命令和数据传送,就可以对生产现场进行监测和控制。RS-232是用于串行通信的标准通信接口,利用它可以很方便地把各种计算机、外围设备等连接起来进行串行通信。它适用于短距离的通信场合。 RS-232标准适用于DCE和DTE之间的串行二进制通信,最高的数据速率为19.2Kbit/s,在使用此波特率进行通信时,最大传输距离在20m之内,实际通信中经常采用9针接口进行数据通信。
51单片机内部的串行口具有通信的功能,该串口可作为通信接口,利用该串口与PC机的串口通信进行串行通信,将单片机采集的数据进行整理及统计等复杂处理就能满足实际的应用需要。
串行通信是指数据一位一位地按顺序传送,串行通信通过串行口来实现。在全双工的串行通信中,仅需要一根发送线和一根接收线,串行通信可大大节省传送线路的成本,但数据传送速度慢。因此,串行通信适合于远距离通信。
51单片机的开发除了硬件支持外,同样离不开软件。用汇编语言或C语言等高级语言编写的源程序必须转化为机器码才能被执行。目前流行的Keil 8051c编译器。它提供了集成开发环境,包括C编译器、宏编码、连接器、库管理和仿真调制器。利用keil 8051ccuvision编写的程序可直接调用编译器编译,连接后可直接运行。
1
第一章 系统总体方案
51单片机本身具有一个全双工的串行口,两个单片机之间可以直接进行串口通信,本次的设计是要求通过RS232进行单片机之间的通信,因为51单片机输入、输出电平为TTL电平,但由于单片机的TTL逻辑电平和RS-232的电气特性完全不同,RS-232的逻辑0电平规定为+5~+15V之间,逻辑1电平为-5~-15V之间,因此要选用MAX232电平转换芯片,发送方的数据由串行口TXD段输出,经过电平转换芯片MAX232将TTL电平转换为RS232电平输出,经过传输线将信号传送到接收端。接收方也使用MAX232芯片进行电平转换后,信号到达接收方串行口的接收端。接受方接收后,在数码管上显示接收的信息。为提高抗干扰能力,还可以在输入输出端加光耦合进行光电隔离。
软件部分,通过通信协议进行发送接收,主机先送AAH给从机,当从机接收到AAH后,向主机回答BBH。主机收到BBH后就把数码表TAB[16]中的10个数据送给从机,并发送检验和。从机收到16个数据并计算接收到数据的检验和,与主机发送来的检验和进行比较,若检验和相同则发送00H给主机;否则发送FFH给主机,重新接收。从机收到16个正确数据后送到一个数码管显示。串行口的工作方式为8位UART,波特率可变(T1溢出率/n)。定时器的工作方式为工作方式2。
图一 RS-232电平信号传输的连接图
2
第二章 硬件电路的设计
2.1 单片机系统
单片机是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的计算机系统。 标准型89系列单片机是与MCS-51系列单片机兼容的。在内部含有4KB或8KB可重复编程的Flash存储器,可进行1000次擦写操作。全静态工作为0~33MHz,有3级程序存储器加密锁定,内含有128~256字节的RAM、32条可编程的I/O端口、2~3个16位定时器/计数器,6~8级中断,此外有通用串行接口、低电压空闲模式及掉电模式。AT89C51相当于将8051中的4KB ROM换成相应数量的Flash存储器,其余结构、供电电压、引脚数量及封装均相同,使用时可直接替换。AT89C51在内部采用40条引脚的双列直插式封装,引脚排列如图2所示
图2 AT89C51芯片引脚图
51单片机的串行接口是一个全双工的接口,它可以作为UART(通用异步接受和发送器)用,也可以作为同步移位寄存器用。51单片机串行接口的结构如下:
(1)串行数据缓冲器(SBUF)
3
接受或发送的数据都要先送到SBUF缓存。SBUF包括缓存寄存器和发送寄存器,以便能以全双工方式进行通信。此外,在接收寄存器之前还有移位寄存器,从而构成了串行接收的双缓冲结构,这样可以避免在数据接收过程中出现帧重叠错误。发送数据时,由于CPU是主动的,不会发生帧重叠错误,因此发送电路不需要双重缓冲结构。在逻辑上,SBUF只有一个,它既表示发送寄存器,又表示接收寄存器,具有同一个单元地址99H。但在物理结构上,则有两个完全独立的SBUF,一个是发送缓冲寄存器SBUF,另一个是接收缓冲寄存器SBUF。如果CPU写SBUF,数据就会被送入发送寄存器准备发送;如果CPU读SBUF,则读入的数据一定来自接收缓冲器。即CPU对SBUF的读写,实际上是分别访问上述两个不同的寄存器。 (2)串行控制寄存器(PCON)
串行控制寄存器SCON用于设置串行口的工作方式、监视串行口的工作状态、控制发送与接收的状态等。它是一个既可以字节寻址又可以位寻址的8位特殊功能寄存器。其格式如表1所示:
位地址 SCON 9FH SM0 9EH SM1 9DH SM2 9CH 9BH 9AH REN TB8 RB8 99H T1 98H R1 表-1 串行口控制寄存器SCON
SM2:多机通信控制位。
REN:接收允许控制位。软件置1允许接收;软件置0禁止接收。
TB8:方式2或3时,TB8为要发送的第9位数据,根据需要由软件置1或清0。 RB9:在方式2或3时,RB8位接收到的第9位数据,实际为主机发送的第9位数据TB8,使从机根据这一位来判断主机发送的时呼叫地址还是要传送的数据。
TI:发送中断标志。发送完一帧数据后由硬件自动置位,并申请中断。必须要软件清零后才能继续发送。
RI:接收中断标志。接收完一帧数据后由硬件自动置位,并申请中断。必须要软件清零后才能继续接收。
SM0,SM1:串行口工作方式选择位,这两位组合成00,01,10,11对应于工作方式0、工作方式1、工作方式2、工作方式3。串行接口工作方式如表2:
4
SM0 0 0 1 1 SM1 0 1 0 1 工作方式 0 1 2 3 功能 8位同步移位寄存器(用于I/O扩展) 10位异步串行通信(UART) 11位异步串行通信(UART) 11位异步串行通信(UART) 表-2 串行工作方式
(3)输入移位寄存器
接收的数据先串行进入输入移位寄存器,8位数据全移入后,再并行送入接收SBUF中。
(4)波特率发生器
波特率发生器用来控制串行通信的数据传输速率的,51系列单片机用定时器T1作为波特率发生器,T1设置在定时方式。波特率是用来表示串行通信数据传输快慢程度的物理量,定义为每秒钟传送的数据位数。
(5)电源控制寄存器PCON
波特率系数控制寄存器PCON的最高位为Smod,仅仅是最高位与串行口有关。在工作方式1~工作方式3时,若SMOD=1,则串行口波特率增加一倍。若SMOD=0,波特率不加倍。系统复位时,SMOD=0。PCON字节地址为87H,不能位寻址。PCON的格式如表3:
PCON 7 6 5 4 3 GF1 2 1 0 波特率 fORC/12 可变(T1溢出率*2SMOD/32) fORC/64或fORC/32 可变(T1溢出率*2SMOD/32) 位名称 SMOD - - - GF0 PD IDL 表-3 特殊功能寄存器PCON的格式
(6)波特率计算
串行口每秒钟发送(或接收)的位数称为波特率。设发送一位所需要的时间为T,则波特率为1/T。对于不同方式,得到的波特率的范围是不一样的,这是由定时器/计数器T1在不同方式下计数位数的不同所决定的。串行口工作在方式1或方式3时,常用定时器T1作为波特率发生器,关系式为:波特率=2SMOD×(T1溢出率)/32。
5
2.2 电平转换电路
用8051串行接口通信,如果两台8051单片机之间的距离很近(不超过1.5m),可以采用直接将两台8051单片机的串行接口直接相连,利用其自身的TTL电平(0-5V)直接传输数据信息。如果传输距离较远(超过1.5m),由于传输线的阻抗与分布电容,会产生电平损耗和波形畸变,以至于检测不出数据或数据出错。此时可利用 RS232标准总线接口,用MAX232芯片完成TTL和RS-232的双向电平转换。
图3电平转换芯片MAX232
在电气特性上RS-232采用负逻辑,要求高、低两信号间有较大的幅度,标准规定为:逻辑‘1’:-5~-15V ,逻辑‘0’:+5~+15V 。而单片机的信号电平与TTL电平兼容,逻辑1大于+2.4V,逻辑0为0.4V以下。很显然,RS-232信号电平与TTL电平不匹配,为了实现两者的连接,必须进行电平转换。MAX232为单一+5V供电,内置自升压电平转换电路,一个芯片能同时完成发送转换和接收转换的双重功能。
(1)有5个外接电容、进行电压匹配和电源去耦。
(2) R1IN,R2IN:两路RS-232C电平信号输入端,可接传输线。
(3) R1OUT,R2OUT:两路转换后的TTL电平输出端,可接单片机的RXD端。 (4) T1OUT,T2OUT:两路转换后的RS-232C电平信号输出端,可接传输线。 (5) T1IN,T2IN:两路TTL电平输入端,可接单片机的TXD端。 (6)Vs+,Vs-:分别经电容接电源和地。
6
MAX232和单片机串口连接的电路如图4所示:
图 4 MAX232与单片机串口连接电路图
2.3 整体电路设计
最终设计电路如图5所示,发送方的数据由串行口TXD段输出,经过电平转换芯片MAX232将TTL电平转换为RS232电平输出,经过传输线将信号传送到接收端。接收方也使用MAX232芯片进行电平转换后,信号到达接收方串行口的接收端。接受方接收后,通过P1口在数码管上显示接收的信息。
图5 串行通信电路
7
第三章 软件设计
通过通信协议进行发送接收,主机先送AAH给从机,当从机接收到AAH后,向主机回答BBH。主机收到BBH后就把数码表TAB[16]中的16个数据送给从机,并发送检验和。从机收到16个数据并计算接收到数据的检验和,与主机发送来的检验和进行比较,若检验和相同则发送00H给主机;否则发送FFH给主机,重新接受。从机收到16个正确数据后送到一个数码管显示。
3.1 串行通信软件实现
(1)串行口工作于方式1;用定时器1产生9600bit/s的波特率,工作于方式2。 (2)功能:将本机ROM中数码表TAB[16]中的16个数发送到从机,并保存在从机内部ROM中,从机收到这16个数据后送到一个数码管循环显示。
(3)通信协议:主机首先发送连络信号(AAH),从机接收到之后返回一个连络信号(BBH)表示从机已准备好接收。
(4)通信过程使用第九位发送奇偶校验位。
(5)从机接收到一个数据后,立即进行奇偶校验,若数据没有错误,则返回00H,否则返回FFH。
(6)主机发送一个数据后,等待从机返回数据;若为00H,则继续发送下一个数据,若为FFH,则重新发送数据。
8
3.2 程序流程图
1.发送端程序流程图,如图6所示
图6 发送端程序流程图
2.接收端程序流程图,如图7所示:
9
图7 接收端程序流程图
10
第四章 实验调试
在protues上进行仿真实验。首先使用KeilC将编写完成的程序编译生成HEX文件,将HEX文件烧录到两片单片机中,进行仿真实验,结果如下图所示,可以看到,接收端已将接受到的数据完整的显示了出来。
图8 仿真图
11
第五章 结论
本次设计是通过两块简单的89C51单片机实现信息的串口通信。在设计过程中,通过查找资料了解了双机通信背景,从熟悉串口通信的原理,到掌握具体串口通信在双机之间的实现,从硬件电路设计到程序编写,一步步加深了自己对单片机的理解,从硬件调试到软件模拟实现等过程中,收获不少东西,也遇到了不少的问题。比如对于单片机知识不够透彻,对内容的掌握不够,缺乏灵活运用的能力,对于知识的扩展也存在一定的问题,因此,刚开始面对设计课题,感觉自己无从下手。其次,硬件设计过程中,I/O口的扩展,外部ROM的扩展,对于芯片的选择,软件编写时,对于某些指令的功能,功能模块的连接,芯片地址选择等都遇到了很大的障碍,不过在老师以及同学的帮助下得到了解决。另外,设计中犯了一些常识性的错误,对设计进程造成了一定的影响。例如,程序调试时,由于粗心,在写程序时,将0(零)和字母O混淆,还有中文标点符号和英文标点符号混淆等。这样的错误很难发现,以至于花费了很多时间。
短暂的单片机学习,有种意犹未尽之感,在这次课设中,加深了单片机相关知识的理解,之前的模棱两可已经不存在,这种感觉很好。由于自身水平有限,本次报告还有许多部分未能详细分析,在此仅作简单了解和认识。
本文采用的RS-232标准实现单片机与单片机之间的串行通信。RS-232是目前最常用的一种串行通讯接口。由于RS-232-C接口标准出现较早,难免有不足之处。
主要表现在:
1、接口的信号电平值较高,易损坏接口电路的芯片,又因为与TTL电平不容,故需使用电平转换电路才能与TTL电路连接。
2、传输速率较低,在异步传输时,波特率为20Kbps。
3、接口使用一根信号线和一根信号返回线而构成共地的传输形式,这种共地 传输容易产生共模干扰,所以抗噪声干扰性弱。
4、传输距离有限,最大传输距离标准值为50英尺,实际上也只能用在50米 左右。
因此建议使用RS-485标准实现,RS-485接口具有良好的抗噪声干扰性,长的传输距离和多站能力等优点就使其成为首选的串行接口。
12
参考文献
[1] 马忠梅.单片机的C语言应用程序设计.北京:北京航空航天大学出版社,2003
[2] 杨子文.单片机原理及应用.西安:西安电子科技大学出版社,2006. [3] 郭惠 吴讯著 单片机C语言程序设计.北京:电子工业出版社2008 [4] 谭浩强. C程序设计.北京:清华大学出版社,2009.
[5] 孙近平 张大鹏著 51系列单片机原理、开发与应用实例.北京:中
国电力出版社,2009
[6] 张先庭.单片机原理、接口与C51应用程序设计.北京:国防工业出版社,2011.
[7] 陈涛著 单片机应用及C51程序设计.北京:机械工业出版社,2011
13
附录
1.主机程序清单
#include
={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xc0,0xf9,0xa4,0xb0,0x99,0x92};
#define KEY P1 unsigned char temp;
unsigned char pre_keyno = 16,keyno = 16; void key_scan(void);
void delay(unsigned int x) {
unsigned char i; while(x--) {
for(i = 0;i < 120;i++); }
}//字符发送函数
void putchar(unsigned char data1) {
SBUF = data1; //将待发送的字符送入发送缓冲器 while(TI == 0); //等待发送完成
14
TI = 0; //发送中断标志请0 }
void date_output(unsigned char date) {
putchar(date);
}//主函数 void main(void) {
unsigned char c = 0;
SCON = 0x50; //串口方式1 ,允许接收 TMOD = 0x20; //T1工作于方式2 PCON = 0x00; //波特率不倍增 TL1 = 0xfd; //波特率设置 TH1 = 0xfd; //
EA = 1; //开总中断 ES = 1; //开串口接收中断 TR1 = 1; //定时器开启 delay(200); delay(50); while(1) { while(1) {
P1 = 0xf0;
if(P1 != 0xf0) //扫描键盘获得按键序号 {
key_scan(); }
if(pre_keyno != keyno) {
15
date_output(TAB[keyno]);//显示,共阳极段码取反作为共阴极段码 } } } }
void revdata(void) interrupt 4 {
if(RI == 0) { //P1 = 0x00; return;
} //如果没有接收中断标志,返回 ES = 0; //关闭串口中断 RI = 0; //清串行中断标志位 temp = SBUF; //接收缓冲器中的字符
ES = 1; //开启串口中断 }
void key_scan(void) {
unsigned char i; //高4位置1,放入4行 KEY = 0x0f; delay(1);
//有键按下后,其中一列将变为低电平 i = KEY^0x0f;
//判断按键发生在哪一列 switch(i) {
case 1: keyno = 0;break;
16
case 2: keyno = 1;break; case 4: keyno = 2;break; case 8: keyno = 3;break;
default: keyno = 16; //无键按下 }
//低四位置1,放入4列 KEY = 0xf0; delay(1); //
i = KEY >> 4 ^ 0x0f; //对0-3行分别附件起始值 switch(i) {
case 1: keyno += 0;break; case 2: keyno += 4;break; case 4: keyno += 8;break; case 8: keyno += 12;break; }
delay(100); }
2.从机程序清单
#include
void delay(unsigned int x) {
unsigned char i;
17
while(x--) {
for(i = 0;i < 120;i++); } }
void explanation(unsigned char date) { }
//字符发送函数
void putchar(unsigned char data1) {
SBUF = data1; //将待发送的字符送入发送缓冲器 while(TI == 0); //等待发送完成 TI = 0; //发送中断标志请0 } //主函数 void main(void) {
SCON = 0x50; //串口方式1 ,允许接收 TMOD = 0x20; //T1工作于方式2 PCON = 0x00; //波特率不倍增 TL1 = 0xfd; //波特率设置 TH1 = 0xfd; //
EA = 1; //开总中断 ES = 1; //开串口接收中断 TR1 = 1; //定时器开启 delay(200); delay(50); while(1)
18
DIG = date;
{ } }
19
正在阅读:
财经类11-08
广西来宾市2022届高三5月教学质量诊断性联合考试物理试卷04-08
远程学习者自主学习能力培养方法研究07-07
桌游 魔法骑士 Mage knight 游戏流程中文07-08
计算机网络练习题答案(2)11-02
市场营销学 第七章 产品管理05-11
我的中国梦怎么写02-17
工商窗口个人小结02-12
钳工练习题及答案10-11
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 南昌
- 串行
- 单片机
- 航空
- 之间
- 通信
- 实现
- 大学
- 232
- RS
- 综合实验-苯佐卡因的合成具体内容
- 重庆工商大学(我的毕业照)
- VF程序设计综合自测题
- 2009江苏高考数学科考试说明及典型题示例(完美word版).doc
- 《提高教学效率、减轻学生课业负担的实践研究》课题研究报告
- 上海市虹口区2016学年高三生物二模试卷及答案
- 环境微生物检测——采样方法 剧本
- 二年级数学下册脱式计算练习题
- 2014英语练习题
- 2018苏州一模(五)物理
- 最新2019年高考理综物理选择题专项训练含答案及解析共十五套
- 《双电桥测量低值电阻》实验报告
- 2016年福建事业单位面试题总汇
- quan
- 压缩语段之(新闻标题、导语、一句话新闻、评论) 学案
- 六年级语文下册第四单元检测题
- 财经法规 - 第一章
- 聚焦图形几何 关注核心素养
- 关于基层党支部对人才队伍建设的思考
- wellstar电源部分说明书