《单片机实训设计.doc》由会员分享,可在线阅读,更多相关《单片机实训设计.doc(11页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、基于51单片机的数字电压表设计报告作者 王兆奇 学号 年级专业 10电子信息工程 一、设计要求1利用单片机AT89S51 芯片与ADC0809 芯片以及74HC245芯片设计一个数字电压表2能够测量05V 之间的直流电压3能连续,稳定的显示所测电压4误差要求小于0.025能够脱机稳定工作二、 器件清单: 1 . AT89S51 芯片 1块 2 . ADC0809 芯片 1块 3 . 74HC245 芯片 1块 4 . 数码管 1个 5 . 12MHZ 晶振 1个 6 . 30pF 电容 2个 7 . 10uF 电解电容 1个 8 . 复位电容 1个 9 . 510电阻 8个 10. 10K电阻
2、 1个 11. 导线 若干三、 元件介绍 1.AT89S51AT89S51是一个低功耗,高性能CMOS 8位单片机,片内含4k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,AT89S51在众多嵌入式控制应用系统中得到广泛应用。主要性能特点1、4k Bytes Flash片内程序存储器; 2、128 bytes的随机存取数据存储器(RAM); 3、32个外部双向输
3、入/输出(I/O)口; 4、2个中断优先级、2层中断嵌套中断; 5、6个中断源; 6、2个16位可编程定时器/计数器; 7、2个全双工串行通信口; 8、看门狗(WDT)电路; 9、片内振荡器和时钟电路; 10、与MCS-51兼容; 11、全静态工作:0Hz-33MHz; 12、三级程序存储器保密锁定; 13、可编程串行通道; 14、低功耗的闲置和掉电模式2.ADC0809ADC0809是美国国家半导体公司生产的CMOS工艺8通道,8位逐次逼近式A/D模数转换器。其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行A/D转换。是目前国内应用最广泛的8位
4、通用A/D芯片 主要性能特点 1)8路输入通道,8位A/D转换器,即分辨率为8位。 2)具有转换起停控制端。 3)转换时间为100s(时钟为640kHz时),130s(时钟为500kHz时) 4)单个+5V电源供电 5)模拟输入电压范围0+5V,不需零点和满刻度校准。 6)工作温度范围为-40+85摄氏度 7)低功耗,约15mW。 四、 程序设计本设计采用AT89S51 单片机配合 ADC0809 模/数转换器构成一个简易的数字电压表。该电路通过 ADC0809 芯片采样输入口 AI0 输入的05V 的模拟量电压,经过模/数转换后,产生相应的数字量经过其输出通道D0D7 传送给 AT89S51
5、 芯片的F0口。AT89C51负责把接收到的数字量经过数据处理,产生正确的7段数码管的显示段码,并通过P1 口传送给数码管。同时它还通过其三位 I/O 口 P3.0、P3.1、P3.2 产生位片选信号,控制数码管的亮灭。另外,AT89S51 还控制着 ADC0809 的工作。其ALE管脚为 ADC0809提供了 1MHZ 工作的时钟脉冲;P2.3 控制 ADC0809 的地址锁存端(ALE); P2.4 控制 ADC0809 的启动端(START); P2.5 控制 ADC0809 的输出允许端(OE); P3.7 控制 ADC0809 的转换结束信号(EOC)。五、 实验原理图六、 程序设计
6、1、主程序设计由于ADC0809 在进行A/D转换时需要有CKL 信号,而此时的 ADC0809 的CLK 是连接在 AT89C51 单片机的30管脚,也就是要求从30管脚输出CLK 信号供 ADC0809 使用。因此产生 CLK 信号的方法就等于从软件产生。电压表系统有主程序,A/D 转换子程序和显示子程序,如下流程1-2所示:图1-2主程序流程图调用显示程序调用数据处理程序调用A/D转化程序初始化开始2、A/D 转换子程序启动 ADC0809 对模拟量输入信号进行转换,通过判断 EOC(P3.7)来确定转换是否完成, 若EOC 为0则继续等待;若 EOC为1,则把OE 置位,将转换完成的数
7、据存储到 70H 中。程序流程图如图1-3 所示开始A/D转换结束?(P3.7=1?)启动A/D转化器初始化是P2.5置位,允许输出将转换得到的数据存储结 束开始图1-3 A/D转换程序流程图3、数据处理子程序数据处理子程序主要根据标度变换公式1-1,把0255十进制数转换为0.005.00V. AX=A0+(Am-A0)(NX-N0/Nm-N0) (1-1) Ax: 模拟测量值; A0: 模拟输入最小值; Am: 模拟输入最大值; NX: 模数转换后的值; N0:模/数转换后的最小值; Nm:模/数转换后的最大值 。在本设计中,根据要求知:A0=0V,Am=5V,N0=0,Nm=255,则公
8、式1-1可化简为: AX=A0+(Am-A0)(NX-N0/Nm-N0)=5NX/255=NX/51 (1-2)程序流程图如图1-4所示:从70H中取数据,除以51得到个位,存放在70H中,余数移入A 余数与51的一半即1AH借位相减比较,以便四舍五入,利用P0开始余数10,再除以51 商放入A中 P0=1?是 四舍否 数据调整,相当于五入 A放入79H中,得到十分位再将余数放入A中,进行除51操作P0=1? 是否A = A + 5四舍A放入7AH中,得到百分位结 束图1-4 数据处理子程序流程图 4、显示子程序显示子程序采用动态扫描法实现三位数码管的数值显示。测量所得的A/D转换数据放在70
9、H内存单元中,测量数据在显示时需转换成10进制BCD码放在78H7AH单元中。寄存器R1用作显示数据地址指针。程序流程图如1-5所示: R1 A 查表取得相应段码 输出显示置位P1.7点亮小数点 图1-5 显示子程序流程图结 束 R1 A 查表取得相应段码 输出显示 R1=R1+1 R1 A 查表取得相应段码 输出显示 初 始 化 R1=78H,P1置高,P2置低 R1=R1+1开始七 程序代码 ORG 0000H LJMP START ORG 0030H;初始化参数 START: CLR A SETB P3.7 ;初始化EOC CLR P3.0 ;初始化LED位选,全不选中。 CLR P3.
10、1 CLR P3.2 MOV P2,A ;初始化P2口,清除对ADC0809的控制信号。 MOV 70H, A ;初始化数据采样后存储空间。 MOV 78H, A ;初始化数据处理后3位有效数字的存储空间 MOV 79H, A MOV 7AH, A MOV A ,#0FFH ;初始化P0,P1口,写入高电平 MOV P0, A MOV P1, A ;主程序 MAIN: LCALL AD_SUB ;调用A/D转换子程序,开始采样并转换。 LCALL TURN_SUB ;调用数码转换子程序,将采样转换来的 0-255转换成意义对应的;0.00-5.00 LCALL DISP_SUB ;调用显示子程
11、序。 LJMP MAIN;A/D转换子程序 AD_SUB: CLR A MOV P2, A ;初始化P2口,清除对ADC0809的控制信号。 MOV R0,#70H LCALL AD_SUB ;调用采样子程序 WAIT: JB P3.7,DATASAVE ;判断采样转换是否完毕,完毕则跳转到DATASAVE进行存储。 AJMP WAIT ;否则继续等待。 ;启动采样,送脉冲时序 AD_SUB: SETB P2.3 ;ALE 脉冲时序 NOP NOP CLR P2.3 SETB P2.4 ;START脉冲时序 NOP NOP CLR P2.4 NOP NOP RET ;采样转换的数据存储 DAT
12、ASAVE: SETB P2.5 ;置位OE端,允许ADC0809输出数据 MOV A , P0 ;将转换的数据存储到70H中 MOV R0,A CLR P2.5 CLR A ;初始化P0,P1,P2口 MOV P2 ,A MOV A,#0FFH MOV P0 ,A MOV P1 ,A RET ;将0-255转换为0.00-5.00TURN_SUB: MOV A ,R0 MOV A ,#51 DIV AB MOV 78H, A ;以上这一段是整数部分放入78H MOV A , B ;余数部分放入A CLR F0 SUBB A ,#1AH ;余数和51的一半即1AH比较,以便四舍五入 MOV F
13、0 , C MOV A ,#10 MUL AB ;余数乘以10,以便再除以51 MOV B , #51 DIV AB JB F0,LOOP1 ;判断四舍五入,跳到LLOP1是“四舍” ADD A ,#5 ;这是“五入” LOOP1: MOV 79H,A ;十分位 MOV A ,B CLR F0 SUBB A ,#1AH MOV F0 ,C MOV A ,#10 MUL AB MOV B , #51 DIV AB JB F0,LOOP2 ADD A ,#5 LOOP2: MOV 7AH, A ;百分位 RET ;显示子程序 DISP_SUB: MOV R1 ,#78H ;R1辅助寄存器,用于存放
14、要显示的数据的地址 CLR A MOV P1,#0FFH ;初始化P1,P2口 ANL P2 ,A LCALL PLAY ;调用显示位码子程序 CLR P1.7 ;显示最高位后的小数点 SETB P3.2 ;选中最高位LED 数码管 LCALL DELAY ;调用延迟子程序 CLR P3.2 ;取消最高位位选 INC R1 ;提取第二位有效数字的数据地址 LCALL PLAY ;调用显示位码子程序 SETB P3.1 ;选中第二位LED 数码管 LCALL DELAY ;调用延迟子程序 CLR P3.1 ;取消第二位位选 INC R1 ;提取最低位有效数字的数据地址 LCALL PLAY ;调
15、用显示位码子程序 SETB P3.0 ;选中最低位LED 数码管 LCALL DELAY ;调用延迟子程序 CLR P3.0 ;取消最低位位选 RET ;位码显示 PLAY: MOV A,R1 ;送偏移量 MOV DPTR,#TAB ;送表首地址 MOVC A,A+DPTR ;查表得出相应LED段码 MOV P1, A ;输出显示 RET ;延时程序 DELAY: MOV R6,#10H DL1:MOV R7,#10H DL2:DJNZ R7,DL2 DJNZ R6,DL1 RET;09段码 TAB: DB 0C0H , 0F9H , 0A4H , 0B0H , 99H , 92H , 82H
16、 , 0F8H , 80H , 90H END八 调试过程及问题解决方法1首页接入仿真器进行仿真测试,能够正常显示,将烧制好程序的AT89S51芯片后插于电路脱机无法正常工作没有任何数值显示,重新根据电路图检查电路是否有焊接错误,核对后没有发现任何错误,于是重新焊接了一个晶振电路,再次进行测量后可以正常工作。2通过万用表测量AD0809的26管脚以及接地线测出实际电压跟数码管显示数值的大小进行比较,同时调节可变电阻,使得数字显示基本一致并保持稳定数值。具体测试结果如下图所示输入电压(V)01.002.453.515.00实际显示电压(V)0.001.012.453.525.00九 收获与心得通
17、过本次课程设计,我学到了许多书本上无法学到的知识,也深刻体会到单片机技术应用领域的广泛。不仅让我对学过的单片机知识有了很多的巩固,同时也对单片机这一门课程产生了更大的兴趣。本设计涉及到单片机原理及应用、微机原理与接口技术、数字电子技术、模拟电子技术等学科。让我对专业知识有了更深的理解。在本次课程设计过程中,我学会了在网络上查找有关本设计的各硬件的资源,其中包括:数字电压表原理、AT89S51单片机及其引脚说明、ADC0809脚图及其引脚功能等,为本次课程设计提供了一定的资料。这次课程设计,使我对单片机有了更为深入的了解,对一个课题如何画流程图,编程序等,有了一定的认识,进一步加强了自己的动手能力和运用专业知识的能力,从中学习到如何去思考和解决问题,以及如何灵活地改变方法去实现设计方案。特别是使我深刻体会到的是软件和硬件结合的重要性,以及两者的联系和配合作用。同时明白了办事只要有信心,有毅力,找对方法,就会成功!
限制150内