吴建课程设计.docx
《吴建课程设计.docx》由会员分享,可在线阅读,更多相关《吴建课程设计.docx(24页珍藏版)》请在冰豆网上搜索。
吴建课程设计
课程论文
题目:
甲机通过串口控制乙机LED闪烁
的设计
学生姓名:
吴建
学生学号:
1214040232
系别:
电气信息工程学院
专业:
电子信息科学与技术
年级:
大二
任课教师:
朱士永
电气信息工程学院制
2014年6月
目录
摘要……………………………………………………2
一 设计目的…………………………………………3
二设计要求…………………………………………3
三方案论证…………………………………………3
3.1单片机介绍………………………………………3
3.2方案设计…………………………………………5
四理论设计…………………………………………9
4.1用CAD软件绘制的硬件原理图……………………9
4.2PCB制图及电路板制作……………………………11
五电路仿真及仿真结果分析………………………12
5.1电路调试…………………………………………12
5.2软件程序调试……………………………………13
5.3硬件调试…………………………………………20
六心得体会…………………………………………21
七参考文献…………………………………………22
甲机通过串口控制乙机LED闪烁的设计
吴建
朱士永
电气信息工程学院12级电技
(2)班
摘要
目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。
导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录像机、摄像机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。
更不用说自动控制领域的机器人、智能仪表、医疗器械了。
因此,单片机的学习、开发与应用尤为重要。
而51单片机是各类单片机中最为典型和最具代表性的一种。
本实验是基于MCS-51系列单片机所设计的,以单片机芯片AT89C51作为核心控制器,通过硬件电路的制作以及软件程序的编制,实现甲机控制乙机LED灯的闪烁,实现双机通信。
关键词:
单片机、AT89C51、双机通信、LED
一、课程设计目的
单片机专业课程设计是一项重要的实践性教育环节,是学生在校期间必须接受的一项工程训练。
在课程设计过程中,在教师指导和组员同学帮助下,应用工程的方法,通过一个课题的设计练习,可使学生初步体验单片机应用系统的设计过程、设计要求、完成的工作内容和具体的设计方法,了解必须提交的各项工程文件,也达到巩固、充实和综合运用所学知识解决实际问题的目的。
通过课程设计,应该能加强学生如下能力的培养:
1.独立工作能力和创造力;
2.综合运用专业及基础知识,解决实际工程技术问题的能力;
3.查阅图书资料、产品手册和各种工具书的能力;
4.工程绘图的能力;
5.编写技术报告和编写技术资料的能力。
二、设计要求
两片单片机(称为甲机和乙机)之间采用串行通信方式1来控制乙机的LED1闪烁,LED2闪烁,LED1和LED2同时闪烁,或者同时关闭LED1和LED2。
1.甲机发送字符“A”,控制乙机的LED1闪烁;
2.甲机发送字符“B”,控制乙机的LED2闪烁;
3.甲机发送字符“C”,控制乙机的LED1和LED2同时闪烁;
4.甲机停止发送任何命令字符,则乙机的LED1和LED2均停止闪烁。
三、方案论证
3.1单片机简介
①AT89C51是一种带4K字节闪存可编程可擦除只读存储器(FPEROM—FlashProgrammableandErasableReadOnlyMemory)的低电压、高性能CMOS8位微处理器,俗称单片机。
AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。
单片机的可擦除只读存储器可以反复擦除1000次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。
AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
②主要特性:
与MCS-51兼容;4K字节可编程闪烁存储器;寿命:
1000写/擦循环;数据保留时间:
10年;全静态工作:
0Hz-24MHz;三级程序存储器锁定;128×8位内部RAM;32可编程I/O线;两个16位定时器/计数器;5个中断源;可编程串行通道;低功耗的闲置和掉电模式;片内振荡器和时钟电路。
图3-1AT89C51芯片图
图3-2AT8952实物图
3.2方案设计
①直接利用89C51单片机芯片内部的串行口进行控制
AT89C51单片机内部有一个全双工的串行接收和发射缓冲器(SBUFF),这两个在物理上独立的接收发射器,即可以接收也可以发射数据,但接收缓冲器只可以读出不能写入,而发送缓冲器只能写入不能读出,它们的地址是99H。
这个通信口即可以用于网络通信,亦可以实现串行异步通信,还可以构成同步移位寄存器使用。
如果在串行口的输入输出引脚上加上电平转换器,就可以方便的构成标准的RS-232接口。
SBUF为串行口的收发缓冲器,它是一个可寻址的专用寄存器,其中包含了接收器和发射器寄存器,可以实现全双工通信。
但这两个寄存器具有同一地址(99H)。
MCS-51的串行数据传输很简单,只要向缓冲器写入数据就可发送数据。
而从接收缓冲器读出数据既可接收数据。
SCON控制寄存器,它是一个可寻址的专用寄存器,用于串行数据通信的控制,单元地址是98H,其结构格式如下:
表1寄存器SCON结构
SCON
D7
D6
D5
D4
D3
D2
D1
D0
SM0
SM1
SM2
REN
TB8
RB8
TI
RI
位地址
9FH
9EH
8DH
9CH
9BH
9AH
99H
98H
图3-3SCON寄存器结构
特殊功能寄存器PCON,主要是CHMOS型单片机的电源控制而设置的专用寄存器,单元地址为87H其机构格式如下表:
PCON
D7
D6
D5
D4
D3
D2
D1
D0
位符号
SMOD
GF1
GF0
PD
IDL
图3-4特殊功能寄存器PCON
图3-5方案一模块图
串行口工作方式的选择
波特率(BoudRate)就是在串口通信中每秒能够发送的位数。
MSC-51串行端口在四种工作模式下有不同的波特率计算方法。
其中,模式0和模式2波特率计算很简单;模式1和模式3的波特率选择相同,故在此仅以工作模式1为例来说明串口通信波特率的选择。
在串行端口工作于模式1,其波特率将由计时/计数器1来产生,通常设置定时器工作于模式2(自动再加模式)。
在此模式下波特率计算公式为:
波特率=(1+SMOD)*晶振频率/(384*(256-TH1))
其中,SMOD——寄存器PCON的第7位,称为波特率倍增位;TH1——定时器的重载值。
在选择波特率的时候需要考虑两点:
首先,系统需要的通信速率。
这要根据系统的运作特点,确定通信的频率范围。
然后考虑通信时钟误差。
使用同一晶振频率在选择不同的通信速率时通信时钟误差会有很大差别。
为了通信的稳定,我们应该尽量选择时钟误差最小的频率进行通信
②利用RS232、串行接口、89C51进行控制
RS-232简介
图3-6RS232电路
RS-232规定了自己的电气标准,由于它是在TTL电路之前研制的,因此它的电平不是+5V和地,而是采用负逻辑,即逻辑“0”:
+5V~—5V,逻辑“1”:
—5V~—15V。
因此RS-232不能和TTL电平直接相连,必须进行电平转换。
本设计选用MAX232。
管脚说明如下
①C0+、C0-、C1+、C1-是外接电容端;
②R1IN、R2IN是2路RS-232C电平信号接收输入端;
③RlOUT、R2OUT是2路转换后的TTL电平接收信号输出端,送8051的RXD接收端;
④TlIN、T2IN是2路TTL电平发送输入端,接8051的TxD发送端;
⑤TlOUT、T2OUT是2路转换后的发送RS-232C电平信号输出端,接传输线;
⑥V+经电容接电源+5V;
⑦V-经电容接地。
图3-7方案二模块图
图3-8方案二电路图
对方案一和方案二进行比较,虽然两个方案在控制和操作方面都比较相似,但是从现实的操作,对电路板制作,焊接以及工程成本的计算,方案一是优先方案。
四、理论设计:
4.1用CAD软件绘制的硬件原理图
图4-1硬件原理图
开关电路控制整个电路的电源和电源指示显示,方便在对电路进行操作时观察,控制。
图4-2开关电路图
按键电路:
控制LED灯的显示及复位按键,方便电路控制。
图4-3按键电路
LED显示电路:
电路控制显示程序结果。
图4-4LED显示电路
4.2PCB制图及电路板制作
根据电路硬件原理图画出PCB图,如下图所示:
图4-5PCB电路图
利用原理图设计工具绘制原理图,并且生成对应的网络表。
当然,有些特殊情况下,如电路板比较简单,已经有了网络表等情况下也可以不进行原理图的设计,直接进入PCB设计系统,在PCB设计系统中,可以直接取用零件封装,人工生成网络表。
手工更改网络表将一些元件的固定用脚等原理图上没有的焊盘定义到与它相通的网络上,没任何物理连接的可定义到地或保护地等。
将一些原理图和PCB封装库中引脚名称不一致的器件引脚名称改成和PCB封装库中的一致,特别是二、三极管等。
五、电路仿真及仿真结果分析
5.1电路调试
单片机软件仿真系统Proteus介绍:
Proteus是英国LabcenterElectro-nics公司开发的一款电路仿真软件,软件由两部分组成:
一部分是智能原理图输入系统ISIS(IntelligentSchematicInputSystem)和虚拟系统模型VSM(VirtualModelSystem);另一部分是高级布线及编辑软件ARES(Adv-Ancd RoutingandEditingSoftware)也就是PCB.
图5-1ISIS启动界面
图5-2单片机属性的设定
硬件调试分为静态调试和动态调试,对于硬件调试而言,只要认真焊接,硬件一般不会出现什么问题的。
静态调试一般采用的工具是万用表,它是在用户系统未工作时的一种硬件检测。
动态调试是在用户系统工作的情况下发现和排查错误的一种硬件检测。
调试步骤是:
首先把电路分为若干模块,调试过程中与该模块无关的元件可以不加考虑,这样可把故障限定在一定的范围内;故障清除后,把各个模块合在一起进行联调,即可完成整个硬件调试工作。
仿真调试结果
图5-3仿真
5.2软件程序调试
KeilμVision2开发环境介绍:
Keil软件是目前最流行开发MCS-51系列单片机的软件。
Keil提供包括C编译器,宏汇编,连接器,库管理和一个功能强大的仿真调试器等在内的完整开发方案。
通过一个集成开发环境μVision2将这些部分组合在一起。
软件调试是通过对程序的汇编、连接、执行来发现程序中存在的语法错误与逻辑错误并加以排除纠正的过程。
软件编写程序时,应注意使用汇编语言编写的程序文件名后缀(即扩展名)是.c,编写的程序称为源程序。
通过编程器扩展名为.HEX的可执行文件烧写到单片机内。
在写入之前还可以进行软件仿真,即在软件上模拟单片机程序原形情况,以便进行调试和修改。
图5-4程序调试图
主机程序:
/*
发送程序
连线:
两个单片机用3根线连起来,要共地,rxd,txd要交叉连接
程序效果:
通过主机发送,从机接收
在主机中通过记下按键按下的次数,主机中显示最后
按下的六个数值,并发送给从机,从机也显示这六个数值
*/
#include//头文件
#include//循环移位文件
#defineucharunsignedchar//宏定义
#defineuintunsignedint
sbitkey1=P1^4;//位声明
sbitkey2=P1^5;//位声明
sbitkey3=P1^6;//位声明
sbitkey4=P1^7;//位声明
ucharcount,cnt=0,k=0;
voiddelay(uchari)
{
ucharx,y;
for(x=i;x>0;x--)
for(y=255;y>0;y--);
}
voiddelay_10ms(void)//延时//
{
unsignedchari,j;
for(i=0;i>0;i--)
for(j=248;j>0;j--);
}
//初始化子函数
voidinit()
{
EA=1;//开总中断
ES=1;//允许串口中断
ET1=1;//允许定时器T1的中断
TMOD=0x20;//定时器T1,在方式3中断产生波特率
PCON=0x00;//&=0xef;//波特率不倍增PCON=0x00;//SMOD=0
SCON=0x50;
TH1=0xfd;//波特率设置为9600
TL1=0xfd;
TR1=1;//开定时器T1运行控制位
}
//按键扫描子函数
voidkey_scan()
{
if(key1==0)//判断是否有按键按下
{
delay_10ms();
if(key1==0)
{
while(!
key1);//等待按键松手
SBUF='A';//送给缓冲区,发送
while(!
TI);//等待发送完
TI=0;//发送完了,标志位清零
}
}
if(key2==0)//判断是否有按键按下
{
delay_10ms();
if(key2==0)
{
while(!
key2);//等待按键松手
SBUF='B';//送给缓冲区,发送
while(!
TI);//等待发送完
TI=0;//发送完了,标志位清零
}
}
if(key3==0)//判断是否有按键按下
{
delay_10ms();
if(key3==0)
{
while(!
key3);//等待按键松手
SBUF='C';//送给缓冲区,发送
while(!
TI);//等待发送完
TI=0;//发送完了,标志位清零
}
}
if(key4==0)//判断是否有按键按下
{
delay_10ms();
if(key4==0)
{
while(!
key4);//等待按键松手
SBUF='D';//送给缓冲区,发送
while(!
TI);//等待发送完
TI=0;//发送完了,标志位清零
}
}
}
voidmain()
{
init();//调用初始化子函数
while
(1)
{
key_scan();//调用键盘扫描子函数
while(RI)//判断是否接受完
{
RI=0;//接受完了,标志位清零
k=SBUF;
}
switch(k)
{
case'A':
{P0=0xfe;delay(200);P0=0xfF;delay(200);}break;
case'B':
{P0=0xfD;delay(200);P0=0xfF;delay(200);}break;
case'C':
{P0=0xfC;delay(200);P0=0xfF;delay(200);}break;
case'D':
{P0=0xfF;delay(200);P0=0xfF;delay(200);}break;
}
}
}
从机程序:
#include//头文件
#include//循环文件
#defineucharunsignedchar//宏定义
#defineuintunsignedint
sbitkey1=P1^4;//位声明
sbitkey2=P1^5;//位声明
sbitkey3=P1^6;//位声明
sbitkey4=P1^7;//位声明
ucharcount,cnt=0,k=0;
voiddelay(uchari)
{
ucharx,y;
for(x=i;x>0;x--)
for(y=255;y>0;y--);
}
voiddelay_10ms(void)//延时//
{
unsignedchari,j;
for(i=0;i>0;i--)
for(j=248;j>0;j--);
}
//初始化子函数
voidinit()
{
EA=1;//开总中断
ES=1;//允许串口中断
ET1=1;//允许定时器T1的中断
TMOD=0x20;//定时器T1,在方式3中断产生波特率
PCON=0x00;//&=0xef;//波特率不倍增PCON=0x00;//SMOD=0
SCON=0x50;
TH1=0xfd;//波特率设置为9600
TL1=0xfd;
TR1=1;//开定时器T1运行控制位
}
voidkey_scan()
{
if(key1==0)//判断是否有按键按下
{
delay_10ms();
if(key1==0)
{
while(!
key1);//等待按键松手
SBUF='A';//送给缓冲区,发送
while(!
TI);//等待发送完
TI=0;//发送完了,标志位清零
}
}
if(key2==0)//判断是否有按键按下
{
delay_10ms();
if(key2==0)
{
while(!
key2);//等待按键松手
SBUF='B';//送给缓冲区,发送
while(!
TI);//等待发送完
TI=0;//发送完了,标志位清零
}
}
if(key3==0)//判断是否有按键按下
{
delay_10ms();
if(key3==0)
{
while(!
key3);//等待按键松手
SBUF='C';//送给缓冲区,发送
while(!
TI);//等待发送完
TI=0;//发送完了,标志位清零
}
}
if(key4==0)//判断是否有按键按下
{
delay_10ms();
if(key4==0)
{
while(!
key4);//等待按键松手
SBUF='D';//送给缓冲区,发送
while(!
TI);//等待发送完
TI=0;//发送完了,标志位清零
}
}
}
//主函数
voidmain()
{
init();//调用初始化子函数
while
(1)
{
key_scan();
while(RI)//判断是否接受完
{
RI=0;//接受完了,标志位清零
k=SBUF;
}
switch(k)
{
case'A':
{P0=0xfe;delay(200);P0=0xfF;delay(200);}break;
case'B':
{P0=0xfD;delay(200);P0=0xfF;delay(200);}break;
case'C':
{P0=0xfC;delay(200);P0=0xfF;delay(200);}break;
case'D':
{P0=0xfF;delay(200);P0=0xfF;delay(200);}break;
}
}
}
5.3硬件调试
硬件调试是一件重要而细微的工作,许多硬件错误往往是在软件调试时被发现的。
通常,先排除明显的硬件故障,之后,再和测试软件结合起来调试。
硬件调试可分为静态调试和动态调试两步。
静态调试是在用户系统未工作时的一种硬件检测。
检测步骤如下:
①目测:
检查外部的各种元件或者是电路是否有断点,及焊点是否牢固,是否存在虚焊等现象;
②用万用表测试:
先用万用表复核目测中有疑问的焊接点及可能在焊接过程中烧坏的元件,再检测各种电源线与地线之间是否有短路现象;
③加电检测:
给板加电,检测所有插座或器件的电源是否符合要求;
④联机检测:
要完成对用户系统的调试,需在单片机开发系统环境下进行。
动态调试是在用户系统工作的情况下发现和排查错误的一种硬件检测。
动态调试的一般方法是由近及远、由分到合。
由分到合是指首先按逻辑功能将用户系统硬件电路分为若干块,当调试电路时,与该元件无关的器件全部从用户系统中去掉,这样可以将故障范围限定在某个局部的电路上。
当各块电路无故障后,将各电路逐块加入系统中,在对各块电路功能及各电路间可能存在的相互联系进行调试。
由分到合的调试既告完成。
由近及远是将信号流经的各器件按照距离单片机的逻辑距离进行由近及远的分层,然后分层调试。
调试时,仍采用去掉无关元件的方法,逐层调试下去,就会定位故障元件了。
六、心得体会
近一段时间的实践和体验对我来说学到的不仅是那些知识,更多的是团队与合作。
这项看起来不需要多少技术的工作却是非常需要耐心和精力在两个星期后的今天我已明白课程设计对我来说的意义,它不仅仅是让我们把所学的理论知识与实践相结合起来,提高自己的实际动手能力和独立思考的能力,更重要的是同学间的团结,虽然我们这次花去的时间比别人多,但我相信我们得到的也会更多!
在做本次课程设计的过程中,我感触最深的当属查阅大量的设计资料了。
为了让自己的设计更加完善,查阅这方面的设计资料是十分必要的,同时也是必不可少的。
设计过程,难免会遇到各种各样的问题。
在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。
我们通过查阅大量有关资料,并在小组中互相讨论,交流经验和自学,若遇到实在搞不明白的问题就会及时请教老师,使自己学到了不少知识,也经历了不少艰辛,但收获同样巨大。
通过这次课程设计我也发现了自身存在的不足之处,虽然感觉理论上已经掌握,但在运用到实践的过程中仍有意想不到的困惑,经过一番努力才得以解决。
这也激发了我今后努力学习的兴趣,我想这将对我以后的学习产生积极的影响。
通过这次设计,我懂得了学习的重要性,了解到理论知识与实践相结合的重要意义,学会了坚持、耐心和努力,这将为自己今后的学习和工作做出了最好的榜样。
虽然自己对于