51单片机的脉宽测量要点Word文档下载推荐.docx
《51单片机的脉宽测量要点Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《51单片机的脉宽测量要点Word文档下载推荐.docx(12页珍藏版)》请在冰豆网上搜索。
1.测量范围:
4ms~512ms
2.测量信号:
方波
3.测量信号电压:
3~5V
4.显示位数:
6位
基本要求:
1.完成单片机外部输入正脉宽度测量的综合设计
2.编程实现题目要求的基本功能,程序运行通过
3.撰写课程实践报告(设计思路、实现方法、硬件资源分配、程序流程图、运行结果分析等)
所需仪器设备:
伟福Lab6000综合实验/仿真系统一台套、微机一台
成果验收形式:
程序上机运行
参考文献:
1.胡辉、李叶紫,单片机原理与应用,中国水利水电出版社,2007
2.Lab6000综合实验/仿真系统说明书
时间
安排
(1)第八周:
选题、方案设计
(2)第1次上机调试程序
(3)第2次上机课题验收
(4)第九周:
上交实践报告
李叶紫教研室主任:
李叶紫
2010年4月25日
目录
一概述………………………………………………………………3
二方案设计与论证……………………………………………………………3
三单元电路设计与参数计算…………………………………………………4
1.总程序框图……………………………………………………………4
2.单元电路设计………………………………………………………5
3.单元程序模块………………………………………………………7
4.参数计算……………………………………………………………9
四总原理图及硬件资源分配………………………………………………10
五安装与调试………………………………………………………………11
六性能测试与分析…………………………………………………………12
七结论………………………………………………………………………12
八心得体会…………………………………………………………………12
九参考文献…………………………………………………………………13
一、概述
近年来随着科技的飞速发展,单片机的应用正在不断地走向深入,同时带动传统控制检测日新月益更新。
在实时检测和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构,以及针对具体应用对象特点的软件结合,加以完善。
工程上常需要对各种机构工作的时间特性进行分析测量,如图1给出的这种时间特性示意图,其中t表示时间脉冲宽度,T表示一个工作循环周期。
工程实际中,影响时间特性的因素很多,因而工程中常需测量这种脉冲序列正脉冲或负脉冲的宽度。
图1脉冲波形
本系统采用单片机AT89C51为中心器件来设计脉冲宽度测量器,系统实用性强、操作简单、扩展性强。
在现有的单片机仿真机系统上掌握相关软硬件设计与调试知识,根据所选择题目,焊接好硬件电路,正确进行元器件的测试与调试,并在计算机上编写汇编程序调试运行,并实现参考选题中要求的设计。
二、方案设计与论证
1.设定一个开关控制测量开始。
按动开关接外部中断0,响应1次外部中断。
在中断程序中测量脉宽。
2.将脉冲信号从P3.3脚引入。
将T1设为定时器方式工作。
并工作在门控方式。
初值TH1、TL1设为零。
在待测脉冲高电平期间,T1对内部周期脉冲进行计数。
在待测脉冲高电平结束时,其下降沿向P3.3发中断,在外中断1的中断服务程序中,读取TH1、TL1的计数值,该值就是待测脉冲的脉宽。
随后清零TH1和TL1,以便下一脉宽的测量。
3.由于T1方式1最大定时时间为131ms,因此当测脉冲宽度超过131ms时,需要进行进位处理。
4.为防止在外部输入正脉冲当中启动计数而产生错误测量,要在测到是低电平之后的下一个高电平才开始启动定时器,再次测到低电平时停止计数,把计数结果处理后送数码管显示。
三、单元电路设计与参数计算
1.总程序框图
2.单元电路设计
本设计由单片机、测量控制电路、键盘及显示电路几个组成部分,各部分采用的电路形式及主要器件确定如下:
(1)单片机部分
选用89C51作为主机,同时要设计89C51单片机的晶振电路和复位电路。
单片机部分框图
单片机部分原理图
(2)测量电路部分
直接利用单片机内部的定时/计数器实现频率的测量。
测量电路框图
(3)显示部分具体电路
显示部分框图
显示部分原理图
3.单元程序模块
(1)主程序
START:
MOVSP,#50H
MOVTMOD,#90H;
设置定时器1的工作方式为1,GEAE置1
MOVTH1,#00H
MOVTL1,#00H;
定时器时间初值置零
MOVIE,#81H;
开外部中断0
CALLLED;
调显示
LJMPSTART
END
(2)中断服务子程序(启动定时功能)
INT_0:
CLREX0;
关中断
MOVDATC,#00H
MOVTL1,#00H
SETBTR1;
启动定时器1,但不计数
JNBP3.3,$;
等待正脉冲
CH0:
JNBTF1,CH1;
计数没溢出,跳转
INCDATC
CLRTF1
MOVTH1,#00H;
装入初值
启动定时器
CH1:
JBP3.3,CH0;
判断正脉冲是否结束
CLRTR1;
停止计数
MOVA,TL1
MOVDATL,A
MOVA,TH1
MOVDATH,A
(3)显示子程序
LEDMAP:
DB3fh,06h,5bh,4fh,66h,6dh,7dh,07h
DB7fh,6fh,77h,7ch,39h,5eh,79h,71h
LED:
MOVR0,#LEDBuf
MOVR1,#6;
共6个八段管
MOVR2,#00100000b;
从左边开始显示
Loop:
MOVDPTR,#8002H
MOVA,#0
MOVX@DPTR,A;
关所有八段管
MOVA,@R0
MOVDPTR,#8004H
MOVX@DPTR,A
MOVDPTR,#8002H
MOVA,R2
MOVX@DPTR,A;
显示一位八段管
MOVR6,#1
MOVR7,#0
L:
DJNZR7,L
DJNZR6,L
MOVA,R2;
显示下一位
RRA
MOVR2,A
INCR0
DJNZR1,Loop
RET
4.参数计算
计算脉宽:
d=1/[f(输入信号频率)*2]
测量脉宽:
d=计数值×
TC(机器周期)(μs),d(μs)÷
1000→d(ms)
四、总原理图及硬件资源分配
1.总原理图
2.硬件资源分配表
存储单元、寄存器
用途
备注
30H
存放计数低8位
31H
存放计数高8位
32H
存放计数进位位
33H-38H
显示缓冲区
50H
堆栈区
R0
存放显示缓冲区指针
R1
存放用于显示的数码管数
R2
点亮数码管的位选量
R3
暂存处理计数压缩BCD码形式的小数后百分位、千分位
R4
暂存处理计数压缩BCD码形式的个位、小数后十分位
R5
暂存处理计数压缩BCD码形式的百位、十位
R6
用于延时程序
R7
五、安装与调试
1.硬件连线:
单片机外部中断1接信号发生器来引入所测量的外部脉冲,外部中断0接负脉冲发生器作为单片机的中断控制,显示部分按照试验箱上实验十六(八段数码管的显示)的连线连接。
2.在调试过程中遇到的问题及调试解决方法:
(1)程序开始调试时总报错,程序无法运行调试。
检查了保存情况,程序保存后缀名正确。
仔细排查后发现,在输入程序时为了输入注释汉字,大部分情况下中英文输入法混淆切换使用,使得程序中逗号分隔符有些是在中文输入状态下输入的,导致程序无法运行。
修正方法:
将程序中所有逗号在英文输入状态下重新输入。
再次运行成功,进入正常调试。
(2)在同一个外部正脉冲的情况下,多次测量却得到不同的数值。
思考后
认为问题应该出在计数算时间部分,检查推敲计数算时间程序段,原来是计数开始时刻选取的不对,原程序为
SETBTR1
JBP3.3,$
JNBP3.3,$
这样的话,如果相应外部中断的时候外部信号正好是高电平,则定时器开始计数,得到了不正确的计数结果,由于每次加外部中断的时刻不同,导致了同一个信号测得多个数值。
修改办法:
将程序调整为
JBP3.3,$
如此,当外部信号是高电平时等待,低电平来时等待,再次是高电平时才开始计数,低电平时结束计数,得到了正确的计数结果。
3、数码管高位起第二位总是显示数字7而不是应有的结果。
此处错误较为隐秘,先是检查了硬件试验箱是否损坏,调用了实验数码管显示程序,数码管可以正常显示,说明是程序错误;
检查了程序整个的逻辑,没问题;
应该是显示程序段的错误,但多次仔细检查了数值转化及显示程序段并未发现错误;
排除了是逻辑错误,应该是非逻辑错误,最后查找相关资料并向老师请教,才明白错误是字型码表放错了位置,误把其放在了将数值转换成非压缩的BCD码的程序段前面,字型码表的第一个3FH可能是某条指令的机器码,当程序执行到这时,发生了错误的指令执行,导致了错误的显示。
将字型码表调整到整个程序段的末尾或主程序开始前。
再次运行得出了正确的结果。
六、性能测试与分析
完成调试后运行程序,在单片机外部中断1加外部脉冲信号,用单片机外部中断0控制中断,数码管能准确显示外部方波信号正脉冲宽度,根据输入脉冲信号的频率,计算输入脉冲的宽度与测量结果对照,是否符合设计要求。
七、结论
本系统采用单片机AT89C51为中心器件来设计脉冲宽度测量器,系统实用性强、操作简单、扩展性强。
该系统测量4ms~512ms的方波,共显示6位数,精确到0.001ms。
通过该系统的测量结果和理论值的对比,系统误差小,能很好的实现系统要求。
八、设计总结
经过一个学期的单片机的学习,我有机会又学到了一种新的机器语言。
经过老师详细讲解我已对单片机的各个指令功能,寻址方式,程序设计方法有了初步了解。
但毕竟课本上的只是理论。
这次课设我分到的任务是外部输入正脉冲宽度的测量,科设的题目综合性很强,用到了外部中断0,定时器T1的方式1,数制转换,数码管显示等。
平时学习时我们都学到了各子模块的程序,到真正将他们综合起来去控制实验箱还是第一次。
首先在编写程序时我们就遇到了很大的困难,编写程序需要有一个冷静的头脑,心浮气躁是不行的。
遇到困难时更是要心平气和,细致思考。
幸运的是在我们小组激烈讨论,老师细心指导下我们顺利完成了课设。
最终的程序由主程序,中断服务子程序(启动定时功能),显示子程序,计数值*机器周期,数制转换,压缩BCD码转换成非压缩BCD码六个模块组成。
在对程序的宏观理解基础上,细微处理决定成败。
课设让我对单片机软件与硬件结合有了一定的了解,也激发了我学习这门课的热情,同时我也认识到现在知道的单片机知识远远不够,要想要将所学运用到实际工作中还需刻苦努力钻研,大量实践。
在以后的学习中我一定注意这方面的练习。
本系统是以单片机89C51芯片为核心部件,通过89C51芯片内部软件计数来测量脉冲宽度的功能。
此次在软件上是花费时间最多的,我们上网找资料,上图书馆,尽可能的了解有关于脉冲宽度测量这方面的知识。
通过这次课程设计,使我得到了一次用专业知识、专业技能分析和解决问题全面系统的锻炼。
使我在单片机的基本原理、单片机应用系统结合过程,以及在常用编程设计思路技巧(特别是汇编语言C51语言)的掌握方面都能向前迈了一大步。
九、参考文献
电子工程系单片机技术课程设计成绩评定表
专业:
自动化班级:
B07221学号:
20074022117姓名:
张玉垒
课题名称
设计任务与要求
设计任务:
1.完成单片机综合设计
2.编程实现题目要求的基本功能,程序运行通过。
3.撰写课程实践报告。
指导教师评语
建议成绩:
指导教师:
课程小组评定
评定成绩:
课程负责人:
年月日