找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 15292|回复: 3
收起左侧

基于单片机的ADC0809数字电压表设计报告(汇编语言)

  [复制链接]
ID:362056 发表于 2018-7-21 17:30 | 显示全部楼层 |阅读模式
目录

目录

第一章 课设题目分析

1.1  数字电压表简介

1.2  数字电压表基本工作原理

1.3  设计要求

1.4  设计思路

1.5  设计方案

第二章 硬件电路分析

2.1  单片机系统设计

2.1.1  STC89C51简介

2.1.2  单片机最小系统

2.2  A/D转换模块设计

2.2.1  逐次逼近式A/D转换工作原理

2.2.2  ADC0809简介

2.3  LED显示系统设计

2.3.1  LED基本结构

2.3.2  LED显示方式

2.3.3  LED显示器与单片机接口设计

2.4  电压采集电路

2.5  总体电路设计

第三章 软件系统设计

3.1  程序设计总方案

3.2  系统子程序设计

3.2.1  AD转换子程序

3.2.2  显示子程序

3.3  编程软件KEIL简介

3.4  PROTUES仿真软件简介

第四章 仿真与实物调试

4.1  软件仿真

4.2  实物调试

4.3  误差分析

参考文献

附录1  仿真电路图

附录2  实物连接图

附录3  显示示数图

附录4  源程序


第一章 课设题目分析
第一章 课设题目分析1.1 数字电压表简介
在电量的测量中,电压、电流和频率是最基本的三个被测量,其中电压量的测量最为经常。而且随着电子技术的发展,更是经常需要测量高精度的电压,所以数字电压表就成为一种必不可少的测量仪器。数字电压表(Digital Voltmeter)简称DVM,它是采用数字化测量技术,把连续的模拟量(直流输入电压)转换成不连续、离散的数字形式并加以显示的仪表。与此同时,由DVM扩展而成的各种通用及专用数字仪器仪表,也把电量及非电量测量技术提高到崭新水平。本文重点介绍单片A/D 转换器以及由它们构成的基于单片机的数字电压表的工作原理。目前,由各种单片A/D 转换器构成的数字电压表,已被广泛用于电子及电工测量、工业自动化仪表、自动测试系统等智能化测量领域,示出强大的生命力理。
目前,数字电压表的内部核心部件是A/D转换器,转换的精度很大程度上影响着数字电压表的准确度,因而,以后数字电压表的发展就着眼在高精度和低成本这两个方面。A/D转换器分成四种:计数式A/D转换器、双积分式A/D转换器、逐次逼近式A/D转换器和并行式A/D转换器。
目前最常用的是双积分式A/D转换器和逐次逼近式A/D转换器,其中双积分式A/D转换器的主要优点是转换精度高,抗干扰性能好,价格便宜。但是其转换速度慢,因此这种转换器这种转换器主要用于速度要求不高的场合。而逐次逼近式A/D转换器转换速度快,但精度相对较差。因此未来的A/D转换器将兼顾精度和速度,成本也会随着集成电路的发展而降低。
1.2 数字电压表基本工作原理
本文介绍了一种基于单片机的简易数字电压表的设计。该设计主要由三个模块组成:A/D转换模块,数据处理模块及显示模块。A/D转换主由芯片ADC0809来完成,它负责把采集到的模拟量转换为相应的数字量在传送到数据处理模块。数据处理则由芯片STC89C51来完成,其负责把ADC0809传送来的数字量经过一定的数据处理,产生相应的显示码送到显示模块进行显示;此外,它还控制着ADC0809芯片工作。
    该系统的数字电压表电路简单,所用的元件较少,成本低,且测量精度和可靠性较高。此数字电压表可以测量0-10V的1路模拟直流输入电压并通过一个四位一体的7段数码管显示出来。
1.3 设计要求

⑴以MCS-51系列单片机为核心器件,组成一个简单的直流数字电压表

⑵采用1路模拟量输入,能够测量0-10V之间的直流电压值

1.4 设计思路
电路尽量采用中、大规模集成电路。其中,A/D转换器将输入的模拟量转换成数字量,按规定的时序将A/D转换器中各组模拟开关接通或断开,保证A/D转换正常进行。A/D转换结果通过单片机输出,最后显示在数码管上。
⑴ 根据设计要求,选择STC89C51单片机为核心控制器件。
⑵ A/D转换采用ADC0809实现。
⑶ 电压显示采用四位一体的LED数码管。
⑷ LED数码的段码输入,由并行端口P0产生:位码输入,用并行端口P2
  低4位产生。
1.5 设计方案

硬件电路设计由6个部分组成; A/D转换电路,STC89C51单片机、LED显示系统、时钟电路、复位电路以及测量电压输入电路。硬件电路设计框图如图1.1所示。


图1.1 数字电压表总体设计方框图



第二章 硬件电路分析
第二章 硬件电路分析2.1 单片机系统设计2.1.1 STC89C51简介
STC89C51是一种低功耗、高性能CMOS 8位微控制器,具有4K 在系统可编程Flash 存储器。使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C51在众多嵌入式控制应用系统中得到广泛应用。
其各引脚功能如下:
VCC:电源电压
GND:地
P0口:P0口是一组8位漏极开路型双向I/O口,也即地址/数据总线复用口。作为输出口用时,每位能吸收电流的方式驱动8个TTL逻辑门电路,对端口P0写“1”时可作为高阻抗输入端用。  在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复位,在访问期间激活内部上拉电阻。
P1口:P1是一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTE逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(ILL)。
表2-1  P1口特殊功能【1】
引脚号
功能特性
P1.0
T2(定时/计数器2外部计数脉冲输入),时钟输出
P1.1
T2EX(定时/计数2捕获/重装载出发和方向控制)

P2口:P2是一个带有内部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口P2写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(ILL)。  在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOVX @DPTR指令)时,P2口送出高8位地址数据。在访问8位地址的外部数据存储器(如执行MOVX @RI指令)时,P2口输出P2锁存器的内容。
P3口:P3口是一组带有内部上拉电阻的8位双向I/O口。P3口输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对P3口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。此时,被外部拉低的P3口将用上拉电阻输出电流(ILL)。  P3口除了作为一般的I/O口线外,更重要的用途是它的第二功能,如表2-2所示。
表2-2  P3端口第二功能【1】
端口引脚
第二功能
P3.0
RXD(串行输入口)
P3.1
TXD(串行输出口)
P3.2
INTO(外部中断0)
P3.3
INT1(外部中断1)
P3.4
T0(定时/计数0)
P3.5
T1(定时/计数1)
P3.6
WR(外部数据存储器写选通)
P3.7
RD(外部数据存储器读选通)


RST:复位输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。

图2.1 单片机引脚图

EA/VPP:外部访问允许。欲使CPU仅访问外部程序存储器(地址为0000H-FFFFH ) 。 EA端必须保持低电平(接地)。需注意的是:如果加密位LB1被编程,复位时内部会锁存EA端状态。  如EA端为高电平(接VCC端),CPU则执行内部程序存储器中的指令。  Flash存储器编程时,该引脚加上+12V的编程允许电源VPP,当然这必须是该器件是使用12V编程电压VCC 。
XTAL1:振荡器反相放大器的及内部时钟发生器的输入端。
XTAL2:振荡器反相放大器的输出端。
数据存储器:89C51有256个字节的内部RAM,80H-FFH高128个字节与特殊功能寄存器(SFR)地址是重叠的,也就是高128。  字节的RAM和特殊功能寄存器的地址是相同的,但在物理上它们是分开的。  当一条指令访问7FH以上的内部地址单元时,指令中使用的寻址方式是不同的,也即寻址方式决定是访问高128字节。RAM还是访问特殊功能寄存器。如果指令是直接寻址方式则为访问特殊功能寄存器。
中断:89C51共有6个中断向量:两个外中断(INT0和INT1),3个定时器中断(定时器0, 1, 2)和串行口中断。
2.1.2 单片机最小系统
单片机最小系统,也叫做单片机最小应用系统,是指用最少的原件组成单片机可以工作的系统。单片机最小系统包括电源、晶振、复位电路、时钟电路。


图2.2 最小系统                      图2.3 复位电路

复位电路:单片机在启动运行时都需要复位,使CPU和系统中的其他部件都处于一个确定的初始状态,并从这个状态开始工作。MCS-51单片机有一个复位引脚RST,采用施密特触发输入。当震荡器起振后,只要该引脚上出现2个机器周期以上的高电平即可确保时器件复位[1]。复位完成后,如果RST端继续保持高电平,MCS-51就一直处于复位状态,只要RST恢复低电平后,单片机才能进入其他工作状态。单片机的复位方式有上电自动复位和手动复位两种,图2.3是51系列单片机统常用的复位电路,只要Vcc上升时间不超过1ms,它们都能很好的工作。

时钟电路:单片机中CPU每执行一条指令,都必须在统一的时钟脉冲的控制下严格按时间节拍进行,而这个时钟脉冲是单片机控制中的时序电路发出的。CPU执行一条指令的各个微操作所对应时间顺序称为单片机的时序。MCS-51单片机芯片内部有一个高增益反相放大器,用于构成震荡器,XTAL1为该放大器的输入端,XTAL2为该放大器输出端,但形成时钟电路还需附加其他电路[1]。

    本设计系统采用内部时钟方式,利用单片机内部的高增益反相放大器,外部电路简,只需要一个晶振和 2个电容即可,如图2.4所示。电路中的器件选择可以通过计
算和实验确定,也可以参考一些典型电路的参数,电路中,电容器C1和C2对震荡频率有微调作用,通常的取值范围是30±10pF,在这个系统中选择了30pF;石英晶振选择

图2.4 时钟电路

范围最高可选24MHz,它决定了单片机电路产生的时钟信号震荡频率,在本系统中选择的是12MHz,因而时钟信号的震荡频率为12MHz。
2.2 A/D转换模块设计
现实世界的物理量都是模拟量,能把模拟量转化成数字量的器件称为模/数转换器(A/D转换器),A/D转换器是单片机数据采集系统的关键接口电路,按照各种A/D芯片的转化原理可分为逐次逼近型,双重积分型等等。双积分式A/D转换器具有抗干扰能力强、转换精度高、价格便宜等优点。与双积分相比,逐次逼近式A/D转换的转换速度更快,而且精度更高,比如ADC0809、ADC0808等,它们通常具有8路模拟选通开关及地址译码、锁存电路等,它们可以与单片机系统连接,将数字量送到单片机进行分析和显示。一个n位的逐次逼近型A/D转换器只需要比较n次,转换时间只取决于位数和时钟周期,逐次逼近型A/D转换器转换速度快,因而在实际中广泛使用。
2.2.1 逐次逼近式A/D转换工作原理
逐次逼近型A/D转换器是由一个比较器、A/D转换器、存储器及控制电路组成。它利用内部的寄存器从高位到低位一次开始逐位试探比较。
转换过程如下:

开始时,寄存器各位清零,转换时,先将最高位置1,把数据送入A/D转换器转换,转换结果与输入的模拟量比较,如果转换的模拟量比输入的模拟量小,则1保留,如果

图2.5  AD转换原理框图

转换的模拟量比输入的模拟量大,则1不保留,然后从第二位依次重复上述过程直至最低位,最后寄存器中的内容就是输入模拟量对应的二进制数字量。其原理框图如图2.5所示。
2.2.2 ADC0809简介
ADC0809是CMOS单片型逐次逼近式A/D转换器,带有使能控制端,与微机直接接口,片内带有锁存功能的8路模拟多路开关,可以对8路0-5V输入模拟电压信号分时进行转换,由于ADC0809设计时考虑到若干种模/数变换技术的长处,所以该芯片非常适应于过程控制,微控制器输入通道的接口电路,智能仪器和机床控制等领域。
ADC0809主要特性:8路8位A/D转换器,即分辨率8位;具有锁存控制的8路模拟开关;易与各种微控制器接口;可锁存三态输出,输出与TTL兼容;转换时间:128μs;转换精度:0.2%;单个+5V电源供电;模拟输入电压范围0- +5V,无需外部零点和满度调整;低功耗,约15mW。
ADC0809是8位AD转换器,输入信号等于参考电压时,输出为255,1.25V为1/4满量程,输出为255/4,转为整数64,也就是40H。
ADC0809的电源电压范围是4.75v - 5.25v。一般都直接用5V。基准电压一般接5V,这样输入电压为5V时,转换的数字量为255.基准电压是有用的,在特定条件下可以提高转换精度。如;输入电压范围为0-2.5V,基准电源用5V,转换成数字量的值为0-128.如果把基准电压定为2.5V,那么此时转换成的数字量就为0-255.


图2.6  ADC0809引脚图

模数转换器的分辨率表示能够改变数字输出值的最小输入电压值。分辨率由 A/D 的位数决定, 位数越多,电压分辨率越高。如:当前的模拟输入电压是 1.00V,对应的输出数值是 2EH,当输入电压改变为 1.01V时,输出数值是2FH,分辨率就是 10mV 。ADC0809是8位逐次逼近型模数转换器,输出数值范围是 0 ~ 2^8 -1(0 ~ 255),满量程
是 5V ,分辨率就是最低有效位(LSB) 的对应输入电压值,分辨率 = 5000/255 = 19.6mV。分辨率高是精度高的前提,但是分辨率高未必精度一定高,如基准电压( Vref) 的稳定度、芯片抗干扰能力、电路噪声等指标都会影响测量精度。所以n位的A/D芯片,分辨率直接用满量程电压除以 2^n 计算即可。分辨率 = 5000/256 = 19.5mV。
ADC0809芯片有28条引脚,采用双列直插式封装,其引脚图如图2.6所示。
下面说明各个引脚功能:
IN0-IN7(8条):8路模拟量输入线,用于输入和控制被转换的模拟电压。
地址输入控制(4条):
ALE:地址锁存允许输入线,高电平有效,当ALE为高电平时,为地址输入线,用于选择IN0-IN7上那一条模拟电压送给比较器进行A/D转换。
ADDA,ADDB,ADDC:3位地址输入线,用于选择8路模拟输入中的一路,其对应关系如表2-3所示:
表2-3  ADC0809通道选择表
地址码
对应的输入通道
C
B
A
0
0
0
0
1
1
1
1
0
0
1
1
0
0
1
1
0
1
0
1
0
1
0
1
IN0
IN1
IN2
IN3
IN4
IN5
IN6
IN7


START:START为“启动脉冲”输入法,该线上正脉冲由CPU送来,宽度应大于100ns,上升沿清零SAR,下降沿启动ADC工作。
EOC:EOC为转换结束输出线,该线上高电平表示A/D转换已结束,数字量已锁入三态输出锁存器。
D1-D8:数字量输出端,D1为高位。
OE:OE为输出允许端,高电平能使D1-D8引脚上输出转换后的数字量。
REF+、REF-:参考电压输入量,给电阻阶梯网络供给标准电压。
Vcc、GND:Vcc为主电源输入端,GND为接地端,一般REF+与Vcc连接在一起,REF-与GND连接在一起.
CLK:时钟输入端。

ADC0809由8路模拟通道选择开关,地址锁存与译码器,比较器,8位开关树型A/D转换器,逐次逼近型寄存器,定时和控制电路和三态输出锁存器等组成,其内部结构如图2.7所示。

图2.7  ADC0809内部结构图

其中:
(1)8路模拟通道选择开关实现从8路输入模拟量中选择一路送给后面的比较器进行比较。
(2)地址锁存与译码器用于当ALE信号有效时,锁存从ADDA、ADDB、ADDC 3根地址线上送来的3位地址,译码后产生通道选择信号,从8路模拟通道中选择当前模拟通道。
(3)比较器,8位开关树型A/D转换器,逐次逼近型寄存器,定时和控制电路组成8位A/D转换器,当START信号有效时,就开始对当前通道的模拟信号进行转换,转换完成后,把转换得到的数字量送到8位三态锁存器,同时通过引脚送出转换结束信号。
(4)三态输出锁存器保存当前模拟通道转换得到的数字量,当OE信号有效时,把转换的结果送出。
ADC0809的工作流程为:
(1)输入3位地址,并使ALE=1,将地址存入地址锁存器中,经地址译码器从8路模拟通道中选通1路模拟量送给比较器。
(2)送START一高脉冲,START的上升沿使逐次寄存器复位,下降沿启动A/D转换,并使EOC信号为低电平。
(3)当转换结束时,转换的结果送入到输出三态锁存器中,并使EOC信号回到高电平,通知CPU已转换结束。
(4)当CPU执行一读数据指令时,使OE为高电平,则从输出端D0-D7读出数据。
2.3 LED显示系统设计2.3.1 LED基本结构
LED是发光二极管显示器的缩写。LED由于结构简单、价格便宜、与单片机接口方便等优点而得到广泛应用。LED显示器是由若干个发光二极管组成显示字段的显示器件。在单片机中使用最多的是七段数码显示器。LED七段数码显示器由8个发光二极管组成显示字段,其中7个长条形的发光二极管排列成“日”字形,另一个圆点形的发光二极管在显示器的右下角作为显示小数点用,其通过不同的组合可用来显示各种数字。LED引脚排列如下图2.8所示:


图2.8  数码管引脚图                 图2.9  四位一体数码管实物图

led数码管(LED Segment Displays)是由多个发光二极管封装在一起组成“8”字型的器件,引线已在内部连接完成,只需引出它们的各个笔划,公共电极。led数码管常用段数一般为7段有的另加一个小数点,还有一种是类似于3位“+1”型。位数有半位、1、2、3、4、5、6、8、10位等等....,led数码管根据LED的接法不同分为共阴和共阳两类,了解LED的这些特性,对编程是很重要的,因为不同类型的数码管,除了它们的硬件电路有差异外,编程方法也是不同的。
2.3.2 LED显示方式
LED数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数位,因此根据LED数码管的驱动方式的不同,可以分为静态式和动态式两类。
A、静态显示驱动:
静态驱动也称直流驱动。静态驱动是指每个数码管的每一个段码都由一个单片机的I/O埠进行驱动,或者使用如BCD码二-十进位*器*进行驱动。静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O埠多,如驱动5个数码管静态显示则需要5×8=40根I/O埠来驱动,要知道一个89S51单片机可用的I/O埠才32个呢。故实际应用时必须增加*驱动器进行驱动,增加了硬体电路的复杂性。
B、动态显示驱动:
数码管动态显示介面是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp "的同名端连在一起,另外为每个数码管的公共极COM增加位元选通控制电路,位元选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位元选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位元就显示出字形,没有选通的数码管就不会亮。
透过分时轮流控制各个LED数码管的COM端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位元数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极体的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示资料,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O埠,而且功耗更低。
2.3.3 LED显示器与单片机接口设计
由于单片机的并行口不能直接驱动LED显示器,所以,在一般情况下,必须采用专用的驱动电路芯片,使之产生足够大的电流,显示器才能正常工作[1]。如果驱动电路能力差,即负载能力不够时,显示器亮度就低,而且驱动电路长期在超负荷下运行容易损坏,因此,LED显示器的驱动电路设计是一个非常重要的问题。


图2.10 数码管与单片机连接图

为了简化数字式直流电压表的电路设计,在LED驱动电路的设计上,可以利用单片机P0口上外接的上拉电阻来实现,即将LED的A-G段显示引脚和DP小数点显示引脚并联接到P0口与上拉电阻之间,这样,就可以加大P0口作为输出口的驱动能力,使得LED能按照正常的亮度显示出数字,同时,四个数码管的位选端分别接到P2口的低四位,如图2.10所示。
2.4 电压采集电路

由于使用的是5V基准电压,所以需要使用电阻分压来实现电压的采集,仿真时可以通过调节可变电阻来改变输入电压的大小,使输入电压在基准电压范围内改变,采集电路如下图所示。

图2.11 电压采集电路

2.5 总体电路设计
经过以上的设计过程,可设计出基于单片机的简易数字直流电压表硬件电路原理图(见附录1)。此电路的工作原理是:+10V模拟电压信号被信号采集电路采集后,由ADC08009的IN0通道进入(由于使用的IN0通道,所以ADDA,ADDB,ADDC均接低电平),经过模/数转换后,产生相应的数字量经过其输出通道D0-D7传送给STC89C51芯片的P1口,STC89C51负责把接收到的数字量经过数据处理,控制P0口的电位变化从而驱动LED,同时它还通过其四位I/O口P2.0、P2.1、P2.2、P2.3产生位选信号控制数码管的亮灭以及小数点位。此外,STC89C51还控制ADC0809的工作。其中,单片机STC89C51通过从ALE引脚输出方波,接到ADC0809的CLOCK,P3.2发正脉冲启动A/D转换,P3.0置高从P1口读取转换结果送给LED显示出来。
简易数字直流电压表的硬件电路已经设计完成,就可以选取相应的芯片和元器件,利用Proteus软件绘制出硬件的原理,并仔细地检查修改,直至形成完善的硬件原理图。

1



第三章 软件系统设计
第三章 软件系统设计3.1 程序设计总方案

根据模块的划分原则,将该程序划分初始化模块,A/D转换子程序和显示子程序,这三个程序模块构成了整个系统软件的主程序,如图3.1所示。

图3.1 系统程序流程图

所谓初始化,是对将要用到的MCS_51系列单片机内部部件或扩展芯片进行初始工作状态设定,初始化子程序的主要工作是设置定时器的工作模式,初值预置,开中断和打开定时器等[2]。

3.2 系统子程序设计3.2.1 AD转换子程序
A/D转换子程序用来控制对输入的模块电压信号的采集测量,并将对应的数值存入相应的内存单元,其转换流程图如图3.2所示。


图3.2 AD转换流程图

下面是部分A/D转换程序:


图3.2  A/D转换子程序                图3.3 数据处理

图3.2是执行A/D转换的初始程序,“ST”是启动AD转换,清楚单片机对ADC0809的控制;然后“EOC”等待转换结束;“OE”允许输出;最后将转换结果存入P1口。
图3.3是数据处理程序的一部分,将AD转换结果转变成BCD码,028H是16进制数,换算成十进制是40,ADC0809在基准电压为5V时的分辨率为19.6mV,此次课设需要的量程为10V,通过采压电路的分压与数据换算得出40,然后A、B两个寄存器数据相乘。
3.2.2 显示子程序
显示子程序采用动态扫描实现四位数码管的数值显示,在采用动态扫描显示方式时,要使得LED显示的比较均匀,又有足够的亮度,需要设置适当的扫描频率,当扫描频率在70HZ左右时,能够产生比较好的显示效果,一般可以采用间隔10ms对LED进行动态扫描一次,每一位LED的显示时间为1ms。
3.3 编程软件KEIL简介
Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。下面详细介绍Keil C51开发系统各部分功能和使用。
C51工具包的整体结构,uVision与Ishell分别是C51 for Windows和for Dos的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。开发人员可用IDE本身或其它编辑器编辑C或汇编源文件。然后分别由C51及C51编译器编译生成目标文件(.OBJ)。目标文件可由LIB51创建生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件(.ABS)。ABS文件由OH51转换成标准的Hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中。
Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。用过汇编语言后再使用C来开发,体会更加深刻。 Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。
3.4 PROTUES仿真软件简介
Protues软件是英国Labcenter electronics公司出版的EDA工具软件。它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。它是目前最好的仿真单片机及外围器件的工具。虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年即将增加Cortex和DSP系列处理器,并持续增加其他系列处理器模型。在编译方面,它也支持IAR、KEIL和MPLAB等多种编译。
Protues软件具有其它EDA工具软件(例:multisim)的功能。这些功能是:原理布图 、PCB自动或人工布线 、SPICE电路仿真。其革命性的特点:(1)互动的电路仿真。用户甚至可以实时采用诸如RAM,ROM,键盘,马达,LED,LCD,AD/DA,部分SPI器件,部分IIC器件。(2)仿真处理器及其外围电路。可以仿真51系列、AVR、PIC、ARM、等常用主流单片机。还可以直接在基于原理图的虚拟原型上编程,再配合显示及输出,能看到运行后输入输出的效果。配合系统配置的虚拟逻辑分析仪、示波器等,Protues建立了完备的电子设计开发环境。
在PROTUES绘制好原理图后,调入已编译好的目标代码文件:*.HEX,可以在PROTUES的原理图中看到模拟的实物运行状态和过程。PROTUES 是单片机课堂教学的先进助手。PROTUES不仅可将许多单片机实例功能形象化,也可将许多单片机实例运行过程形象化。前者可在相当程度上得到实物演示实验的效果,后者则是实物演示实验难以达到的效果。它的元器件、连接线路等却和传统的单片机实验硬件高度对应。这在相当程度上替代了传统的单片机实验教学的功能,例:元器件选择、电路连接、电路检测、电路修改、软件调试、运行结果等。课程设计、毕业设计是学生走向就业的重要实践环节。由于PROTUES提供了实验室无法相比的大量的元器件库,提供了修改电路设计的灵活性、提供了实验室在数量、质量上难以相比的虚拟仪器、仪表,因而也提供了培养学生实践精神、创造精神的平台。随着科技的发展“计算机仿真技术”已成为许多设计部门重要的前期设计手段。它具有设计灵活,结果、过程的统一的特点。可使设计时间大为缩短、耗资大为减少,也可降低工程制造的风险。相信在单片机开发应用中PROTUES也能茯得愈来愈广泛的应用。

第四章 仿真与实物调试
第四章 仿真与实物调试4.1 软件仿真
软件调试的主要任务是排查错误,错误主要包括逻辑和功能错误,这些错误有些是显性的,而有些是隐形的,可以通过仿真开发系统发现逐步改正。Proteus软件可以对基于微控制器的设计连同所有的周围电子器件一起仿真,用户甚至可以实时采用诸如LED/LCD、键盘、RS232终端等动态外设模型来对设计进行交互仿真。Proteus支持的微处理芯片包括8051系列、AVR系列、PIC系列、HC11系列及Z80等等。Proteus可以完成单片机系统原理图电路绘制、PCB设计,更为显著点的特点是可以与u Visions3 IDE工具软件结合进行编程仿真调试(仿真图见附录1)。
4.2 实物调试
仿真电路图调试完毕,可以实现正常功能,然后根据仿真电路图进行实物连接(实物连接图见附录2),实物连接过程由于使用的面包板,所以插线要尽量整洁,保持接触良好。实物调试过程中,由于使用到了10V电压,所以使用了一个降压模块,不仅可


图4.1 降压模块

以稳压,也可以调节输入电压的大小。此次调试最大的问题就是数码管显示不稳定、亮度不够,通过适度调试延时周期,最终调试成功。
4.3 误差分析
(1)当IN0口输入电压为零时,数码管显示00.00。显示结果如图(附录3.1);
(2)当IN0口输入电压为1.5V时,数码管显示01.48。显示结果如图(附录3.2);
(3)当IN0口输入电压为10V时,数码管显示0.0。显示结果如图(附录3.3);
通过以上仿真测量结果可得到简易数字电压表与“标准”数字电压表对比测试表,如下表4-1所示:
表4-1 电压表对比测试表
标准电压值
/V
简易电压表测量
/V
绝对误差
/V
0.0
0.0
0.00
1.5
1.48
0.02
5.0
4.99
0.01
8.5
8.49
0.01
10.0
10.0
0.00


由于单片机STC89C51为8位处理器,当测量10V电压时,即输入电压为5.00V,ADC0808输出数据值为255(FFH),因此单片机最高的数值分辨率为0.0196V(5/255)。这就决定了电压表的最高分辨率只能到0.0196V。
从上表可以看出,简易数字电压表测得的值基本上比标准电压值偏小0-0.02V,这可以通过校正ADC0809的基准电压来解决。因为该电压表设计时直接用5V的供电电源作为电压,所以电压可能有偏差。

1



参考文献
参考文献

[1] 张毅坤,《单片微型计算机原理及应用》,西安电子科技大学出版社,1998年09月

[2] 于殿泓、王新年,《单片机原理与程序设计实验教程》,西安电子科技大学出版社,2007年5月
[3] 蔡美琴,《MCS-51系列单片机系统及其应用》, 高等教育出版
[4] 江晓安、董秀峰、杨颂华,《数字电路技术》 第三版,西安电子科技大学出版社 ,2010年1月

1



参考文献

1



附录

附录1 仿真电路图

1



附录

附录2 实物连接图



附录
附录3 显示示数图

附录3.1


附录3.2



附录3.3


  1.               OE BIT   P3.0        ;ADC0809的OE端
  2.               EOC    BIT   P3.1    ;ADC0809的EOC端
  3.               CLOCK BIT P2.6
  4.               ST     BIT   P3.2    ;ADC0809的START和ALE端
  5.               LED_0 DATA 30H       ;显示缓冲区
  6.               LED_1 DATA 31H
  7.               LED_2 DATA 32H
  8.               LED_3 DATA 33H
  9.               ADC    DATA 34H      ;存放转换后的数据

  10. ;//////主程序开始////////

  11.               ORG    0000H
  12.               AJMP   START
  13.               ORG    000BH
  14.               LJMP TT0
  15.               ORG 0030H
  16. ;------初始化-----------

  17. START:
  18.               MOV SP,#60H           ;设置堆栈
  19.               MOV    LED_0,#00H     ;清空显示缓冲区
  20.               MOV    LED_1,#00H
  21.               MOV    LED_2,#00H
  22.               MOV    LED_3,#00H
  23.               MOV    DPTR,#TABLE     ;送字型码表首地
  24.             
  25.               MOV TMOD,#02H                               ;将02H送到TMOD寄存器,这里是设定定时器模式
  26.               MOV TH0,#01H
  27.               MOV TL0,#01H
  28.               MOV IE,#82H                                                        ;130
  29.               SETB TR0

  30. ;------ADC0809转换---------

  31. WAIT:
  32.     CLR ST
  33.               SETB   ST
  34.               CLR    ST         ;启动转换
  35.               JNB    EOC,$      ;等待转换结束
  36.               SETB   OE         ;允许输出
  37.               MOV    ADC,P1     ;暂存转换结果

  38. ;------数据处理,已备显示----------

  39.               MOV    A,ADC     ;将AD转换结果转换成BCD码
  40.               MOV    B,#028H   ;乘以40MV
  41.               MUL    AB
  42.               MOV    R7,A
  43.               MOV    R6,B
  44. HB2:
  45.     CLR A              ;BCD码初始化
  46.               CLR    C
  47.               MOV    R3,A
  48.               MOV    R4,A
  49.               MOV    R5,A
  50.               MOV    R2,#10H  ;转换双字节十六进制整数
  51. HB3:
  52.     MOV A,R7            ;从高端移出待转换数的一位到CY中
  53.               RLC    A
  54.               MOV    R7,A
  55.               MOV    A,R6
  56.               RLC    A
  57.               MOV    R6,A
  58.               MOV    A,R5   ;BCD码带进位自身相加,相当于乘2
  59.               ADDC   A,R5
  60.               DA     A      ;十进制调整
  61.               MOV    R5,A
  62.               MOV    A,R4
  63.               ADDC   A,R4
  64.               DA A
  65.               MOV    R4,A
  66.               MOV    A,R3
  67.               ADDC   A,R3
  68.               MOV    R3,A   ;双字节十六进制数的万位数不超过6,不用调整
  69.               DJNZ   R2,HB3
  70.               MOV    A,R5
  71.               SWAP   A
  72.               ANL    A,#0FH
  73.               MOV    LED_0,A
  74.               MOV    A,R4
  75.               ANL    A,#0FH
  76.               MOV    LED_1,A
  77.               MOV    A,R4
  78.               SWAP   A
  79.               ANL    A,#0FH
  80.               MOV    LED_2,A
  81.               MOV    A,R3
  82.               ANL    A,#0FH
  83.               MOV    LED_3,A
  84.               LCALL DISP    ;调用显示子程序
  85.               AJMP   WAIT

  86. ;//////数码管显示子程序//////////

  87. DISP:
  88.       MOV A,LED_0  ;数码显示子程序
  89.                  MOVC   A,@A+DPTR
  90.                  CLR    P2.3
  91.                  MOV    P0,A
  92.                  LCALL DELAY
  93.                  SETB   P2.3
  94.               MOV    A,LED_1
  95.               MOVC   A,@A+DPTR
  96.               CLR    P2.2
  97.               MOV    P0,A
  98.               LCALL DELAY
  99.               SETB   P2.2
  100.               MOV    A,LED_2
  101.               MOVC   A,@A+DPTR
  102.               CLR    P2.1
  103.               MOV    P0,A
  104.               SETB   P0.7 ;小数点
  105.               LCALL DELAY
  106.               SETB   P2.1
  107.               MOV    A,LED_3
  108.               MOVC   A,@A+DPTR
  109.               CLR    P2.0
  110.               MOV    P0,A
  111.               LCALL DELAY
  112.               SETB   P2.0
  113.               RET

  114. ;//////延时子程序///////////

  115. DELAY:   MOV R6,#02H  ;循环整个延时程序10次,延时5毫秒
  116. D1:      MOV R7,#0EEH ;循环下一条程序250次
  117. DJNZ   R7,$   ;DJNZ循环转移指令,将第一个数减1,是否为0,不为0则转移
  118. ;到指定地点,为0则往下执行
  119.               DJNZ   R6,D1
  120.               RET

  121. ;//////数码管字形码表///////////

  122. TABLE:
  123.      DB 3FH,06H,5BH,4FH,66H
  124.                 DB 6DH,7DH,07H,7FH,6FH

  125.               ORG 0100H
  126. TT0:
  127.               CPL CLOCK    ;产生ADC0808/0809时钟脉冲信号
  128.               RETI
  129.               END
复制代码


完整的Word格式文档51黑下载地址:
基于单片机系统的数字电压表.zip (716.57 KB, 下载次数: 198)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:649588 发表于 2019-11-26 08:08 | 显示全部楼层
楼主你好,请问能分享一下protues
回复

使用道具 举报

ID:867129 发表于 2020-12-24 16:28 | 显示全部楼层
请问我用你的程序和原理图进行仿真,数值不显示是为什么
回复

使用道具 举报

ID:944998 发表于 2021-6-26 10:32 | 显示全部楼层
请问能分享下原理图吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表