职场文秘网

首页 > 领导讲话 > 企业讲话 / 正文

单片机原理及应用课程设计

2020-12-21 09:51:18

 

  单片机课程设计 数字音频频率测试仪

 班级:电气 姓名:

 学号:

 日期:2010年X月X日

  目录 一、课程设计要求···········································1 软硬件设计要求············································1 二、设计思路

 2.1.程序设计基本思路······································1 2.2.使用HIS输入并测量信号周期·······························1 2.3.测量结果处理和显示部分···································1 三.硬件和软件设计········································2 1.硬件部分························································2 1.1硬件部分·····················································2 1.2程序流程图···················································3 2.软件部分························································4 2.1程序运行结果···············································9

 2.2误差分析···················································9

 四.总结与感想···········································10 五.参考资料··············································11

 一. 课程设计要求

 题目:数字音频频率测试仪:能测试频率范围20~20000Hz的信号,误差小于0.1%,实时在LED显示测试结果(保留五位有效数据)。

  具体设计要求:

 1.完成规定的设计内容,包括相应的硬件电原理图和设计的软件。

 2.四次上机要求完成程序。效果是先在仿真机的LED上显示自己学号的后8位,然后再输入显示要测量的频率。

  二. 设计思路

 1. 程序设计基本思路 根据设计的要求,首先进行学号后八位的显示,然后进行频率测量。在学号显示程序段中设计读键子程序,判断是否有键按下,一旦扫描出有按键被按下,则程序立即跳转到频率测量程序段。

  2.使用HIS高速输入测量信号周期 本设计中的主要是应用高速输入HIS进行周期(频率)测量,设置HIS.1端口每发生一次正跳变触发一个事件,同时HIS时间寄存器记下该正跳变事件的触发时间,根据两次触发事件之间的触发时间的差值计算出被测周期信号一个周期内所经历的状态周期个数。再根据单片机的主频(已给定)计算出一个状态周期的时间,进而计算出被测周期信号的周期,进一步转化为频率。

  3.测量结果处理和显示部分 接下来是对所得频率的处理和显示,根据设计要求,无论是高频率段还是低频率段,最终的显示结果均要保持5为有效数字。因此对于低频段的测量,便涉及到了小数点后有效数字的计算。那么该如何对小数点后数字进行有效处理呢?我们都知道,整数部分相除,所得余数部分与被除数相除即为整个除法运算的小数部分,由于本设计中并不需要完全地显示测量结果,而是仅需要显示小数点后1位到3位数字,这样我们便可以采用简单的算法。即让整数部分相除所得余数部分乘以10再除以被除数,所得商即为第一位小数;让第二次相除所得余数再乘以10再除以被除数,所得商即为第二位小数······以此类推便可得到测量结果的小数部分。最后将所得六位数值放到固定的存储单元,在显示部分测量结果的每位数值都作为偏移量叠加到表格首地址上,读取表格相应存储单元,并输出到接口芯片的相应端口进行段选,显示相应位的测量结果,用循环控制数码管的位选,便可显示完整的测量结果。

  三、硬件和软件设计

 1、 硬件部分 根据软件设计要求,将硬件实现部分分为学号显示、键盘扫描并跳转、HIS测量、对测量结果进行处理并显示测量结果。

  1.1硬件电路设计:硬件电路及连线如下图所示:

 1.2程序流程图:

 START

  学号循环显示及扫描键盘

 N

 判断是否有键按下

 Y

  进行频率测量

 频率99Hz<f<=999Hz 判断频率范围 频率999Hz<f<=9999Hz

  频率20Hz<f<=99Hz

 频率f>9999Hz

 结果处理4 结果处理1

 结果处理2

 结果处理3

 循环显示测量结果

  END

  2、 软件部分 ;-------------------------------------------------------------- C8255

  EQU

  0C006H

  ;8255命令口地址 P8255A

 EQU

  0C000H

  ;8255 PA口地址 P8255B

 EQU

  0C002H

  ;8255 PB口地址 P8255C

 EQU

  0C004H

  ;8255 PC口地址 ;--------------------------------------------------------------- AX

 EQU

  1CH

 AL

 EQU

  1CH

 AH

 EQU

  1DH BX

 EQU

  1EH BL EQU 1EH BH EQU 1FH CX EQU 20H CL EQU 20H CH EQU 21H DX

  EQU

  22H DL

 EQU

  22H DH EQU 23H EX EQU 24H FX EQU 26H GL EQU 28H EL

 EQU

 30H ;---------------------------------------------------------------

 ORG

  2080H

 LD

 SP,#00C0H

 LCALL

  DELAY

  LDB

  AL,#82H

 ;PB口输入,PA,PC口输出

 STB

  AL,C8255[0]

  SH_NO: LDB

  AL,#00H

 LDB

  BL,#0E0H SH1:

  SCALL

  DISP

 SCALL

  DELAY

 INCB

 AL

  LDB

  GL,#08H

  ;键盘扫描第一行

 STB

  GL,P8255C[0]

 SKIP

 SKIP

 LDB

  EL,P8255B[0]

 ;读键值

 XORB

 EL,#0FFH

 JNE

  START

 CMPB

  AL,#08H

 JNE

  SH1

 SCALL

  DELAY

 SJMP

 SH_NO DISP:

 STB

  BL,P8255C[0]

  ;位选

 LD

 CX,#NO

 EXTB

 AX

 ADD

  CX,AX

 LDB

  DL,[CX]

 STB

  DL,P8255A[0]

  ;段选

 SUBB

 BL,#20H

 RET ;--------------------------------------------------------------- NO: DB

 3FH,3FH,07H,06H,5BH,4FH,06H,7DH

  ;学号00712316

 ;--------------------------------------------------------------

  START:

 LDB

  IOC0,#04H

  ;允许HSI.1输入

 LDB

  HSI_MODE,#04H

  ;每次正跳变触发一个事件

 ;-------------------------------------------------------------- TEST:

  JBC

  IOS1,7,TEST

 LD BX,HSI_TIME

 TEST1:

 JBC

  IOS1,7,TEST1

  LD CX,HSI_TIME

  SUB EX,CX,BX

 JNC TEST

 ;定时器有溢出

  LD

  30H,EX

  ;8T=1.44678us,f=11.059MHZ

  EXT

  30H

 MULU 30H,#0FFFFH

  ; 65535/45297(原始0FFFF/BOF1)

 DIVU 30H,#0B0E2H

 LD

  EX,30H

 LD 30H,#4240H

  ;1000 000=0F4240H

 LD 32H,#000FH

 DIVU

 30H,EX ;除法运算后,字30H中存储频率值整数部分,保留5位有效数字

  CMP

 30H,#270FH

  JNC

 LOOP1

  DIVUB 30H,#64H

  ;分别得到万千百位,和十个位

 LDBZE 36H,30H

 DIVUB 36H,#0AH

 LDB 42H,37H

 ;百位42H

  LDBZE 38H,36H

 DIVUB 38H,#0AH

 LD 40H,38H

 ;万位40H ,千位41H

 LDBZE 36H,31H

 DIVUB 36H,#0AH

 LDB 43H,36H

  LDB 44H,37H

 ;十位和个位值分别存43H和44H

  LDB 45H,#10H

 ;显示小数点,存于45H

  SJMP

 SH_FREQ

 LOOP1:

 CMP

 30H,#03E7H

 JNC

 LOOP2

 DIVUB

 30H,#64H

  ;分别得到千百位,和十个位

 LDBZE

 36H,30H

 DIVUB

  36H,#0AH

 LD 40H,36H

 ;千位40H,百位41H

 LDBZE

  36H,31H

 DIVUB

 36H,#0AH

 LD 42H,36H

  ;十位和个位值分别存42H和43H

  LDB 44H,#10H

  ;显示小数点,存于44H

  MULUB 32H,#0AH

 ;乘以10,除以除数,得到第一位小数

  LD

 34H,32H

  EXT

  34H

  DIVU 34H,EX

 LDB 45H,34H

  ;小数点后第一位存于45H , 小数点后需一位

  SJMP

 SH_FREQ

  LOOP2:

 CMP

 30H,#63H

 JNC

 LOOP3

 DIVUB

 30H,#64H

  ;分别得到百位,和十个位

 LDBZE

 36H,30H

 DIVUB

  36H,#0AH

 LDB

  40H,37H

 ;百位40H

  LDBZE

 36H,31H

  DIVUB

  36H,#0AH

  LDB

 41H,36H

 LDB 42H,37H

  ;十位和个位值分别存41H和42H

  LDB 43H,#10H

 ;显示小数点,存于43H

  MULUB 32H,#0AH

  ;乘以10,除以除数,得到第一位小数

  LD

 34H,32H

  EXT

  34H

  DIVU 34H,EX

 LDB 44H,34H

  ;小数点后第一位存于44H

  MULUB 36H,#0AH

  ;乘以10,除以除数,得到第二位小数

  LD

 38H,36H

  EXT

  38H

  DIVU 38H,EX

 LDB 45H,38H

  ;小数点后第二位存于45H , 小数点后需二位

  SJMP

 SH_FREQ

 LOOP3:

  DIVUB

 30H,#64H

  ;分别十个位

  LDBZE

 36H,31H

  DIVUB

 36H,#0AH

  LD 40H,36H

  ;十位和个位值分别存40H和41H

  LDB 42H,#10H

 ;显示小数点,存于42H

  MULUB 32H,#0AH

 ;乘以10,除以除数,得到第一位小数

  LD

 34H,32H

  EXT

  34H

  DIVU 34H,EX

 LDB 43H,34H

 ;小数点后第一位存于43H

  MULUB 36H,#0AH

 ;乘以10,除以除数,得到第二位小数

  LD

 48H,36H

  EXT

  48H

  DIVU 48H,EX

 LDB 44H,48H

 ;小数点后第二位存于44H

  MULUB 4AH,#0AH

 ;乘以10,除以除数,得到第三位小数

  LD

 4CH,4AH

  EXT

  4CH

  DIVU 4CH,EX

 LDB

  45H,4CH

  ;小数点后第三位存于45H , 小数点后需三位

 ;-------------------------------------------------------------- SH_FREQ:

 LDB AL,#00H

  LDB BL,#0A0H

  LD

  50H,#40H SH2:

 SCALL DISP1

  ;可以增加延时

 LCALL

 DELAY

  INCB AL

  CMPB AL,#06H

 JNE SH2

  LJMP SH_FREQ

 DISP1: STB BL,P8255C[0]

  ;位选

 LD CX,#DATAO

  CLRB

 1BH

  LDB

  1AH,[50H]

  ADD

 CX,1AH

 LDB

 DL,[CX]

  ;段选

 STB

 DL,P8255A[0]

 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,6,7

 DB

 7FH,6FH,77H,7CH,39H,5EH,79H,71H,80H

 ;8,9,A,B,C,D,E,F,. ;---------------------------------------------------------------

 END 1. 程序运行结果:

 测量结果显示,该软件设计能够有效的对低频信号进行测量,且测量误差较小,满足设计要求(即误差小于0.1%);而在进行大频率测量时,存在着较为明显测量误差,误差范围在1%左右,结果不十分理想。

 2. 误差分析:

 1.算法的问题。由于编写程序的时候在低的频率时对于小数位的处理没有做的很好,故导致在测量低频时误差会较大,而高频时不会出现这样的情况。

 2.单片机的主频误差。由于主程序的编写,特别是频率处理部分的运算的准确度和主频的精确度紧密相关。若单片机实际主频率与给定频率存在较大的实际偏差,就会给运算部分带来较为严重的误差,最终的显示结果误差便不可消除。

 3.信号发生器本身显示频率的准确度。信号发生器本身的输出频率与显示频率之间存在误差,导致两次测量的误差累计,很容易造成误差变大。

  四、总结与感想

 单片机的课程设计一直是难点,虽然给了10个题目,但是每个题目都会有其对应的难点,我选得是个自己觉得比较简单的题目,不过自己在处理低频时没有很好的处理好,这导致了低频是误差比较大,另外一个不足就是不能连续测量频率,虽然本人努力的想加上那个延时刷新的程序,不过最后还是没能成功,这算是一个遗憾。

 五、参考资料 (1)MCS-96系列单片机原理及应用技术

  汪建

 华中科技大学出版社

 2004 (2)MCS-96系列单片机实验指导书 (3)单片机原理及应用教程(刘瑞新等主编)

 

Tags: 单片机   课程设计   原理  

搜索
网站分类
标签列表