单片机实训汇编.docx
- 文档编号:9332965
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:22
- 大小:137.28KB
单片机实训汇编.docx
《单片机实训汇编.docx》由会员分享,可在线阅读,更多相关《单片机实训汇编.docx(22页珍藏版)》请在冰豆网上搜索。
单片机实训汇编
桂林电子科技大学信息科技学院
《单片机原理及应用》实训报告
实训题目:
交通灯控制系统
1系统设计
1.1设计要求
1.1.1设计任务
利用51单片机控制各个路口红绿灯及时间显示。
模拟交通灯示意图:
设计的重点:
1、各个路口红绿灯亮灭的规则,暂不考虑左转方向;
2、倒计时的实现,利用单片机的定时器进行计数得到秒信号;
3、时间显示:
东西南北四个方向的时间一致,当东西方向为60秒绿灯通行时间,同时南北方向为60秒红灯禁止时间,因此硬件连接时可考虑东西南北方向可采用同一接法;最后相当于2个数码管动态显示,具体见参考电路框图。
4、按键设置(扩展要求):
设置键按一次,设置主干道通信时间(即次干道禁止时间),按第二次,设置主干道禁止时间(即次干道通信时间),按第三次,可作为紧急通信键。
设置时间需要确定,可通过确定键实现,也可通过延时确定,如10秒。
当然也可根据需要增加相应的按键。
1.1.2性能指标要求
1、各方向的红、绿色信号灯能按照设定规则运行;
2、绿灯亮之前,黄灯闪烁5次;
3、红灯和绿灯倒计时间能够正确显示;
4、两干道的车辆不会会车冲突。
5、可以扩展其他功能(如按键设置时间,按键模拟警车。
1.2设计思路及设计框图
1.2.1设计思路
设计需要用到12个发光二极管中,颜色红、绿、黄。
将其中的红,黄,绿(各两盏)作为东西方向的指示灯,将红,黄,绿(各两盏)作为南北方向的指示灯。
交通灯的亮灭规律为:
南北路口的绿灯亮,东西路口的红灯亮,南北方向通车,延时一段时间后,南北路口绿灯灭,黄灯开始闪烁,而南北方向人行道的绿灯闪烁亮。
闪烁若干次后,南北路口红灯亮,而同时东西路口的绿灯亮,东西方向开始通车,延时一段时间后,东西路口的绿灯灭,黄灯开始闪烁,闪烁若干次后,再切换到东西路口方向,重复上述过程。
各发光二极管的阳极通过保护电阻接到+5V的电源上,阴极接到输入端上,因此使其点亮使相应输入端为低电平。
1.2.2总体设计框图
2各个模块电路的设计
2.1单片机AT89S52模块
核心部分
2.2时钟电路模块
时钟电路模块给单片机提供特定的时钟周期,以备单片机工作使用。
单片机的机器周期12MHz。
2.3复位电路模块
采用上电+按键电平复位,复位电容用10UF用10k的电阻。
为了让RST脚持续两个高电平的机器周期就复位。
2.4按键模块
P3.0为总按键,P3.1为加按键,P3.2为减按键,P3.3为紧急情况按键;
2.5LED灯模块
南北方向通行,东西方向禁止通行
红绿灯改变之前黄灯亮5S;
东西方向通行,南北方向禁止通行;
3开发软件简介及程序的设计
3.1单片机AT89S52介绍
AT89S52是一个低电压,高性能CMOS型8位单片机,片内含8KB的可反复擦写的Flash只读程序存储器(ROM)和256B的随机存取数据存储器(RAM)。
AT89S52是一个低功耗高性能单片机,40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,2个16位可编程定时计数器,2个全双工串行通信口,AT89S52可以按照常规方法进行编程,也可以在线编程。
其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。
引脚使用说明:
I/O端口的编程实际上就是根据应用电路的具体功能和要求对I/O寄存器进行编程。
具体步骤如下:
l.根据实际电路的要求,选择要使用哪些I/O端口。
2.初始化端口的数据输出寄存器,应避免端口作为输出时的开始阶段出现不确定状态,影响外围电路正常工作。
3.根据外围电路功能,确定PO端口的方向,初始化端口的数据方向寄存器。
对于用作输入的端口可以不考虑方向初始化,因为PO的复位缺省值为输入。
4.用作输入的PO管脚,需上拉电阻。
5.最后对I/O端口进行输出(写数据输出寄存器)和输入(读端口)编程,完成对外围电路的相应功能。
几个特殊管脚:
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平。
3.2KeilC编程软件
KeilC51µVision2集成开发环境是KeilSoftware,Inc/KeilElektronikGmbH开发的基于80C51内核的微处理器软件开发平台,内嵌多种符合当前工业标准的开发工具,可以完成从工程建立到管理、编译、链接、目标代码的生成、软件仿真、硬件仿真等完整的开发流程尤其是C编译工具在产生代码的准确性和效率方面达到了较高的水平,而且可以附加灵活的控制选项,在开发大型项目时非常理想。
KeilC51集成开发环境的主要功能有以下几点:
(1)µVision2forWindows:
是一个集成开发环境,它将项目管理、源代码编辑和程序调试等组合在一个功能强大的环境中;
(2)C51国际标准化C交叉编译器:
从C源代码产生可重定位的目标模块;
(3)A51宏汇编器:
从80C51汇编源代码产生可重定位的目标模块;
(4)BL51链接器/定位器:
组合由C51和A51产生的可重定位的目标模块,生成绝对目标模块;
(5)LIB51库管理器:
从目标模块生成连接器可以使用的库文件;
(6)OH51目标文件至HEX格式的转换器,从绝对目标模块生成IntelHex文件;
(7)RTX-51实时操作系统:
简化了复杂的实时应用软件项目的设计。
3.3双龙烧录软件
一款功能全面、操作简易的烧录软件,使用该软件可以从电脑用数据线直接将C程序或汇编程序通过并口直接下载烧录到Ateml的单片机芯片,也可以进行反复擦写的操作。
3.4C语言
C语言是一种计算机程序设计语言。
它既有高级语言的特点,又具有汇编语言的点。
它可以作为系统设计语言,编写工作系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。
因此,它的应用范围广泛。
C语言对操作系统和系统使用程序以及需要对硬件进行操作的场合,用C语言明显优于其它解释型高级语言,有一些大型应用软件也是用C语言编写的。
C语言具有绘图能力强,可移植性,并具备很强的数据处理能力,因此适于编写系统软件,三维,二维图形和动画。
它是数值计算的高级语言。
常用的C语言IDE(集成开发环境)有MicrosoftVisualC++,BorlandC++,Watcom
C++,BorlandC++,BorlandC++Builder,BorlandC++3.1forDOS,WatcomC++11.0
forDOS,GNUDJGPPC++,Lccwin32CCompiler3.1,MicrosoftC,HighC,Turbo
C,Dev-C++,C-Free等等。
4调试过程
首先拿到元器件先检查各个元器件的性能和类型,比如数码管的类型共阴还是共阳。
两组发光管(一组红、一组绿)实现红停绿走的状态。
电阻串联的二极管的作用是为了分压,防止因上下两组发光管分压不同导状态变化。
将下载好的程序下载在芯片内,开电源即可。
为了实现倒计时状态,添加数码管,将串口的和电路板上的下载口连接,将写好的测试程序下载到芯片内,开电源即可测试。
刚焊接好电路板以及编写好程序后,就是进行调试。
刚开始,我插上电源,发现板子上的LED全都没有反应,数码管也没有进行动态扫描,进过检查,发现单片机的GND脚连接错了地方,便进行了修改。
之后接电之后发现通电正常,可是板子有些接触不良,时亮时不亮,我便再次检查板子。
因为我的板子有许多通路是用焊锡连上的,所以可能是焊锡之间有段路,所以我对每条通路都检查了一遍,便成功的解决了这个问题。
做好板以后插上电源,把下载好的程序下载到芯片上即可开始测试,观测一个周期(共计东南西北四个方向的灯的四个状态和突发事件功能)灯的显示状态是否正常,同时观察倒计的计数是否正常,并且看看突发事件的功能是否正常。
LED灯的亮灭与我预期的有些不一样,并且数码管显示的数值有些错乱,我又从程序下手,对每个管脚仔细的检查,最后把整个电路成功的调试了出来。
5功能测试
5.1测试仪器与设备
Keil软件、Proteus仿真软件、提供的5V电源;
5.2性能指标测试
1、各方向的红、绿色信号灯能按照设定规则运行;
2、绿灯亮之前,黄灯闪烁5次;
3、红灯和绿灯倒计时间能够正确显示;
4、两干道的车辆不会会车冲突。
5、通过按键实现紧急情况东西南北均为红灯;
6实训心得体会
这次的单片机实训对于我来说不是很容易,因为单片机的理论课我学的不是很好。
因此我选择了这次实训中比较容易的一个:
交通灯。
因为是生活中比较常见的所以我觉得自己思路还是比较清晰的,对于实训有很大的帮助。
软件方面,程序用我们所学的C语言就能编写出来,大部分是书中提到的内容,由于学的不好,即便书上提到也用不出,所以借鉴别人的程序,请教于同学讲解及查阅相关资料。
最重要的就是制作工程中的细节要认真掌握好。
接线不再是靠PCB印刷版了,所以每一条线都要认真的找好位置,还有就是焊点有时候会比较集中,所以得注意焊点与焊点之间的距离,避免短路。
这次的焊接对于整个实训来说我认为是至关重要的一环,没有良好的耐心还是比较困难的,尤其对男生来说。
可是每一件事都不会是很轻松的就让你完成,其中的艰难困苦都需要你自己去面对和征服,这也告诉我们一个道理,在生活中遇到困难我们不能一味的只知道躲避,而是迎难而上,正阳你才有成功的可能!
通过这次实训,让我更熟悉掌握了KeiluVision3,这些应用程序的运用,和完整的操作,现在我自己开始懂得了如何编写一些简单的程序,虽然我们上过单片机试验,通过这次实战使我更深了解并学会了如何制作单片机应用程序,更加巩固了我的焊接和程序这方面的知识。
错误是难免的,重要的是改正。
训暴露出来的种种问题,有助于提高我们在以后的工作和学习中对此类问题的认识,确保不在同一问题上再次犯错。
这也同时告诉我们,在生活中我们不要害怕失败,只要及时改正不在同一个地方摔倒两次,那么我们的失败就不算真正意义上的失败。
这次的实训不仅让我从中学到了东西,锻炼了自己,更重要的是我还从中体会到了一些道理,因此这次的实训对我来说收获是巨大的。
最后也要感谢老师以及同学的帮助,让我成功的完成了这次实训。
7参考文献
(1)《单片机中级教程》张迎新主编北京航空航天大学出版社。
(2)《单片机原理与应用》丁元杰主编机械工业出版社。
(3)《MCS-51系列单片微型计算机及其应用》孙育才主编东南大学出版社。
(4)《单片机原理与应用技术》李建民、喻晗西安电子科技大学出版社。
(5)《MCS-51系列单片机应用系统设计》何立民北京航空航天大学出版社。
(6)《单片机原理与应用》孙俊逸张铮清华大学出版社。
附录
附录1:
电路原理图
附录2:
程序清单
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
ucharmstcnt;//定义时间
charseconde,time_max;//定义秒
ucharrun;//行走方向
ucharcross_flag;
ucharcodeTab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f};
ucharslnum;
sbits1=P3^0;
sbits2=P3^1;
sbits3=P3^2;
sbits4=P3^3;
sbitr1=P1^2;
sbity1=P1^1;
sbitg1=P1^0;
sbitr2=P1^5;
sbity2=P1^4;
sbitg2=P1^3;
sbitsmg1=P2^0;//个位
sbitsmg2=P2^1;//十位
voidDelay1ms(uintxms);
voidInit();//初始化
voidLight();//灯
voidDispaly();
voidNBCross();
voidDXCross();
voidWait();
voidAllRed();
voidKeyScan();
voidInit()//初始化
{
TMOD=0x11;//T0方式3
TH0=0x3c;
TL0=0xb0;
TR0=1;//T0停控制位
ET0=1;
EA=1;
time_max=17;
seconde=time_max;
run=0;
}
voidDisplay(void)//显示
{
smg1=0;
smg2=1;
P0=Tab[seconde%10];
Delay1ms
(1);
smg1=1;
smg2=0;
P0=Tab[seconde/10];
Delay1ms
(1);
}
voidNBCross()
{
r1=0;
r2=1;
g1=1;
g2=0;
y1=1;
y2=1;
}
voidDXCross()
{
r1=1;
r2=0;
g1=0;
g2=1;
y1=1;
y2=1;
}
voidWait()
{
uchari;
r1=1;
r2=1;
g1=1;
g2=1;
smg1=1;
smg2=1;
for(i=0;i<5;i++)
{
y1=0;
y2=0;
Delay1ms(100);
y1=1;
y2=1;
Delay1ms(100);
}
}
voidAllRed()//紧急通道
{
r1=0;
r2=0;
g1=1;
g2=1;
y1=1;
y2=1;
}
voidLight()
{
if(run==0)//南北方向通行
{
NBCross();
}
if(run==1)//黄灯闪烁
{
EA=0;
run=2;
Wait();
TH0=0x3c;
TL0=0xb0;
EA=1;
}
if(run==2)//东西方向通行
{
DXCross();
}
if(run==3)//黄灯闪烁
{
EA=0;
run=0;
Wait();
TH0=0x3c;
TL0=0xb0;
EA=1;
}
if(run==4)//全部红灯
{
AllRed();
}
}
voidKeyScan()
{
if(s1==0)
{
Delay1ms(5);
{
if(s1==0)
{
while(!
s1);
if(slnum==1)
{
slnum=0;
EA=1;
}
else
{
slnum=1;
EA=0;
seconde=time_max;
}
}
}
}
if(slnum==1)
{
if(s2==0)
{
Delay1ms(5);
{
if(s2==0)
{
while(!
s2);
time_max++;
seconde=time_max;
}
}
}
}
if(slnum==1)
{
if(s3==0)
{
Delay1ms(5);
{
if(s3==0)
{
while(!
s3);
time_max--;
seconde=time_max;
}
}
}
}
if(s4==0)
{
Delay1ms(5);
{
if(s4==0)
{
while(!
s4);
if(run==4)
{
EA=1;
run=0;
}
else
{
EA=0;
run=4;
}
}
}
}
}
/*定时器0程序用于显示时间*/
voidtimer0(void)interrupt1using0
{
TH0=0x3c;
TL0=0xb0;//50ms
mstcnt++;
if(mstcnt==20)//循环20次,50*20ms=1s
{
seconde--;//递减
mstcnt=0;
if(seconde==-1)
{
run++;
seconde=time_max;
}
}
}
voidMain()
{
Init();
while
(1)
{
Display();
Light();
KeyScan();
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 汇编