单片机间全双工通信.docx

上传人:b****6 文档编号:11937475 上传时间:2023-06-03 格式:DOCX 页数:22 大小:327.93KB
下载 相关 举报
单片机间全双工通信.docx_第1页
第1页 / 共22页
单片机间全双工通信.docx_第2页
第2页 / 共22页
单片机间全双工通信.docx_第3页
第3页 / 共22页
单片机间全双工通信.docx_第4页
第4页 / 共22页
单片机间全双工通信.docx_第5页
第5页 / 共22页
单片机间全双工通信.docx_第6页
第6页 / 共22页
单片机间全双工通信.docx_第7页
第7页 / 共22页
单片机间全双工通信.docx_第8页
第8页 / 共22页
单片机间全双工通信.docx_第9页
第9页 / 共22页
单片机间全双工通信.docx_第10页
第10页 / 共22页
单片机间全双工通信.docx_第11页
第11页 / 共22页
单片机间全双工通信.docx_第12页
第12页 / 共22页
单片机间全双工通信.docx_第13页
第13页 / 共22页
单片机间全双工通信.docx_第14页
第14页 / 共22页
单片机间全双工通信.docx_第15页
第15页 / 共22页
单片机间全双工通信.docx_第16页
第16页 / 共22页
单片机间全双工通信.docx_第17页
第17页 / 共22页
单片机间全双工通信.docx_第18页
第18页 / 共22页
单片机间全双工通信.docx_第19页
第19页 / 共22页
单片机间全双工通信.docx_第20页
第20页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

单片机间全双工通信.docx

《单片机间全双工通信.docx》由会员分享,可在线阅读,更多相关《单片机间全双工通信.docx(22页珍藏版)》请在冰点文库上搜索。

单片机间全双工通信.docx

单片机间全双工通信

湖北民族学院

信息工程学院

课程设计报告

 

题目:

单片机的全双工通信系统

 

课程:

单片机课程设计

专业:

电子信息科学与技术

班级:

0312411

学号:

*********

学生姓名:

指导教师:

 

年月日

信息工程学院课程设计任务书

学号

学生姓名

专业(班级)

设计题目

单片机间的全双工通信系统

串口通信最重要的参数是波特率、起始位、数据位、停止位和奇偶校验。

波特率:

是一个衡量通信速度的参数,表示每秒钟传送的bit的个数。

起始位:

当通信线上没有数据被传送时处于逻辑“1”状态,当发送设备要发送一个数据时,先发送一个逻辑“0”信号,这个低电平就是起始位,起始位通过通信线传向接收设备,接收端检测到这个低电平后,就确认开始接收数据了。

起始位的作用是使通信双方在传送数据前协调同步。

数据位:

是衡量通信中实际数据位的参数,当计算机发送一个信息包,实际的数据不会是8位的,标准的值是5、7或8位,如何设置取决于要传送的信息。

每个包是指一个字节,包括开始/停止位、数据位和奇偶校验位,由于实际数据位取决于通信协议的选取,术语“包”指任何通信的情况。

停止位:

用于表示单个包的最后一位。

典型的值为1、1.5和2位,它是一个数据的结束标志,接收端接收到停止位后,通信线路上会回复逻辑“1”的状态,知道下一个起始位的到来。

奇偶校验位:

在串行通信中一种简单的检错方式,有四种方式:

偶、奇、高和低。

对于偶和检验的情况,串口会设置检验位,用一个值确保传输的数据有偶个或者奇个逻辑高位。

高位和低位不真正的检查数据,简单置位逻辑高或者逻辑低校验,这样使得接收设备能够知道一个位的状态,有机会判断是否有噪声干扰了通信或者是否传输和接收数据是否不同步。

 

1按下甲机的按钮后,能够很好的对乙机进行控制。

2按下乙机的按钮后,能够很好的对甲机进行控制。

 

1]谭浩强:

《C程序设计(第二版)》,清华大学出版社,2001年。

[2]胡汉才:

《单片机原理及接口技术》,清华大学出版社,1996年。

[3]谢沅清、解月珍:

《电子技术基础》,人民邮电出版社,1999年。

[4]孙江宏:

《Protel99电路设计与应用》,机械工业出版社,2001年。

[5]何立民:

《单片机应用技术选编》,北京航空航天大学出版社,2006年。

[6]张毅刚、彭喜源:

《MCS-51单片机应用设计》,哈尔滨工业大学出版社,1997年。

 

年月日

学生姓名:

学号:

专业(班级):

课程设计题目:

单片机的全双工通信系统

 

 

成绩:

指导教师:

年月日

信息工程学院课程设计成绩评定表

摘要

随着电子技术的不断发展,单片机的应用范围越来越广泛,在工业控制、家电控制、数据采集等多个领域都有着十分重要的作用,由于单片机的使用,越来越多的系统开始向智能化方向发展。

而单片机自带的串口功能可以实现其与其他外设MCU或PC机之间的通信,这样就使得控制系统更加的方便实用,利用单片机的串口通信可以实现数据的远程传输、数据分析与系统综合控制功能,尤其是在数据量比较大的场合下,利用一个主机向各个从机发送控制指令是一个很好的解决方案,在这个过程中,串口通信是实现单片机与单片机之间通信的关键。

本文介绍了基于单片机的串口通信设计,通过按键输入数据,单片机通过串口将数据发送给另一个单片机,同时发送的数据均可在2个单片机控制的数码管上显示,以检测串口通信的准确性。

本文介绍的方法简单易懂,可广泛应用于各种串口数据通信系统中。

关键词:

单片机数据串口通信设计

 

1任务提出与方案论证

1.1任务提出

数据通信是通信技术和计算机技术相结合而产生的一种新的通信方式。

要在两地之间传输信息必须由传输信道,根据传输媒体的不同,有有线数据通信与无线数据通信之分,但它们都是通过传输信道将数据终端与计算机连接起来,而使不同地点的数据终端实现软、硬件和信息资源的共享。

数据通信的发展主要分为五个阶段。

第一阶段:

以语言为主,通过人力、马力、烽火等原始手段传递信息;第二阶段:

文字、邮政;第三阶段:

印刷;第四阶段:

电报、电话、广播;第五阶段:

信息时代,除语言信息外,还有数据、图像、文本等。

串口通信是按位发送和接收字节,尽管比按字节的并行通信慢,但是串口可以在使用一根线发送数据的同时利用另一根线接收数据,很简单且能实现远距离通信,长度可以达到1200米。

串行通信是指计算机主机与外设之间以及主机系统与主机系统之间数据的串行传送。

使用串口通信时,发送和接收到的每一个字符实际上都是一次一位的传送的,每一位为1或者为0。

串行通信只使用一条数据线,将数据一位一位地依次传输,每一位数据占据一个固定的时间长度。

其只需要少数几条线就可以在系统间交换信息。

最被人们熟悉的串行通信技术标准是EIA-232、EIA-422和EIA-485,目前EIA-232是PC机与通信工业中应用最广泛的一种串行接口。

EIA-422标准全称是“平衡电压数字接口电路的电气特性”,它定义了一种平衡通信接口,将传输速率提高到了10Mbps,传输距离延长到了1219米,并允许在一条平衡总线上最多连接10个接收器。

1983年EIA在EIA-422的基础上制定了EIA-485标准,增加了多点、双向通信能力,即允许多个发送器连接到同一条总线上,同时增加了发送器的驱动能力和冲突保护特性,扩展了总线共模范围,后命名为TIA/EIA-485-A标准。

1.2设计方案

在2个相同单片机之间利用串口进行通信,通过按键输入要发送的数据,该数据为数字,并可在数码管上显示出来,设置完后通过串口通信发送给另一个单片机,另一个单片机接收到后在数码管上显示出来,2个单片机可以互相发送数据,通过2个单片机系统的数码管显示的数字可以判断串口通信发送的数据的正确性。

系统设计框图如图3.1所示。

本设计主要由按键输入电路、单片机控制电路和数码管显示电路组成,2个单片机的电路图完全相同,实现的功能也相同,所以本文只介绍其中一块单片机电路的设计方法和串口通信的原理。

 

图1-2系统设计框图

 

2总体设计

2.1硬件设计

系统总体电路图:

图2-1系统总体设计电路

硬件电路包括:

按键输入电路,AT89C51控制电路,MAX232电平转换电路,led显示电路,数码管显示电路,LM1602显示电路这几大部分。

Altiumdesigner软件的使用

1、建立数据库。

打开Altiumdesigner软件后,在“文件”标题栏里选择“新建”选项,在弹出的对话框里选择DocumentFolder,然后点击OK即可。

2、打开Documents,选择“文件”标题栏里选择“新建”选项,在弹出的对话框里选择“SchematicDocument”选项,建立原理图文件,并给原理图文件命名。

3、设计电路原理图。

利用Altiumdesigner里的元器件库完成电路原理图的绘制。

4、检查原理图电性能可靠性。

选择工具下面的电气规则检查,在“RuleMatrix”中选择要进行电气检查的项目,设置好各项后,在“SetupElectricalRluesCheck”对话框上选择“OK”即可运行电气规则检查,检查结果将被显示到界面上。

2.2软件设计

KeilC51集成开发环境

1、源代码编辑器:

uVision4编辑器包含了所有用户熟悉的特性。

彩色语法显像和文件辩识都对C源代码进行和优化。

可以在编辑器内调试程序,它能提供一种自然的调试环境,使你更快速地检查和修改程序。

2、断点:

uVision4允许用户在编辑时设置程序断点(甚至在源代码未经编译和汇编之前)。

用户启动V4调试器之后,断点即被激活。

断点可设置为条件表达式,变量或存储器访问,断点被触发后,调试器命令或调试功能即可执行。

在属性框中可以快速浏览断点设置情况和源程序行的位置。

代码覆盖率信息可以让你区分程序中已执行和未执行的部分。

3、调试函数语言:

uVision4中,可以编写或使用类似C的数语言进行调试。

<1>、内部函数:

如printf,memset,rand及其它功能的函数。

<2>、信号函数:

模拟产生CPU的模拟信号和脉冲信号。

<3>、用户函数:

扩展指令范围,合并重复动作。

4、变量和存储器:

用户可以在编辑器中选中变呈来观察其取值。

双层窗口显示,可进行以下调整:

当前函数的局部变量;用户在两个不同watch窗口页面上的自定义变量;堆栈调用(callstack)页面上的调用记录;不同格式的四个存储区。

C51允许用户使用C语言编写中断服务程序,快速进、出代码和寄存器区的转换功能使C语言中断功能更加高效。

可再入功能是用关键字来定义的。

多任务,中断或非中断的代码要求必须具备可再入功能。

C51提供了灵活高效的指针。

  通用指针用3个字节来存储存储器类型及目标地址,可以在8051的任意存储区内存取任何变量。

特殊指针在声明的同时已指定了存储器类型,指向某一特定的存储区域。

由于地址的存储只需1-2字节,因此,指针存取非常迅速。

KeilC51兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构上、可读性、可维护性上有明显的优势,因而易学易用。

3详细设计及仿真

3.1按键控制电路

常用的按键有独立键盘和矩阵键盘,矩阵式键盘分行和列,通过行和列来确定某一个按键的位置,适用于多键盘操作,可以节省单片机的I/O口。

独立式键盘是直接将按键连接至单片机I/O口,单片机通过检测I/O的电平来判断按下的按键,编程简单,但是占用I/O资源比较多。

本设计中只需要用到4个按键来实现数据的输入,所以使用独立式键盘即可。

按键输入电路如图4.1所示。

单片机的P1.0-P1.3引脚用来控制4路按键,4个按键分别代表4组数据“1、12、123、1234”,不同长度的数据可以更充分的检测串口数据传输的准确性。

图3-1按键控制电路

3.2单片机控制电路

该部分电路设计如图4.2所示。

单片机的时钟的频率直接影响着单片机的速度和系统的稳定性。

AT89S51片内由一个反相放大器构成振荡器,可以通过它俩产生时钟。

常用的单片机产生时钟的方法有两种:

内部时钟方式和外部时钟方式。

本设计选用外部时钟方式,单片机内部XTAL1引脚为高增益反向放大器的输入端,XTAL2为输出端,在这2个引脚之间接石英晶振和电容,就可以构成一个稳定的自激振荡器。

外接晶振振荡频率不大于单片机的最大工作频率即可。

如果有串行通信,需要选择振频率除以串行通信频率可以整除的晶振。

本设计选用的11.0592MHz晶振。

复位是单片机的初始化操作,复位信号是高电平有效,复位操作有上电自动复位、按键电平复位、外部脉冲复位和自动复位四种方式。

在本设计中复位电路采用按键电平方式,使RST引脚经过10u电解电容与VCC电源接通,同时经过电阻与地连接而实现,按下按键时,RST引脚置高,实现复位功能。

单片机的P1.0-P1.3引脚控制4个按键用于输入数字,P2口控制数码管显示电路,单片机之间的通信通过串行口RXD和TXD。

3.3MAX232电平转换电路

MAX232芯片是美信(MAXIM)公司专为RS-232标准串口设计的单电源电平转换芯片,使用+5v单电源供电。

第一部分是电荷泵电路。

由1、2、3、4、5、6脚和4只电容构成。

功能是产生+12v和-12v两个电源,提供给RS-232串口电平的需要。

第二部分是数据转换通道。

由7、8、9、10、11、12、13、14脚构成两个数据通道。

其中13脚(R1IN)、12脚(R1OUT)、11脚(T1IN)、14脚(T1OUT)为第一数据通道。

8脚(R2IN)、9脚(R2OUT)、10脚(T2IN)、7脚(T2OUT)为第二数据通道。

TTL/CMOS数据从11引脚(T1IN)、10引脚(T2IN)输入转换成RS-232数据从14脚(T1OUT)、7脚(T2OUT)送到电脑DB9插头;DB9插头的RS-232数据从13引脚(R1IN)、8引脚(R2IN)输入转换成TTL/CMOS数据后从12引脚(R1OUT)、9引脚(R2OUT)输出。

第三部分是供电。

15脚GND、16脚VCC(+5v)。

图3-3MAX232电平转换电路

3.4显示电路

本设计中选用数码管作为显示器件。

LED数码管由八只发光二极管组成,编号是a、b、c、d、e、f、g、h,分别和同名管脚相连,当发光二极管导通时发光。

每个二极管就是一个笔划,若干个二极管发光时,就构成一个显示字符。

若将单片机的I/O口与数码管的a-g和h相连,高电平(对应共阴极数码管)或低电平(对应共阳极数码管)的位对应的发光二极管就会亮,这样,I/O口输出不同的代码就可以控制数码管显示不同的字符。

为减少电路板中的焊接线,本设计选用4位一体数码管,采用串行输入并行输出的8位移位寄存器74LS164进行驱动输出,单片机的P2.6和P2.7引脚分别作为74LS164的数据线和CLK信号。

74LS164将输入的串行数据锁存在并行输出端,通过这些并行口线驱动数码管的各字段。

数码管选用共阳型,当74LS164的某个输出端口为低电位时,数码管对应的字段将被点亮。

软件设计中数码管采用循环送显的方式,单片机通过控制9012来选择要送显的数码管,当需要某一位数码管显示时,该数码管相对应的9012三极管基极所连接的单片机引脚输出高电平,三极管导通,进而选通该位数码管。

74LS164的输出Q0-Q7分别对应接到数码管的a-h端口。

单片机将数据写入到74LS164内部锁存,再由74LS164将显示译码送入该位数码管个码段显示,从而实现了单片机控制数码管显示的功能。

图3-4显示电路

3.5仿真结果

图3-5总体仿真电路

 

4总结

通过这次的课程设计,使我对单片机有了更深的认识,从理论和实践上都得到了很大的提高,所以这次任务的完成使我学到了很多东西。

首先,丰富了自己的知识面,学到了以前没学懂的东西,具体了解到怎样去完成一个电路的设计,巩固了汇编语言和C语言的使用能力,并且提高了自己分析问题的能力和创新能力,使自己在硬件和软件设计方面树立了信心,为以后从事这方面的工作打好了基础,这也是这次课程设计的最大收获。

本文介绍了一种单片机之间串口通信的设计方法,论文首先介绍了串口通信的基础知识主要是串口通信的分类和重要的参数,接着提出了可行的设计方案,并从硬件电路设计和软件程序设计两个方面详细介绍了整个设计的原理及设计过程,同时验证了方案的可行性。

当然,本设计可能还存在许多不足之处,敬请各位老师批评指正,本人将非常感激!

 

参考文献

[1]谭浩强:

《C程序设计(第二版)》,清华大学出版社,2001年。

[2]胡汉才:

《单片机原理及接口技术》,清华大学出版社,1996年。

[3]谢沅清、解月珍:

《电子技术基础》,人民邮电出版社,1999年。

[4]孙江宏:

《Protel99电路设计与应用》,机械工业出版社,2001年。

[5]何立民:

《单片机应用技术选编》,北京航空航天大学出版社,2006年。

[6]张毅刚、彭喜源:

《MCS-51单片机应用设计》,哈尔滨工业大学出版社,1997年。

附录

甲机程序:

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitLED1=P1^0;

sbitLED2=P1^3;

sbitK1=P1^7;

sbitK3=P1^6;

ucharOperation_No=0;

ucharcodeDSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

voidDelayMS(uintms)

{

uchari;

while(ms--)

for(i=0;i<120;i++);

}

voidPutc_to_SerialPort(ucharc)

{

SBUF=c;

while(TI==0);

TI=0;

}

voidmain()

{

LED1=LED2=1;

P0=0x00;

SCON=0x50;

TMOD=0x20;

PCON=0x00;

TH1=0xfd;

TL1=0xfd;

TI=RI=0;

TR1=1;

IE=0x90;

while

(1)

{

DelayMS(100);

if(K1==0)

{

while(K1==0);

Operation_No=(Operation_No+1)%4;

switch(Operation_No)

{

case0:

Putc_to_SerialPort('X');

LED1=LED2=1;

break;

case1:

Putc_to_SerialPort('A');

LED1=~LED1;LED2=1;

break;

case2:

Putc_to_SerialPort('B');

LED2=~LED2;LED1=1;

break;

case3:

Putc_to_SerialPort('C');

LED1=~LED1;LED2=LED1;

break;

}

}

}

}

voidSerial_INT()interrupt4

{

if(RI)

{

RI=0;

if(SBUF>=0&&SBUF<=9)

P0=DSY_CODE[SBUF];

else

P0=0x00;

}

}

乙机程序:

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitLED1=P1^0;

sbitLED2=P1^3;

sbitK2=P1^7;

ucharNumX=-1;

sbitRS=P2^0;

sbitRW=P2^1;

sbitE=P2^2;

sbitBF=P0^7;

voiddelay1ms()

{

unsignedchari,j;

for(i=0;i<10;i++)

for(j=0;j<10;j++)

;

}

voiddelay(unsignedcharn)

{

unsignedchari;

for(i=0;i

delay1ms();

}

unsignedcharBusyTest(void)

{

bitresult;

RS=0;

RW=1;

E=1;

_nop_();

_nop_();

_nop_();

_nop_();

result=BF;

E=0;

returnresult;

}

voidWriteInstruction(unsignedchardictate)

{

while(BusyTest()==1);

RS=0;

RW=0;

E=0;

_nop_();

_nop_();

P0=dictate;

_nop_();

_nop_();

_nop_();

_nop_();

E=1;

_nop_();

_nop_();

_nop_();

_nop_();

E=0;

}

voidWriteAddress(unsignedcharx)

{

WriteInstruction(x|0x80);

}

voidWriteData(unsignedchary)

{

while(BusyTest()==1);

RS=1;

RW=0;

E=0;

P0=y;

_nop_();

_nop_();

_nop_();

_nop_();

E=1;

_nop_();

_nop_();

_nop_();

_nop_();

E=0;

}

voidLcdInitiate(void)

{

//elay(15);

WriteInstruction(0x38);

delay(5);//?

?

5ms

WriteInstruction(0x38);

delay(5);

WriteInstruction(0x38);

delay(5);

WriteInstruction(0x0c);

delay(5);

WriteInstruction(0x06);

delay(5);

WriteInstruction(0x01);

delay(5);

}

voidDelayMS(uintms)

{

uchari;

while(ms--)for(i=0;i<120;i++);

}

//

voidmain()

{

LED1=LED2=1;

SCON=0x50;

TMOD=0x20;

TH1=0xfd;

TL1=0xfd;

PCON=0x00;

RI=TI=0;

TR1=1;

IE=0x90;

while

(1)

{

DelayMS(100);

if(K2==0)

{

while(K2==0);

NumX=++NumX%11;

SBUF=NumX;

while(TI==0);

TI=0;

}

}

}

voidSerial_INT()interrupt4

{

inti;

if(RI)

{

RI=0;

switch(SBUF)

{if(K2==0)

break;

case'X':

LcdInitiate();

while

(1)

{

WriteAddress(0x00);

WriteData('w');

WriteData('x');

WriteData('w');

WriteData('');

WriteData('h');

WriteData('b');

WriteData('m');

WriteData('y');

WriteAddress(0x40);

WriteData('q');

WriteData('x');

WriteData('a');

WriteAddress(0x47);

WriteData('q');

WriteData('x');

WriteData('a');

}

cas

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2