基于单片机的脉冲信号测量系统设计(源程序)_第1页
基于单片机的脉冲信号测量系统设计(源程序)_第2页
基于单片机的脉冲信号测量系统设计(源程序)_第3页
基于单片机的脉冲信号测量系统设计(源程序)_第4页
基于单片机的脉冲信号测量系统设计(源程序)_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

MCS-96单片机课程设计专业:电气工程及其自动化班级:设计者:学号:指导老师:单片机课程设计与总结报告摘要近年来随着科技的飞速发展,单片机的应用正在不断地走向深入,同时带动传统控制检测日新月益更新。在实时检测和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构,以及针对具体应用对象特点的软件结合,加以完善。频率计的出现,使人们在工程中能够方便、清晰、实时的测量一个信号的频率等相关方面的数据,以便于在实际中应用。本系统采用单片机80C196为中心器件来设计频率计,系统实用性强、操作简单、扩展性强。目录一.设计任务…………2

二.总体设计方案……3

三.硬件设计………4

四.软件设计………6

五.系统联调………11

六.设计总结………14

七.致谢……………15八.附录……………15一.设计任务1、功能及技术指标要求设计一周期性脉冲信号(50Hz-100kHz)的测量系统,要求如下:⑴可以测量脉宽、占空比、周期和频率;⑵循环采集计算上述各量,并用键盘选择对象显示;⑶制定可行的系统设计方案,完成硬件设计、软件设计和软件调试;2、设计内容按设计技术指标进行频率计的硬件和软件设计。

二、总体设计方案1、设计初步设想一个完整的频率计相当于一个简单的单片机系统,该系统有单片机、读键电路、显示电路等构成。基于单片机的频率计的设计时要充分的认识以下三个问题:(1)因为在实际的工作和应用中一脉冲信号的频率是时刻变化的,若做到绝对的实时则人们会看到一组不断跳变的数字,若能够应用于实际,在满足实时性的同时还要保证显示的数据不是随时跳变的。

(2)频率计要求测量脉宽、占空比、周期和频率,并用键盘选择对象显示。还要考虑当选择的键不是我们所用到的键的情况。(3)在设计频率计时还要充分考虑到硬件的情况,本实验所用到的单片机晶振11.0592MHZ、2分频。定时器加一时间为,加上程序运行所消耗的时间,理论上可以测量最高100KHZ的脉冲波频率,考虑到最低频率为50HZ和人眼的承受能力,所以将显示的数字刷新时间定为1s/次为宜。2、频率计设计方案论证由于本实验需要显示刷新1s/次,还要保证显示一直存在,故不能单纯的使用延时,一定要采用中断来实现上述功能。方案一采用HSI中断。在主程序中循环进行扫键和显示,当HSI.0引脚出现正跳变时产生中断,进行HSI的相关测量计算,并设置悬挂量,每间隔1S将中断子程序中计算所得值赋给某寄存器并显示出来。方案二采用定时器1中断。在主程序中循环进行扫键和显示,设置标志位,每中断10次在第10次中断进行HSI的相关测量计算,这样也可保证显示1s刷新1次。从以上两种方案,很容易看出,采用方案二,软件设计比较简单,且避免在进行HSI测量时发现定时器溢出的情况,因为采用定时器1中断,在定时器清零时进行HSI操作,而频率最小50HZ,故Tmax=0.02s,而定时器溢出需65536*1.45us=0.094s>0.02s,故保证了测量的准确性,所以采用了方案二。三、硬件设计1、硬件配置以80C196单片机为核心构成微机基本应用系统。具体要求如下:(1)、存储器系统:一块27128芯片,其地址号从8000H开始,且两块6264芯片的地址号连续。用74S138集中译码。(2)、配置6*6键盘,键盘与显示器通过8255芯片与单片机连接。8255的A口、B口、C口、控制口的地址号为0D000H~0D003H。(3)、TTL输出方波的信号发生器,用作验证的示波器,以检测所测的值是否正确。2、画出电路原理图,再用PROTEL绘图软件画出电路接线图。图一:并行扩展芯片8255图二:电路原理图四、软件设计1、设计思路测量被测信号的频率:通过HSI测量程序,先记下高电平向低电平跳变时的时间,在记下下一个低电平向高电平跳变发生的时间,在记下高电平向低电平跳变时发生的时间,3次连续事件的3个时间得到,就可求得周期和脉宽。(2)解决可以连续测量的问题:一次测量显示后,跳转到开始,不断循环扫键显示解决1S刷新1次的问题。每间隔1S钟执行1次HSI测量,再将测量所得值赋给显示程序显示,我们所看到的显示出来的值就为1S种变化1次。(4)将测量的频率转化成可以显示的十进制数并循环显示转换后得到的十进制:将转换后的十进制对应预设的列表程序,列表数值数码管的段选,每次检测到一位十进制就循环显示,并且位选寄存器的数值自动加一。周期,脉宽,占空比。频率显示之间的切换设定为按1,2,3,4分别显示周期,脉宽,占空比,频率。为保证按键后能正确快速的切换,必须要设置悬挂量,这样有两个好处:(1)消除键盘抖动的影响。(2)当不按键或按错键时显示的值不变。这样作出的系统更人性化更有应用价值。2,程序流程图STARTSTART显示脉宽显示周期CL=2CH=2CH=1CL=1显示占空比CL=3CH=3显示频率CL=4调用读键子程序键键值存CHCH=4调用显示子程序设中断次数标志位OLHSI和中断初始化显示脉宽显示周期CL=2CH=2CH=1CL=1显示占空比CL=3CH=3显示频率CL=4调用读键子程序键键值存CHCH=4调用显示子程序设中断次数标志位OLHSI和中断初始化图3:主程序流程图中断中断OL-1存于OLOL-1存于OLOL等于0OL等于0OL不等于0OL不等于0调用HSI测量和计算子程序调用HSI测量和计算子程序OL重新置数OL重新置数返回返回图4:中断服务程序流程图高精度求频率低精度求频率PERIOD<10计算占空比存于RITIOL计算高电平存于LENTHL计算周期存于PERIODL计算HTIME和PERIODNNNNYYY记录第四次事件时间于ZX查询事件是否加载记录第三次事件时间于NX查询事件是否加载记录第二次事件时间于MX记录第一次事件时间于LX查询事件是否加载Y查询事件是否加载HSI测量和计算程序高精度求频率低精度求频率PERIOD<10计算占空比存于RITIOL计算高电平存于LENTHL计算周期存于PERIODL计算HTIME和PERIODNNNNYYY记录第四次事件时间于ZX查询事件是否加载记录第三次事件时间于NX查询事件是否加载记录第二次事件时间于MX记录第一次事件时间于LX查询事件是否加载Y查询事件是否加载HSI测量和计算程序PERIOD>10PERIOD>10返回图5:HSI测量子程序流程图返回NY返回读键值延时,去抖动键盘扫描第二行计算键码键值是否为空?读键值延时,去抖动键盘扫描第一行键盘扫描程序NY返回读键值延时,去抖动键盘扫描第二行计算键码键值是否为空?读键值延时,去抖动键盘扫描第一行键盘扫描程序图6:扫键子程序流程图3、课程设计程序见附录五、系统联调1、硬件检测:硬件检测又分为,静态检测和动态检测。静态检测为:第一步:目测,检查外部的各种元件或则电路是否有断点;第二步:用万用表测试。先用万用表复核目测中有疑问的连接点,再检测各种电源线与地线之间是否有短路现象;第三步:加电检测。给板加电,检测所有的插座或是器件的电源端是否符合要求的值;第四步:是联机检查。因为只有用单片机开发系统才能完成对用户系统的调试。动态检测为:动态检测是在用户系统工作的情况下发现和排除用户系统硬件中存在的器件内部故障、器件连接逻辑错误等的一种硬件检查。动态调试的一般方法是由近及远、由分到合。由分到合是指首先按逻辑功能将用户系统硬件电路分为若干块,当调试电路时,与该元件无关的器件全部从用户系统中去掉,这样可以将故障范围限定在某个局部的电路上。当各块电路无故障后,将各电路逐块加入系统中,在对各块电路功能及各电路间可能存在的相互联系进行调试。由分到合的调试既告完成。由近及远是将信号流经的各器件按照距离单片机的逻辑距离进行由近及远的分层,然后分层调试。调试时,仍采用去掉无关元件的方法,逐层调试下去,就会定位故障元件了。由于在本次设计中采用的是实验室已经给定的实验系统,故硬件检测仅为检查信号发生器与单片机HSI是否连接妥当。2、软件调试:软件调试是通过对拥护程序的汇编、连接、执行来发现程序中存在的语法错误与逻辑错误并加以排除纠正的过程。程序后,编辑,查看程序是否有逻辑的错误。在本次设计的软件调试中遇到的问题:(1)最初周期频率不能正确测得。LDBHSIMOD,#30HLDBIOC0,#10HANDBIOS1,#7FHTEST:JBCIOS1,7,TESTLDBHL,HSISTALDLX,HSITIMTEST1:JBCIOS1,7,TEST1LDMX,HSITIMTEST2:JBCIOS1,7,TEST2LDNX,HSITIM现象:不论如何改变输入的周期脉冲的频率,测量得到的周期为一很大的值,且仅在一个很小的范围内变化。分析:在循环测量的环境下,因为T由NX-LX=RERIOD所得,变化不大,猜测在第二次的测量中LX未变,所的的T为等个程序循环的T,略大于1S,检查内部数据区证实我的猜测。解决办法:将程序变为LDBHSIMOD,#30HLDBIOC0,#10HANDBIOS1,#7FHTEST:JBCIOS1,7,TESTLDBHL,HSISTALDLX,HSITIMTEST1:JBCIOS1,7,TEST1LDMX,HSITIMTEST2:JBCIOS1,7,TEST2LDNX,HSITIMTEST3:JBCIOS1,7,TEST3LDZX,HSITIM测量4组数据,在相关计算中,仅用后3个而将第一个数据舍弃从而解决该问题。(2)测量范围的问题最初老师所定的测量范围为50HZ-500KHZ,但分析可知状态周期TEST:JBCIOS1,7,TEST5LDBHL,HSISTA4LDLX,HSITIM4TEST1:JBCIOS1,7,TEST15LDMX,HSITIM4TEST2:JBCIOS1,7,TEST25LDNX,HSITIM4TEST3:JBCIOS1,7,TEST35LDZX,HSITIM4测量程序共需40个状态周期,共5T,定时器加一时间为,故Tmin=5*1.45=7.25us,=137.9KHZ,故最大范围为137.9KHZ,500KHZ的范围硬件达不到要求,故需要将测量范围更改为50HZ-100KHZ,才能准确测量。(3)数据显示亮度不均的问题现象:显示的数据第一个明显较其余5个亮。分析:;----------------------数码管显示子函数--------------------------DIS:LD40H,#7BH;显示起始地址LD1EH,#0A0H;数码管位数LDB29H,#06H;显示总位数LDB28H,#80H;延时DISP1:STB1EH,P8255CCLRB1BHLDB1AH,[40H]LD1CH,#DATA0ADD1CH,1AHLDB1AH,[1CH]STB1AH,P8255AINCB40HSUBB1EH,#20HLOOP3:DJNZ28H,LOOP3DJNZ29H,DISP1RET前面5个数码管用的延时由28H赋给,LOOP3:DJNZ28H,LOOP3为延时程序,而在循环扫键显示过程中,最后一个数码管延时为;----------------------延时子程序----------------------------------------------DELAY:LDDX,#0F00H;延时子程序DELAY1:DECDXJNEDELAY1RET延时不同,数码管亮度不同。解决办法:将28H中的值与DX中的值设定为相同,即可使6个数码管亮度相同。(4)有关除法的问题问题:在单片机的除法指令中不存在32位二进制数/16位二进制数=32位二进制数和16位二进制数/8位二进制数=16位二进制数的情况。本程序中,有两处可能出现上述问题。解决办法:第一处在频率计算中,由公式得,先将65536存为32位数情况一:当PERIOD大于10,所得f为16位数,可以先将65536*10所得仍为一32位数,再除以PERIOD得一16位数。情况二:当频率极大时,即PERIOD很小时,PERIOD<10时,先将65536/PERIOD得一16位数,在乘以10得一32位数,这样最后一位恒位0但是在f很大时这种误差可忽略不计。第二处在数码管显示中,若显示一6位数如999999需要999999/100000=9余99999的算法,但无此指令,所以先将999999/1000=999余999,在分别显示。这样将一个6位数分高三位和低三位显示可避免上述情况。有关占空比不能正确显示的问题现象:占空比在2个值之间不停不规则跳变,2值相加等于100.分析:程序不能正确识别高低电平。通过读取HSISTA的值,我们可以看到在多次循环后,HSISTA会有短暂的不规则跳变。解决办法:通过改变HSIMODE设为双通道输入,一个通道高电平触发计时,一个通道低电平触发计时,进而计算高低电平持续时间,从而避开HSISTA的应用,通过这种方法,该问题得到解决。有关HSI测量程序和中断程序相互干扰的问题现象:在显示周期和频率时,会不定期的跳到一个错误的值加以显示,在迅速的回复到正确的值上面。分析:由于HSI程序和中断程序都用到定时器1,存在相互干扰的现象。解决办法:KB_DIS:CLRBINT_PENDING LDBINT_MASK,#01H LDBIOC1,#04H EILDBAL,#82H;PB口输入,PA,PC口输出STBAL,C8255[0] LDBAL,#08H;使PC4置1 STBAL,P8255CLCALLRD_KB;读键子程序LDBCH,ALCMPBCH,#1JEFIND1CMPBCH,#2JEFIND2CMPBCH,#3JEFIND3CMPBCH,#4JEFIND4SJMPNEXTFIND1:LDBCL,#1SJMPNEXTFIND2:LDBCL,#2SJMPNEXTFIND3:LDBCL,#3SJMPNEXTFIND4:LDBCL,#4NEXT:LCALLCASE_KB;按键处理程序LCALLDELAYSJMPKB_DIS在主程序的大循环中加入中断程序的初始化,即可解决该问题。六、设计总结本系统是以单片机80c196芯片为核心部件,实现了可以测量较大范围的频率计。此次在软件上是花费时间最多的,我们上网找资料,上图书馆,尽可能的了解有关于方面的知识。通过这次设计,使我得到了一次用专业知识、专业技能分析和解决问题全面系统的锻炼。使我在单片机的基本原理、单片机应用系统开发过程,以及在常用编程设计思路技巧(特别是汇编语言)的掌握方面都能向前迈了一大步。从这次的课程设计中,我真真正正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序只有在经常的写与读的过程中才能提高,这就是我在这次课程设计中的最大收获。该设计从头到尾都是自己参与,熟悉了对整个设计的过程,更系统的锻炼了自己。七、致谢经过三周的努力终于把频率计的课程设计完成,我的心里十分的高兴。我在这里首先感谢我的辅导老师孙开放的帮助,他的尽职尽责使我感触很深,这几周虽然很累,很苦,但是我感觉很充实。八、附录;*****8255地址******************************************************C8255EQU0C006H;8255命令口地址P8255AEQU0C000H;8255PA口地址P8255BEQU0C002H;8255PB口地址P8255CEQU0C004H;8255PC口地址;****按键模块所用寄存器*************************************************AXEQU1CHALEQU1CH;存放键值AHEQU1DHBLEQU1EHCXEQU24HCLEQU24HCHEQU25HDXEQU22HDLEQU22HGXEQU26HGLEQU26HGHEQU27HOLEQU2AHOHEQU2BHPXEQU2CHZXEQU2EH;***************测频率模块所用寄存器************************************HTIMEEQU50H;高电平时间LTIMEEQU52H;低电平时间PERIODEQU54H;周期PERIODLEQU54H;16位周期PERIODHEQU56H;低位补零LENTHEQU58H;脉宽LENTHLEQU58H;16位脉宽LENTHHEQU5AH;低位补零RATIOEQU5CH;占空比RATIOLEQU5CH;16位占空比RATIOHEQU5EH;低位补零FREEQU60H;频率FRELEQU60H;32位频率FREHEQU62H;HLEQU30H;HSI值存放LXEQU32H;MXEQU34H;NXEQU36H;MPERIODEQU72H;周期中间变量EXEQU64HELEQU64HEHEQU65HFXEQU66HDISNUMEQU68HDISNUMLEQU68HDISNUMHEQU70H;******主函数模块(初始化)******************************************************ORG2080HMAIN:LDSP,#0FCHLCALLDELAY;延时LDBHSIMOD,#30H;采用HSI部件进行测量LDBHSIMOD,#09HLDBIOC0,#05H;输入端口位HSI.2 CLRBINT_PENDING LDBINT_MASK,#01H LDBIOC1,#04H LDPX,#INTT1;中断服务程序入口地址 STPX,2000H[0] LDBCL,#0; LDBOL,#10;设置标志位,第10次中断执行HSI EI;初始化完成开中断 KB_DIS:CLRBINT_PENDING LDBINT_MASK,#01H LDBIOC1,#04H EILDBAL,#82H;PB口输入,PA,PC口输出STBAL,C8255[0]LDBAL,#08H;使PC4置1STBAL,P8255CLCALLRD_KB;读键子程序LDBCH,ALCMPBCH,#1;读取按键值,并屏蔽掉其他按键JEFIND1CMPBCH,#2JEFIND2CMPBCH,#3JEFIND3CMPBCH,#4JEFIND4SJMPNEXTFIND1:LDBCL,#1SJMPNEXTFIND2:LDBCL,#2SJMPNEXTFIND3:LDBCL,#3SJMPNEXTFIND4:LDBCL,#4NEXT:LCALLCASE_KB;按键处理程序LCALLDELAYSJMPKB_DIS;循环扫描显示;*********T1中断服务程序*********************************************INTT1:DJNZOL,TORETURN;每一秒进行一次测量,刷新数值LCALLTESCOUTLDBOL,#11;采用硬件定时器T1每隔1秒刷新数值TORETURN:RET;**************************************按键处理子程序************************CASE_KB:CMPBCL,#01JENEXT1CMPBCL,#02JENEXT2CMPBCL,#03JENEXT3CMPBCL,#04JENEXT4SJMPRETUNNEXT1:LDDISNUML,PERIODL;显示周期LDDISNUMH,PERIODHSJMPRETUNNEXT2:LDDISNUML,LENTHL;显示脉宽LDDISNUMH,LENTHHSJMPRETUNNEXT3:LDDISNUML,RATIOL;显示占空比LDDISNUMH,RATIOHSJMPRETUNNEXT4:LDDISNUML,FREL;显示频率LDDISNUMH,FREHSJMPRETUNRETUN:SCALLDISPLAYRET;*****************测量子程序***************************;*(测量范围50--100K,理论上不会发生分辨率不足和定时器溢出的情况)********************TESCOUT:TEST:JBCIOS1,7,TESTLDBHL,HSISTALDLX,HSITIMTEST1:JBCIOS1,7,TEST1LDBHL,HSISTALDMX,HSITIMTEST2:JBCIOS1,7,TEST2LDNX,HSITIMTEST3:JBCIOS1,7,TEST3LDZX,HSITIMJBSHL,0,CALHISUBLTIME,ZX,NXSUBHTIME,NX,MXSJMPGETPEPCALHI:SUBHTIME,ZX,NX;计算高电平时间SUBLTIME,NX,MX;计算低电平时间GETPEP:ADDPERIOD,HTIME,LTIMEMULUPERIOD,#145DIVUPERIOD,#100;周期存在PERIODLLDPERIODH,#0LDLENTH,HTIMEMULULENTH,#145DIVULENTH,#100;脉宽存在LENTHLLDLENTHH,#0LDRATIO,HTIMEADDMPERIOD,HTIME,LTIMEMULURATIO,#100DIVURATIO,MPERIOD;占空比存在RATIOLLDRATIOH,#0CMPMPERIOD,#10JGTANOTH;判断频率的范围LDFREL,#0FFFFH;频率为32位数LDFREH,#0DIVUFREL,MPERIODMULUFRE,#10SJMPFINISHANOTH:;频率为16位数LDFREL,#0FFFFH;十进制为65536LDFREH,#0MULUFREL,#10DIVUFRE,MPERIOD;频率存在FRELLDFREH,#0FINISH:RET;***********键值读取子程序******************************************LDBBL,#0AH;键盘扫描第一行STBBL,P8255C[0]SKIPSKIPLDBAL,P8255B[0];读键值XORBAL,#0FFHJNEKEYVAL;判键是否按下LDBBL,#09H;扫描第二行STBBL,P8255C[0]SKIPSKIPLDBAL,P8255B[0]XORBAL,#0FFHJEKBEXITKEYVAL:;计算键码ANDBBL,#01HSHLBL,#03HLDBAH,ALLDBAL,#0FFHSHIFT:INCBALSHRBAH,#01HJNCSHIFTORBA

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论