找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3215|回复: 0
打印 上一主题 下一主题
收起左侧

小动物动态电子秤嵌入式课程设计报告

[复制链接]
跳转到指定楼层
楼主
ID:251910 发表于 2017-11-21 15:28 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
嵌入式系统课程设计报告


设计题目:小动物动态电子秤设计
学    号:140210322            
指导教师:谢玮


信息与电气工程学院
二零十一


1. 设计任务
2. 整体方案设计
3. 系统硬件电路设计

3.1 时钟电路

3.2 复位电路

3.3 模数转换电路

3.4 压力传感器与ADC之间运算放大电路

3.5 ……

4. 系统程序设计

4.1 主程序流程图

4.2 PID调节子程序流程图

4.3 控制子程序流程图

4.4 ……

5. 系统调试

5.1 Proteus软件仿真调试

5.2 硬件调试

6. 程序清单
7.小结

小动物动态电子秤设计

在电子称重领域,微电子学和计算机等现代电子技术的成就给传统电子测量与测量仪器带来了巨大的冲击和革命性的影响。常规的测试仪器仪表和控制装置被更先进的智能仪器所取代,使得传统的电子测量仪器在运作、功能、精度及自动化水平等方面发生了巨大变化,并相应的出现了各种各样的智能仪器控制系统,使得科学实验和应用工程的自动化程度得以显著提高。

随着社会的不断进步,电子秤在各个领域都有所作用,因此如何能设计出既符合课题,又经济实用的动态电子秤就很适应社会的需求。

1. 设计任务

本次设计的小动物动态电子秤主要是以89C52单片机为处理核心,可实现静态测量和动态测量,并且通过LED显示测量的质量,测量结果应符合以下标准:

(1) 质量测量范围在1~3000g之间。

(2) 测量的精度:静态是-1g~+1g之间;动态是-3g~+3g之间。

(3) 时测量和LED数码显示被测量的质量。

主要硬件设备:AT89C51单片机、ADC0809模数转换芯片、CYG115型高压力传感器、 ……

2. 整体方案设计

小动物动态电子秤的整个设计中最重要的部分是对动态质量的处理,虽然家禽动态秤很早就开始研究应用,但对其快速和高准确度测量的实现至今仍是生产和科研的课题。随着科学技术的发展和生物医学工程技术的应用及家禽育种的需要,如今家禽等小动物的动态质量检测已进人数字化,智能化时代。家禽动态数字化测量关键是必须考虑和解决在检测过程中,家禽的活动引起的加速度对家禽本身质量测量的影响。它将检测传感器输出信号上又叠加了一个交变脉冲分量,从而引起检测值的误差及读数跳字不稳定。为了解决上述问题,在所研制小动物电子秤中采用软硬件结合的方式,使研制成的家禽小动物动态电子秤具有很好的稳定性及抗干扰性,且能保持较高的精确度,很符合需要。

电子秤的最根本思想就是将物体重量通过一系列转换显示出来,要达到这一目的,就必须考虑到将重量这个非电量转换成电量。由于电阻丝在外力作用下发生机械变形时,其电阻值发生变化,从而引起电压发生变化,即电桥的输出电压反映了相应的受力状态。但电阻应变式全桥传感器的输出是毫伏级的,必须通过一定倍数的放大,才能得到0-5V的电压,之后通过ADC0809采集数据送入单片机进行处理。因此,硬件电路中必须包括传感器(实现对非电量的数据采集)、电压放大电路、模数转换电路,通过单片机运行软件程序进行计算,最后送交LED显示器显示。以下部分将对所选择的硬件进行详细介绍,其硬件总体方案设计框图如图2.1所示:

图2.1 电子秤的结构框图

1. 传感器

传感器是信号发生部分的主要构成,整个传感器和实验台实现从非电量(质量)到电量(电压)的转换。在选择传感器的型号时,需考虑到其性能,测量时输入输出关系等。根据设计的要求,此处选择电阻应变式全桥传感器。

2. 电压放大电路

全桥传感器的输出电压比较小,只有几个毫伏,而A/D转换器要求的电压在0-5V之间。因此,要将该信号输入单片机中处理,需要有一个放大电路将此电信号放大到所需范围之内。由于放大电路的增益是可调的,故运用运算放大电路能将电压信号放大到所要求的范围。

3. 模数转换电路

计算机所能处理的是二进制的数字量,而传感器经过放大器出来的信号是模拟量,计算机不能处理。且由于单片机接收信号范围的限制,必须将由传感器中传出的模拟量转换成数字量,所以,需用一个模数转换电路来实现。模数转换电路的设计可采用8路8位逐次逼近式的A/D转换芯片ADC0809进行转换,完成从模拟量到数字量的转换。

4. 单片机

单片机作为一个接收、处理、输出信号的仪器装置,将传感器与LED显示连接成一个有机的整体。其主要是完成数据处理,并通过与之有关的软件来实现软件的编程使显示值与称重值对应。因此,此部分是整个设计最重要的组成部分

5. LED显示电路

根据本次设计的要求,需要使设计的电子秤能够实时显示测量的数据。如果物体质量在设定范围内(上限3000g),则通过4位LED来进行显示。

6. 复位电路

89C52的复位输入引脚RST(即RESET)为89C52提供了初始化的手段。有了它可以使程序从指定处开始执行,即从程序存储器中的0000H地址单元开始执行程序。在89C52工作后,只要在RST引脚上出现两个机器周期以上的高电平时,单片机内部则初始复位。只要RST保持高电平,则89C52循环复位。只有当RST由高电平变成低电平以后,89C52才从0000H地址开始执行程序。

3. 系统硬件电路设计
3.1应变式传感器的测量原理及分类
应变式传感器与其他类型的传感器相比,具有测试范围宽、输出特性线性好、精度高、性能稳定、工作可靠并能在恶劣环境下工作的特点。它由弹性原件、电阻应变片及外壳等组装而成的装置,因此称为应变式传感器。电阻应变式传感器的工作原理就是电阻的应变效应,即当导体或半导体受到外力作用时,会产生机械变形,电阻率及几何尺寸的变化就会引起电阻的变化,因此导体与半导体的电阻与电阻率及其几何尺寸有关。通过测量电阻值的大小,就可以反映外界力的大小,它的工作原理即导体随着机械变形而发生变化的现象。描述电阻应变效应的关系式为:

(3.1)

式中 为电阻丝电阻相对比值,K为应变灵敏系数, 为电阻丝长度相对变化,金属箔式应变片就是通过光刻、腐蚀等工艺制成的应变敏感元件,通过它转换被测部位受力状态变化、电桥的作用完成电阻到电压的比例变化,电桥的输出电压反映了相应的受力状态。对单臂电桥输出电压 、半桥输出电压 、全桥输出电压 。
电阻应变式传感器的测量电路可采用桥式测量电路,桥式测量电路有四个电阻,其中任何一个电阻均可以是应变片,电路图如图3.1所示:
图3.1  桥式测量电路图


图3.1 桥式测量电路图
如能恰当选择各桥臂的电阻,可消除电桥的恒定输出,使输出电压只与应变片的电阻有关。
每当桥的变化远小于本身阻值,即 时,可得输出电压为:

(3.2)

上述原理适用于所有的电阻应变式传感器,若按其测量电路(桥式)可详细的分为单臂式、半桥式、全桥式三种。所谓半桥,即将电桥的四臂接入四应变片。其中:一片受拉,一片受压,另外两应变片不受力。全桥是两片受拉,两片受压,故灵敏度比半桥式的大一倍。根据本次设计的具体情况考虑,决定采用电阻应变式全桥传感器。
3.2 放大电路的设计
由于从传感器中传出的信号是毫伏级的,而A/D转换器所能处理的电压是0-5V,所以必须在A/D转换器前加入一个前置差动放大电路以实现电压的放大,放大倍数为100-200倍,使输出电压为0-5V。处理后的电压才能在单片机接收信号的范围内,且仅放大两个输入信号的差值。因此,可采用一个运算放大器构成,但为了提高输入阻抗,使用差动放大电路图,硬件图如图3.2所示,在电路中,所有电阻均采用的是1%以下的电阻,当时,输出式(3.3):
(3.3)
图3.2  放大电路硬件原理图
由于单运放在应用中要求外围电路匹配精度高、增益调整不便、差动输入阻抗低,故采用三运放结构。
三运放结构具有差动输入阻抗高、共膜抑制比高、偏置电流低等优点,且有良好的温度稳定性,低噪单端输出和和增益调整方便,适于在传感器电路中应用。
利用理想运放条件可列写方程:
设流过的电流为:
(3.4)
再由的虚短可知:
(3.5)
所以:
(3.6)
又:
(3.7)
故:
(3.8)
因此:
(3.9)
3.3 数据采集电路的设计


      • 数据采集系统的组成
数据采集的核心是计算机,它对整个系统进行控制和数据处理,其由采样保持器、放大器、A/D转换器、计算机等组成。






            • 数据采样系统框图
      • 数据采样保持器
进行模数变换时,从启动变换到变换结束的数字量输出,需要一定的时间,即A/D转换的孔径时间。当输入信号频率较高,由于孔径时间的存在,会造成较大的转换误差;为了防止误差需在中间加一个功能器件采样保持器,进行有效、正确的数据采集。
采样保持器通常由保持电容器、模拟开关和运算放大器组成。其中对于低速场合可以采用继电器作为开关以减小开关漏电流的影响,在高速场合也可以用晶体管、场效应管作为开关。
采样保持器的原理:如图3.4,当开关闭合时,通过限电流电阻向电容C充电,在电容值合理的情况下,变化;当K断开时,由于电容C有一定的容量,此时输出在断开瞬间的电平值。










            • 采集保持原理图

在模拟信号输入通道中,是否需要加采样保持器,取决于模拟信号的变化频率和A/D转换器的孔径时间;对快速过程信号,当最大孔径误差超过允许值时,必须在A/D转换器前加采样保持器。但如果输入模拟量是直流量或者被测信号模拟量随时间变化非常缓慢,采样保持(SH)电路可以省去。



      • A/D转换器
数据采集系统一般直接用A/D模数接口电路进行数据的采集,A/D模数接口电路是由A/D转换器承担此任务。设计中A/D转换器用的是ADC0809转换器,它是8路8位逐次逼近式转换器,能分时地对8路模拟量信号进行A/D转换,结果为8位二进制数据,转换时间短,满足题目要求的“实时采样”,并且它的转换精度在0.1%上下,比较适中,适用于一般场合。
ADC0809由三部分组成:8路输入模拟量选择电路、逐次比较式A/D转换器、三态输出缓冲器。ADC0809完成一次转换需要的100μs左右,输出具有TTL三态锁存缓冲器,因而可以不加I/O接口芯片,直接接到微型计算机系统总线上。ADC0809与单片机的硬件接口图如图3.5所示,由图可见,单片机通过读控制线RD和ADC0809片选线控制启动A/D转换及输入通道地址锁存,写控制线WR与ADC0809片选线控制输出允许。由于ADC0809具有通道地址锁存功能,通道选择ADD.A、ADD.B、ADD.C直接与单片机的数据口相连。模拟电压由IN0通道输入,A/D采样电压在0-5V之间变化,模拟通道IN0地址口为0AOOOH。







            • ADC0809与单片机的硬件接口电路
3.4 单片机的选择
单片机自从问世以来就一直是工业检测、控制应用的主角。市场上常用的单片机有Intel公司的MCS-51系列,日本松下公司的MN6800系列等。其中,MCS-51由于单片机应用系统具有体积小,可靠性高,功能强,价格低等特点,很容易作为产品进行生产而更受青睐。
然而作为本系统的核心元件,选择哪一型号的MCS-51系列单片机显得尤为关键,下面就逐个进行比较:
8031单片机片内不带程序存储器ROM,使用时需外接程序存储器和一片逻辑电路74LS373,外接的程序存储器多为EPROM的2764系列。用户若想对写入到EPROM中的程序进行修改,必须先用一种特殊的紫外线灯将其照射擦除,之后再可写入。写入到外接程序存储器的程序代码没什么保密性可言。
8051单片机片内有4K ROM,无须外接存储器和74LS373,更能体现“单片”的简练。但是编的程序无法烧写到其ROM中,只有将程序交芯片厂代为烧写,并是一次性的,今后都不能改写其内容。
8751单片机与8051单片机基本一样,但8751单片机片内有4K的EPROM,用户可以将自己编写的程序写入单片机的EPROM中进行现场实验与应用,EPROM的改写同样需要用紫外线照射一定时间擦除后再烧写。
89C51单片机为EPROM型,在实际电路中可以直接互换8051单片机或8751单片机,不但和8051单片机指令,管脚完全兼容,而且其片内的4K程序存储器是FLASH工艺的。
89C52是一种低功耗高性能的具有8K字节可电气烧录及可擦除的程序ROM的八位CMOS单片机。该器件是用高密度、非易丢失存储技术制造并且与国际工业标准89C51单片机指令系统和引脚完全兼容。
综上所述,从使用方便与简化电路以及其性价比等角度来考虑,89C52比较合适的。本系统采用CPU为89C52的单片微机,89C52本身带有8K的内存储器,可以在编程器上实现闪烁式的电擦写达几万次以上,比以往惯用的8031CPU外加EPROM为核心的单片机系统在硬件上具有更加简单、方便等优点,而且完全兼容MCS-51系列单片机的所有功能。89C52管脚图如图3.6所示,下面介绍89C52的主要管脚功能如下:
VCC(40):电源+5V;VSS(20):接地;P0口(32-39):双向I/O口,既可作低8位地址和8位数据总线使用,也可作普通I/O口;P3口(10-17):多用途端口,既可作普通I/O口,也可按每位定义的第二功能操作;P2口(21-28):既可作高8位地址总线,也可作普通I/O口;P1口(1-8): 准双向通用I/O口;RST(9):复位信号输入端;ALE/PROG:地址锁存信号输出端;PSEN:内外程序存储器选择线;XTAL1(19)和XTAL2(18):外接石英晶体振荡器。
MCS-51的CPU可包括运算部件,控制器,程序状态字,B寄存器,累加器Acc(或A),位处理器等。
图3.6 89C52管脚图
3.5显示电路的设计
              LED液晶显示器是一种功耗极低的显示器,它可以将处理得出的数据在显示器上进行显示,让人们直观的看到被测体的质量,一般采用的七段LED显示器如图3.7所示:






            • LED数码管结构图
它由4个LED组成一个阵列,并封装于一个标准的外壳中。为使用于不同的驱动电路,有共阳极和共阴极两种结构。根据本次设计任务书的要求和实际情况,此处采用的是共阴极结构,其结构如图3.8所示:










            • 共阴极结构图
    • 复位电路的设计
本系统的复位电路是采用按键复位的电路,如图3.9所示,是常用复位电路之一。当89C52的ALE及PSEN两引脚输出高电平,RST引脚高电平到时,单片机复位。通过按动按钮产生高电平复位称手动复位,若运行过程中需要程序从头执行时,只需按动按钮即可,当按下按钮后是直接把+5V加到了RST/VPD端从而复位。复位后,P0到P3并行I/O口全为高电平,其它寄存器全部清零,只有SBUF寄存器状态不确定。










            • 按键复位的电路
4. 系统程序设计

    • 监控程序设计
整个设计既要满足设定要求来完成如计算等功能的任务功能程序,也要有可以监控仪器仪表正工作,保证其可靠性方面的监控程序。整个仪器的测量都是自动完成的,所以设计一套功能完备的监控程序是必须的也是必要的。
监控程序的主要作用是实时的响应来自系统的各种信息,按信息的类别进行处理;当系统出现故障时,能自动的采取有效的措施,消除故障,保证系统能够继续进行正常工作。


    • 数据采集子程序设计
数据采集用ADC0809芯片来完成,主要分为启动、读取数据、延时等待转换结束、读出转换结果、存入指定内存单元、继续转换(退出)几个步骤。ADC0809初始化后,就具有了将某一通道输入的0-5V模拟信号转换成对应的数字量00H-FFH,然后再存入89C52内部RAM的指定单元中。在控制方面有所区别,可以采用程序查询方式,延时等待方式和中断方式。数据采集转换子程序原理框图如图4.1所示:










            • 数据采集转换子程序原理框图
    • 据处理子程序设计

由于IN0通道允许输入的模拟电压值范围为0-5V,又由于A/D的采样结果为十六进制数,但由传感器中传出的数据不符合要求。因此数据处理主要完成对输入值系数调整,使输出满足要求,数据处理子程序可以成为整个程序的核心。

根据试验测得的数据和对数据的精确计算得出了A/D转换器输入最大(5V)时对应的输出为:5/FFH*K=196,最大十进制结果为5位。R0-R7分别为8位存储,BCD码是两位十进制数,所以需要三个寄存器来保存转换结果。

数据处理子程序是整个程序的核心。主要用来调整输入值系数,使输出满足量程要求外还须使得A/D的采样结果从十六进制数向十进制数形式转化。





      • 系统调整
在IN0输入的数最大为5V,要求的质量3000g对应的是5V,为十六进制向十进制转换方便,将系数放大100倍。并用小数点位置的变化体现这一过程。3000/256=11.8,76H=118,因而能够确定76H即为所需要的系数。




      • 数制转换
数制之间的转换:在二进制数制中,每向左移一位表示数乘二倍。以每四位作为一组对数分组,当第四位向第五位进位时,数由8变到16,若按十进制数制规则读数,则丢失6,所以应进行加六调整,DA指令可完成这一调整。可见数制之间的转换可以通过移位的方法实现,其中,移出数据的保存可以通过自乘再加进位的方法实现,因为乘二表示左移一位,左移后,低位进一,则需加一,否则加零。而通过移位已将要移入的尾数保存在了进位位中,所以能实现。




      • 防脉冲干扰平均值滤波
在工业控制等应用场合中,经常会遇到尖脉冲干扰的现象。干扰通常只会影响个别采样点的数据,此数据与其他采样点的数据相差比较大。如果采用一般的平均值法,则干扰将“平均”到计算结果上去,故平均值法不易消除由于脉冲干扰而引起的采样值的偏差。为此,可采取先对N个数据进行比较,去掉其中最大值和最小值,然后计算余下的N-2个数据的算术平均值。这个方法既可以滤去脉冲干扰又可滤去小的随机干扰。
在实际应用中,N可取任何值,但为了加快测量计算速度,一般N不能太大,一般取值为4,进行4次采样,即为四取二再取平均值。它具有计算方便速度快,存储量小等特点,故得到了广泛的应用。整个程序的框图如图4.2所示:










            • 防脉冲干扰平均值滤波程序框图
    • LED显示子程序设计
显示子程序是字符显示,调用8155初始化命令,然后输出写显示命令。在显示过程中一定要调用延时子程序,其任务是将测量结果送显示器显示。通过对LED显示子程序的编写、链接、调试等操作实现对测得的物品质量进行4位LED实数显示,上限是3000g。
8段LED共阴极常用字型码及其对应的显示字符见下表4.1所示:








          • 8LED共阴极常用字型码
[td]
显示字符
段码
显示字符
段码
0
3FH
9
6FH
1
06H
A
77FH
2
5BH
b
7CH
3
4FH
c
39H
4
66H
d
5EH
5
6DH
E
79H
6
7DH
F
71H
7
07H
P
73H
8
7FH
-----
-----


5. 系统调试

这一部分分为Proteus软件仿真调试和硬件调试两部分,分别给出调试过程、调试时应注意的问题,分析遇到的问题及问题的解决方法,Proteus调试可截屏运行结果图形并加以分析。

5.1 Proteus软件仿真调试

……

5.2 硬件调试

7.小结

本文设计的小动物动态电子秤是在各种仪器连接使用的基础上设计而成的,只有充分了解有关智能仪器、单片机、传感器以及各部分之间的关系才能达到要求,如传感器的精密度,它直接影响电子秤的称重准确度。
整个课题的开发过程主要包括了硬件电路设计和软件程序的编写两个部分,主要任务是开发一个以89C52单片机为核心的小动物动态电子秤,可实现物品动静态质量的测量,并用LED显示。通过整机联调验证了系统的可行性,能满足设计要求,达到设计的指标。硬件部分使用的是电阻应变式全桥传感器,精度较高,但输出部分不是特别稳定,对整个电路有一定影响。其次是数据采集处理阶段,此阶段是对传感器发出的信号进行量化、采集,主要分为信号放大、采集,然后进行A/D转换,ADC0809虽然符合设计要求,但其转换精度不高,对显示存在影响。
通过以上论述可以发现,整个设计的实用性较高,使用的硬件都是比较能够方便取得的,但还是有很多缺陷,如传感器输出部分的稳定问题,A/D转换部分硬件的选择,动态部分其他更完善处理的方法等,希望以后还能有所改进,能够趋于完美。

单片机源程序如下:
  1. ML8155    EQU   0DF00H        ;8155控制字寄存器的地址
  2. K8155A    EQU   0DF01H        ;8155A口地址
  3. K8155B    EQU   0DF02H        ;8155B口地址
  4. DTIMER0   EQU   30H           ;存放延时时间的初值
  5. DTIMER1   EQU   31H           ;存放调用延时子程序的次数
  6. ADVAL     EQU   3FH           ;存放A/D转换结果
  7. ADVAL1    EQU   3EH           ;存放中间结果
  8. TEMP      EQU   32H;
  9. TEMP1     EQU   33H;
  10. TEMP2     EQU   34H;
  11. TEMP3     EQU   35H;
  12. TEMP4     EQU   36H           ;存放中间结果
  13.           ORG   0000H
  14.           LJMP  MAIN
  15.           ORG   0100H
  16. ;*******************************************************
  17. ;* 主程序开始
  18. ;*******************************************************
  19. MAIN:     MOV    SP,#60H      ;设置堆栈区
  20.           LCALL  INIT_8155
  21. START1:   LCALL  AD_LED
  22.           SJMP   START1
  23. ;*******************************************************
  24. AD_LED:   LCALL  START
  25.           LCALL  ZHH         ;采样值转换为十进制
  26.           MOV    A,40H       ;把40H单元的值即千位和百位进行显示
  27.           CALL   HEX_LED
  28.           MOV    5FH,TEMP
  29.           MOV    5EH,TEMP1
  30.           MOV    A,41H      ;把41H即十位和个位进行显示
  31.           CALL   HEX_LED1
  32.           MOV    5DH,TEMP2
  33.           MOV    5CH,TEMP3
  34.           LCALL  WRITE_LED
  35.           RET
  36. ;******************************************************************
  37. ;*动态部分处理-防脉冲干扰算术平均值滤波,连续4次采样,去掉最大值和最小值,把剩余的数据求平均值作为本采样周期采样值。R2R3中存放最大值,R4R5存放最小值,R6R7存放累加和及最后结果。
  38. ;******************************************************************
  39. START:    CLR    A          ;清"0"R2,R6,R7
  40.           MOV    R2,A       ;最大值初态
  41.           MOV    R6,A       ;累加和初态
  42.           MOV    R7,A
  43.           MOV    R5,#0FFH   ;最小值初态
  44.           MOV    R0,#04H    ;N=4
  45. DAV1:     LCALL  ADC0809    ;调用0809采样子程序
  46.           MOV    A,ADVAL
  47.           MOV    R1,A       ;保存输入值
  48.           ADD    A,R7
  49.           MOV    R7,A
  50.           MOV    A,R6
  51.           ADDC   A,#00H
  52.           MOV    R6,A
  53.           CLR    C          ;输入值与最大值作比较
  54.           MOV    A,R2
  55.             SUBB   A,R1
  56.             JNC    DAV2       ;输入值<(R2)?
  57.             MOV    A,R1       ;输入值大于最大值
  58.             MOV    R2,A
  59. DAV2:       CLR    C          ;输入值与最小值比较
  60.             MOV    A,R1
  61.             SUBB   A,R5
  62.             JNC    DAV3       ;输入值<(R5)?
  63.             MOV    A,R1       ;输入值小于最小值
  64.             MOV    R5,A
  65. DAV3:       DJNZ   R0,DAV1    ;N-1=0?
  66.             CLR    C
  67.             MOV    A,R7       ;累加和中减去最大值
  68.             SUBB   A,R2     
  69.             MOV    R7,A
  70.             MOV    A,R6
  71.             SUBB   A,#00H
  72.             MOV    R6,A
  73.             MOV    A,R7       ;累加和减去最小值
  74.           SUBB   A,R5
  75.             MOV    R7,A
  76.             MOV    A,R6
  77.             SUBB   A,#00H
  78.             MOV    R6,A
  79.             MOV    A,R6
  80.           CLR    C
  81.             RRC    A
  82.             MOV    A,R7       ;平均值
  83.             RRC    A
  84.             MOV    R7,A       ;R7中存放平均值
  85.             MOV    ADVAL1,R7
  86.             RET
  87. ;*******************************************************
  88. ;0809采样子程序
  89. ADC0809:    PUSH   DPL
  90.             PUSH   DPH
  91.             PUSH   ACC
  92.             MOV    P2,#7FH    ;选通0809,
  93.             MOV    R1,#78H   
  94. L1:         MOVX   @R1,A      ;78H用来存放转换结果
  95.             MOV    R2,#10H
  96. L4:         DJNZ   R2,L4      ;延时32微秒
  97. L2:         JNB    P3.3,L2    ;当EOC为1时表示转换结束
  98.             MOVX   A,@R1      ;读出A/D转换的结果
  99.             MOV    ADVAL,A    ;把采样结果放入3FH中暂存
  100.             POP    ACC
  101.             POP    DPH
  102.             POP    DPL
  103.             RET
  104. ;******************************************************************
  105. ;转换子程序 : 3FH的内容(A/D采样的结果)*(5V/256(FFH))=十进制结果;40H,41H.例如:3FH=0FFH, 那么程序执行后:40H=04H , 41H=99H 即4.99V
  106. ;******************************************************************
  107. ZHH:        PUSH   PSW
  108.             PUSH   ACC
  109.             SETB   RS0
  110.             MOV    A,#076H    ;3000/256= 11.8,76H=118
  111.             MOV    B,ADVAL1   ;ADVAL中存放的是经过处理之后的采样值
  112.           MUL    AB
  113.           MOV    R4,B
  114.           MOV    R5,A
  115.           MOV    R3,#00H
  116.           MOV    R7,#0AH
  117. ;******************************************************************
  118. 十六进制数缩小10倍;
  119. ;******************************************************************
  120. DV31:     CLR    C
  121.           MOV    A,R3
  122.           SUBB   A,R7
  123.           JC     DV30
  124.           SETB   OV         ;商溢出
  125.           RET
  126. DV30:     MOV    R2,#10H    ;求R3R4R5/R7-→R4R5
  127. DM23:     CLR    C
  128.           MOV    A,R5
  129.           RLC    A
  130.           MOV    R5,A
  131.           MOV    A,R4
  132.           RLC    A
  133.           MOV    R4,A
  134.           MOV    A,R3
  135.           RLC    A
  136.           MOV    R3,A
  137.           MOV    F0,C
  138.           CLR    C
  139.           SUBB   A,R7
  140.           ANL    C,/F0
  141.             JC     DM24
  142.             MOV    R3,A
  143.             INC    R5
  144. DM24:       DJNZ   R2,DM23
  145.             MOV    A,R3       ;四舍五入
  146.             ADD    A,R3
  147.             JC     DM25
  148.             SUBB   A,R7
  149.             JC     DM26
  150. DM25:       INC    R5
  151.             MOV    A,R5
  152.             JNZ    DM26
  153.             INC    R4
  154. DM26:       CLR    OV         ;商在R4R5中
  155. ;******************************************************************
  156. 把十六进制转换为BCD码
  157. ;******************************************************************
  158. MAIN2:      MOV    A,R4
  159.             MOV    R2,A
  160.             MOV    A,R5
  161.             MOV    R3,A
  162. HB2:        CLR    A
  163.             MOV    R4,A
  164.             MOV    R5,A
  165.             MOV    R6,A
  166.             MOV    R7,#10H
  167. LOOP:       CLR    C
  168.             MOV    A,R3
  169.             RLC    A
  170.           MOV    R3,A
  171.           MOV    A,R2
  172.           RLC    A
  173.           MOV    R2,A
  174.           MOV    A,R6
  175.           ADDC   A,R6
  176.           DA     A
  177.           MOV    R6,A
  178.           MOV    A,R5
  179.           ADDC   A,R5
  180.           DA     A
  181.           MOV    R5,A
  182.           MOV    A,R4
  183.           ADDC   A,R4
  184.           DA     A
  185.           MOV    R4,A
  186.           DJNZ   R7,LOOP
  187.           MOV    40H,R5     ;存放高八位
  188.           MOV    41H,R6     ;存放底八位
  189.           POP    ACC
  190.           POP    PSW
  191.           RET
  192. ;******************************************************************
  193. ;将 ACC 内容,即千位和百位以十进制值显示
  194. ;******************************************************************
  195. HEX_LED: PUSH   DPH
  196.           PUSH   DPL
  197.           PUSH   ACC
  198.           PUSH   ACC
  199.             ANL    A,#0FH     ;留下低四位
  200.             MOV    DPTR ,#BCD_CODED ;DPTR指到段码表BCD__CODED
  201.             MOVC   A,@A+DPTR  ;取得BCD码
  202.             MOV    TEMP1,A    ;写到LED
  203.             POP    ACC
  204.             SWAP   A
  205.             ANL    A,#0FH     ;留下高四位
  206.             MOV    DPTR ,#BCD_CODED ;DPTR指到段码表BCD__CODED
  207.             MOVC   A,@A+DPTR  ;取得BCD码
  208.             MOV    TEMP,A     ;写到LED
  209.             POP    ACC
  210.             POP    DPL
  211.             POP    DPH
  212.             RET
  213. BCD_CODED:
  214.             DB     3FH,06H,5BH,4FH,66H,6DH
  215.             DB     07DH,07H,7FH,6FH,77H
  216. ;******************************************************************
  217. ;将A中内容即十位和个位以十进制显示
  218. ;******************************************************************
  219. HEX_LED1:   PUSH   DPH
  220.             PUSH   DPL
  221.             PUSH   ACC
  222.             PUSH   ACC
  223.             SWAP   A
  224.             ANL    A,#0FH
  225.             MOV    DPTR ,#BCD_CODEA
  226.             MOVC   A,@A+DPTR
  227.             MOV    TEMP2,A
  228.           POP    ACC
  229.           ANL    A,#0FH
  230.           MOV    DPTR,#BCD_CODEA
  231.           MOVC   A,@A+DPTR
  232.           MOV    TEMP3,A
  233.           POP    ACC
  234.           POP    DPL
  235.           POP    DPH
  236.           RET
  237. BCD_CODEA:
  238.           DB     3FH,06H,5BH,4FH,66H
  239.           DB     6DH,7DH,07H,7FH,6FH
  240. ;******************************************************************
  241. ;  显示5FH-5CH的内容
  242. ;******************************************************************
  243. WRITE_LED:PUSH   DPL
  244.           PUSH   DPH
  245.           PUSH   ACC
  246.           MOV    R0,#5CH
  247.           MOV    R3,#0F7H
  248.           MOV    A,R3
  249. AGAIN:    MOV    DPTR,#K8155A
  250.           MOVX   @DPTR,A
  251.           MOV    A,@R0
  252.           MOV    DPTR,#K8155B
  253.           MOVX   @DPTR,A
  254.           LCALL  DELAY01
  255.           INC    R0
  256.           MOV    A,R3
  257.             JNB    ACC.0,OUT1
  258.             RR     A
  259.             MOV    R3,A
  260.             AJMP   AGAIN
  261. OUT1:       POP    ACC
  262.             POP    DPH
  263.             POP    DPL
  264.             RET
  265. ;******************************************************************
  266. INIT_8155:  PUSH   DPL
  267.             PUSH   DPH
  268.             PUSH   ACC
  269.             MOV    DPTR,#ML8155
  270.             MOV    A,#03H    ;对8155写入控制字,A,B口作为基本输出,C口输入
  271.             MOVX   @DPTR,A
  272.             POP    ACC
  273.             POP    DPH
  274.             POP    DPL
  275.             RET
  276. ;******************************************************************
  277. ;延时子程序
  278. ;******************************************************************
  279. DELAY:      PUSH   DTIMER1   ;延时TIMER1*1 ms for 12MHz
  280.             PUSH   DTIMER0
  281. DELAY1:     MOV    DTIMER0,#125 ;时间为4*1μS
  282. DELAY2:     NOP              ;1个周期
  283.             NOP              ;1个周期
  284.             DJNZ   DTIMER0,DELAY2 ;2个周期
  285.           DJNZ   DTIMER1,DELAY1
  286.           POP    DTIMER0
  287.           POP    DTIMER1
  288.           RET
  289. ;****************************************
  290. ;延时 1 ms
  291. ……………………

  292. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
嵌入式系统设计报告王.doc (991.5 KB, 下载次数: 29)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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