资源描述
单片机原理与应用课程设计任务书
学 院
计算机与信息工程学院
专 业
网络工程
课程名称
单片机原理与应用学年设计
题 目
双机间的串口双向通信
完成期限
自2014年12月29日 至 2015年1月4日 共1周
内
容
及
任
务
一、项目的目的
实现双机串口双向通信,验证双机通信原理,提高动手能力,检验知识掌握情况。
二、项目任务的主要内容和要求
两个单片机(甲机和乙机)之间采用方式1双向串行通信。
(1) 甲机的K1按键可通过串口控制乙机的LED1点亮,LED2灭,甲机的K2按键控制乙机LED1
灭,LED2点亮,甲机的K3按键控制乙机的LED1和LED2全亮。
(2) 乙机的K2按键课控制串口向甲机发送按下的次数,按下的次数通过串口显示在甲机P0口的数码管上。
三、项目设计思路
使用甲乙两片89C51双机通信。发送方的数据由串行口输出,经过电平转换输出,经过传输线将信号传送到接收端。接收方也进行电平转换后,信号到达接收方串行口的接收端。接受方接收后,在数码管上显示接收的信息。
本设计是硬件电路和软件编程相结合的设计方案,选择合适的编程语言是一个重要的环节。在单片机的应用系统程序设计时,常用的是汇编语言和C语言。C语言虽然执行效率没有汇编语言高,但语言简洁,使用方便,灵活,运算方便,表达类型多样化,数据结构类型丰富,具有结构化的控制语句,程序设计自由度大,有很好的可重用性,可移植性等特点。所以我们采用C语言编写了程序。
四、具体成果形式和要求
完成设计说明书,提交仿真电路和可执行代码。
进
度
安
排
起止日期
工作内容
12.29-12.31
查资料,构建主题思想,绘制电路图
1.1-1.2
代码实现
1.3-1.4
代码调试和文档资料
主
要
参
考
资
料
[1]张毅刚,彭喜元,姜守达,乔立岩. 新编MCS-51单片机应用设计. 哈尔滨工业大学出版社. 2009.08
[2]李全利.单片机原理与接口技术.高等教育出版社.2009.01
[3]蔡明文,冯先成.单片机课程设计.华中科技出版社.2007.03
[4]范红刚,魏学海,任思璟.51单片机自学笔记.北京航空航天大学出版社.2010.01
指导教师
意见
(签字):
年 月 日
系(教研室)主任意见
(签字):
年 月 日
单片机原理与应用学年设计说明书
学院名称: 计算机与信息工程学院
班级名称:
学生姓名:
学 号: 2012211369
题 目: 双机间的串口双向通信
指导教师
姓 名:
起止日期: 2014.12.29至2015.1.4
一、 绪论
随着电子技术的飞速发展,单片机也步如一个新的时代,越来越多的功能各异的单片机为我们的设计提供了许多新的方法与思路。
对于一些场合,比如:复杂的后台运算及通信与高实时性前台控制系统、软件资源消耗大的系统、功能强大的低消耗系统、加密系统等等。如果合理使用多种不同类型的单片机组合设计,可以得到极高灵活性与性能价格比,因此,多种异型单片机系统设计渐渐成为一种新的思路,单片机技术作为计算机技术的一个重要分支,由于单片机体积小,系统运行可靠,数据采集方便灵活,成本低廉等优点,在通信中发挥着越来越重要的作用。但在一些相对复杂的单片机应用系统中,仅仅一个单片机资源是不够的,往往需要两个或多个单片机系统协同工作。这就对单片机通信提出了更高要求。
单片机之间的通信可以分为两大类:并行通信和串行通信。串行通信传输线少,长距离传输时成本低,且可以利用数据采集方便灵活,成本低廉等优点,在通信中发挥着越来越重要的作用。所以本系统采用串行通信来实现单片机之间可靠的,有效的数据交换。
二、相关知识
2.1 双机通信介绍
两台机器的通信方式可分为单工通信、半双工通信、双工通信,他们的通信原理及通信方式为:
单工通信:是指消息只能单方向传输的工作方式。单工通信信道是单向信道,发送端和接收端的身份是固定的,发送端只能发送信息,不能接收信息;接收端只能接收信息,不能发送信息,数据信号仅从一端传送到另一端,即信息流是单方向的。通信双方采用单工通信属于点到点的通信。根据收发频率的异同,单工通信可分为同频通信和异频通信。
半双工通信:这种通信方式可以实现双向的通信,但不能在两个方向上同时进行,必须轮流交替地进行。也就是说,通信信道的每一段都可以是发送端,也可以是接端。但同一时刻里,信息只能有一个传输方向。如日常生活中的例子有步话机通信等。
双工通信:双工通信是指在同一时刻信息可以进行双向传输,和打电话一样,说的同时也能听,边说边听。这种发射机和接收机分别在两个不同的频率上能同时进行工作的双工机也称为异频双工机。双工机的特点是使用方便,但线路设计较复杂,价格也较高。
2.2单片机AT89C51介绍
AT89C51是一个低功耗,高性能CMOS 8位单片机,片内含8k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准 MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89C51可为许多嵌入式控制应用系统提供高性价比的解决方案。
AT89C51具有如下特点:40个引脚,8k Bytes Flash片内程序存储器,256 bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。
另外,AT89C51 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结, 单片机一切工作停止,直到下一个中断或硬件复位为止。
AT89C51芯片DIP双列直插式封装引脚如图1.1所示。
图1.1 AT89C51引脚排列
P0 口:P0口是一个8位漏极开路的双向I/O口。作为输出口,每位能驱动8个TTL逻辑电平。对P0端口写“1”时,引脚用作高阻抗输入。当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。在这种模式下,P0具有内部上拉电阻。
P1 口:P1 口是一个具有内部上拉电阻的8 位双向I/O 口,P1 输出缓冲器能驱动4 个 TTL 逻辑电平。对P1 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。
引脚口第二功能如下:
P1.0/T2(定时器/计数器T2的外部计数输入),时钟输出
P1.1/T2EX(定时器/计数器T2的捕捉/重载触发信号和方向控制)
P1.5/MOSI(在系统编程用)
P1.6/MISO(在系统编程用)
P1.7/SCK(在系统编程用)
P2 口:P2口是一个具有内部上拉电阻的8 位双向I/O 口,P2 输出缓冲器能驱动4 个TTL逻辑电平。对P2 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。
在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVX @DPTR)时,P2 口送出高八位地址。在这种应用中,P2 口使用很强的内部上拉发送1。在使用8位地址(如MOVX @RI)访问外部数据存储器时,P2口输出P2锁存器的内容。
P3 口:P3 口是一个具有内部上拉电阻的8 位双向I/O 口,P2 输出缓冲器能驱动4 个TTL逻辑电平。对P3 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。 P3口亦作为AT89C51特殊功能(第二功能)使用。
引脚口第二功能如下:
P3.0/RXD(串行输入口)
P3.1/TXD(串行输出口)
P3.2/INTO(外中断0)
P3.3/INT1(外中断1)
P3.4/TO(定时/计数器0)
P3.5/T1(定时/计数器1)
P3.6/WR(外部数据存储器写选通)
P3.7/RD(外部数据存储器读选通)
此外,P3口还接收一些用于FLASH闪存编程和程序校验的控制信号。
RST——复位输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平将是单片机复位。
ALE/PROG——当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。一般情况下,ALE仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个ALE脉冲。
如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,可禁止ALE操作。该位置位后,只有一条MOVX和MOVC指令才能将ALE激活。此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE禁止位无效。
PSEN——程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当AT89C51由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲,在此期间,当访问外部数据存储器,将跳过两次PSEN信号。
EA/VPP——外部访问允许,欲使CPU仅访问外部程序存储器(地址为0000H-FFFFH),EA端必须保持低电平(接地)。需注意的是:如果加密位LB1被编程,复位时内部会锁存EA端状态。
如EA端为高电平(接Vcc端),CPU则执行内部程序存储器的指令。
2.3 串行通信简介
2.3.1串行通信的特点
在远程通信和计算机科学中,串行通信是指在计算机总线或其他数据通道上,每次传输一个位元数据,并连续进行以上单次过程的通信方式。与之对应的是并行通信,它在串行端口上通过一次同时传输若干位元数据的方式进行通信。一位接一位地顺序传送。这样一个字节的数据要分8次由低位到高位按顺序一位位地传送。由此可见,串行通信的特点如下:1、节省传输线,这是显而易见的。尤其是在远程通信时,此特点尤为重要。这也是串行通信的主要优点;2、数据传送效率低。与并行通信比,这也这是显而易见的。这也是串行通信的主要缺点。
串行通信被用于长距离通信以及大多数计算机网络,在这些应用场合里,电缆和同步化使并行通信实际应用面临困难。凭借着其改善的信号完整性和传播速度,串行通信总线正在变得越来越普遍,甚至在短程距离的应用中,其优越性已经开始超越并行总线不需要串行化元件等缺点。
2.3.2 串行通信技术标准
a数据传输率
(1)比特率和波特率:比特率是指每秒传输的二进制位数,用bps(bit/s)表示。波特率是指每秒传输的符号数,若每个符号所含的信息量为1比特,则波特率等于比特率。在计算机中,一个符号的含义为高低电平,它们分别代表逻辑“1”和逻辑“0”,所以每个符号所含的信息量刚好为1比特,因此在计算机通信中,常将比特率称为波特率,即:1波特(B)=1比特(bit)=1位/秒(1bps)例如:电传打字机最快传输率为每秒10个字符/秒,每个字符包含11个二进制位,则数据传输率为:11位/字符×10个字符/秒=110位/秒=110波特(Baud)计算机中常用的波特率是:110、300、600、1200、2400、4800、9600、19200、28800、33600,目前最高可达56Kbps.
(2)位时间Td:位时间是指传送一个二进制位所需时间,用Td 表示。Td = 1/波特率 = 1/B
(3)发送时钟和接收时钟
在串行通信中,二进制数据以数字信号的信号形式出现,不论是发送还是接收,都必须有时钟信号对传送的数据进行定位。在TTL标准表示的二进制数中,传输线上高电平表示二进制1,低电平表示二进制0,且每一位持续时间是固定的,由发送时钟和接收时钟的频率决定。
1)发送时钟
发送数据时,先将要发送的数据送入移位寄存器,然后在发送时钟的控制下,将该并行数据逐位移位输出。通常是在发送时钟的下降沿将移位寄存器中的数据串行输出,每个数据位的时间间隔由发送时钟的周期来划分。
2)接收时钟
在接收串行数据时,接收时钟的上升沿对接收数据采样,进行数据位检测,并将其移入接收器的移位寄存器中,最后组成并行数据输出。
b波特率因子
接收时钟和发送时钟与波特率有如下关系:F=n×B这里F是发送时钟或接收时钟的频率;B是数据传输的波特率;n称为波特率因子。设发送或接收时钟的周期为Tc,频率为F的位传输时间为Td,则:Tc=1/F,Td =1/B 得到:Tc=T/n在实际串行通信中,波特率因子可以设定。在异步传送时,n = 1,16,64实际常采n=16,即发送或接收时钟的频率要比数据传送的波特率高n倍。在同步通信中波特率因子必等于1。
三、硬件设计
3.1 系统元器件需求
在桌面上双击图标打开ISIS 7 Professional窗口。在器件选择按钮中单击“P”按钮,或执行菜单命令“库”→“拾取元件/符号”,添加如下表所示的元件。
表1元件选择表
51单片机AT89C51 二片
晶体CRYSTAL 二只
瓷片电容CAP 六只
电解电容CAP-ELEC 二只
电阻RES 五只
开关BUTTON 六只
七段数码管7SEG-COM-CAT-GRN 一只
反相器 74LS05 四只
灯LED-GREEN 二只
在ISIS原理图编辑窗口中放置元件,再单击工具箱中元件终端图标,在对象选择器中单击POWER和GROUND放置电源和地。放置好元件后,布好线。左键双击各元件,设置相应元件参数,完成电路图的设计。
3.2 系统硬件电路设计图
3.2.1整体电路设计
图3.1 整体电路
将数码管与单片机U1的P0口连接构成系统的开关记数显式电路的部分;将开关与单片机P3接口连接组成系统的按键电路,用来对显示器的控制;LED的段选端与单片机U2的P2口连接构成系统的LED显示系统; 单片机左边部分电路与单片机构成系统的复位电路。
3.2.2 控制电路设计
图3.2控制电路设计图
将开关K2,K3分别连接两个反相器,并分别把两个开关连接P1.0和P1.1;将K1连接P3.2,三个开关接地,此电路为开关分别控制两个LED灯亮。开关控制电路设计图如图3.2所示。
3.2.3 复位电路
图3.3 复位电路图
将元器件如电路设计图如图3.3所示连接并 与单片机相连,构成复位电路。如果实现了灯的亮灭控制,点击图3.3中的开关,使电路恢复到未开始状态
3.2.4 显示电路
图3.4 系统显示部分电路设计图
将LED数码显示管的段选端与单片机的P0口相连,由于数码管采用的是动态显示,所以通过对P0的8位二进制数据的改变使数码显示管动态显示;将LED的位选端与单片机的P2口连接使LED数码显示管不断的到位选信号在与数选信号不断的配合下显示开关按键次数数据。系统显示部分电路设计图如图3.4所示。
四、程序源代码
4.1程序流程图
主程序开始
从机应答
程序初始化
主机发送信号开关按下
主机发送数据
输出完成?
清除标志位
未应答
未完成
图4.1发送端程序流程图
主程序开始
接收完成?
程序初始化
接收数据
未完成
发送信号
接收完成?
未完成
清除标志位
显示
重新接收
图4.2 接收方程序流程图
图4.1,4.2所示为系统软件系统主机与从机流程图,实现双机通信
4.2 源程序(见附录)
五、Proteus软件仿真
用Keil软件编译程序生成可执行文件.hex文件后,在Proteus文件中在单片机里加入Keil软件中生成的hex文件,然后仿真测试。显示电路功能如下所示。
图5.1 开关控制LED灯亮灭图
图5.2数码管显示开关按键次数图
Hex文件烧入到单片机中后,开始运行电路图,点击开关K1,K2,K3,实现LED灯1,2的点亮。U2的K2开关点击次数可以再数码管显示,系统的电路及显示效果均到达设计要求。
六、结束语
通过此次课程设计,使我更加扎实的掌握了有关单片机方面的知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在,也暴露出了前期我在这方面的知识欠缺和经验不足。
在课程设计过程中,我们不断发现错误,不断改正,不断领悟,不断获取。这次课程设计终于顺利完成了,在设计中遇到了很多问题,最后在老师的指导下,终于游逆而解。在今后的学习实践过程中,一定要不懈努力,不能遇到问题就想到要退缩,一定要不厌其烦的发现问题所在,然后一一进行解决,只有这样,才能成功的做成想做的事,才能在今后的道路上劈荆斩棘,收获喜悦!
回顾起此课程设计,至今我仍感慨颇多,从理论到实践,在这段日子里,可以说得是苦多于甜,但是可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力参考文献
[1]张毅刚,彭喜元,姜守达,乔立岩. 新编MCS-51单片机应用设计. 哈尔滨工业大学出版社. 2009.08
[2]李全利.单片机原理与接口技术.高等教育出版社.2009.01
[3]蔡明文,冯先成.单片机课程设计.华中科技出版社.2007.03
[4]范红刚,魏学海,任思璟.51单片机自学笔记.北京航空航天大学出版社.2010.01
致 谢
本次课程设计是在老师的悉心指导下完成的,对于此次课程设计的过程于老师给予了极大地关心与帮助,并在课程设计的方向、内容等方面给予了热心的帮助与指导。老师渊博的专业知识,严谨的治学态度,精益求精的工作作风,诲人不倦的高尚师德,严以律己、宽以待人的崇高风范,朴实无华、平易近人的人格魅力对我影响深远。不禁使我树立了远大的学术目标、掌握了基本的研究方法,还是我明白了许多待人接物与为人处事的道理。
本论文从选题到完成,每一步都是在导师的指导下完成的,倾注了导师大量的心血。
论文的顺利完成,离不开各位老师、同学和朋友的关心和帮助。在此感谢组员的支持和帮助;没有他们的帮助和支持是没有办法在短时间内完成的,同窗之间的友谊永远长存。
在此,谨向导师表示崇高的敬意和衷心的感谢!
学生签名:
填表日期:
指导教师评语
成绩评定
指导教师签名:
填表日期:
18
附录:源程序
19
滁州学院学年设计
甲机程序
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit K1=P3^2;
sbit K2=P3^3;
sbit K3=P1^1;
uchar Operation_NO=0;
uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
void DelayMS(uint ms)
{
uchar i;
while(ms--)
for(i=0;i<120;i++);
}
void Putc_to_S(uchar c)
{SBUF=c;
while(TI==0);
TI=0;
}
void main()
{P0=0x00;
SCON=0x50;
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
PCON=0x00;
RI=0;
TI=0;
TR1=1;
IE=0x90;
while(1){
DelayMS(100);
if(K1==0){
Operation_NO=1;
}
if(K2==0){
Operation_NO=2;
}
if(K3==0){
Operation_NO=3;
}
switch(Operation_NO)
{case 1: Putc_to_S('A');
break;
case 2: Putc_to_S('B');
break;
case 3: Putc_to_S('C');
break;
}
}
}
void Serial_INT() interrupt 4
{if(RI)
{RI=0;
if(SBUF>=0&&SBUF<=9) P0=DSY_CODE[SBUF];
else P0=0x00;
}
}
乙机程序
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit LED1=P2^0;
sbit K2=P3^3;
sbit LED2=P2^1;
uchar NumX=-1;
void DelayMS(uint ms)
{uchar i;
while(ms--)
for(i=0;i<120;i++);
}
void main()
{
LED1=1;
LED2=1;
SCON=0x50;
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
PCON=0x00;
RI=0;
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;
}
}
}
void Serial_INT() interrupt 4
{
if(RI)
{
RI=0;
switch(SBUF)
{case'A':LED1=0;LED2=1;break;
case'B':LED1=1;LED2=0;break;
case'C':LED1=0;LED2=0;break;
}
}
}
21
展开阅读全文