




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C单片机秒表计时最新文档(可以直接使用,可编辑最新文档,欢迎下载)
C单片机秒表计时最新文档(可以直接使用,可编辑最新文档,欢迎下载)南开大学滨海学院C51嵌入式软件设计(C语言)题目:计时秒表功能描述:本设计实现在99秒内的秒表计时,一个按键实现开始、暂停、复位。原理概述:P1接四位七段数码管,P3.2接一按键产生外部中断0,P3.4-P3.7控制扫描显示。计时使用定时器0产生10ms中断累计。按键不同次序决定了对应的控制功能,因为第一次按键必定为开始计时,所以第二次按键判断为暂停,依次第三次为置零。主程序调用显示程序,显示程序实时显示计时时间。效果显示图一(电路总图)图二(效果显示)注:第四位显示为单位:S程序清单#include<reg51.h>#include<stdio.h>unsignedcharTab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};sbitP37=P3^7;sbitP36=P3^6;sbitP35=P3^5;sbitP34=P3^4;unsignedinta=0,cout=0,mm=0;x,y,p,q;/*********延时*********************/voiddelay(){intg;for(g=70;g>0;g--);}/*********显示程序*****************/voiddisplay(){x=cout/10;//秒十位P34=0;P1=Tab[x];delay();P34=1;y=cout-x*10;//秒各位P35=0;P1=Tab[y];delay();P1=0x80;delay();P35=1;p=mm/10;//ms的高位P36=0;P1=Tab[p];delay();P36=1;P37=0;//显示单位:SP1=Tab[5];delay();P37=1;}/*********主程序********************/voidmain(){IT0=1;EX0=1;ET0=1;TMOD=0x01;TH0=0xD8;//装初值,10msTL0=0xF0;EA=1;while(1){display();};}/*********外部按键中断子程序*********/voidint0()interrupt0{if(a==0)//开始计时{TR0=1;mm=0;a++;}elseif(a==1)//暂停计时{TR0=0;a++;}else//置零{a=0;mm=0;cout=0;}}/*********定时器子程序****************/voidtime0()interrupt1{TH0=0xD8;TL0=0xF0;mm++;if(mm==80)//考虑其它损耗,调整后约为1S{cout++;mm=0;}}单片机课程设计课程设计任务书2017-2018学年第一学期第17周-18周题目基于51单片机控制的多功能秒表系统内容及要求1.设计制作一个秒表系统,可用多位数码管显示时间。2.可用开关控制并用多位数码管显示当前时间。3.可以进行计时并能清零重新计时。进度安排1.布置任务、方案论证1天2.硬件制作、程序编写、仿真调试3天3.检查、整理、写设计报告、小结2天4.答辩1天学生姓名:许乐郭利铂指导时间:12月23日-12月29日指导地点:F楼403室任务下达2021年12月23日任务完成2021年12月29日考核方式1.评阅√2.答辩√3.实际操作√4.其它□指导教师蒋沅系(部)主任王长坤注:1、此表一组一表二份,课程设计小组组长一份;任课教师授课时自带一份备查。2、课程设计结束后与“课程设计小结”、“学生成绩单”一并交院教务存档。摘要本设计是设计一个单片机控制的多功能秒表系统。近年来随着科技的飞速发展,单片机的应用正在不断地走向深入,同时带动着传统控制检测日新月异的更新。在实时检测和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用,仅单片机方面的知识是不够的,还要根据具体的硬件结构,以及针对具体的应用对象的软件结合,加以完善。秒表的出现,解决了传统的由于人为因素造成的误差和不公平性。本设计的多功能秒表系统采用AT89C51单片机为中心器件,利用其定时器/计数器定时和记数的原理,结合显示电路、电源电路、LED数码管以及按键电路来设计计时器。将软、硬件有机地结合起来,使得系统能够正确地进行计数,并且结合相应的显示驱动程序,使数码管能够正确地显示时间,暂停和中断。我们设计的秒表可以同时记录八个相对独立的时间,通过上翻下翻来查看这八个不同的计时值,可谓功能强大。其中软件系统采用汇编语言编写程序,包括显示程序,计数程序,中断,延时程序,按键消抖程序等,硬件系统利用PROTEUS强大的功能来实现,简单且易于观察,在仿真中就可以观察到实际的工作状态。关键字:单片机,多功能秒表小组成员:许乐,郭利铂小组分工:小组成员:讨论并确定秒表要实现哪些功能许乐:硬件电路的设计仿真,查阅资料郭利铂:编写程序,撰写实验报告目录5.元器件清单………………………167.参考文献…………………….….18设计一个单片机控制的秒表系统。利用单片机的定时器/计数器定时和记数的原理,结合显示电路、LED数码管以及按键来设计秒表。将软、硬件有机地结合起来,使得系统能够正确地进行计时,同时具有开始/暂停,记录,上翻下翻,清零等功能。(1)共四位LED显示,显示时间为00:00~59.99(2)共五个按键,分别是开始/暂停,记录,上翻,下翻,清零键;(3)能同时记录多个相对独立的时间并分别显示;(4)翻页按钮查看多个不同的计时值;(1)通过本次课程设计可以使我们进一步熟悉和掌握单片机内部结构和工作原理,了解单片机应用系统设计的基本步骤和方法。(2)通过利用AT89C51单片机,理解单片机在自动化仪表中的作用以及掌握单片机的编程方法。(3)通过设计一个简单的实际应用输入及显示模拟系统,掌握单片机仿真软件PROTEUS的使用方法。(4)该实验通过单片机的定时器/计数器定时和计数原理,设计简单的计时器系统,拥有正确的计时、暂停、清零、功能,并能同时记录多个相对独立的时间利用翻页按钮查看多个不同的计时值,该种秒表在现实生活中应用广泛,具有现实意义。本系统采用AT89C51单片机为中心器件,利用其定时器/计数器定时和记数的原理,结合硬件电路如电源电路,晶振电路,复位电路,显示电路,以及一些按键电路等来设计计时器,将软、硬件有机地结合起来。其中软件系统采用汇编语言编写程序,包括显示,计数,中断,延时,按键消抖程序等,并在编程软件中调试运行,硬件系统利用PROTEUS强大的功能来实现,简单且易于观察,在仿真中就可以观察到实际的工作状态。单片机外围电路电路电源电路电路显示电路键盘电路图1系统电路原理MCS-51系列单片机是8位单片机产品,89C51是其中的典型代表,基本模块包括以下几个部分:(1)CPU:89C51的CPU是8位的,另外89C51内部有1个位处理器(2)R0M:4KB的片内程序存储器,存放开发调试完成的应用程序(3)RAM:256B的片内数据存储器,容量小,但作用大(4)I/O口:P0-P3,共4个口32条双向且可位寻址的I/O口线(5)中断系统:共5个中断源,3个内部中断,2个外部中断(6)定时器/计数器:2个16位的可编程定时器/计数器(7)通用串行口:全双工通用异步接收器/发送器(8)振荡器:89C51的外接晶振与内部时钟振荡器为CPU提供时钟信号(9)总线控制:89C51对外提供若干控制总线,便于系统扩展89C51的引脚图如下:89C51单片机引脚图89C51芯片内部有一个高增益反相放大器,用于构成振荡器。引线XTAL1和XTAL2分别为反向放大器的输入和输出,两端跨接石英晶体及两个电容就可构成稳定的自激振荡器。这里,我们选用51单片机12MHZ的内部振荡方式,电容器C1,C2起稳定振荡频率,并对振荡频率有微调作用,C1和C2可在20-100PF之间取值,这里取33PF。采用上电加按键复位电路,上电后,由于电容充电,使RST持续一段高电平时间。当单片机已在运行之中时,按下复位键也能使RST持续一段时间的高电平,从而实现上电加按键复位的操作。按键电路在按键电路中,我们可以在I/O口上直接接按键,或者通过I/O口设计一个键盘,然后通过键盘扫描程序判断是否有键按下等。键盘扫描电路节省I/O口,但编程有些复杂,在这里,由于我们所用的按键较少,且系统是一个小系统,有足够的I/O口可以使用,为了使程序简化,我们采用按键电路,用部分P1口做开关,P1.0开始/暂停,P1.1记录,P1.2上翻,P1.3下翻,P1.4清零。对于按键的设计,采用了防抖动的程序设计,使系统的性能得到进一步的提升。当按键被按下时,相应的引脚被拉低,经扫描后,获得键值,并执行键功能程序,因此按下不同的按键,将执行不同的功能程序。显示电路既可以选用液晶显示器,也可以选用数码管显示。我们采用的是数码管显示电路。用四个共阴极LED显示,LED是七段式显示器,内部有7个条形发光二极管和1个小圆点发光二极管组成,根据各管的亮暗组合成字符。在用数码管显示时,我们有静态和动态两种选择,静态显示程序简单,显示稳定,但是占用端口比较多;动态显示所使用的端口比较少,可以节省单片机的I/O口。在设计中,我们采用LED动态显示,用P0口驱动显示。由于P0口的输出级是开漏电路,用它驱动时需要外接上拉电阻才能输出高电平。在软件设计中,一般采用模块化的程序设计方法,它具有明显的优点。把一个多功能的复杂的程序划分为若干个简单的、功能单一的程序模块,有利于程序的设计和调试,优化和分工,提高了程序的阅读性和可靠性,使程序的结构层次一目了然。应用系统的程序由包含多个模块的主程序和各种子程序组成。各程序模块都要完成一个明确的任务,实现某个具体的功能,如:计数、延时、和显示等,在具体需要时调用相应的模块即可。功能描述:用四位LED数码管显示时间。一个"开始/暂停"键,一个"复位"键,一个“记录”键,可同时记录八个相对独立的时间;一个“上翻”键,一个“下翻”键,查看八个不同的计时值。五个按键分别通过五个端口控制秒表的五个功能。开始开始初始化化P1.0=0??P1.1=0??P1.2=0??P1.3=0??P1.4=0??停止下翻上翻够8个个?NY记录NNNNNYYYYY清零开始开始初始化P1.0=0?P1.1=0?P1.2=0?P1.3=0?P1.4=0?停止下翻上翻够8个?NY暂停记录NNNNNYYYYY清零程序如下:/*1、程序目的:使用定时器学习秒表计时,记录8组数据,通过上翻、下翻键查看记录的数据2、硬件要求:数码管、晶振12M*/#include<reg52.h>codeunsignedchartab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共阴数码管0-9codeunsignedchartab1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};//共阴数码管0-9带小数点sbitkey1=P1^0; //开始、暂停sbitkey2=P1^1; //记数sbitkey3=P1^2; //上翻sbitkey4=P1^3; //下翻sbitkey5=P1^4; //清零staticunsignedchar ms,sec;staticunsignedcharSec[8],Ms[8];staticinti,j;voiddelay(unsignedintcnt)//延时程序{while(--cnt);} voidmain(){ unsignedcharkey3_flag=0,key4_flag=0;TMOD|=0x01;//定时器010msin12Mcrystal用于计时 TH0=0xd8; TL0=0xf0; ET0=1; TR0=1;TMOD|=0x10;//定时器1用于动态扫描 TH1=0xF8; TL1=0xf0; ET1=1; TR1=1;EA=1; sec=0;//初始化 ms=0;P1=0xff; i=0; j=0; while(1){ if(i>=8)i=0; start://开始、暂停 if(!key1) //判断是否按下 { delay(50); //去抖 if(!key1) { while(!key1) //等待按键释放 {;} TR0=!TR0; } } //记录if(!key2) //判断是否按下 { delay(50); //去抖 if(!key2) { while(!key2)//等待按键释放 {;} if(i>=8) //8组数据记录完毕 {TR0=0;gotostart;} Sec[i]= sec; //将数据存入数组 Ms[i]=ms; i++; } }//上翻 if(!key3) { delay(50); if(!key3) { while(!key3) {;} TR0=0; key3_flag=1; //按键3标志 if(j==i) gotostart; else if(key4_flag) j+=2; key4_flag=0; sec=Sec[j];ms=Ms[j]; j++; } }//下翻 if(!key4) { delay(50); if(!key4) { while(!key4) {;} TR0=0; key4_flag=1; //按键4标志 if(j<0) gotostart; else if(key3_flag) j-=2; key3_flag=0; sec=Sec[j];ms=Ms[j]; //显示数组里的内容 j--; } }//清零 if(!key5) { delay(50); if(!key5) while(!key5) {;} TR0=0; ms=0; sec=0; for(i=0;i<8;i++) { Sec[i]=0;Ms[i]=0; } i=0; }} }/********************************//*定时中断1*//********************************/voidtime1_isr(void)interrupt3using0//定时器1用来动态扫描{staticunsignedcharnum;TH1=0xF8;//重入初值 TL1=0xf0; switch(num) { case0: P2=0xfe;P0=tab[sec/10];break;//显示秒十位 case1: P2=0xfd;P0=tab1[sec%10];break;//显示秒个位 case2: P2=0xfb;P0=tab[ms/10];break;//显示十位 case3:P2=0xf7;P0=tab[ms%10];break;//显示个位 default:break; } num++; if(num==4) num=0;}/********************************//*定时中断0*//********************************/voidtim(void)interrupt1using1{TH0=0xd8;//重新赋值TL0=0xf0;ms++;//毫秒单元加1 if(ms>=100) { ms=0;//等于100时归零 sec++;//秒加1 if(sec>=60) { sec=0;//秒等于60时归零 } }}将以上程序清单导入先前做好的Proteus仿真电路,汇编之后,开始进行仿真。仿真结果如下:显示清零功能:按下开始键后显示按下清零键后显示按“开始”键,秒表开始计时;按“暂停”键,秒表暂停计时;按记录键,秒表记录时间,共可记录八个数值;按上翻下翻键,可查看这八个不同的计时值。根据实验要求,本次课设基本完成了设计要求,由于秒表系统并不一定仅仅局限于计时,定时等功能,还可以进行多项的扩展,可以利用AT89C51强大的扩展功能,进一步丰富秒表的功能,例如可设定计时时间,倒计时等等众多功能。单片机以其强大的功能和良好的兼容性可以更好地为我们服务,通过查阅各种资料,多了解一些单片机有关知识,可以为以后的工作和学习生活创造更多的便利条件。5.元器件清单元件名称型号数量/个单片机AT89C521晶振12MHZ1电容22pF2电解电容10uF1电源5V1数码管HS-3461AS1电阻1K/10K5/8按键开关6通过本次课程设计,我们深刻地认识到自己有很多不足之处,比如在自主学习能力方面的不足,实际动手操作能力的不足等。这次的单片机课程设计是理论与实践相结合的范例。该设计从头到尾都要自己参与进来,熟悉了整个设计流程才能更快地设计出方案并完成设计。本次课程设计我主要负责硬件电路的焊接,写程序和查阅相关资料。单片机课程早已结束,相关的知识已经很模糊,导致我们在设计硬件电路中遇到了不少麻烦。首先是不知从何入手。虽然小组讨论后确定了秒表要实现的功能,可是没有相关理论知识的熟知和实践操作。查阅了与89C51单片机相关的资料也阅读了其他人单片机数字秒表的设计,慢慢地我们开始了解其中原理,一步步设计出了硬件电路的各个部分,如晶体振荡电路,复位电路,按键电路,显示电路。完成设计后需要运用PROTEUS软件进行设计仿真。这次的课程设计同学进行了交流和讨论,我们分工进行设计,从搜索资料到硬件、软件的调试,每一步、每一个细节都经过我们自己的思考,我们共同讨论各方案的比较选择、硬件、软件的设计和调试,最终拿出了我们的成果。在做的过程中不但加深了我们对单片机理论知识的认识和理解还认识到了这门学科在应用方面的广阔前景。实践是最有高度也是最能体现整体水平的整个设计过程中,我们不断地探索,设计出了不一样的硬件电路图,写过了不一样的程序,正如设计中如何能使硬件电路图简单明了,程序简单而准确,如何能准确的运行,都是通过与同学老师的交流,慢慢摸索出来的。以上的不断探索,使我们进一步熟悉和掌握单片机内部结构和工作原理,了解单片机应用系统设计的基本步骤和方法。通过利用AT89C51单片机,理解单片机在自动化仪表中的作用以及掌握单片机的编程方法。通过设计一个简单的实际应用输入及显示模拟系统,掌握单片机仿真软件PROTEUS的使用方法。我们设计的这种具有记录,上翻下翻功能的秒表在现实生活中应用广泛,如体育项目,因此本次课程设计具有现实意义,我很开心能将知识运用到实践中并在自主学习中收获到那么多。7.参考文献[1]万福君.
单片微机原理系统设计与应用.合肥:中国科技大学出版社,2005[2]杨光友.单片微型计算机原理与接口技术.北京:水利水电出版社,2002[3]胡耀辉.
单片机系统开发实例经典.
北京:冶金工业出版社,2006[4]刘守义、杨宏丽.单片机应用技术.西安:西安电子科技大学出版社,2003[5]姜武中、姜春霞.
片机原理与接口技术.
大连:大连理工大学出版社,2002[6]李朝青.
单片机原理及其接口技术.
北京:北京航空大学出版社,1998[7]肖玲妮.
Protel99SE印刷电路板设计教程.
北京:清华大学出版社,2003沈阳理工大学应用技术学院毕业设计(论文)题目:基于单片机的数字电子秒表的设计与实现系别:信息工程系专业:自动化学生姓名:胡培指导教师:唐朝仁年月日摘要近年来随着科技的飞速发展,单片机的应用正在不断的走向深入.本文阐述了基于单片机的数字电子秒表设计.本设计主要特点是计时精度达到0.001s,解决了传统的由于计时精度不够造成的误差和不公平性,是各种体育竞赛的必备设备之一。另外硬件部分设置了查看按键,可以对秒表上一次计时时间进行保存,供使用者查询。本设计的数字电子秒表系统采用AT89C52单片机为中心器件,利用其定时器/计数器定时和记数的原理,结合显示电路、LED数码管以及外部中断电路来设计计时器。将软、硬件有机地结合起来,使得系统能够实现五位LED显示,显示时间为0~99。999秒,计时精度为0.001秒,能正确地进行计时,同时能记录一次时间,并在下一次计时后对上一次计时时间进行查询。其中软件系统采用汇编语言编写程序,包括显示程序,定时中断服务,外部中断服务程序,延时程序等,并在WAVE中调试运行,硬件系统利用PROTEUS强大的功能来实现,简单切易于观察,在仿真中就可以观察到实际的工作状态。关键字:单片机;数字电子秒表;仿真AbstractWiththerapiddevelopmentofscienceandtechnologyinrecentyears,SCMapplicationsareconstant-depthmanner.Inthispaper,basedonsinglechipdesignofdigitalelectronicstopwatch.Themaincharacteristicsofthisdesigntimingaccuracyof0。001s,tosolvethetraditionalresultofalackaccuracyduetotimingerrorsandunfair,andisavarietyofsportscompetitions,oneoftheessentialequipment。InadditionthehardwarepartofthesetViewbuttononthestopwatchcanbethelasttimetosavetimeforuserqueries.Thedesignofthemulti—functionstopwatchsystemusesSTC89C52microcontrollerasthecentraldevice,anduseitstimer/countertimingandthecountprinciples,combinedwithdisplaycircuit,LEDdigitaltube,aswellastheexternalinterruptcircuittodesignatimer。Thesoftwareandhardwaretogetherorganically,allowingthesystemtoachievetwoLEDdisplayshowsthetimefrom0to99.999seconds,Timingaccuracyof0.001seconds,Beabletocorrectlytimeatthesametimetorecordatime,andthenexttimeafterthelasttimethetimetosearch.automaticallyaddedasecondinwhichsoftwaresystemsusingassemblylanguageprogramming,includingthedisplayprogram,timing,interruptservice,externalinterruptserviceroutine,delayprocedures,keyconsumershakingprocedures,andWAVEinthecommissioning,operation,hardwaresystemusestoachievePROTEUSpowerful,simpleandeasytoobservethecutinthesimulationcanbeobservedontheactualworkingcondition.Keyword:LEDdisplay;High—precisionstopwatch;STC89C52目录秒表计时器是电器制造,工业自动化控制、国防、实验室及科研单位理想的计时仪器,它广泛应用于各种继电器、电磁开关,控制器、延时器、定时器等的时间测试。奥运男子百米飞人大战中,牙买加飞人博尔特以9秒69的成绩夺得冠军。而博尔特冲过终点的瞬间,荧屏显示其成绩为9秒68。相差的这个0.01秒,系由电子计时系统确认.奥运会男子100米蝶泳决赛上,美国选手菲尔普斯以50秒58的成绩惊险夺冠,距离“八金梦想”仅一步之遥。塞尔维亚选手查维奇以50。59秒获得银牌,只比菲尔普斯慢0.01秒。这种细微的差距,即使是现场大屏幕用经典超慢镜头回放,也无法分辨.2004年8月28日15点15分,中国选手孟关良/杨文军在雅典奥运会男子500米划艇决赛中,以1分40秒278的成绩获得中国在雅典奥运会的第28金.这是中国皮划艇项目的第一枚奥运金牌,也是中国水上项目在历届奥运会上所获得的第一枚金牌。孟关良/杨文军的成绩比获得银牌的古巴选手只快了0.072秒,以至于两人在夺冠之后还不敢相信。自首届现代奥运会在希腊雅典举办以来,奥运计时技术一直在不断地向前发展。一百多年过去了,首届现代奥运会上计时所用的跑表如今换成了一系列高科技计时装置,如高速数码摄像机、电子触摸垫、红外光束、无线应答器等等。鉴于当今计时技术的快速发展,即便千分之一秒(为眨眼的40倍)的毫微差距,也决定着冠军的归属。在现在的体育竞技比赛中,随着运动员的水平不断提高,差距也在不断缩小。有些运动对时间精度的要求也越来越高,有时比赛冠亚军之间的差距只有几毫秒,因此就需要高精度的秒表来记录成绩。有关计时钟表的发展历史,大致可以分为三个演变阶段。一、从大型钟向小型钟演变.二、从小型钟向袋表过渡。三、从袋表向腕表发展.每一阶段的发展都是和当时的技术发明分不开的。1088年,当时我国宋朝的科学家苏颂和韩工廉等人制造了水运仪象台,它是把浑仪、浑象和机械计时器组合起来的装置.它以水力作为动力来源,具有科学的擒纵机构,虽然几十年后毁于战乱,但它在世界钟表史上具有极其重要的意义.1656年,荷兰的科学家惠更斯应用伽利略的理论设计了钟摆,第二年,在他的指导下年轻钟匠S.Coster制造成功了第一个摆钟。1675年,他又用游丝取代了原始的钟摆,这样就形成了以发条为动力、以游丝为调速机构的小型钟,同时也为制造便于携带的袋表提供了条件.18世纪期间发明了各种各样的擒纵机构,为袋表的进一步产生与发展奠定了基础.英国人GeorgeGraham在1726年完善了工字轮擒纵机构,它和之前发明的垂直放置的机轴擒纵机构不同,所以使得袋表机芯相对变薄。20世纪初,尤其是第一次世界大战的爆发,袋表已经不能适应作战军人的需要,腕表的生产成为大势所趋.许多新的设计和技术也被应用在腕表上,成为真正意义上的带在手腕上的计时工具。紧接着的二战使腕表的生产量大幅度增加,价格也随之下降,使普通大众也可以拥有它。腕表的年代到来了!1998年:建立超冷铯原子钟,比微微秒又要精确10万倍。从我国水运仪像台的发明到现在各国都在研制的原子钟这几百年的钟表演变过程中,我们可以看到,各个不同时期的科学家和钟表工匠用他们的聪明的智慧和不断的实践融合成了一座时间的隧道,同时也为我们勾勒了一条钟表文化和科技发展的轨迹。本设计利用AT89C52单片机的定时器/计数器定时和记数的原理,使其能精确计时。利用中断系统使其能实现开始暂停的功能.P0口输出段码数据,P2.0—P2.4口作列扫描输出,P1.1、P3.2、P3。3、P2.5分别接四个按钮开关,分别实现开始、暂停、清零和查看上次时间的功能。显示电路由五位共阴极数码管组成.初始状态下计时器显示00.000,当按下开始键时,外部中断INT1向CPU发出中断请求,CPU转去执行外部中断1服务程序,即开启定时器T0。计时采用定时器T0中断完成,定时溢出中断周期为1ms,当一处中断后向CPU发出溢出中断请求,每发出一次中断请求就对毫秒计数单元进行加一,达到10次就对十毫秒位进行加一,依次类推,直到99。999秒重新复位.在计时过程中,只要按下暂停键,外部中断INT0向CPU发出中断请求,CPU转去执行外部中断0服务程序,即关闭定时器T0,调用显示程序,实现暂停功能,同时将此次计时时间存入寄存区.然后对P1。1进行扫描。当P1。1按下时就跳转回主程序.等待下一次计时开始.在按下暂停键时,将此时的计时时间存入中间缓存区,当再次按下开始键时,则讲中间缓存区的数据转入最终缓存区。秒表停止后对查看键P2.5进行扫描,P2.5按下为低电平时,调用最终缓存区的数据进行显示,即显示上一次计时成绩.当P2.5位高电平时,调用显示缓存区的数据进行显示,即显示当此计时的成绩。根据以上设计思路从而实现数字电子秒表的计时和查看上一次计时时间的功能。本文主要内容包括三部分:第一部分介绍硬件部分设计思路及方案;第二部分介绍了软件部分的设计思路和设计;最后一部分则是整个系统的安装与调试过程。数字电子秒表具有显示直观、读取方便、精度高等优点,在计时中广泛使用。本设计用单片机组成数字电子秒表,力求结构简单、精度高为目标。设计中包括硬件电路的设计和系统程序的设计。其硬件电路主要有主控制器,计时与显示电路和回零、启动和停表电路等。主控制器采用单片机AT89C52,显示电路采用共阴极LED数码管显示计时时间。本设计利用AT89C52单片机的定时器/计数器定时和记数的原理,使其能精确计时。利用中断系统使其能实现开始暂停的功能。P0口输出段码数据,P2。0—P2.4口作列扫描输出,P1。1、P3.2、P3.3、P2.5口接四个按钮开关,分别实现开始、暂停、清零和查看上次计时时间功能.电路原理图设计最基本的要求是正确性,其次是布局合理,最后在正确性和布局合理的前提下力求美观。硬件电路图按照图1.1进行设计。图1.1数字秒表硬件电路基本原理图根据要求知道秒表设计主要实现的功能是计时和显示。因此设置了四个按键和五位数码管显示时间,三个按键分别是开始,停止、复位和查看上次计时时间按键。利用这四个建来实现秒表的全部功能,而五位数码管则能显示最多99.999秒的计时。本设计中,数码管显示的数据存放在内存单元79H-7DH中。其中79H存放毫秒位数据,7AH存放十毫秒位数据,7BH存放百毫秒位数据,7CH存放秒位数据,7DH存放十秒位数据,每一地址单元内均为十进制BCD码.由于采用软件动态扫描实现数据显示功能,显示用十进制BCD码数据的对应段码存放在ROM表中。显示时,先取出79H—7dH某一地址中的数据,然后查得对应的显示用段码,并从P0口输出,P2口将对应的数码管选中供电,就能显示该地址单元的数据值。最终缓存区则设置为59H—5DH,数据存放规则和79H—7DH一样。分别对应存放毫秒位至十秒位数据。与79H—7DH存储区不一样的是:59H—5DH存储的内容为数字秒表上一次计时显示的时间。而79H-7DH为当前计时时间存储区.计时采用定时器T0中断完成,定时溢出中断周期为1ms,当一处中断后向CPU发出溢出中断请求,每发出一次中断请求就对毫秒计数单元进行加一,达到10次就对十毫秒位进行加一,依次类推,直到99。999秒重新复位。再看按键的处理。这四个键可以采用中断的方法,也可以采用扫描的方法来识别.复位键和查看主要功能在于数值复位和查询上次计时时间,对于时间的要求不是很严格。而开始和停止键则是用于对时间的锁定,需要比较准确的控制.因此可以对复位和查看按键采取扫描的方式.而对开始和停止键采用外部中断的方式。设计中包括硬件电路的设计和系统程序的设计。其硬件电路主要有主控制器,显示电路和回零、启动、查看、停表电路等.主控制器采用单片机AT89C52,显示电路采用共阴极LED数码管显示计时时间,四个按键均采用触点式按键.本课题在选取单片机时,充分借鉴了许多成形产品使用单片机的经验,并根据自己的实际情况,选择了ATMEL公司的AT89S51.ATMEL公司的89系列单片机以其卓越的性能、完善的兼容性、快捷便利的电擦写操作,低廉的价格、超强的加密功能,完全替代87C51/62和8751/52,低电压、低电源、低功耗,有DIP、PLCC、QFP封装,有民用型、工业级、汽车级、军品级等多种温度等级,是当今世界上性能最好、价格最低、最受欢迎的八位单片机[3]。AT89C52P为40脚双列直插封装的8位通用微处理器,采用工业标准的C51内核,在内部功能及管脚排布上与通用的8xc52相同,其主要用于会聚调整时的功能控制。功能包括对会聚主IC内部寄存器、数据RAM及外部接口等功能部件的初始化,会聚调整控制,会聚测试图控制,红外遥控信号IR的接收解码及与主板CPU通信等。单片机的外部结构AT89S52单片机采用40引脚的双列直插封装方式。图1。2为引脚排列图,40条引脚说明如下:主电源引脚Vss和Vcc①Vss接地②Vcc正常操作时为+5伏电源外接晶振引脚XTAL1和XTAL2①XTAL1内部振荡电路反相放大器的输入端,是外接晶体的一个引脚。当采用外部振荡器时,此引脚接地。②XTAL2内部振荡电路反相放大器的输出端.是外接晶体的另一端。当采用外部振荡器时,此引脚接外部振荡源。图1.2单片机引脚图控制或与其它电源复用引脚RST/VPD,ALE/,和/Vpp①RST/VPD当振荡器运行时,在此引脚上出现两个机器周期的高电平(由低到高跳变),将使单片机复位在Vcc掉电期间,此引脚可接上备用电源,由VPD向内部提供备用电源,以保持内部RAM中的数据。②ALE/正常操作时为ALE功能(允许地址锁存)提供把地址的低字节锁存到外部锁存器,ALE引脚以不变的频率(振荡器频率的1/6)周期性地发出正脉冲信号.因此,它可用作对外输出的时钟,或用于定时目的。但要注意,每当访问外部数据存储器时,将跳过一个ALE脉冲,ALE端可以驱动(吸收或输出电流)八个LSTTL电路。对于EPROM型单片机,在EPROM编程期间,此引脚接收编程脉冲(功能)③外部程序存储器读选通信号输出端,在从外部程序存储取指令(或数据)期间,在每个机器周期内两次有效。同样可以驱动八LSTTL输入。④/Vpp、/Vpp为内部程序存储器和外部程序存储器选择端.当/Vpp为高电平时,访问内部程序存储器,当/Vpp为低电平时,则访问外部程序存储器.对于EPROM型单片机,在EPROM编程期间,此引脚上加21伏EPROM编程电源(Vpp).输入/输出引脚P0.0—P0.7,P1.0-P1。7,P2.0-P2.7,P3.0-P3.7.①P0口(P0。0—P0。7)是一个8位漏极开路型双向I/O口,在访问外部存储器时,它是分时传送的低字节地址和数据总线,P0口能以吸收电流的方式驱动八个LSTTL负载。②P1口(P1.0-P1。7)是一个带有内部提升电阻的8位准双向I/O口。能驱动(吸收或输出电流)四个LSTTL负载。③P2口(P2。0—P2.7)是一个带有内部提升电阻的8位准双向I/O口,在访问外部存储器时,它输出高8位地址。P2口可以驱动(吸收或输出电流)四个LSTTL负载。④P3口(P3.0-P3。7)是一个带有内部提升电阻的8位准双向I/O口。能驱动(吸收或输出电流)四个LSTTL负载[6]。AT89C52具有以下标准功能:8k字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,AT89C52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作.掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。CPU是单片机的核心部件.它由运算器和控制器等部件组成[2].(1)运算器运算器的功能是进行算术运算和逻辑运算.可以对半字节(4位)、单字节等数据进行操作.例如能完成加、减、乘、除、加1、减1、BCD码十进制调整、比较等算术运算和与、或、异或、求补、循环等逻辑操作,操作结果的状态信息送至状态寄存器。89C52运算器还包含有一个布尔处理器,用来处理位操作。它是以进位标志位C为累加器的,可执行置位、复位、取反、等于1转移、等于0转移、等于1转移且清0以及进位标志位与其他可寻址的位之间进行数据传送等位操作,也能使进位标志位与其他可移位寻址的位之间进行逻辑与、或操作[5]。(2)程序计数器PC程序计数器PC用来存放即将要执行的指令地址,共16位,可对64K程序存储器直接寻址.执行指令时,PC内容的低8位经P0口输出,高8位经P2口输出.(3)令寄存器指令寄存器中存放指令代码。CPU执行指令时,由程序存储器中读取的指令代码送入指令寄存器,经译码后由定时与控制电路发出相应的控制信号,完成指令功能。本设计采用ATMEL的AT89C52微处理器,主要基于以下几个因素:①AT89C52为51内核,仿真调试的软硬件资源丰富。②性价比高,货源充足。③功耗低,功能强,灵活性高.④DIP40封装,体积小,便于产品小型化。⑤为EEPROM程序存储介质,1000次以上擦写周期,便于编程调试。⑥工作电压范围宽:2.7V—6V,便于交直流供电.对于数字显示电路,通常采用液晶显示或数码管显示。对于一般的段式液晶屏,需要专门的驱动电路,而且液晶显示作为一种被动显示,可视性差,不适合远距离观看;对于具有驱动电路和单片机接口的液晶显示模块(字符或点阵),一般多采用并行接口,对单片机的接口要求较高,占用资源多;另外,AT89S52单片机本身无专门的液晶驱动接口。而数码管作为一种主动显示器件,具有亮度高、响应速度快、防潮防湿性能好、温度特性极性、价格便宜、易于购买等优点,而且有远距离视觉效果,很适合夜间或是远距离操作。因此,本设计的显示电路采用7段数码管作为显示介质。数码管显示可以分为静态显示和动态显示两种。由于本设计需要采用五位数码管显示时间,如果静态显示则占用的口线多,硬件电路复杂。所以采用动态显示。图1.3显示电路基本原理图动态显示是一位一位地轮流点亮各位数码管,这种逐位点亮显示器的方式称为位扫描.通常各位数码管的段选线相应并联在一起,由一个8位的I/O口控制;各位的公共阴极位选线由另外的I/O口线控制.动态方式显示时,各数码管分时轮流选通,要使其稳定显示必须采用扫描方式,即在某一时刻只选通一位数码管,并送出相应的段码,在另一时刻选通另一位数码管,并送出相应的段码,依此规律循环,即可使各位数码管显示将要显示的字符,虽然这些字符是在不同的时刻分别显示,但由于人眼存在视觉暂留效应,只要每位显示间隔足够短就可以给人同时显示的感觉.数码显示管分为共阳数码管和共阴数码管两种共阳极数码管的8个发光二极管的阳极(二极管正端)连接在一起,如图1.4(b),通常,公共阳极接高电平(一般接电源),其它管脚接段驱动电路输出端。当某段驱动电路的输出端为低电平时,则该端所连接的字段导通并点亮,根据发光字段的不同组合可显示出各种数字或字符。此时,要求段驱动电路能吸收额定的段导通电流,还需根据外接电源及额定段导通电流来确定相应的限流电阻。共阴极数码管的8个发光二极管的阴极(二极管负端)连接在一起,如图(c),通常,公共阴极接低电平(一般接地),其它管脚接段驱动电路输出端,当某段驱动电路的输出端为高电平时,则该端所连接的字段导通并点亮,根据发光字段的不同组合可显示出各种数字或字符。此时,要求段驱动电路能提供额定的段导通电流,还需根据外接电源及额定段导通电流来确定相应的限流电阻。图1.4(a)数码管引脚图(b)共阳极内部结构图(c)共阴极内部结构图本设计采用共阴极数码显示管做显示电路,由于采用的是共阴的数码显示管,所以只要数码管的a、b、c、d、e、f、g、h引脚为高电平,那么其对应的二极管就会发光,使数码显示管显示0~9的编码见表1.1。表1.1共阴极数码显示管字型代码字型共阴极代码字型共阴极代码03FH56DH106H67DH25BH707H34FH87FH466H96FH动态显示电路由显示块、字形码驱动模块、字位驱动模块三部分组成。如图1。3所示为本系统的5位LED动态显示器接口电路。图中,5个数码管的8段段选线分别与外接上拉电阻的单片机P0口对应相连,而5个数码管的位控制端则和NPN型三极管的集电极相连接。单片机的P2.0~P2。4口则分别对应数码显示管的最低位到最高位,P2.0~P2。4口分别和五个NPN型三极管的基极相连,做三极管导通的控制端,而NPN型三极管选用9013型三极管。根据9013的资料显示:其耐压值为40V,最大功率为0。65W,最大电流为0.5A,电气性能完全满足本设计的要求。另外数码管显示是采用动态显示,所以对三极管的开关频率有一定的要求。根据电子秒表的设计计算可知动态显示的频率最高为3KHz,而9013的导通频率为150MHz,完全能满足本设计的要求,所以最终选取9013三极管最为位控制开关。由于数码管是有P0口来驱动,它内部没有上拉电阻,作为输出口时驱动能力比较弱,不能点亮数码显示管,因此P0口必须接上拉电阻来提高驱动能力。另外一位共阴数码管的驱动电流一般为20mA左右,如果电流太大容易造成数码管损坏,所以也需要根据电源的电压值来确定上拉电阻的大小。如果电阻过小,势必会形成灌电流过大,造成单片机IO的损坏,如果电阻过大,那么对拉电流没有太大的影响。电源供电电压为5V,当上拉电阻选用220Ω电阻时灌电流为22mA。不会损坏单片机的I/O口,同时也可以为数码显示管起到限制电流的保护作用。本设计中有四个按键,分别实现开始、暂停、复位和查看功能。这三个键可以采用中断的方法,也可以采用查询的方法来识别。对于复位键和查看键,主要功能在于数值复位和对上次计时时间的查看,对于时间的要求不是很严格,而开始和暂停键主要用于时间的锁定,需要比较准确的控制。因此可以考虑,对复位键和查看键采用查询的方式,而对于开始和暂停键采用外部中断。四个按键均采用低电平有效,具体电路连接图如图1.5所示。当按键没有按下时,单片机的I/O口直接连接电源,因此需要接上拉电阻来进行限流,本设计中选取阻值为2kΩ的电阻作为上拉电阻,根据计算可知此时的灌电流为2。5mA,查看AT89C52的资料得知次电流在安全范围内,符合安全设计要求。图1。5按键电路按键电路中由于采用了外部中断,所以需要用到P3口的第二功能。P3口引脚的第二功能如表1.2表1。2P3口引脚第二功能表P3口引脚特殊功能P3。0RXD(串行输入口)P3.1TXD(串行输出口)P3.2INT0(外部中断0请求输入端)P3.3INT1(外部中断1请求输入端)P3.4T0(定时器/计数器0计数脉冲输入端)P3.5T1(定时器/计数器1计数脉冲输入端)P3.6WR(片外数据存储器写选通信号输出端)P3.7RD(片内数据存储器读选通信号输出端)单片机的时钟信号用来提供单片机内各种微操作的时间基准,89S52片内设有一个由反向放大器所构成的振荡电路,XTAL1和XTAL2分别为振荡电路的输入和输出端,89S52单片机的时钟信号通常用两种电路形式得到:内部振荡方式与外部振荡方式。外部方式的时钟很少用,若要用时,只要将XTAL1接地,XTAL2接外部振荡器就行。对外部振荡信号无特殊要求,只要保证脉冲宽度,一般采用频率低于12MHz的方波信号。时钟发生器把振荡频率两分频,产生一个两相时钟信号P1和P2供单片机使用.P1在每一个状态S的前半部分有效,P2在每个状态的后半部分有效。本设计采用的内部振荡方式,内部振荡方式所得的时钟信号比较稳定,实用电路中使用较多.本设计系统的时钟电路如图1.4所示。只要按照图1.6所示电路进行设计连接就能使系统可靠起振并能稳定运行。图中,电容器C1
、C2起稳定振荡频率、快速起振的作用,电容值一般为5~33pF。但在时钟电路的实际应用中一定要注意正确选择其大小,并保证电路的对称性,尽可能匹配,选用正牌的瓷片或云母电容,如果可能的话,温度系数尽可能低.本设计中采用大小为30pF的电容和12MHz的晶振[8]。图1.6内部振荡电路(4)时序AT89S52典型的指令周期(执行一条指令的时间称为指令周期)为一个机器周期,一个机器周期由六个状态(十二振荡周期)组成。每个状态又被分成两个时相P1和P2。所以,一个机器周期可以依次表示为S1P1,S1P2……,S6P1,S6P2.通常算术逻辑操作在P1时相进行,而内部寄存器传送在P2时相进行。图1.789S52时序图1。7给出了AT89S52单片机的取指和执行指令的定时关系。这些内部时钟信号不能从外部观察到,所用XTAL2振荡信号作参考。在图中可看到,低8位地址的锁存信号ALE在每个机器周期中两次有效:一次在S1P2与S2P1期间,另一次在S4P2与S5P1期间。对于单周期指令,当操作码被送入指令寄存器时,便从S1P2开始执行指令。如果是双字节单机器周期指令,则在同一机器周期的S4期间读入第二个字节,若是单字节单机器周期指令,则在S4期间仍进行读,但所读的这个字节操作码被忽略,程序计数器也不加1,在S6P2结束时完成指令操作。图1.7的(a)和(b)给出了单字节单机器周期和双字节单机器周期指令的时序.89S52指令大部分在一个机器周期完成。乘(MUL)和除(DIV)指令是仅有的需要两个以上机器周期的指令,占用4个机器周期。对于双字节单机器周期指令,通常是在一个机器周期内从程序存储器中读入两个字节,唯有MOVX指令例外。MOVX是访问外部数据存储器的单字节双机器周期指令。在执行MOVX指令期间,外部数据存储器被访问且被选通时跳过两次取指操作。图1.7中(c)给出了一般单字节双机器周期指令的时序[9]。关于单片机的置位和复位,都是为了把电路初始化到一个确定的状态,一般来说,单片机复位电路作用是把一个例如状态机初始化到空状态,而在单片机内部,复位的时候单片机是把一些寄存器以及存储设备装入厂商预设的一个值,复位是一个很重要的操作方式。但单片机本身是不能自动进行复位的,必须配合相应的外部电路才能实现.当AT89C52单片机的复位引脚RST(全称RESET)出现2个机器周期以上的高电平时,单片机就完成了复位操作.如果RST持续为高电平,单片机就处于循环复位状态,而无法执行程序.因此要求单片机复位后能脱离复位状态。而本系统选用的是12MHz的晶振,因此一个机器周期为1μs,那么复位脉冲宽度最小应为2μs。在实际应用系统中,考虑到电源的稳定时间,参数漂移,晶振稳定时间以及复位的可靠性等因素,必须有足够的余量.根据应用的要求,复位操作通常有两种基本形式:上电复位、手动复位。上电复位要求接通电源后,自动实现复位操作。80C51单片机的上电复位POR(PowerOnReset)实质上就是上电延时复位,也就是在上电延时期间把单片机锁定在复位状态上。在单片机每次初始加电时,首先投入工作的功能部件是复位电路。复位电路把单片机锁定在复位状态上并且维持一个延时(记作TRST),以便给予电源电压从上升到稳定的一个等待时间;在电源电压稳定之后,再插入一个延时,给予时钟振荡器从起振到稳定的一个等待时间;在单片机开始进入运行状态之前,还要至少推迟2个机器周期的延时。上述一系列的延时,都是利用在单片机RST引脚上外接一个RC支路的充电时间而形成的.典型复位电路如图1.8(a)所示,其中的阻容值是原始手册中提供的。在经历了一系列延时之后,单片机才开始按照时钟源的工作频率,进入到正常的程序运行状态。在电源电压以及振荡器输出信号稳定之后,又等待了一段较长的延时才释放RST信号,使得CPU脱离复位锁定状态;而RST信号一旦被释放,立刻在ALE引脚上就可检测到持续的脉冲信号[8].图1。8上电复位延时电路由于标准80C51的复位逻辑相对简单,复位源只有RST一个(相对新型单片机来说,复位源比较单一),因此各种原因所导致的复位活动以及复位状态的进入,都要依靠在外接引脚RST上施加一定时间宽度的高电平信号来实现.标准80C51不仅复位源比较单一,而且还没有设计内部上电复位的延时功能,因此必须借助于外接阻容支路来增加延时环节,如图1.8(a)所示。其实,外接电阻R还是可以省略的,理由是一些CMOS单片机芯片内部存在一个现成的下拉电阻Rrst。例如,AT89系列的Rrst阻值约为50~200kΩ;P89V51Rx2系列的Rrst阻值约为40~225kΩ,如图1。9所示。因此,在图1。8(a)基础上,上电复位延时电路还可以精简为图1.8(b)所示的简化电路(其中电容C的容量也相应减小了)。图1.9复位引脚RST内部电路在每次单片机断电之后,须使延时电容C上的电荷立刻放掉,以便为随后可能在很短的时间内再次加电作好准备。否则,在断电后C还没有充分放电的情况下,如果很快又加电,那么RC支路就失去了它应有的延迟功能。因此,在图1。8(a)的基础上添加一个放电二极管D,上电复位延时电路就变成了如图1.8(c)所示的改进电路.也就是说,只有RC支路的充电过程对电路是有用的,放电过程不仅无用,而且会带来潜在的危害。于是附加一个放电二极管D来大力缩短放电持续时间,以便消除隐患。二极管D只有在单片机断电的瞬间(即VCC趋近于0V,可以看作VCC对地短路)正向导通,平时一直处于反偏截止状态。手动复位要求在电源接通的条件下,在单片机运行期间,如果发生死机,用按钮开关操作使单片机复位。单片机要完成复位,必须向复位端输出并持续两个机器周期以上的高电平,从而实现复位操作。本设计采用上电且开关复位电路,如图1.10所示上电后,由于电容充电,使RST持续一段高电平时间。当单片机已在运行之中时,按下复位键也能使RST持续一段时间的高电平,从而实现上电且开关复位的操作。通常选择C=10~30μF,R=1K,本设计采用的电容值为22μF的电容和电阻为1K的电阻。图1.10单片机复位电路系统总电路由以上设计的显示电路,时钟电路,按键电路和复位电路组成,只要将单片机与以上各部分电路合理的连接就组成了系统总电路。系统总电路图如图1。11所示.AT89C52单片机为主电路的核心部分,各个电路均和单片机相连接,由单片机统筹和协调各个电路的运行工作。AT89C52单片机提供了XTAL1和XTAL2两个专用引脚接晶振电路,因此只要将晶振电路接到两个专用引脚即可为单片机提供时钟脉冲,但在焊接晶振电路时要尽量使晶振电路靠近单片机,这样可以为单片机提供稳定的始终脉冲。图1。11系统总电路图复位电路同晶振电路,单片机设有一个专用的硬件复位接口,并设置为高电平有效。按键电路与单片机的端口连接可以由用户自己设定,本设计中软件复位键和查看键分别接单片机的P1.1和P2。5,均设为低电平有效。而另外的开始键和暂停键两键使用了外部中断,所以需要连接到单片机的特殊接口P3。3和P3.2,这两个I/O口的第二功能分别为单片机的外部中断1端口和外部中断0端口。同样设置为位低电平有效。显示电路由五位数码管组成,采用动态显示方式,因此有8位段控制端和5位位控制端,八位段控制接P0口,P0.0~P0。7分别控制数码显示管的a、b、c、d、e、f、g、dp显示,AT89C52的P0口没有集成上拉电阻,高电平的驱动能力很弱,所以需要接上拉电阻来提高P0的高电平驱动能力。五位位控制则由低位到高位分别接到P2.0~P2.4口,NPN三极管9013做为位控制端的开关,当P2.0~P2。4端口任意一个端口为高电平时,与其相对应的三极管就导通,对应的数码管导通显示。通过以上设计已经将各部分电路与单片机有机的结合到一起,硬件部分的设计以大功告成,剩下的部分就是对单片机的编程,使单片机按程序运行,实现数字电子秒表的全部功能。本设计采用了汇编语言编写,汇编语言由于采用了助记符号来编写程序,比用机器语言的二进制代码编程要方便些,在一定程度上简化了编程过程.汇编语言的特点是用符号代替了机器指令代码,而且助记符与指令代码一一对应,基本保留了机器语言的灵活性。使用汇编语言能面向机器并较好地发挥机器的特性,得到质量较高的程序。汇编语言的特点:(1).面向机器的低级语言,通常是为特定的计算机或系列计算机专门设计的。(2).保持了机器语言的优点,具有直接和简捷的特点.(3).可有效地访问、控制计算机的各种硬件设备,如磁盘、存储器、CPU、I/O端口等.(4)。目标代码简短,占用内存少,执行速度快,是高效的程序设计语言。(5)。经常与高级语言配合使用,应用十分广泛。在程序设计过程中,为了有效地完成任务,把所要完成的任务精心的分割成若干个相互独立但相互又仍可有联系的任务模块,这些任务模块使得任务变得相对单纯,对外的数据交换相对简单,容易编写,容易检测,容易阅读和维护。这种程序设计思想称为模块化程序设计思想.模块化结构程序的设计,可以使系统软件便于调试与优化,也使其他人更好地理解和阅读系统的程序设计。因此,本医院病床呼叫系统在软件的设计上,运用了模块化程序的结构对软件进行设计,使得程序变得更加直观易懂。程序的主要模块有:主程序、显示程序、定时溢出中断服务程序、外部中断服务程序。本设计系统所用到的单片机端口数比较多,所以在这里将对数字电子秒表的硬件资源的大概分配加以说明。片内RAM的分配、各功能键的定义以及各端口的分配安排如表2.1所示.表2。1端口的分配安排表名称功能描述初始化值79H-7DH1ms—10s位显示寄存区00H69H-6DH1ms-10s位中间寄存区00H59H—5DH1ms-10s位最终寄存区00HR1-R51ms-10s位溢出计数区定时器T0控制秒表的最小精度E018H外部中断INT0停止中断信号入口外部中断INT1开始中断信号入口本系统程序主要模块由主程序、定时中断服务程序、外部中断0服务程序和外部中断1服务程序组成。其中主程序是整个程序的主体。可以对各个中断程序进行调用。协调各个子程序之间的联系。系统(上电)复位后,进入主程序,主程序流程图如图2.1。首先对系统进行初始化,包括设置各入口地址、中断的开启、对各个数据缓存区清“0”、赋定时器初值,初始化完毕后,就进入数码管显示程序。数码管显示程序对显示缓存区内的数值进行调用并在数码管上进行动态显示。显示一次就对P1。1和P2.5进行一次扫描,查询复位键P1.1是否按下,当复位键按下后,程序返回开始,重新对系统进行初始化。当没有按下复位键时,程序则扫描P2.5是否按下,当P2.5没有按下则返回显示程,不断地调用显示缓存区的数据进行显示。使用户能清楚的看到当前电子秒表所记录的时间.当查询到P2。5按下后则跳转到另外一段显示程序并调用最红缓存区的数据进行显示,此时显示的时间即为上一次计时的时间.与此同时,在P2。5按下后单片机执行显示程序的同时也在对P2。5进行扫描,当P2。5断开后立即跳转回之前的显示程序显示当前的计时时间.在主程序中还进行了赋寄存区的初始值、设置定时器初值以及开启外部中断等操作,当定时时间到后就转去执行定时中断程序。当外部中断有请求则去执行外部中断服务程序。并在执行完后返回主程序。图2.1主程序流程图现在方案中采用了三个中断,外部中断INT0,INT1和定时中断T0。CPU在响应中断时,先处理高级中断,在处理低级中断,若有多个同级中断时,则按自然优先顺序处理.例如当CPU正在处理一个中断申请时,有出现了另一个优先级比它高的中断请求,这是,CPU就暂停终止对当前优先级较低的中断源的服务,转去响应优先级比它高的中断请求,并为其服务。待服务结束,再继续执行原来较低级的中断服务程序。而当CPU为级别高的终端服务程序服务时,如果级别低的中断发出中断请求,此时CPU是不会响应的,所以为了避免开始和暂停两个按键中的一个出现没有响应的情况,在进行程序编辑时要注意对中断的使用,避免出现中断的嵌套。,合理分配中断对本设计的实现是至关重要的.另外由于数字式电子秒表的最小精度位1ms,属于高精度电子秒表。定时器T0的定时周期也为1ms,为了使电子秒表暂停键按下后CPU能马上去响应中断程序,必须将暂停的外部中断级别高于定时计数器的中断级别。避免出现CPU执行完定时溢出中断程序后再响应外部中断程序,影响计时精度。AT89C52的自然优先级顺序排列如下:中断源最高外部中断0定时/计数器0溢出中断外部中断1定时/计数器1溢出中断串行口中断最低数字式秒表中的两个按键采用了中断实现功能.开始采用外部中断INT0,暂停采用外部中断INT1.另外程序中还用到了定时/计数器0溢出中断进行计时。依据设计要求,暂停的外部中断INT1中断级别最高,计时的定时/计数器0溢出中断次之,开始的外部中断INT0级别最低。(1)外部中断0服务程序:外部中断0服务程序结合外部P3.2停止键实现数字电子秒表的停止功能,具体流程图如图2。2。当按下P3。2停止键按下向CPU发出外部中断请求,CPU转向外部中断0服务程序执行,停止定时器.另外将当前显示的时间进行一次存储,存进中间寄存区。最后中断返回。图2.2外部中断0服务程序流程图(2)外部中断1服务程序外部中断1服务程序结合外部P3.3停止键实现数字电子秒表的启动功能,具体流程图如图2。2。当按下P3.3启动键按下向CPU发出外部中断请求,CPU转向外部中断1服务程序执行,启动定时器。另外进行二次存储,将之前进行一次存储的数码管显示数据存入最终缓存区,避免下次计时暂停时一次存储将数据掩盖,从而起到保护数据的作用。二次存储后就中断返回。图2。3外部中断1服务程序流程图(3)定时中断服务程序当定时/计数器T0器溢出后,向CPU发出中断请求信号。CPU跳转到定时中断程序执行,具体流程如图2.4。定时中断程序是一个进位程序,主要负责对1ms的加一。1ms位没有满十就跳出中断程序,返回显示程序。当1ms位满十后就对1ms位清零,向10ms位加一,同时检测10ms位是否满十,没有满十就跳出中断程序,返回显示程序。如果满十就向100ms位加一,依次类推,最终达到99.999秒后归零,从零开始再次计时。13个.但如果定时计数器如果每次都固定从0开始计数,到计满后,再向CPU发出溢出中断请求信号那是毫无意义的。为了使定时计数器在规定的计数脉冲个数字之后(此时应小于213个脉冲),向CPU发出溢出中断请求,可采取预先向TH0和TL0中放入一个初值X的方法,使计数器以X值为起始值开始计数,即X+1,X+2,……直至计数器计满,从1全变为0。设需要计数的脉冲个数为Y,则有:X+Y=213在定时方式下:定时时间间隔位t=(213-X)*振荡周期*12现在本设计要求1ms实现一次中断,选择定时器T0工作在方式0.所以需要根据以上条件计算出T0的初值。设T0的初值为X,则(213—X)*12/12*106=1*10-3即TH0=0E0H(取X的高8位)TL0=18H(取X的低5位)由于定时1ms只是一个理想化的时间,其中并没有考虑到中断后单片机执行语句所花的时间。虽然执行语句所花的时间很短只有即微秒,但积少成多,数字秒表一秒中要溢出中断1000次,积累起来误差就能达到毫秒级,这对于精度到达毫秒级的数字电子秒表来说是很大的误差。所以要在后期编程时还要将单片机读程序的时间考虑进去,在对定时器赋初值时将单片机需要执行的语句所花的时间加上,这样就能使数字电子秒表的误差达到最小。图2.4定时中断服务程序ProteusISIS是英国Labcenter公司开发的电路分析与实物仿真软件,它可以仿真、分析(SPICE)各种模拟器件和集成电路。该软件的主要特点总结后有以下四点:①实现了单片机仿真和SPICE电路仿真相结合的功能。②支持目前主流单片机系统的仿真。③提供了软件调试功能,并可以与WAVE联合仿真调试。④具有强大的原理图绘制功能。总之,该软件是一款集单片机和SPICE分析于一身的仿真软件,功能极其强大。在电子领域中也起到了很大的作用,它的出现仿真不需要先焊接电路,可以先仿真调试通过后在焊电路,节省了不少在硬件调试上所花的时间。ProteusISIS的工作界面是一种标准的Windows界面,如图1。19所示。它包括标题栏、主菜单、状态栏、标准工具栏、绘图工具栏、对象选择按钮、预览对象方位控制按钮、仿真进程控制按钮、预览窗口、对象选择器窗口、图形编辑窗口等十几个工具,方便了使用者的使用。ProteusSISI绘制原理图的操作与Protel99se绘制原理图的操作基本相同,在这里就不再作赘述。下面拿本设计中的一个仿真例子作简述说明.运行ProteusSISI后,绘制病床呼叫系统的原理图。首先打开已经画好的proteusDSN文件,双击图中的AT89S52芯片,就弹出一个窗口,在ProgramFile项中通过路径选择在WAVE中生成的HEX文件,双击选中后确定,这样仿真图中的AT89S52芯片就已经读取了本设计中的HEX文件。单击“三角形按钮"进行仿真。通过对仿真结果的观察来对程序进行修改,最终使程序到达设计要求。按照之前设计好的数字电子秒表原理图,详细计算系统中各个元件的参数,选择相应器件,制作实际电路板.由于考虑到万能板大小的问题及元件之间连线的方便,在焊接元器件前必须考虑元件的布局然后进行实际操作。制作好的电路板可以用万用表(200欧姆档)的红、黑表笔测试电路板的每条走线,当其电阻非常小时,证明走线没有断开,当其电阻很大时,证明该条走线断了,应该重新走线,使电路板在电气上得到正确地连接。选用万用表的20K欧姆档,检测电路中是否存在短路。因为系统采用的是共阴极数码管作为显示电路,必须确保数码管的公共端接的是低电平。(1)晶振电路的测试在单片机正常运行的必要条件是单片机系统的时钟稳定正常。实际中,因为各种原因导致系统时钟不正常而出现系统无法正常运行的情况时有,因此系统时钟是否振是通电检查的首要环节。在系统通电的状况下,用万用表的直流电压档(20V),分别测量XTAL1和XTAL2引脚的电压,看是否正常,在调试过程中,测得电压XTAL1引脚应为2。05V,XTAT2应为2.15V。(2)复位电路
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 有机化学 有机上期末试卷(含答案)学习资料
- 2025风力发电项目合同
- 山东省东营市利津县2024-2025学年下学期期中考试七年级道德与法治试题及答案 山东省东营市利津县2024-2025学年下学期期中考试七年级道德与法治试题
- 2025粮食收购销售合同协议书范本
- 2025办公室改造工程(承包)合同承包电路改造合同
- 2025综合装修合同范本
- 2025劳动合同集锦范文
- 2025烘焙技术合作协议合同
- 2025BT项目合同范本
- 2025年企业合同模板集锦
- 2025建筑信息模型技术员(中级)技能鉴定精练考试指导题库及答案(浓缩300题)
- 2025年红十字初级急救员证考试题库及答案(一)
- 肾梗死护理措施
- 《颈椎病的针灸治疗》课件
- 湖水水质监测方案
- 医美诊所院感知识培训课件
- 河北省气象部门招聘笔试冲刺题2025
- 塔吊司机岗位责任制样本(2篇)
- 监理工程师历年考试真题及答案下载
- 糖尿病患者饮食指导课件
- 施工项目安全教育培训制度(2篇)
评论
0/150
提交评论