
JIANGSU TEACHERS UNIVERSITY OF TECHNOLOGY
单片机课程设计报告
学院名称:
专 业:
班 级:
姓 名:
学 号:
指导教师:
2009年 11 月
脉冲宽度测量
目录
第一章 引言……………………………………………
第二章 方案选择及总体设计…………………………
2.1 硬件技术指标……………………………………
2.2 方案选择及工作原理……………………………
2.3 系统实现功能……………………………………
第三章 控制系统的硬件设计…………………………
3.1 系统模块构成……………………………………
3.2 系统工作原理图…………………………………
3.3 管脚说明…………………………………………
第四章 软件设计及程序………………………………
4.1 软件设计流程……………………………………
4.2 各子程序功能描述………………………………
4.2.1 定时器T0中断服务程序……………………
4.2.2 显示子程序……………………………………
4.3 系统总程序…………………………………………
第五章 系统制作与调试…………………………………
5.1 硬件调试……………………………………………
5.1.1 调试方法………………………………………
5.1.2 出现问题及解决方法…………………………
5.2 软件调试……………………………………………
5.3 结果分析……………………………………………
第六章 总结与体会 ………………………………………
第一章 引言
近年来随着科技的飞速发展,单片机的应用正在不断地走向深入,同时带动传统控制检测日新月益更新。在实时检测和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构,以及针对具体应用对象特点的软件结合,加以完善。本系统采用单片机ATC51为中心器件来设计脉冲宽度测量器,系统实用性强、操作简单、扩展性强。在现有的单片机仿真机系统上掌握相关软硬件设计与调试知识,根据所选择题目,焊接好硬件电路,正确进行元器件的测试与调试,并在计算机上编写汇编程序调试运行,并实现参考选题中要求的设计。
第二章 方案选择及工作原理
2.1 硬件技术指标
输入脉冲幅度:0-5V
脉宽测量范围:0.1-50ms
测量精度:1%
显示方式:四位数字显示
2.2 方案选择及工作原理
将脉冲信号从P3.2脚引入。将T0设为定时器方式工作。并工作在门控方式。初值TH0、TL0设为零。
在待测脉冲高电平期间,T0对内部周期脉冲进行计数。在待测脉冲高电平结束时,其下降沿向P3.2发中断,在外中断0的中断服务程序中,读取TH0、TL0的计数值,该值就是待测脉冲的脉宽。随后清零TH0和TL0,以便下一脉宽的测量。
2.3 系统实现功能
在电源正确接入的前提下,由RC震荡器产生信号从P3.2口输入,利用内部脉冲对外部信号进行计数。计数值经过二—十转换后,判断高位是否为零,如果为零即显示低四位,如果不为零即显示高四位。通过数码管显示计数脉冲的个数,其个数即为脉冲宽度。
第三章 控制系统的硬件设计
3.1 系统模块构成
3.2 系统工作原理图
3.3 管脚说明
VCC:供电电压。
GND:接地。
P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在编程时,P0 口作为原码输入口,当进行校验时,P0输出原码,此时P0外部必须被拉高。
P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地
“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在编程和校验时接收高八位地址信号和控制信号。
P3口也可作为C51的一些特殊功能口,在本次课程设计中用到的P3口如下所示:
P3.2 /INT0(外部中断0)
RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:来自反向振荡器的输出。
第四章 软件设计及程序
4.1 软件设计流程
4.2 各子程序功能描述:
4.2.1 定时器T0中断服务程序:
通过对方式寄存器TMOD和控制寄存器TCON的编程来选择T0的工作方式。TMOD设为09H,表示门控方式为1,16位定时器。TCON的低四位为外部中断的触发方式控制位和外部中断请求标志,设为13H,门控位为1时,仅当TR0等于1且P3.2输入为高电平时T0才计数,TR0为0或P3.2输入低电平时都禁止计数,以此来判断输入脉冲高电平的开始和结束。
4.2.2显示子程序:
时间显示子程序每次显示4个连续单元的十进制数。首先判断高位是否为0,为0调用低四位显示,不为0则显示高四位。显示时,先取出内存地址中的数据,然后从P2.4、P2.5、P2.6、P2.7口依次由低位到高位显示,在显示过程中通过延时程序控制四个数码管的显示时间长度,以达到可以清晰读出四位数。
4.3 系统总程序
ORG 0000H
AJMP MAIN
ORG 0003H
AJMP JISHI
MAIN: MOV SP,#60H ;设堆栈
MOV TMOD,#09H ;设置控制字方式 方式0 门控
MOV TH0,#00H ;定时器清零
MOV TL0,#00H
SETB EA ;开总中断
SETB EX0 ;开T0中断
SETB TR0
SETB IT0
MAIN1:ACALL EX ;调用二进制转换为十进制子程序
ACALL NEX ;调用拆为非压缩BCD码数子程序
MOV 50H,#0FAH ;延时程序
MOV A,23H ;将R4中低位给累加器
CJNE A,#0H,MAIN3 ;比较累加器中数值和0,不等于0跳转
MAIN2:ACALL DISP ;调用显示子程序1
AJMP MAIN4
MAIN3:ACALL DISP2 ;调用显示子程序2
MAIN4:DJNZ 50H,MAIN2 ;循环250次
AJMP MAIN1
EX: MOV R2,30H ;将从信号源中读出的数据存入R2R3中
MOV R3,31H
CLR A
MOV R4,A
MOV R5,A
MOV R6,A
MOV R7,#10H
LOOP: CLR C
MOV A,R3
RLC A ;R3带进位左移一位
MOV R3,A
MOV A,R2
RLC A
MOV R2,A ;2*(R4R5R6)+C赋值给R4R5R6
MOV A,R6
ADDC A,R6
DA A
MOV R6,A
MOV A,R5
ADDC A,R5
DA A
MOV R5,A
MOV A,R4
ADDC A,R4
DA A
MOV R4,A
DJNZ R7,LOOP ;(R7)-1赋值给R7是否为零
RET
NEX: MOV A,R6
ANL A,#0FH
MOV 19H,A
MOV A,R6 ;拆分为非压缩BCD码
SWAP A ;将R6中高低四位相互转换
ANL A,#0FH ;将高四位清零,保持低四位不变
MOV 20H,A
MOV A,R5
ANL A,#0FH
MOV 21H,A
MOV A,R5
SWAP A
ANL A,#0FH
MOV 22H,A
MOV A,R4
ANL A,#0FH
MOV 23H,A
RET
DISP: MOV DPTR,#TAB ;查表程序
MOV A,19H
MOVC A,@A+DPTR
ORL P2,#0F0H
MOV P0,A
CLR P2.4
ACALL YANCHI
MOV A,20H
MOVC A,@A+DPTR
ORL P2,#0F0H
MOV P0,A
CLR P2.5
ACALL YANCHI
MOV A,21H
MOVC A,@A+DPTR
ORL P2,#0F0H
MOV P0,A
CLR P2.6
ACALL YANCHI
MOV A,22H
MOVC A,@A+DPTR
ORL P2,#0F0H
MOV P0,A
CLR P2.7
ACALL YANCHI
RET
DISP2: MOV DPTR,#TAB
MOV A,20H
MOVC A,@A+DPTR
ORL P2,#0F0H
MOV P0,A
CLR P2.4
ACALL YANCHI
MOV A,21H
MOVC A,@A+DPTR
ORL P2,#0F0H
MOV P0,A
CLR P2.5
ACALL YANCHI
MOV A,22H
MOVC A,@A+DPTR
ORL P2,#0F0H
MOV P0,A
SETB P0.7
CLR P2.6
ACALL YANCHI
MOV A,23H
MOVC A,@A+DPTR
ORL P2,#0F0H
MOV P0,A
CLR P2.7
ACALL YANCHI
RET
YANCHI: MOV 51H,#50H
TL: MOV 52H,#10H
DJNZ 52H,$
DJNZ 51H,TL
RET
TAB: DB 3FH,06H,5BH,4FH,66H
DB 6DH,7DH,07H,7FH,6FH
JISHI:MOV 30H,TH0
MOV 31H,TL0
MOV TH0,#00H
MOV TL0,#00H
RETI
END
第五章 系统制作与调试
5.1 硬件调试
5.1.1 调试方法
硬件调试是利用基本测试仪器(万用表、示波器等),检查系统硬件中存在的故障。
第一步:目测。检查外部的各种元件或者是电路是否有断点。
第二步:用万用表测试。先用万用表复核目测中有疑问的连接点,再检测各种电源线与地线之间是否有短路现象。
第三步:加电检测。给系统加电,检测所有器件的电源端是否符合要求。
(1)取稳压电源打开电源,检查电源的输出电压是否为5V,可通过观察电源的量程及指针的读数来判断或用万用表测量。(2)在确定输出电压正确的情况下,接好电路,用一根导线从地引出,接到P3.2口;再用另一根线从地引出分别接到P2.4、P2.5、P2.6、P2.7口,观察数码管的亮灭情况。
5.1.2 出现问题及解决方法
在观察信号发生器产生波形时发现所产生的波形并不是标准的方波。经过老师的讲解知道问题时处在波形整形步骤中,将信号源连接两个非门后再观察波形发现波形的垂直程度得到很好的改善。在观察过程中还发现本次课程设计中用来产生信号源的方案所实现的方波并不等宽。
在测试数码显示器时,其中一个数码显示管特别暗,经检查得知该数码显示管的小数点位没有接上拉电阻,这样导致分流出现问题。接上电阻后该问题得到解决。
5.2 软件调试:
软件调试是通过对程序的汇编、连接、执行来发现程序中存在的语法错误与逻辑错误并加以排除纠正的过程。在LCA51编译器下进行程序编译,检查程序是否有语法错误。接好仿真机判断接口。以子程序为单位逐个进行仿真,最后结合硬件实时调试。
将上述各编译好的子程序结合为总程序编译后加载到单片机芯片中进行仿真,结果并不是出现稳定的四位数字,闪的频率比较快,调整延时时间后问题解决。
5.3 结果分析
通过数字示波器观测,输入信号的高电平的宽度为6.72ms,波形的峰—峰值为4.08V。数码管显示脉宽为6.48 ms。
输入脉冲幅度及脉宽测量范围都满足要求。
测量精度=±(6.72-6.48)/6.72=±4.5%
数码管显示时数字在不断的跳动,可能原因是输入信号不稳。
第六章 总结与体会
本系统是以单片机C51芯片为核心部件,通过C51芯片内部软件计数来测量脉冲宽度的功能。此次在软件上是花费时间最多的,我们上网找资料,上图书馆,尽可能的了解有关于脉冲宽度测量这方面的知识。通过这次课程设计,使我得到了一次用专业知识、专业技能分析和解决问题全面系统的锻炼。使我在单片机的基本原理、单片机应用系统结合过程,以及在常用编程设计思路技巧(特别是汇编语言C51语言)的掌握方面都能向前迈了一大步。
