华中科技大学 单片机课设报告-频率计_第1页
华中科技大学 单片机课设报告-频率计_第2页
华中科技大学 单片机课设报告-频率计_第3页
华中科技大学 单片机课设报告-频率计_第4页
华中科技大学 单片机课设报告-频率计_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

单片机课程设计报告PAGEPAGE28检测技术基本实验电气学科大类电气学科大类09级《51单片机》课程课程设计(周期性脉冲信号的测量装置)姓名学号专业班号指导教师日期实验成绩评阅人目录摘要 3设计任务 4总体方案 4硬件设计 5软件设计 6系统联调 10设计总结 14附录 15摘要单片机微型计算机是微型计算机的一个重要分支,也是颇具生命力的机种。单片机微型计算机简称单片机,特别适用于控制领域,故又称为微控制器。单片机是20世纪中期发展起来的一种面向控制的大规模集成电路模块,具有功能强、体积小、可靠性高、价格低廉等特点,在工业控制、数据采集、智能仪表、机电一体化、家用电器等领域得到了广泛的应用,极大的提高了这些领域的技术水平和自动化程度。单片机应用的意义绝不仅限于它的广阔范围以及带来的经济效益,更重要的意义在于,单片机的应用正从根本上改变着传统的控制系统的设计思想和设计方法。从前必须由模拟电路或数字电路实现的大部分控制功能,现在使用单片机通过软件就能实现了。随着单片机应用的推广普及,单片机控制技术将不断发展,日益完善。本文是设计频率/脉冲宽度的测量与显示的硬件电路与程序的编制。它可以测量脉冲信号的脉冲宽度,频率,周期和占空比四个参数。利用定时器的门控信号GATE进行控制可以实现脉冲宽度的测量,利用定时器T1计数来测量由P3.2口输入的脉冲信号的频率。一.设计任务功能及技术指标要求设计一周期性脉冲信号的测量装置,要求如下:(1)可以测量脉宽、占空比、周期和频率;(2)循环采集计算上述各量,并用键盘选择对象显示;(3)制定可行的系统设计方案,完成硬件设计、软件设计和软件调试。2.设计内容按照技术指标要求进行硬件与软件设计。二.总体方案1.原始思路上升沿打开定时器上升沿打开定时器下降沿读取定时器值并保存下一个上升沿关闭定时器,读取定时器值并保存如上图所示,当脉冲的上升沿来临时,将定时器打开;紧接着的下降沿来临时,读取定时器的值,假设定时时间为t1;下一个上升沿来临时关闭定时器,读取定时器的值,假设定时时间为t2。t1即为1个周期内高电平的时间,t2即为脉冲的周期。t1/t2即为占空比,1/t2即为频率。2.利用MCS-51实现(1).设定一个外部中断,响应1次外部中断,在中断程序中测量参数。(2).将脉冲信号从P3.2脚引入,将T1设为定时器方式工作,运行控制位TR1启动定时器,采用方式1--16位定时器,初值TH1、TL1设为零。在待测脉冲高电平期间,T1对内部周期脉冲进行计数。在待测脉冲高电平结束时,其下降沿向P3.2发中断,在外中断1的中断服务程序中,读取TH1、TL1的计数值,该值就是待测脉冲的高电平时间。随后清零TH1和TL1,以便下一次的测量。(3).利用第二步测出的高电平时间,通过计算公式,分别计算出脉冲宽度,频率,周期和占空比。(4).将上述四个参数结果用6位LED动态显示出来(用按键控制显示)。三.硬件设计1.硬件配置以80C51单片机为核心构成基本应用系统。用到了模块如下: 6位LED动态显示P3.2信号输入口核心板上4位按键(P1.4到P1.7)TTL输出方波的信号发生器80C51上的存储器系统2.电路接线图四.软件设计1.设计思路 (1)测量被测信号高电平时间。 如果测量时记录量如下图 (每50ms测量一次)第一个上升沿时,记下为m第一个上升沿时,记下为m第一个下降沿时,记下为n。第一个高电平内,溢出次数记为C1下一个上升沿时,记下为h。这一个周期内溢出次数记为C2 则高电平时间为 T=50000*C1+n-m(us) 周期为 P=50000*C2+h-m(us) (2)周期,脉宽,占空比,频率之间的转换。 记周期,脉宽,占空比,频率四值分别为P、H、R、F,且高电平时间为T,则这五个量之间的关系为: R=H/P,F=1/P,H=T (3)解决可以连续测量的问题。 一次测量显示后,跳转到开始,不断循环测量显示。 (4)将测量的值转化为可以直接显示的十进制数。 通过二进制转换十进制子程序HTD完成这一目标。 (5)周期,脉宽,占空比,频率四个量的显示切换问题。 只用四个按键中的一个(P1.4)来显示依此四个量:默认显示为频率,按一次按键显示转为脉宽,再按一次转为占空比,再按一次转为周期。(6)整体调用子程序顺序。依次调用测量、计算、按键处理、数值转换、显示和延时子程序流程图整体流程图如下:开始开始定义过程初始化各量选择中断触发方式调用测量子程序调用计算子程序调用按键处理子程序调用数值转换子程序调用显示子程序调用延时子程序R4=0?否是测量电路框图:3.课程设计程序见附录五.系统联调通过对程序的汇编,连接,执行来发现程序中存在的语法错误和逻辑错误,并加以纠正。1.按键处理问题一开始,我想用P1.4到P1.7四个按键分别控制显示周期,脉宽,占空比,频率四个量。用的按键处理子程序如下:KEY: JB P1.7,KEY1 MOV NUMBERL,FREL MOV NUMBERH,FREH RETIKEY1: JB P1.6,KEY2 MOV NUMBERL,PERIODL MOV NUMBERH,PERIODH RETIKEY2: JB P1.5,KEY3 MOV NUMBERL,LENL MOV NUMBERH,LENH RETIKEY3: JB P1.4,LOOP MOV NUMBERL,RATIOL MOV NUMBERH,RATIOH RETILOOP: LJMP MAIN然而,我发现了一个很严重的问题:用这种方法,必须将各个按键按住不放才能连续不断显示,一旦松开手,就停止显示。进过分析,这个问题的症结在于,每个按键按下后缺少一个延时时间。按下这个键的时间必须超过延时时间,才算此键真正按下。经改进后,我仅用一个按键P1.4依次显示周期,脉宽,占空比,频率四个量。每按下一次键,即显示一个量,功能号KBM自动加1,当检测到功能号为3时,则清零,返回到第一个量的显示。改进后子程序如下:KEY: JB P1.4,KEY1 ;查询K0,若K0未按下则跳转 LCALL DELAY ;延时去抖动,顺便刷新显示 JB P1.4,KEY1 ;若K0未真正按下则跳转 INC KBM ;K0真正按下,功能号增1 MOV A,KBM CJNE A,#4,KEY0 MOV KBM,#0 ;若功能号为3,则清零 RETIKEY0: NOP AJMP KEY1 ;跳转至按键结束处理程序 RETIKEY1: NOP ;以下程序根据功能号显示不同内容 MOV A,KBM CJNE A,#0,KEY2 MOV NUMBERL,FREL MOV NUMBERH,FREH LJMP KEY5KEY2: CJNE A,#1,KEY3 MOV NUMBERL,PERIODL MOV NUMBERH,PERIODH LJMP KEY5KEY3: CJNE A,#2,KEY4 MOV NUMBERL,LENL MOV NUMBERH,LENH LJMP KEY5KEY4: CJNE A,#3,KEY5 MOV NUMBERL,RATIOL MOV NUMBERH,RATIOHKEY5: LCALL HTD MOV R4,#30H LJMP MAIN2 2.最终测量频率范围 本设计方案采用6位LED动态显示,我采用其中低五位为频率显示位数,故理想的频率上限为65536Hz;频率显示下限则由硬件极限决定,大约在50Hz左右。 在我最终验收调试过程中,频率显示上限位62250Hz,与理想的65536Hz有些许差距,我想估计是与干扰,硬件误差有关。而频率显示下限则为26Hz,达到了很高的标准。在逼近下限的过程中,当频率低到100Hz,LED屏幕有明显的闪动,那是因为频率太低,由于人眼的暂留效应,已经难以看到连续的显示情况。 综上,此次频率计的设计测量频率范围为26Hz到62250Hz。 3.有关除法的问题 本实验涉及到双字节二进制乘除法运算,我曾尝试过用书本上的内容,自己编写除法程序,如下所示:入口条件:被除数在R2、R3、R4、R5中,除数在R6、R7中。

出口信息:OV=0时,双字节商在R2、R3中,OV=1时溢出。

影响资源:PSW、A、B、R1~R7堆栈需求:2字节

DIVD:CLRC;比较被除数和除数

MOVA,R3

SUBBA,R7

MOVA,R2

SUBBA,R6

JCDVD1

SETBOV;溢出

RET

DVD1:MOVB,#10H;计算双字节商

DVD2:CLRC;部分商和余数同时左移一位

MOVA,R5

RLCA

MOVR5,A

MOVA,R4

RLCA

MOVR4,A

MOVA,R3

RLCA

MOVR3,A

XCHA,R2

RLCA

XCHA,R2

MOVF0,C;保存溢出位

CLRC

SUBBA,R7;计算(R2R3-R6R7)

MOVR1,A

MOVA,R2

SUBBA,R6

ANLC,/F0;结果判断

JCDVD3

MOVR2,A;够减,存放新的余数

MOVA,R1

MOVR3,A

INCR5;商的低位置一

DVD3:DJNZB,DVD2;计算完十六位商(R4R5)

MOVA,R4;将商移到R2R3中

MOVR2,A

MOVA,R5

MOVR3,A

CLROV;设立成功标志

RET后来,孙开放老师给了我们双字节二进制无符号数除法,双字节二进制无符号数乘法,这两个非常有用的工具子程序,经过上机调试,我编写的和老师提供的均能很好地运作,本文附录中的程序使用的是孙老师的乘除子程序。六.设计总结经过前一个学期的单片机的学习,我有机会又学到了一种新的机器语言。经过孙老师详细讲解我已对单片机的各个指令功能,寻址方式,程序设计方法有了初步了解。但毕竟课本上的只是理论。这次课设我分到的任务是外部输入正脉冲宽度的测量,科设的题目综合性很强,用到了外部中断,定时器T1的方式1,数制转换,数码管显示等等。平时学习时我们都学到了各子模块的程序,到真正将它们综合起来去控制实验箱还是第一次。首先在编写程序时我就遇到了很大的困难,编写程序需要有一个冷静的头脑,心浮气躁是不行的。遇到困难时更是要心平气和,细致思考。幸运的是在和同学激烈讨论,老师细心指导下我顺利完成了课设。最终的程序由主程序,测量子程序,计算子程序,按键处理程序,显示子程序五个主体模块,和几个工具子程序组成。在对程序的宏观理解基础上,细微处理决定成败。课设让我对单片机软件与硬件结合有了一定的了解,也激发了我学习这门课的热情,同时我也认识到现在知道的单片机知识远远不够,要想要将所学运用到实际工作中还需刻苦努力钻研,大量实践。在以后的学习中我一定注意这方面的练习。七.附录以下为整个程序:;显示模块所用寄存器D_DAT0 EQU 60HD_DAT1 EQU 61HD_DAT2 EQU 62HD_DAT3 EQU 63HD_DAT4 EQU 64HD_DAT5 EQU 65H;测量模块所用寄存器COUNT EQU 40HAL AH EQU 42HC1 EQU 43HBL EQU 44HBH EQU 45HC2 EQU 46HCL EQU 47HCH EQU 48HC3 EQU 49HHTIMEL EQU 50H HTIMEH EQU 51H ;高电平时间PERIODL EQU 52HPERIODH EQU 53H ;周期LENL EQU 54HLENH EQU 55H ;脉冲宽度RATIOL EQU 56HRATIOH EQU 57H ;占空比FREL EQU 58HFREH EQU 59H ;频率,以上5个参数均为双字节;计算中间量所用寄存器NUMBERL EQU 69HNUMBERH EQU 6AH OL EQU 6BHCL EQU 6CHKBM EQU 6DH;定义完毕ORG 0000HAJMP STARTORG 001BH ;采用定时器1LJMP TI_1ORG 0030HSTART: MOV SP,#30H CLR P1.1 ;初始化有关I/O口 CLR P1.2 MOV KBM,#0 MOV OL,#0 MOV CL,#0 MOV TMOD,#10H;运行控制位TR1启动定时器,定时器工作方式,采用方式1--16位定时器 MOV TL1,#0 MOV TH1,#0 MOV D_DAT5,#01H;初始化中间量寄存器 MOV D_DAT4,#02H MOV D_DAT3,#03H MOV D_DAT2,#04H MOV D_DAT1,#05H MOV D_DAT0,#06H MOV COUNT,#0;初始化count寄存器为0 MOV R0,#D_DAT0 MOV R1,#01H SETB IT0 ;中断触发方式--脉冲触发 SETBET1 SETB EAMAIN: LCALL MEASURE ;这里在主程序中,依此调用测量、计算、 ;按键处理、数值转换、显示和延时子;程序MAIN1: LCALL CALCUL LCALL KEYMAIN2: LCALL HTD LCALL DISPLAY LCALL DELAY DJNZ R4,MAIN2 LJMP MAIN;*************************测量子程序**************************MEASURE: JB P3.2,MEASURE SETB TR1WAIT1: JNB P3.2,WAIT1 MOV AL,TL1 MOV AH,TH1 MOV C1,COUNTWAIT2: JB P3.2,WAIT2 MOV BL,TL1 MOV BH,TH1 MOV C2,COUNTWAIT3: JNB P3.2,WAIT3 MOV CL,TL1 MOV CH,TH1 MOV C3,COUNT CLR TR1 MOV COUNT,#0 MOV TL1,#0 MOV TH1,#0TIM_1: INC COUNT RETI;*************************计算子程序**************************CALCUL: MOV R2,C2 MOV R3,BH MOV R4,BL MOV R6,AH MOV R7,AL MOV R5,C1 LCALL JIAN ;对下降沿、上升沿采集点进行减法运算 MOV HTIMEL,R4 MOV HTIMEH,R3 ;计算高电平时间 MOV R3,CH MOV R4,CL MOV R6,AH MOV R7,AL LCALL JIAN MOV PERIODL,R4 MOV PERIODH,R3 ;计算脉冲信号的周期,单位微秒 MOV A,HTIMEL MOV LENL,A MOV A,HTIMEH MOV LENH,A ;由高电平时间得到脉宽,单位微秒 MOV R2,LENH MOV R3,LENL MOV R6,#0 MOV R7,#100 LCALL CHEN MOV R6,PERIODH MOV R7,PERIODL LCALL CHU MOV RATIOH,R4 MOV RATIOL,R5 ;脉宽x100/周期=占空比 MOV R2,#0 MOV R3,#0FH MOV R4,#42H MOV R5,#40H MOV R6,PERIODH MOV R7,PERIODL LCALL CHU MOV FREH,R4 MOV FREL,R5 ;10^6/周期=频率,单位HZ RET;**********************按键处理程序**********************KEY: JB P1.4,KEY1 ;查询K0,若K0未按下则跳转 LCALL DELAY ;延时去抖动,顺便刷新显示 JB P1.4,KEY1 ;若K0未真正按下则跳转 INC KBM ;K0真正按下,功能号增1 MOV A,KBM CJNE A,#4,KEY0 MOV KBM,#0 ;若功能号为3,则清零 RETIKEY0: NOP AJMP KEY1 ;跳转至按键结束处理程序 RETIKEY1: NOP ;以下程序根据功能号显示不同内容 MOV A,KBM CJNE A,#0,KEY2 MOV NUMBERL,FREL MOV NUMBERH,FREH LJMP KEY5KEY2: CJNE A,#1,KEY3 MOV NUMBERL,PERIODL MOV NUMBERH,PERIODH LJMP KEY5KEY3: CJNE A,#2,KEY4 MOV NUMBERL,LENL MOV NUMBERH,LENH LJMP KEY5KEY4: CJNE A,#3,KEY5 MOV NUMBERL,RATIOL MOV NUMBERH,RATIOHKEY5: LCALL HTD MOV R4,#30H LJMP MAIN2;***********************二进制转换十进制子程序*************************HTD: MOV D_DAT5,#00H MOV D_DAT4,#00H MOV D_DAT3,#00H MOV D_DAT2,#00H MOV D_DAT1,#00H MOV D_DAT0,#00HH10000: CLR C ;进位位C清0 MOV A,NUMBERL ;源数据低位装载到累加器A中 MOV R6,A ;备份源数值低位到寄存器R6中 SUBB A,#10H ;源数值低位减去10000的低位10H MOV NUMBERL,A ;余数存回到源数值低位存储单元 MOV A,NUMBERH ;源数值高位装载到累加器A中 MOV R7,A ;备份源数值高位到寄存器R7中 SUBB A,#27H ;源数值高位带借位减10000的高位27H MOV NUMBERH,A ;余数存回到源数值低位存储单元 INC D_DAT1 ;万位增1 JNC H10000 ;如果没有借位则利用余数循环再减 MOV NUMBERL,R6 MOV NUMBERH,R7 ;有借位表明为最后一次无效减 ;程序顺序执行,应还原最后一次修改值 ;用备份值作为新的源数值(余数) DEC D_DAT1 ;万位数减1,去掉最后一次无效减的影响H1000: MOV A,NUMBERL ;源数值低位装载到累加器A中 MOV R6,A ;备份源数值低位到寄存器R6中 CLR C ;清0进位位C SUBB A,#0E8H ;减去1000的低位0E8H MOV NUMBERL,A ;存回余数低位 MOV A,NUMBERH ;取源数值高位 MOV R7,A SUBB A,#03H ;减1000的高位03H MOV NUMBERH,A ;存回余数高位 ;有借位则跳到下一步继续运算 INC D_DAT2 ;没有借位,百位增1 JNC H1000 MOV NUMBERL,R6 MOV NUMBERH,R7 ;没有借位继续减 ;注意本轮循环中最后一次减时百位未增1 DEC D_DAT2 ;所以不存在还原的问题 ;进入下一轮时,源数值(余数)都在R6中H100: MOV A,NUMBERL ;源数值低位装载到累加器A中 MOV R6,A ;备份源数值低位到寄存器R6中 CLR C ;清0进位位C SUBB A,#100 ;减去100 MOV NUMBERL,A ;存回余数低位 MOV A,NUMBERH ;取源数值高位 SUBB A,#00H ;减100的高位0,实际上是减去借位位 MOV NUMBERH,A ;存回余数高位 JC H10 ;有借位则跳到下一步继续运算 INC D_DAT3 ;没有借位,百位增1 AJMP H100 ;没有借位继续减 ;注意本轮循环中最后一次减时百位未增1 ;所以不存在还原的问题 ;进入下一轮时,源数值(余数)都在R6中H10: CLR C MOV A,R6 ;源数值(低位)装载到累加器A中 ;到此源数值高位已经为0,不用再参加计算 MOV D_DAT5,A ;存回源数值低位 ;如果是最后一次减,则此值即为个位 SUBB A,#10 ;减去10 MOV R6,A ;保存余数 JC H1 ;有借位,运算结束 INC D_DAT4 ;没有借位,十位增1 LJMP H10 ;没有借位继续减H1: RET ;子程序返回;****************************显示子程序****************************DISPLAY: MOV A,R1 ;取位代码 MOV P0,A ;位代码送P0口 SETB P1.2 NOP CLR P1.2 ;产生一个锁存脉冲,锁存位代码 MOV A,@R0 ;取需显示的数字 MOV DPTR,#DISPD ;装载笔画编码表首地址 MOVC A,@A+DPTR ;取需显示数字笔画代码 MOV P0,A ;笔画代码送到P0口 SETB P1.1 NOP CLR P1.1 ;产生一个锁存脉冲,锁存笔画代码 INC R0 ;R0增1指向下一个需显示数字 MOV A,R1 CLR C RLC A MOV R1,A ;R1中的值左移1位,指向下一位数码管 CJNE R0,#066H,DISP1 ;R0中不为20H则继续 MOV R0,#D_DAT0 ;R0中为20H,循环完一轮 ;重新赋初值 MOV R1,#1 ;位置代码初?DISP1: NOP RET;**************************双字节减法*************************JIAN: CLR C MOV A,R4 ;R2,R3,R4,分别为被减数的溢出位,高8位和低8位,R5,R6,R7分别为减数的溢出位,高8位和低6位,结果存于R2,R3,R4 SUBB A,R7 MOV R4,A MOV A,R3 SUBB A,R6 MOV R3,A MOV A,R2 SUBB A,R5 MOV R2,A RET ;******************双字节二进制无符号数除法*******************;入口条件:被除数在R2、R3、R4、R5中,除数在R6、R7中;;出口信息:OV=0时,商在R4、R5中,余数在R2、R3中,OV=1时溢出;;影响资源:PSW、A、B、R1~R7堆栈需求:2字节。;*************************************************************CHU:DIVD: CLRC ;比较被除数和除数 MOV A,R3 SUBB A,R7 MOV A,R2 SUBB A,R6 JC DVD1 SETB OV ;溢出 RETDVD1: MOV B,#10H ;计算双字节商DVD2: CLRC ;部分商和余数同时左移一位 MOV A,R5 RLC A ;R5循环左移 MOV R5,A MOV A,R4 RLC A ;R4循环左移 MOV R4,A MOV A,R3 RLC A ;R3循环左移 MOV R3,A XCH A,R2 ;取R2中的值至A,A的值(循环左移后的R3的值)保存到R2 RLC A ;R2循环左移 XCH A,R2 ;保存循环左移后的R2的值至R2,恢复循环左移后的R3的值至A MOV F0,C ;保存移出位 CLR C SUBB A,R7 ;计

温馨提示

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

评论

0/150

提交评论