单片机原理及应用课程设计数字音频测试仪.doc

上传人:土8路 文档编号:10505787 上传时间:2021-05-20 格式:DOC 页数:14 大小:89KB
返回 下载 相关 举报
单片机原理及应用课程设计数字音频测试仪.doc_第1页
第1页 / 共14页
单片机原理及应用课程设计数字音频测试仪.doc_第2页
第2页 / 共14页
单片机原理及应用课程设计数字音频测试仪.doc_第3页
第3页 / 共14页
单片机原理及应用课程设计数字音频测试仪.doc_第4页
第4页 / 共14页
单片机原理及应用课程设计数字音频测试仪.doc_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《单片机原理及应用课程设计数字音频测试仪.doc》由会员分享,可在线阅读,更多相关《单片机原理及应用课程设计数字音频测试仪.doc(14页珍藏版)》请在三一文库上搜索。

1、单片机原理及应用课程设计报告题 目:数字音频测试仪 目录一、课程设计要求1软硬件设计要求1二、设计思路2.1.程序设计基本思路12.2.使用HIS输入并测量信号周期12.3.测量结果处理和显示部分1三、硬件和软件设计21.硬件部分21.1硬件部分21.2程序流程图32.软件部分(程序清单)42.1程序运行结果92.2误差分析92.3调试过程102.4验收结果10四总结与设计心得10五参考资料11一、课程设计要求题目:数字音频频率测试仪:能测试频率范围2020000Hz的信号,误差小于0.1%,实时在LED显示测试结果(保留五位有效数据)。具体设计要求1.完成规定的设计内容,包括相应的硬件电路原

2、理图和设计的软件。2.在规定时间验收并回答指导教师的提问。验收时,先在仿真机的LED上显示自己学号的后8位,再进行相应内容验收。设计目的:能够获得一个精确的声频信号频率测量软件。二、设计思路1. 程序设计基本思路根据设计的要求,首先进行学号后八位的显示,然后进行频率测量。在学号显示程序段中设计读键子程序,判断是否有键按下,一旦扫描出有按键被按下,则程序立即跳转到频率测量程序段。在程序测量过程中,由于要保留5位有效数字,因此对于小频率便涉及到小数点及小数点后有效位的计算和显示,在设计中为了使程序有较为强的逻辑性,我首先对频率测量范围(20Hz20000Hz)进行了分段处理,即分为20 Hz99H

3、z,100Hz999Hz,1000Hz9999Hz,10000Hz20000Hz,对于四个频率段,每次测量结果都用六位数码管进行显示(包括5位有效数字和1位小数点)。对于不同的测量范围,都进行不同的运算处理(当然处理的原理是相似的,只是存储的路径不同)。2.使用HIS高速输入测量信号周期本设计中的主要是应用高速输入HIS进行周期(频率)测量,设置HIS.1端口每发生一次正跳变触发一个事件,同时HIS时间寄存器记下该正跳变事件的触发时间,根据两次触发事件之间的触发时间的差值计算出被测周期信号一个周期内所经历的状态周期个数(当然此处要考虑定时器的溢出,即若两次的测量结果的差值小于零,说明两次测量之

4、间发生了定时器溢出,需重新进行测量)。再根据单片机的主频(已给定)计算出一个状态周期的时间,进而计算出被测周期信号的周期,进一步转化为频率。3.测量结果处理和显示部分接下来是对所得频率的处理和显示,根据设计要求,无论是高频率段还是低频率段,最终的显示结果均要保持5为有效数字。因此对于低频段的测量,便涉及到了小数点后有效数字的计算。那么该如何对小数点后数字进行有效处理呢?我们都知道,整数部分相除,所得余数部分与被除数相除即为整个除法运算的小数部分,由于本设计中并不需要完全地显示测量结果,而是仅需要显示小数点后1位到3位数字,这样我们便可以采用简单的算法。即让整数部分相除所得余数部分乘以10再除以

5、被除数,所得商即为第一位小数;让第二次相除所得余数再乘以10再除以被除数,所得商即为第二位小数以此类推便可得到测量结果的小数部分。最后将所得六位数值(包括一位小数点)放到固定的存储单元,在显示部分测量结果的每位数值都作为偏移量叠加到表格首地址上,读取表格相应存储单元,并输出到接口芯片的相应端口进行段选,显示相应位的测量结果,用循环控制数码管的位选,便可显示完整的测量结果(包括5位有效数字和一位小数点)。本次设计程序中也有使用短时的延时子程序,设计简单,方便调用。三、硬件和软件设计1、 硬件部分根据软件设计要求,将硬件实现部分分为学号显示、键盘扫描并跳转、HIS测量、对测量结果进行处理并显示测量

6、结果。1.1硬件电路设计:本设计中硬件电路主要由MCS-51单片机、接口芯片和仿真机(包括数码管)构成,本实验中根据测量要求只需要在HIS.1端口与地之间加上被测量信号即可实现设计要求。具体硬件电路及连线如下图所示:1.2程序流程图:START学号循环显示及扫描键盘N判断是否有键按下Y进行频率测量频率99Hzf=999Hz判断频率范围频率999Hzf=9999Hz 频率20Hzf9999Hz 结果处理4结果处理1结果处理2结果处理3循环显示测量结果END2、 软件部分(程序清单);-C8255 EQU 0C006H ;8255命令口地址P8255A EQU 0C000H ;8255 PA口地址

7、P8255B EQU 0C002H ;8255 PB口地址P8255C EQU 0C004H ;8255 PC口地址;-AX EQU 1CH AL EQU 1CH AH EQU 1DHBX EQU 1EHBLEQU1EHBHEQU1FHCXEQU20HCLEQU20HCHEQU21HDX EQU 22HDL EQU 22HDHEQU23HEXEQU24HFXEQU26HGLEQU28HEL EQU 30H;- ORG 2080H LD SP,#00C0H LCALL DELAY LDB AL,#82H ;PB口输入,PA,PC口输出 STB AL,C82550 SH_NO: LDB AL,#0

8、0H LDB BL,#0E0HSH1: SCALL DISP SCALL DELAY INCB AL LDB GL,#08H ;键盘扫描第一行 STB GL,P8255C0 SKIP SKIP LDB EL,P8255B0 ;读键值 XORB EL,#0FFH JNE START CMPB AL,#08H JNE SH1 SCALL DELAY SJMP SH_NO DISP: STB BL,P8255C0 ;位选 LD CX,#NO EXTB AX ADD CX,AX LDB DL,CX STB DL,P8255A0 ;段选 SUBB BL,#20H RET;-NO: DB 3FH,3FH,

9、07H,06H,5BH,4FH,5BH,6DH ;学号00712325;-START:LDB IOC0,#04H ;允许HSI.1输入LDB HSI_MODE,#04H ;每次正跳变触发一个事件;-TEST: JBC IOS1,7,TEST LDBX,HSI_TIMETEST1: JBC IOS1,7,TEST1 LDCX,HSI_TIMESUBEX,CX,BXJNCTEST ;定时器有溢出 LD 30H,EX ;8T=1.44678us, f=11.059MHZ EXT 30HMULU 30H,#0FFFFH ;65535/45282 (原始0FFFF/BOF1) DIVU 30H,#0B0

10、E2H LD EX,30HLD30H,#4240H ;1000 000=0F4240H LD32H,#000FH DIVU 30H,EX ;除法运算后,字30H中存储频率值整 数部分,要保留5位有效数字 CMP 30H,#270FH JNC LOOP1 DIVUB 30H,#64H ;分别得到万千百位, 和十个位LDBZE 36H,30H DIVUB 36H,#0AH LDB42H,37H ;百位42H LDBZE38H,36H DIVUB38H,#0AH LD40H,38H ;万位40H ,千位41HLDBZE36H,31H DIVUB36H,#0AH LDB43H,36H LDB44H,3

11、7H ;十位和个位值分别存43H和44H LDB45H,#10H ;显示小数点,存于45H SJMP SH_FREQLOOP1: CMP 30H,#03E7H JNC LOOP2 DIVUB30H,#64H ;分别得到千百位,和十个位 LDBZE36H,30HDIVUB36H,#0AH LD40H,36H ;千位40H,百位41H LDBZE36H,31H DIVUB36H,#0AH LD42H,36H ;十位和个位值分别存42H和43H LDB44H,#10H ;显示小数点,存于44H MULUB32H,#0AH ;乘以10除以除数,得到第一位小数 LD 34H,32H EXT 34H DI

12、VU34H,EX LDB 45H,34H ;小数点后第一位存于45H , 小数点 后需一位 SJMP SH_FREQ LOOP2: CMP 30H,#63H JNC LOOP3 DIVUB30H,#64H ;分别得到百位,和十个位LDBZE36H,30HDIVUB36H,#0AH LDB40H,37H ;百位40H LDBZE36H,31H DIVUB36H,#0AH LDB41H,36H LDB42H,37H ;十位和个位值分别存41H和42H LDB43H,#10H ;显示小数点,存于43H MULUB 32H,#0AH ;乘以10,除以除数, 得到第一位小数 LD 34H,32H EXT

13、 34H DIVU 34H,EX LDB44H,34H ;小数点后第一位存于44H MULUB36H,#0AH ;乘以10,除以除数,得到第二位小数 LD 38H,36H EXT 38H DIVU 38H,EX LDB45H,38H ;小数点后第二位存于45H , 小数点后需二位 SJMP SH_FREQLOOP3: DIVUB30H,#64H ;分别十个位 LDBZE36H,31H DIVUB36H,#0AH LD40H,36H ;十位和个位值分别 存40H和41H LDB42H,#10H ;显示小数点,存于42H MULUB32H,#0AH ;乘以10,除以除数,得到第一位小数 LD 34

14、H,32H EXT 34H DIVU 34H,EX LDB43H,34H ;小数点后第一位 存于43H MULUB36H,#0AH ;乘以10,除以除数,得到第二位小数 LD 48H,36H EXT 48H DIVU 48H,EX LDB44H,48H ;小数点后第二位存于44H MULUB4AH,#0AH ;乘以10,除以除数,得到第三位小数 LD 4CH,4AH EXT 4CH DIVU 4CH,EX LDB 45H,4CH ;小数点后第三位存于45H , 小数点后需三位 ;- SH_FREQ: LDBAL,#00H LDBBL,#0A0H LD 50H,#40H SH2: SCALLDI

15、SP1 ;可以增加延时 LCALL DELAY INCBAL CMPBAL,#06H JNESH2 LJMPSH_FREQ DISP1: STBBL,P8255C0 ;位选 LDCX,#DATAO CLRB 1BH LDB 1AH,50H ADDCX,1AH LDBDL,CX ;段选 STBDL,P8255A0 INCB 50H SUBB BL,#20H RET ;- DELAY: LD DX,#00FFH ;延时子程序 DELAY1: DEC DX JNE DELAY1 RET ;- DATAO: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H ;0,1,2,3,4,5

16、,6,7 DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H,80H ;8,9,A,B,C,D,E,F,. ;- END1. 程序运行结果:测量结果显示,该软件设计能够有效的对低频信号进行测量,且测量误差较小,满足设计要求(即误差小于0.1%);而在进行大频率测量时,存在着较为明显测量误差,误差范围在1%左右,结果不十分理想。2. 误差分析:经过分析不难发现,误差来源主要有以下三个方面。1.首先是算法的问题。由于程序在进行除法运算时,不能能够直接得到小数位,要想得到小数位,则必须对做商后的余数进行再次运算,由此带来的运算误差和相关存储位数据的丢失时均会给测量结果带来运算误差。

17、2.其次是单片机的主频误差。由于主程序的编写,特别是频率处理部分的运算的准确度和主频的精确度紧密相关。若单片机实际主频率与给定频率存在较大的实际偏差,就会给运算部分带来较为严重的误差,最终的显示结果误差便不可消除。3.另外一个较大的误差因素是,信号发生器本身显示频率的准确度。若信号发生器产生的信号本身的频率测量存在误差,那么单片机的测量结果与其进行对比,便显得没有可比性了,误差也变得难以度量。3. 调试过程:本次课程设计我选择的题目和之前的单片机课程实验有一定的相似之处,难点主要在于五位有效数字的获得和测量精度的保证。因此在调试过程中并没有遇到较大的困难,特别是在进行小频率测量时,测量精度很高

18、,达到了设计要求。而在进行高频率测量时,却出现了较大的误差,在调试过程中,这个问题困扰了我较长的时间,一直在通过调节算法进行修改和矫正,但最后结果却只能是差强人意。我仔细检查了自己的程序算法,发现问题并不在于算法,误差的来源可能来自其他方面,具体分析见上述误差分析部分。4. 验收结果:老师的验收结果是“低频误差较大,且不能进行连续频率测量”。这样的结果着实让我郁闷,本来低频测量是很准确的,结果老师过来测量时测量20Hz的方波信号,测量结果却显示19.618,误差确实较大;而进行20000Hz的高频测量时却十分准确,这样的验收结果,当时确实有点让我难以接受。但老师却说以验收结果为准!不过频率的连

19、续测量确实是我之前没有想到的,在进行测量时,对不同的频率进行测量,总要对程序重新加载和运行,确实比较不方便。这也是本次设计的不足之处。四、总结与设计心得 本课程设计总的来说还是较为辛苦的,特别是5位有效数字保留和0.1%的测量精度要求,一开始着实难住了我,为此自己查了很多的资料,花了很多的时间去编写程序,然后去调试。尝试了很多方法去实现,调试失败了修改程序,再调试再修改就这样反反复复了很多次,最后才终于找到了合适的解决方法。但即便这样却还是在进行高频测量时出现了较大的误差,面对出现的高频误差,自己不断调整算法,但最终的结果却只能差强人意。最让人感到意外的是,老师的验收结果却与我平时的调试结果刚

20、好相悖,低频不准确高频却相当准确。这样的结果很让我一时难以接受。不过后来想通了,这恰好说明了实验中的误差的随机性和误差出现的偶然性,正是因为不同单片机之间的固有差异和主频误差,使我的测量变的具有一定的随机性误差。我不敢完全确定自己的算法不存在问题,但是单片机和信号发生器的固有误差是实际存在的,我们在分析实验结果时,必须勇敢地去面对这个问题,只有这样我们才能获得正确的分析结果。当然我的设计中也存在不足之处,例如不能对信号频率进行连续测量。在进行测量时,对不同频率的信号,总要对程序重新加载和运行,这显得十分的笨拙和不方便。当然这个问题可以通过一个简单的自动重复扫描程序来完成,但这确实是我在进行设计

21、之前没有想到的。虽然实现了设计要求,但却并没有做到最优,这是本次设计的一大缺憾! 总的来说通过本次课程设计自己是有很大收获的,进一步巩固和熟悉了单片机课程知识和汇编编程就不言自明了。最重要的是通过本次课程设计增强了自己解决和处理问题的能力:当你独自面对一个陌生的问题时,该如何思考进而找到解决问题的最佳途径、即便你找到了解决问题的方法能否进一步思考进而做到最优、对于获得的最终结果该如何去考虑各种不利因素的影响,这些都是自己在解决问题时所必须思考的。而这些思想的获得均得益于本次课程设计,可以说通过本次课程设计,我受益匪浅。 五、参考资料(1)MCS-96系列单片机原理及应用技术 汪建 华中科技大学出版社 2004(2)MCS51/96系列单片机原理及应用(修订版) 孙涵芳 徐爱卿 北京航空航天大学出版社 1996(3)微型计算机原理与应用(第二版)(MCS-51、MCS-96系列单片机应用基础)(第二版)张鄂亮 肖广润 华中科技大学出版社 2003(4)MCS-96系列单片机实验指导书

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1