当前位置:文档之家› AT89C51单片机的介绍——最常用的51芯片

AT89C51单片机的介绍——最常用的51芯片

AT89C51单片机的介绍——最常用的51芯片
AT89C51单片机的介绍——最常用的51芯片

数理与信息工程学院课程设计

题目:智能温度计

专业:计算机科学与技术(专升本)

班级:计算机056班

姓名:陈婷婷学号:05191104

成绩:

2006.6

目录

一引言 (1)

二智能温度计的基本组成方框 (1)

三系统硬件组成 (2)

(一)温度传感器AD590及其应用 (2)

(二)放大器 (3)

(三)A/D转换器MC1443 (3)

(四)LED显示器 (4)

(五)系统核心单片机部分闪电存储器型器件AT89C51 (5)

(六)其它 (10)

四智能温度计的流程图 (10)

五系统主程序 (12)

六总结和体会 (22)

七参考文献 (23)

智能温度计设计

数理与信息工程学院 05计算机专升本陈婷婷

[摘要] 本论文叙述了应用单片机AT89C51构成的智能温度计主要的功能、硬件的组成和软件的设计。该系统的功能是通过温度传感器对温度进行采集,然后通过A/D转换器MC14433进行模数转换,传给单片机进行处理,从而实现温度的实时显示。整个系统结构紧凑、简单可靠、操作灵活、功能强、性能价格比高,较好地满足了现代农业生产和科研的需要。

[关键词]单片机温度传感器A/D转换器实时显示

一、引言

单片机自问世以来,性能不断提高和完善,其资源又能满足很多应用场合的需要,加之单片机具有集成度高、功能强、速度快、体积小、功耗低、使用方便、价格低廉等特点,因此,在工业控制、智能仪器仪表、数据采集和处理、通信系统、高级计算器、家用电器等领域的应用日益广泛,并且正在逐步取代现有的多片微机应用系统。单片机的潜力越来越被人们所重视。特别是当前用CMOS工艺制成的各种单片机,由于功耗低,使用的温度范围大,抗干扰能力强、能满足一些特殊要求的应用场合,更加扩大了单片机的应用范围,也进一步促使单片机性能的发展。而现在单片机在农业上也有了很多的应用。

温度是日常生活、工业、医学、环境保护、化工、石油等领域最常遇到的一个物理量。测量温度的基本方法是使用温度计直接读取温度。最常见到的测量温度的工具是各种各样的温度计,例如,水银玻璃温度计,酒精温度计,热电偶或热电阻温度计等。它们常常以刻度的形式表示温度的高低,人们必须通过读取刻度值的多少来测量温度。利用单片机和温度传感器构成的电子式智能温度计就可以直接测量温度,得到温度的数字值,既简单方便,又直观准确。

二、智能温度计的基本组成方框

图1—1是智能温度计的基本组成方框。主要由温度传感器,放大器,A/D转换器,单片机控制,LED显示器,电源等组成。温度传感器是把温度转换成电压(或电流)的器件,温度传感器输出电压的大小随温度的高低变化而变化,电压值的变化范围从几个微伏到几个毫伏。不同的温度传感器,输出电压的范围也差别很大。放大器的主要功能是把微弱的温度电压信号放大到(0—2)伏或(0—5)伏的范围内,以便进行A/D转换。A/D转换器把放大后的模拟温度电压信号转换成对应的数字温度电压信号。单片机8051是智能温度计的控制核心,一方面控制A/D转换器实现模拟信号到数字信号的转换,另一方面将采集到的数字温度电压值,经过计算处理,得到相应的温度值,送到LED显示器以数字形式显示测量的温度。LED显示器用于显示测量温度的结果。

图1—1 智能温度计方框图

三、系统硬件组成

图1—2 测量摄氏(℃)温度的电路原理。

假定:温度测量范围:0——150℃。摄氏(℃)

温度数字显示: 000.0 或112.8等,十进制小数点后一位。

(一)、温度传感器AD590及其应用

AD590是美国模拟器件公司生产的单片集成两端感温电流源。它的主要特性如下:

(1) 流过器件电流的微安数等于器件所处环境温度的热力学温度(开尔文)度数。即

I T/T=1μA/K

式中的I T为流过器件(AD590)的电流,单位μA,T为温度,单位为K。

(2)AD590的测温范围为-55℃-+150℃。

(3) AD590的电源电压范围为4V~30V。电源电压从4V到6V变化,电流I T变化1μA,相

当于温度变化1K。AD590可以承受44V正相电压和20 V反相电压。因而器件反接也不会损坏器件。

(4) 输出电阻为710MΩ。

(5) 精度高。

AD590在出厂以前已经校对,精度高。因为流过AD590的电流于热力学温度成正比,如两个电阻之和为1K,温度变化1°C,那么输出电压V o变化为1mV/K。但由于AD590 的增益有偏差,电阻也有误差,调整的方法与对P-N结温度传感器调整的方法相同。即,把AD590放于冰水混合物中,调整电位器,使V o=273.2mV。或在室温下,例如25℃条件下调整电位器使V o=273.2+25=298.2(mV)。但这样调整只可以保证0℃或25℃附近有较高精度。

图中用电位器R1调零点,用R2调增益,方法如下:在0 o C时调整W1使输出V o=273.2mV。然后在100℃时调W2使V o=373.2mV。然后反复多次,直至0℃时V o=273.2mV,100℃时V o=373.2mV为止。最后在室温下进行校验。例如,若室温为25℃,那么V o应为298.2mV。0℃和100℃环境的产生方法:冰水混合物是0℃的环境,沸水为100℃环境。(二)、放大器

放大器由运算放大器A组成,常用的芯片有:LF335,LF336,CA3140等,主要功能是把模拟的温度电压信号放大到A/D转换器要求的输入电压范围。A/D转换器MC14433要求,模拟输入电压的范围为:0——2V。W3的作用是抵消温度传感器AD590在摄氏0℃时产生的温度电压V o=273.2mV,使放大器A的输出电压为0.0V。放大器A的放大倍数选择为10,保证温度在0—150℃范围内变化,而放大器的输出电压在0—1。50V的范围内。电位器W2用于调整放大器的放大倍数。

(三)、 A/D转换器MC14433

A/D转换器由双积分型3又1/2位A/D转换器MC14433来完成。因为温度的变化具有惯性,变化缓慢,MC14433的转换速度完全可以满足温度测量的要求。

MC14433的方框图和引脚如图3所示,它是单片CMOSA/D转换器,它采用双积分原理实现A/D转换。因为转换后的数字量有三位十进制数,而最高位只能输出0或1,故称为3又1/2位A/D转换器.该电路需要外接积分电阻R和电容C,外接失调补偿电容C。该电路具有自动调零、自动极性转换功能,它精度高、功耗低、使用方便并能与微机或其他数字电路兼容。它广泛用于数字面板表、数字万用表、数字量具和遥控遥测系统。

图1—3 MC14433的方框图和引脚

引脚引线功能如下:

G 被测电压VX和参考电压VR的模拟接地端

VR 外接参考电压端(+2V或+200Mv)

VX 被测电压输入端

R1,R1/C1,C1 外接积分电阻R1和积分电容C1元件端。外接元件典型值:当量程为2V时,C = 0.1μF,R = 470kΩ;当量程为200mV时,C1 = 0.1μF, R1 = 27kΩC01,C02 外接失调电容C0端。C0典型值为0.1μF

DU 数据显示控制端。当DU和EOC(引脚14)连接时,每次A/D转换都输出

CLKI,CLKO 时钟振荡器外接电阻RC端, RC的典型值为470kΩ,时钟频率随RC增加而下降

VEE 模拟负输入端。典型值为-5V

VSS 数字地,除CLKO端外所有输出端的低电平基准。当VSS与VAG相连(即数字地和模拟地相连)时,输出电压幅度为VAG~VDD(0V~+5V);当VSS与VEE(-5V)相连,输出电压幅度为VEE~VDD(-5V~+10V)。实际应用时一般是VSS与VAG相连

EOC 转换结束控制端(输出)。每当一个A/D转换周期结束,EOC端输出一个宽度为时钟周期1/2宽度的正脉冲

OR过量程标志输出端。平时为高电平。当|VX|﹥VR时(被测电压输入绝对值大于参考电压),OR端输出低电平

DS1~DS4 多路选通脉冲输出端,对应DS1千位,对应DS4个位。每个选通脉冲宽度为18个时钟脉冲,两个相邻脉冲之间间隔为2个时钟周期

Q0~Q3 BCD码数据输出线。其中为Q0最低位,Q3为最高位。当DS2 、DS3和 DS4选通期间,Q0~Q3除了表示千位的0或1外,还表示了转换值的正负极性和欠量程还是过量程

VDD 正电源端。典型值为+5V

MC14433的外部连接电路

尽管MC14433外部连接元件很少,为使其工作于最佳状态,也必须注意外部电路的连接和外接元件的选择,其实际连接电路如图11—18所示。为了提高电源抗干扰的能力,正、负电源分别通过去耦电容0.047μF、0.02μF与VSS(VAG)相连。

MC14433和单片机8051采用查询方式连接。MC14433的多路选通脉冲输出端和BCD码数据输出端Q0--Q7和单片机的P0口连接。EOC端和8051的/INT0连接,单片机8051通过不断查询/INT0端的状态,了解MC14433的每次A/D转换是否结束,在A/D转换结束后,经P0口读取A/D转换的结果,存入CPU内部的输入数据缓冲区。MC1403是高精度的基准源(2.5V),它的输出经10K可调电位器,调整到2.0V提供MC14433的基准电压。

(四)、LED显示器

LED显示器由4位共阴极LED显示器组成,采用动态分时扫描方式。采用4位共阴极LED 示器使为了保证温度超过100℃时,测量结果仍能保持在小数点后一位显示,例如:110.4℃,提高测量显示精度。

共阴极LED显示器的阳极和单片机CPU的P1口连接,显示段码由CPU通过P1口传送到LED显示器的阳极。位扫描码由单片机8051的P2口低四位输出,经同相驱动器传送到LED显示器的阴极,选通LED显示器的数位,P2.3,P2.2,P2.1,P2.0输出电平为‘0111’时,选通左边的第一位数字,P2.3,P2.2,P2.1,P2.0输出电平为‘1011’时,选通左边的第二位数字,P2.3,P2.2,P2.1,P2.0输出电平为‘1101’时,选通左边的第三位数字,P2.3,P2.2,P2.1,P2.0输出电平为‘1110’时,选通左边的第四位数字。

(五)、系统核心单片机部分---闪电存储器型器件AT89C51

单片机AT89C51有内部RAM,可以作为各种数据区使用,内部闪电存储器存放智能温度计的控制程序。它的主要功能是控制MC14433,实现温度的数字值采集,完成温度的数字采集值到对应数字温度的转换计算,并把计算的数字温度转换相应的显示段码,控制LED 显示器以动态扫描方式进行温度显示。

AT89系列单片机是ATMEL公司生产的。这是当前最新的一种电擦写8位单片机,与MCS-51系列完全兼容,有超强的加密功能,可完全替代87C51/52和8751/52。它物美价廉,深受用户欢迎。

与87C51相比,AT89系列的优越性在于,其片内闪电存储器的编程与擦除完全用电实现;数据不易挥发,可保存10年;编程/擦除速度快,全4K字节编程只需时3s,擦除时间约用10ms;AT89系列了实现在线编程;也可借助电话线进行远距离编程。

AT89C51是一种低功耗、高性能内含4K字节闪电存储器(Flash Memory)的8位CMOS 微控制器。这种器件系以ATMEL高密度不挥发存储技术制造,与工业标准MCS-51指令系统和引脚完全兼容。片内闪电存储器的程序代码或数据可在线写入,亦可通过常规的编程器编程。例如,MP-100这样一种经济型的编程器,它支持通用EPROM等各种存储器、PAL、GAL 以及INTEL、ATMEL和PHILIPS等各公司的全系列51单片机的编程。ME5103和ME5105仿真器支持AT89系列所有器件的调试、仿真和编程。

AT89C51具有下列主要性能:

. 4KB可改编程序Flash存储器

(可经受1,000次的写入/擦除周期)

.全静态工作:0Hz~24MHz

.三级程序存储器保密

.128 X 8字节内部RAM

.32条可编程I/O线

.2个16位定时器/计数器

.6个中断源

.可编程串行通道

.片内时钟振荡器

另外,AT89C51是用静态逻辑来设计的,其工作频率可下降到0 Hz,并提供两种可用软件来选择的省电方式——空闲方式(Idle Mode)和掉电方式(Power Down Mode)。在空闲方式中,CPU停止工作,而RAM、定时器/计数器、串行口和中断系统都继续工作。在掉电方式中,片内振荡器停止工作,由于时钟被“冻结”,使一切功能都暂停,只保存片内RAM

中的内容,直到下一次硬件复位为止。

(1)主电源引脚

(a).Vcc 电源端

(b).GND 接地端

(2)外接晶体引脚XTAL1和XTAL2

(a).XTAL1 接外部晶体的一个引脚。在单片机内部,它是构成片内振荡器的反相放大器的输入端。当采用外部振荡器时,该引脚接收振荡器的信号,既把此信号直接接到内部时钟发生器的输入端。

(b).XTAL2 接外部晶体的另一个引脚。在单片机内部,它是上述振荡器的反相放大器的输出端。采用外部振荡器时,此引脚应悬浮不连接。

(3).控制或与其它电源复用引脚RST、ALE//PROG、/PSEN和/EA/Vpp

(a).RES 复位输入端。当振荡器运行时,在该引脚上出现两个机器周期的高电平将使单片机复位。

(b).ALE//PROG 当访问外部存储器时,ALE(地址锁存允许)的输出用于锁存地址的低位字节。即使不访问外部存储器,ALE端仍以不变的频率(此频率为振荡器频率的1/6)周期性地出现正脉冲信号。因此,它可用作对外输出的时钟,或用于定时目的。然而要注意的是:每当访问外部数据存储器时,将跳过一个ALE脉冲。在对Flash存储器编程期间,该引脚还用于输入编程脉冲(/PROG)。

如果需要的话,通过对专用寄存器(SFR)区中8EH单元的D0位置数,可禁止ALE操作。该位置数后,只有在执行一条MOVX或MOVC指令期间,ALE才会被激活。另外,该引脚会被微弱拉高,单片机执行外部程序时,该设定禁止ALE位无效。

(c). /PSEN 程序存储允许(/PSEN)输出是外部程序存储器的读选通信号。当AT89C51/LV51由外部程序存储器取指令(或常数)时,每个机器周期两次/PSEN有效(既输出2个脉冲)。但在此期间内,每当访问外部数据存储器时,这两次有效的/PSEN信号将不出现。

(d)./EA/Vpp 外部访问允许端。要使CPU只访问外部程序存储器(地址为0000H~FFFFH),则/EA端必须保持低电平(接到GND端)。然而要注意的是,如果保密位LB1被编程,复位时在内部会锁存/EA端的状态。

当/EA端保持高电平(接Vcc端)时,CPU则执行内部程序存储器中的程序。

在Flash存储器编程期间,该引脚也用于施加12V的编程允许电源Vpp(如果选用12V 编程)。

(4)输入/输出引脚 P0.0~ P0.7、P10.~P1.7、P2.0~ P2.7 和P3.0~P3.7

(a).P0端口(P0.0~ P0.7) P0是一个8位漏极开路型双向I/O端口。作为输出口用时,每位能以吸收电流的方式驱动8个TTL输入,对端口写1时,又可作高阻抗输入端用。

在访问外部程序和数据存储器时,它是分时多路转换的地址(低8位)/数据总线,在访问期间激活了内部的上拉电阻。

在Flash编程时,P0端口接收指令字节;而在验证程序时,则输出指令字节。验证时,要求外接上拉电阻。

(b).P1端口(P1.0~ P1.7) P1是一个带有内部上拉电阻的8位双向I/O端口。P1的输出缓冲器可驱动(吸收或输出电流方式)4个TTL输入。对端口写1时,通过内部的上拉电阻把端口拉到高电位,这时可用作输入口。作输入口时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输出一个电流。

在对Flash编程和程序验证时,P1接收低8位地址。

(c).P2端口(P2.0~P2.7) P2是一个带有内部上拉电阻的8位双向I/O端口。P2的输出缓冲器可驱动(吸收或输出电流方式)4个TTL输入。对端口写1时,通过内部的上拉电阻把端口拉到高电位,这时可用作输入口。P2作输入口使用时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输出一个电流。

在访问外部程序存储器和16位地址的外部数据存储器(如执行MOVX @DPIR指令)时,P2送出高8位地址。在访问8位地址的外部数据存储器(如执行MOVX @RI指令)时,P2口引脚上的内容(就是专用寄存器(SFR)区中P2寄存器的内容),在整个访问期间不会改变。

在对Flash编程和程序验证期间,P2也接收高位地址和一些控制信号。

(d).P3端口(P3.0~P3.7) P3 是一个带有内部上拉电阻的8位双向I/O端口。P2的输出缓冲器可驱动(吸收或输出电流方式)4个TTL输入。对端口写1时,通过内部的上拉电阻把端口拉到高电位,这时可用作输入口。P3作输入口使用时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输出一个电流。

在AT89C51中,P3端口还用于一些专门功能,这些兼用功能见表1

在对Flash编程和程序验证时,P3还接收一些控制信号。

(5)Flash存储器的编程和程序校验:

AT89C51单片机内部有一个4K字节的Flash PEROM。这个Flash存储阵列通常是处于已擦除状态(既存储单元的内容为FFH),随时可对它进行编程。编程接口可接收高电压(12V)或低电压(Vcc)的允许编程信号。低电压编程方式可很方便地对AT89C51内的用户系统进行编程;而高电压编程方式则可与通用的EPROM编程器兼容。

AT89C51的程序存储器阵列是采用字节写入方式编程的,既每次写入一个字节。要对片内的PEROM程序存储器写入任何一个非空字节,都必须用片擦除方式将整个存储器的内容清除。

(6)对Flash存储器编程

编程前,必须按照表2和图5建立好地址、数据和相应的控制信号。编程单元的地址加在P1端口和P2端口的P2.0~P2.3(11位地址为0000H~0FFFH),数据从P0端口输入。引脚P2.6、P2.7和P3.6、P3.7的电平选择见表2。/PSEN应保持低电平,而RST应保持高电平。/EA/VPP是编程电源的输入端,按要求加入编程电压。ALE//PROG端输入编程脉冲(应为负脉冲信号)。编程时,采用4~20 MHz的振荡器。对AT89C51编程的步骤如下:

(a)在地址线上输入要编程单元的地址。

(b)在数据线上输入要写入的数据字节。

(c)激活相应的控制信号。

(d)在采用高电压编程方式时,将/EA/VPP端的电压加到12V。

(e)每对Flash存储阵列写入一个字节或每写入一个程序加密位,加一个ALE//PROG 编程脉冲。

改变编程单元的地址和要写入的数据,重复步骤a~e,直到全部文件编程完毕。

每个字节写入周期是自动定时的,通常不大于1.5ms。

表1—2 Flash编程方式

(7)数据查询方式

AT89C51单片机用数据查询方式来检测一个写周期是否结束。在一个写周期期间,如果想读出最后写入的哪个字,则读出数据的最高位(P0.7)是原来写入字节最高位的反码。写周期一旦完成后,有效的数据就会出现在所有输出端上,这时可开始下一个写周期。一个写周期开始后,可在任何时间开始进行数据查询。

图1—5 Flash编程图1—6 程序的校验

图1—7 Flash编程和校验的波形(高电平编程方式)

(8)准备就绪/忙信号

字节编程的过程也可通过RDY//BSY输出信号来监视。在编程期间,当ALE变为高电平后,P3.4(RDY//BSY)端的电平被拉低,表示忙(正在编程)状态。编程完毕后,P3.4的电平变高表示就绪状态。

(9)程序的校验

如果加密位LB1和LB2没有被编程,那么就可以对AT89C51内部已编好的程序进行校验。这时采用图6所示的引脚接法。程序存储器的地址仍由P1端口和P2端口的P2.0~P2.3输入,数据由P0端口输入。P2.6、P2.7和P3.6、P3.7的电平见表1-4。/PSEN保持低电平,而ALE、/EA和RST保持高电平。校验时,在P0端口上要求外接约10KΩ左右的上拉电阻。

程序加密位不能直接校验。加密位的校验可通过观察它们的功能是否被允许来进行。

Flash存储器编程和程序校验时的时序图见图1—7(高电平编程)和图1—8(低电压编程)。

图1—8 Flash编程和校验的波形(低电压编程方式)

(六)、其它

为增强系统在工作现场的抗干扰能力,在硬件设计方面采取了一系列措施,例如,信号的输入/输出采用电平转换、光电隔离;正确配置接地系统,处理好共地信号;强电信号和弱电信号分开走线,传输线尽可能使用双绞线和屏蔽电缆;设置WDT时钟监视电路,自动监视CPU运行状态,出现故障自动处理,同时具有硬件自诊断功能,避免“死机”现象发生等等。

四.智能温度计的流程图

在软件设计上,采用了良好的人机交互环境,可通过选择功能热键执行特定的程序,如任意设定检测参数值,选择显示方式和控制模式等,还可设置优先权直接进行人为干预以便达到灵活控制的目的,如果某一检测通道被键设置成关闭,那么不管此通道外部情况如何,系统均不作任何反应。

为了提高系统的抗干扰能力,除硬件上采取了相应的措施外,在软件设计中也采取了若干措施,如在数据采集时采用数字滤波;采取指令冗余设计,在程序中适当地插入空操作指

令,对一些重要的指令重写等等。从而有效地提高了系统运行的可靠性,使其检测控制工作及时准确、安全稳定,达到良好的环境模拟控制性能要求。

图9是智能温度计的流程图。因为智能温度计的控制和计算相对简单,由该流程方框图可见,该主程序是循环线性结构。在初始化时,清除内部RAM,设定标志位和标志单元,设置堆栈指针,检测LED显示器工作是否正常等。

它主要包括了下述一些子程序:

(1)从A/D转换器MC14433读取温度数字电压子程序:查询A/D转换状态,一旦本次A/D 转换结束,CPU将温度电压的BCD码数字值送到RAM中的输入缓冲区存放。

(2)温度电压数字值到温度数字转换子程序;将缓冲区中的温度电压数字BCD码转换为实际的温度十进制数字。

(3)温度数字到LE D显示段码转换子程序:把温度十进制数字转换成相应的LED显示段码,存放在显示段码缓冲区供LED显示器显示传送子程序

(4)LED显示段码到LED显示器显示传送和动态扫描子程序

(5)BCD码加,减,乘,除子程序;

(6)BCD码在缓冲器间传送子程序;

(7)其它专用子程序;

图9 智能温度计的流程图

四、系统主程序

系统主程序:

ORG 0000H

LJMP MAIN

ORG 0013H

LJMP SUB

ORG 0100H

MAIN: MOV SP,#40H

MOV A,#78H

MOV R7,#09H

MOVX A,@DPTR

MOV R0,A

CLR C

SUBB A,#34H

JNC LOOP1

CLR C

MOV A,R0

SUBB A,#3AH

JC LOOP

MOV A,R0

ACALL TEMP

LOOP:MOV DPTR,#EF00H

MOV R1,#0F8H

MOV A,#33H

MOVX @R1,A

MOV A,R0

MOVC A,@A+DPTR

DEC R1

MOVX @R1,A

MOV A,R2

INC R1

MOVX @R1,A

INC R0

MOV A,R2

CLR C

RRC A

MOV R2,A

MOV A,#00H

MOV DPTR,#00F8H

MOVX @DPTR,A

AJMP GO

LOOP1: MOV P1,#8FH

AJMP GO

LOOP2: MOV P1,#0BFH

GO : POP DPH

POP DPL

POP ACC

POP PSW

RETI

END

TEMP: MOV DPTR,TABLE

MOV A,R0

MOV B,#04H

CLR C

MUL AB

JNC NOO

INC DPH

NOO: MOVC A,@A+DPTR

MOV 80H,A

INC DPTR

MOVC A,@DPTR

MOV 81H,A

AJMP LOOP

ORG 0300H

TAB: DB 3FH 06H 5BH 4FH 66H 6DH 7DH 07H 7FH 6FH 77H 83H MAIN:MOV 20H,#0

MOV 21H,#0

MOV R0,#3CH

MOV R1,#12

LCALL CLEAR

SETB PT0

ML2: NOP

NOP

NOP

MOV A,P1

CJNE A,#0FBH,ML3

AJMP MAIN

ML3: MOV A,PIN1

INC A

SUBB A,PIN3

CJNE A,#0,ML4

AJMP TEST0

ML4: JC TEST0

JNB E1,TEST0

AJMP COMPP

TEST0:MOV PIN3,#0

CJNE A,#0FDH,TEST

AJMP EXIT

TEST:MOV A,P1

CJNE A,#0FFH,TEST1 EXIT:MOV R0,#79H

MOV R1,#50H

HEX: ACALL HEXASC

MOV R2,#6

MOV R0,#5AH

ACALL INI

CLR FLAG3

SJMP HERE

COMPP:AJMP COMP

SECOO:JNB P1.5,SSECO

AJMP SECO

SSECO:AJMP SEC

MINII:JNB P1.5,MMINI

AJMP MINI

MMINI:AJMP MIN

HOURR:JNB P1.5,HHOUR

AJMP HOUR

HHOUR:AJMP HOU

TEST1:JNB P1.0,SETT

TEST2:SETB EA

JNB P1.4,EXIT

JNB P1.5,DEAL

AJMP TEST

SETT:CLR EA

MOV C,P1.4

MOV F0,C

JNB P1.1,SECOO

JNB P1.2,MINII

JNB P1.3,HOURR

AJMP TEST2

DEAL:SETB E1

JNB P1.4,OVER

MOV R0,#49H

MOV R1,#6

ACALL CLEAR

MOV B,#3

MOV A,PIN1

MUL AB

MOV PIN,A

MOV A,PIN1

CJNE A,#4,AAA

MOV PIN1,#0

MOV PIN2,#3EH

MOV PIN,#3CH AAA: JNB P1.4,OVER

JNB P1.1,SECOO

JNB P1.2,MINII

JNB P1.3,HOURR

AJMP AAA

OVER:SETB E2

INC PIN1

MOV R2,#6

MOV R0,#3AH

MOV R1,PIN1

ACALL INI MOV R0,#49H

MOV R2,#3

MOV R1,PIN

ZIP: MOV A,@R0

MOV @R1,A

INC R0

MOV A,@R0

SWAP A

ORL A,@R1

MOV @R1,A

INC PIN

INC R0

INC R1

DJNZ R2,ZIP AJMP EXIT

COMP:MOV A,PIN2

CJNE A,#4AH,J

AJMP OVR

J: MOV R0,PIN2

MOV R1,#7EH

MOV R2,#3

JJJ:MOV A,@R0

ANL A,#0F0H

SWAP A

XRL A,@R1

JNZ ENDD

DEC R1

MOV A,@R0

ANL A,#0FH

XRL A,@R1

JNZ ENDD

DEC R1

DEC R0

DJNZ R2,JJJ

SETB FLAG2

INC PIN3

AJMP TEST

ENDD:MOV A,PIN2

ADD A,#3

MOV PIN2,A

AJMP COMP

OVR: MOV PIN2,#3EH

AJMP TEST

HOUR:ACALL DELY

MOV R0,#7EH

JNB F0,SUB1

ACALL DAAD1

MOV A,R2

XRL A,#24H

JNZ ML0

ACALL CLR0

AJMP ML0

MINI:ACALL DELY

MOV R0,#7CH

JNB F0,SUB1

ACALL DAAD1

MOV A,R2

XRL A,#60H

JNZ ML0

ACALL CLR0

AJMP ML0

SECO:ACALL DELY

MOV R0,#7AH

JNB F0,SUB1

ACALL DAAD1

MOV A,R2

XRL A,#60H

JNZ ML0

ACALL CLR0 ML0: MOV R0,#79H

ACALL HEXASC

MOV R2,#6

MOV R0,#5AH

ACALL INI AJMP SETT

SUB1:SETB F0

ACALL SUB

AJMP ML0 CLEAR:MOV @R0,#0

INC R0

DJNZ R1,CLEAR

RET

HOU: ACALL DELY

SETB E0

MOV R0,#4EH

ACALL DAAD1

MOV A,R2

XRL A,#24H

JNZ ML00

ACALL CLR0

AJMP ML00 MIN: ACALL DELY

SETB E0

MOV R0,#4CH

ACALL DAAD1

MOV A,R2

XRL A,#60H

JNZ ML00

ACALL CLR0

AJMP ML00 SEC: ACALL DELY

SETB E0

MOV R0,#4AH

ACALL DAAD1

MOV A,R2

XRL A,#60H

JNZ ML00

ACALL CLR0

ML00:MOV R0,#49H

MOV R1,#30H

ACALL HEXASC

MOV R2,#6

MOV R0,#3AH

INC R1

ACALL INI AJMP AAA

DELY:MOV R1,#0FFH

A1: MOV R2,#0FFH LOOP:NOP

NOP

NOP

DJNZ R2,LOOP

DJNZ R1,A1

RET

PITO:PUSH PSW

PUSH 0E0H

PUSH DPH

PUSH DPL

SETB PSW.3

MOV A,P1

MOV TL0,#01H

MOV TH0,#1FH

CJNE A,#0FDH,SSS

MOV TL0,#0EDH

MOV TH0,#0FBH SSS: JNB P1.5,GETNUM DDD: MOV A,2FH

DEC A

MOV 2FH,A

JNZ RET0

MOV 2FH,#10H

MOV R0,#7AH

ACALL DAAD1

MOV A,R2

XRL A,#60H

JNZ RET0

ACALL CLR0

MOV R0,#7CH

ACALL DAAD1

MOV A,R2

XRL A,#60H

JNZ RET0

ACALL CLR0

MOV R0,#7EH

ACALL DAAD1

MOV A,R2

相关主题
文本预览
相关文档 最新文档