WidthR=20;
}
void right() {
WidthR=15; widthL=20;
}
void stop() {
WidthR=0;
WidthL=0;
}
void head() {
WidthR=20; Widthl=20;
}
4 调试与检测
调试与检测是应用开发电子领域中必不缺少的实践环节,单片机的开发也是一样。 若在具体的工程实践中,因为方案错误并进行相应的开发设计,会浪费更多的时间和资 金,应此,进行软件的模拟与仿真是非常有必要的。对结果的数据分析关系到系统的参 数是否正确,通过检测分析能够及时的更正发生的错误以避免造成不必要的麻烦。
4.1 调试与仿真
单片机开发,除必要的硬件外,软件也是不能分开的。通过编译软件将源代码编译 变为机器码,早期单片机的汇编软件有A51等,随着技术的不断发展,由早期的汇编语言 开发逐渐演变到现在的高级语言开发。同时单片机的开发软件也在不断更新发展,其中K eilC51软件是目前最流行的用于开发MCS-
51系列单片机的软件。KeilC51提供了包括库管理、连接器、宏汇编、C编译器和一个功 能强大的仿真调试系统等,它通过一个集成开发环境将这些组件结合在一起,全Windows 界面,生成目标代码的效率非常高,是一种非常实用的软件。Keil软件的优点:容易上手 ,编程操作简单;支持许多内部函数,内部函数产生代码来完成库函数,执行速度很快 ,效率也很高。另外一款用于硬件仿真的软件Proteus
ISIS是Labcenter公司推出的电路实物分析仿真系统,可仿真各类电路及IC,并全面支持
15
单片机系统。它的元件库种类齐全,使用方便,是一款人们普遍使用的的专业单片机软 件仿真系统。其主要的特点有两个:一是能够对动态元件的实时仿真,同时使得系统更 具真实性;二是集成了虚拟工具箱的功能,虚拟工具能够与仿真系统同时进行,使测量 更加方便而准确。本系统使用C语言编程,采用Keil
编译器进行源程序编译,结合硬件电路的设计制作使用Proteus
ISIS硬件仿真软件进行系统的联调与仿真测试。调试过程分模块进行调试与仿真,在确 保各个模块无异常情况下进行系统联调,最后进行数据的分析对比,改进完善程序。
uversion3 4.2 检测与分析
本小节将介绍在调试过程中检测出的问题及分析解决方法。初次调试程序难免会产 生相应的错误,这就需要耐心的对程序的语法进行检查,如函数的定义规则、逗号的使 用、花括号的对应,以及赋值符号与等号分别。通过修改,编译全部通过,下一步就是 对程序的功能测试。
在程序功能测试中的主要问题是起初所给的电压过于低,导致小车没法驱动;其次 小车没法识别方向,经过排查,是因为单片机上的P0输出口与电机接口没能连接妥当。
结束语
通过这次毕业设计,使我认识到自身在该门课的理论知识的不足之处,表现在一些 错误发生时,不能很好的按照科学的检查方法检查出错误,致使一些实验步骤进展缓慢 。但是,对于单片机接口电路以及C语言的程序的设计知识得到了巩固,温习了旧的知识 ,也增强了实验动手能力,同时,使我得到了一次用专业知识、专业技能分析和解决问 题全面系统的锻炼。使我在单片机的基本原理、单片机应用系统开发过程,以及在常用 编程设计思路技巧(特别是C语言)的掌握方面都能向前迈了一大步。让我感受感到现代 科学技术的迅猛发展,作为一个新时代的大学生,更应该以求知若渴的姿态不断吸收新 的知识,以跟上时代的步伐,促进祖国科技实力的不断进步,为日后成为合格的应用型 人才打下良好的基础!
16
参考文献
[1].余孟尝.数字电子技术基础简明教程. 高等教育出版社.1985 [2].杨素行.模拟电子技术基础简明教程.高等教育出版社.1985 [3].张毅刚.彭喜元.单片机原理与应用设计.电子工业出版社.2008.4
[4].梅丽凤.王艳秋.汪毓铎.张军.单片机原理与接口技术.北京交通大学出版社.2005.7 [5].刘笃仁.韩保君.传感器原理及应用技术.西安电子科技大学出版社.2003.8 [6].李金平.沈明山.姜余祥.电子系统设计.电子工业出版社.2007.8
[7].马忠梅.籍顺心.张凯.马岩.单片机的C语言应用程序设计.航空航天大学出版社.2008 [8].余志生.汽车理论.机械工业出版社.2006
附录
程序清单
Int sum1=100000; Int width=20; Int widthleft=20; Int fre =40; Sbit pwm P0^0; Sbit pwm1 P0^1; //传感器端口 sbit s1=P3^0; sbit S2=P3^1; sbit s3=P3^2; sbit S4=P3^3; main() {
EA=1; ET0=1; TMOD=0x02;
17
//右轮脉宽 //左轮脉宽 //频率
//右输出口 //左输出口
//开中断 //开T0中断 //8位重装
TL0=0xfc; TH0=0x18; TR0=1; While(1) {
Int temp=P3&0x0f; switch(temp) {
case 0x00: do
{
stop();
}while(temp!=0);break;
case 0x03: do
{
left();
}while(temp!=0x03);break; do {
Left1()
}while(temp!=0x0b);break; do {
right();
}while(temp!=0x0d);break; do {
Right1();
}while(temp!=0x0c);break; {
head();
}while(temp!=0x0f);break;
case 0x0b:
case 0x0d:
case 0x0c:
case 0x0f: do
}
head(); } }
18
Void T0-ISR() interrupt 1 {
Static int count; Int sum=0; Count ++; Sum++;
If(sum==sum1) {
EA=0;
PwmR=pwmL=0;}
If(count == widthL) PwmL =0;
if(count == widthR) pwmR=0;
If(count==fre) {
Count =0;
PwmR=pwmL=1;}
}
void left() {
WidthL=15; widthR=20;
}
void right() {
WidthR=15; WidthL=20;
}
void stop() {
WidthR=0; WidthL=0;
}
void head() {
WidthR=20;
//向右转 //停止
//向前走 19//中断服务程序 //计数变量 //定时器变量
//向左转
widthL=20;
}
致
谢
时光流逝匆匆,转眼间论文终于完成了。当自己终于可以从毕业论文的压力下解脱 出来,长长地吁出一口气时,我忽然间才意识到,原来大学四年已经过去,到了该告别 的时候了。一念至此,竟有些恍惚,所谓白驹过隙、百代过客云云,想来便是这般惆怅 了。
我在这里首先要感谢的是我的学位论文指导老师,在本文的撰写过程中,老师多次 询问研究进程,并为我指点迷津,帮助我开拓研究思路,精心点拨、热忱鼓励。老师给 予了悉心的指导和关心,使我克服了众多困难终于完成了论文的撰写工作。他的渊博的 知识、严谨求实的治学态度及敬业精神让我受益匪浅!并将在我今后的人生道路上产生 深远的影响,在此论文完成之际,谨向张乐老师致以崇高的敬意和衷心的感谢!
20