基于ARM的嵌入式循环彩灯课程设计Word格式文档下载.docx
《基于ARM的嵌入式循环彩灯课程设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《基于ARM的嵌入式循环彩灯课程设计Word格式文档下载.docx(13页珍藏版)》请在冰豆网上搜索。
3.技术分解(系统原理)
在设计中利用软件程序延时的方法来控制循环彩灯亮灭的时间。
考虑延时时间较长所以先用DELAY来实现延时。
利用P2口的八个发光二极管作为循环彩灯的输出端口。
3.1程序流程图:
3.2AT89C52是一个低电压,高性能CMOS8位单片机,片内含8kbytes的可反复擦写的Flash只读程序存储器和256bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,功能强大的AT89C51单片机可为您提供许多较复杂系统控制应用场合。
AT89C51有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,AT89C52可以按照常规方法进行编程,也可以在线编程。
其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。
主要功能特性:
•兼容MCS51指令系统
•8k可反复擦写(>
1000次)FlashROM
•32个双向I/O口
•256x8bit内部RAM
•3个16位可编程定时/计数器中断
•时钟频率0-24MHz
•2个串行中断
•可编程UART串行通道
•2个外部中断源
•共6个中断源
•2个读写中断口线
•3级加密位
•低功耗空闲和掉电模式
•软件设置睡眠和唤醒功能
图2.AT89C51芯片
3.3问题分析与解决方案
3.3.1.unknow1-byteopcodeatB900:
7056!
61
[SPICE]error---toomanyiterationswithoutconvergence
在仿真过程中,出现以上两行的错误,太多的迭代没有收敛性,和某个汇编语言在编码过程中的地址不正确:
说明程序代码过于分散,没有模块化,之后再将程序能够模块化的地方尽量改善,达到更加简洁易读易运行的目的由于程序中定义了dzdb01h,03h,07h,0fh,1fh,3fh,7fh,0ffh,00h,0ffh,00h,0ffh在在最初的调试的时候variable里面elements的值总是显示1,然而此处共有12个值,si共需要在此取11个偏移地址,所以改成11后,程序调试运行正常;
3.3.2.延时子程序模块的编写方法多种,之前为了测试单一的彩灯循环左移是否能够成功,采用nop延时,由CPU晶振频率计算,12M的晶振频率,执行一个nop需要时间1us,8086的晶振频率是5MHz,所以执行一个nop需要的时间是12/5us若要实现短暂而精确的延时可以用nop,然而此处流水灯的延时仅仅用空指令nop并不具有很好的移植性和修改性,程序代码也显得冗余;
一般一定功能的程序段设计成一个子程序,MASM宏汇编程序用“过程”(Procedure)来构造子程序。
如此段延时子程序:
delayproc
pushcx
pushbx
movcx,0fh;
修改此处的值,可以改变延时时间
d1:
movbx,0fh
d2:
decbx
jnzd2
popbx
popcx
ret
endendp
在写此系统程序中,我采用的是分支结构编写延时程序,后查的一般分支程序为计算机根据某种判断,利用条件转移指令,改变程序执行顺序所用;
然而一般具有公用性,重复性,和相对独立性的某段程序应设计成子程序,这种结构会给程序设计和调试带来许多方便,在满足汇编语言一定的规范性条件下,应将延时模块改成如上程序所示;
3.3.3.内存空间分配,,汇编语言的重要特点之一是能够直接利用机器指或者伪指令为数据或者代码程序分配内存空间,86系列(如8086微处理器)的存储器结构是分段的,有代码段,数据段,堆栈段或附加段,在程序设计时要充分考虑分段结构,要执行的程序段应设在当前段(活动段)中;
分配内存空间:
直接在proteus里面将8086CPU的internalmemorysize设置成一个足够用的空间大小,如0x1000,默认的空间大小是0x00000,如不改则仿真不成功。
程序在运行时所需要的工作单元应尽可能的设在CPU寄存器中,这样存取速度快,而且操作方便;
在此系统源程序中都采用8086CPU的全部通用寄存器:
累加器AX,基数寄存器BX,基数寄存器CX,数据寄存器DX;
和堆栈指针寄存器SI;
3.3.4在所有的程序模块逐步成功之后,期待着整体衔接能够成功,可是出现了一个现象:
每次仿真只能实现一种花型,在仿真过程中按键根本无作用,也就是程序一直在某个彩灯子程序中运行,无法去读select处C端口的按键值,必须在仿真stop后,切换按键值,在按仿真play后才能改变花型;
后来发现原来是在每个彩灯子程序中,由于利用了loop循环去实现彩灯的左移与右移,使得程序跳不到下一条语句jmpselect,一直以为有了jmpselect,似乎就可以去读取了按键值,后查loop的资料,loop的两步操作:
1、cx=cx-1;
2、判断cx的值,决定跳转还是向下执行;
原来自己在子程序开始忘记了movcx,08h;
即彩灯实现完一次花型变换就去读取按键的值,如果此时按键的值改变,就跳转到相应的程序段去执行,否则继续执行当前的彩灯花型;
3.3.5.某个想法:
在调试过程中,由于led灯一端都接地,按下启动键,并没有什么现象,总让人产生错觉是不是程序出现问题,仿真不出来;
未来便于启动按键按下有现象,可将led灯的另一端接高电平,但是想来想去,如果是在现实中,不可能用彩灯突然全部亮来说明系统启动,故可以在连接启动键导线中用一个led灯是否亮了来检测系统的启动成功,此时所有的按键的另一端也要求接高电平了;
3.3.6.整体调试过程中,SW0:
启动/暂停能够控制仿真过程中的状态,SW1:
停止系统,需要用到系统功能调用,返回当前操作系统;
4.完成情况展现
4.1单片机模拟系统
单片机模拟系统
单片机系统需要实验板一块,电容3个,电阻1个,HW-DIP4一个,若干,导线若干,小led灯8个,AT80C51芯片一片等
单片机系统包括单片机、晶振电路、复位电路。
复位电路的基本功能是:
系统上电时提供复位信号,直至系统电源稳定后, 撤销复位信号.为可靠起见,电源稳定后还要经一定的延时才撤销复位信号,以防电源开关或电源插头分-合过程中引起的抖动而影响复位。
4.2系统连线
(1)把“单片机系统”区域中的P1.0-P1.2端口用排线连接到交区域中HW-DIP4的端口上。
(2)把“单片机系统”的地与电源与电源的地与电源相连接。
把led的vcc与电源相连。
图4显示模块原理图
PCB图
5.项目总结
通过本次课程设计较系统地掌握有关单片机控制的设计思想和设计方法,主要对AT89C51的结构、功能、内部资源等了解并对其进行测试和加以应用的知识得到学习。
由于是在我们只有一个星期的课程设计,这个设计的一些内容是在网上找的,自己做了一些的改动,在上网找资料的同时也学到了许多东西,找到了很多学习单片机的网站,里面的内容都比较适合我们初学者去学,有些网站还专门介绍这种单片机的类型、用法、功能等等。
其实我们平时不懂就应该自己去学习去弄明白,通过这个课程设计,使我发现,原来小小的一片单片机有这么强大的功能,能应用于各种领域。
都是觉得很神奇,人类都的聪明啊。
我应该在自己以后的学习中,不仅要有刻苦努力,要有钻研精神,还要有创新,对自己感兴趣的一定要用心去学。
6.收获、体会和建议
课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域,在生活中可以说得是无处不在。
因此作为二十一世纪的大学来说掌握单片机的开发技术是十分重要的。
回顾起此次单片机课程设计,至今我仍感慨颇多,的确,从选题到确定,从理论到实践,在将近一个月的日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的软硬件搭配的大课程设计,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说PCB的布板不是很美观,对单片机汇编语言掌握得不好,对于程序的整体结构没有很好的布置好……通过这次课程设计之后,一定把以前所学过的知识重新温故。
这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在老师和同学的辛勤指导下,终于还是迎刃而解。
同时,在老师的身上我们都学得到很多实用的知识,在次我们表示感谢!
同时,对给过我们帮助的所有同学和老师再次表示忠心的感谢!
7.参考文献
[1]谢维成杨加国编著单片机原理与应用及C51程序设计北京:
清华大学出版社,2006.8
[2]余锡存曹国华编著.单片机微机原理及接口技术.西安:
西安电子科技出版社,2000.12~14
[3]李光飞编著单片机课程设计实例指导单片机课程设计实例指导北京:
北京航空航天大学出版社;
第1版(2004年1月1日)
[4]高等学校教材•计算机科学与技术•单片机课程设计指导杨居义
清华大学出版社(2009-09出版)
8.程序
1datasegment
MY8255_Aequ90h;
8255的A端口地址
MY8255_Bequ92h;
8255的B端口地址
MY8255_Cequ94h;
8255的C端口地址
MY8255_MODEequ96h;
8255控制寄存器地址
MODE_Adb10001001b;
控制字89h;
A端口输出工作方式0,端口C输入
dzdb01h,03h,07h,0fh,1fh,3fh,7fh,0ffh,00h,0ffh,00h,0ffh
dataends
codesegment
assumecs:
code,ds:
data
start:
movdx,MY8255_MODE
moval,MODE_A
outdx,al;
控制字初始化
;
--------------------------------------------------
select:
movdx,MY8255_C
inal,dx;
读取C端口地址
goexit:
testal,10h
jzexit;
结果是0,CF=1,跳转到exit去执行
set:
testal,20h
jzselect;
若是结果是0,则继续检测按键
*******************;
四种花型的判断
andal,0fh;
屏蔽al的高四位
cmpal,00h
jzcont1;
花型1循环左移
cmpal,01h
jzcont2;
花型2循环右移
cmpal,02h
jzcont3;
花型3依次递增后闪烁
cmpal,03h
jzcont4;
花型4交替闪烁
jmpselect
-----------------------------------------------------
exit:
movah,4ch
int21h;
4ch系统功能调用,返回操作系统
----------------------------------------------------
cont1:
movcx,08h
movdx,MY8255_A
moval,01h
k1:
写A端口
calldelay
rolal,1
loopk1
jmpselect
----------------------------------------------------
cont2:
moval,80h
k2:
outdx,al
roral,1
loopk2
-----------------------------------------------------
cont3:
movbl,0bh
leasi,dz
diz:
moval,[si];
向左递增子程序
incsi;
加1存在si里面
decbl
jnzdiz;
bl!
=0则继续跳到diz执行
---------------------------------------------------
cont4:
movdx,MY8255_A
moval,55h
moval,0aah;
xoral,0ffh
calldelay
delayproc;
定义延时子程序
movcx,0fh
movbx,0fh
decbx
delay:
延时子程序
pushf
pushcx;
保护现场
movbx,0e0h
lp2:
movcx,176h
lp1:
pushf;
标志入栈
popf;
标志出栈
looplp1
jnzlp2
popf
ret
codeends
endstart