1绪论 3
1.1设计背景 4
1.2设计要求 4
1.3设计思路 4
2系统硬件设计 5
2.2晶振复位电路 9
2.3报警电路 错误!未定义书签。
2.4中断电路
2.5设计总电路图 错误!未定义书签。
3系统软件设计 错误!未定义书签。
3.1程序流程图 13
3.2源程序 15
4系统仿真与调试 18
4.1 电路仿真 18
4.2 系统调试 19
5总结与展望 19
5.1 总结 错误!未定义书签。
5.2 展望 错误!未定义书签。
参考文献 19
致 谢 20
附录
摘要:
本文从硬件和软件两方面介绍了基于ATS51单片机的温度报警系统的设计思路,对硬件原理图和程序框图作了简捷的描述。系统选用ADC0830转换器,仿真时利用温度传感器进行温度的输入量模拟,当温度大于用户设定的温度时,蜂鸣器发出长“翁”报警和绿光报警,即声音和光的报警 测量的温度范围在0~120℃,并能实时显示当前温度值和用户设定的温度。随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,但人们对它的要求越来越高,要为现代人工作、科研、生活、提供更好的更方便的设施就需要从数单片机技术入手,一切向着数字化控制,智能化控制,人性化的方向发展。本设计所介绍的数字温度报警器与传统报警器相比,具有精确的温度报警,用户自定义报警温度,体现了人性化的特点,其输出温度采用数字显示,主要用于对报警温度要求高的场所,或科研实验室使用,该设计控制器使用单片机ATS51,测温传感器使用ADC0830,用4位共阳极LED数码管以串口传送数据,实现温度显示,从而实现精确报警。
关键词:单片机;中断控制;温度计; ADC0831;ATS51 。
1 绪论
1.1设计背景
现代社会是信息化的社会,随着安全化程度的日益提高,机房一一作为现代化的枢纽,其安全工作已成为重中之重,机房内一旦发生故障,将导致整个系统的瘫痪,造成巨大的损失和社会影响,继电器报警系统作为一种传统报警器,在许多方面都得到了广泛应用,随着人类研究领域的不断发展,其应用越来越具有局限性,其局限性表现在报警温度是自带的,精度也不高,灵敏度比较低等。因而对报警器的设计要求就越来越高。数字温度报警器可以解决传统报警器的问题。
1.2设计要求
利用单片机ATS51与ADC0830,喇叭,数码管,LED数码管设计一个数字温度报警器,能够显示实际温度(0~120)和用户设定的温度,当大于用户自定温度是发出声音和光报警,并且用户能快速设定自己想要报警的温度。本设计用ATS51作为主控芯片,采用ADC0830作为电压信号转换器,采用可采用温度传感器模拟输入电压信号,调节放大器的放大倍数,使电压值和温度值对应,并通过数码管的显示,输入电压值范围为0~5V。本设计电路结构简单,成本相对而言比较低,精确也比较高,其精度为0.1。
1.3设计思路
首先应该了解本次设计的是温度报警器,通过查找资料了解ATS51单片机的工作原理、结构图,ADC0830的工作原理和应用。根据设计要求画出设计流程图,在此基础上利用汇编语言进行编程。最后根据要求利用Proteus画出电路图进行仿真。在模拟温度的时,我用了模拟温度传感器DS18B20,费了很大的劲把模拟电压与实际温度一一对应起来。在要求用户自己设定报警温度,我用了两个外部中断解决了此问题,数模转换器我选择了ADC0830,在报警那块我用了声音和LED灯报警。如下图(1.3)是温度报警器电路的总的框架。
图(1.3)
2系统硬件设计
2.1 ATS51单片机硬件电路
2.11 ATC51简介
ATC51是一种带4K字节闪存可编程可擦除只读存储器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS 8位微处理器,俗称单片机。ATC2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的ATC51是一种高效微控制器,ATC2051是它的一种精简版本。ATC51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
2.12 主要特性
(1)与MCS-51 兼容
(2)4K字节可编程闪烁存储器
(3)寿命:1000写/擦循环
(4)全静态工作:0Hz-24MHz
(5)三级程序存储器锁定
(6)128×8位内部RAM
(7)可编程I/O线
(8)两个16位定时器/计数器
(9)5个中断源
(10)可编程串行通道
(11)低功耗的闲置和掉电模式
(12)片内振荡器和时钟电路
2.13管脚说明:
VCC:供电电压。
GND:接地。
P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为ATC51的一些特殊功能口,如下表所示:
口管脚 备选功能
P3.0 RXD(串行输入口)
P3.1 TXD(串行输出口)
P3.2 /INT0(外部中断0)
P3.3 /INT1(外部中断1)
P3.4 T0(记时器0外部输入)
P3.5 T1(记时器1外部输入)
P3.6 /WR(外部数据存储器写选通)
P3.7 /RD(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。
PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:来自反向振荡器的输出。
2.1.4芯片擦除
整个PEROM阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持ALE管脚处于低电平10ms 来完成。在芯片擦操作中,代码阵列全被写“1”且在任何非空存储字节被重复编程以前,该操作必须被执行。 此外,ATC51设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模式。在闲置模式下,CPU停止工作。但RAM,定时器,计数器,串口和中断系统仍在工作。在掉电模式下,保存RAM的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止。
串口通讯 单片机的结构和特殊寄存器,这是你编写软件的关键。至于串口通信需要用到那些特殊功能寄存器呢,它们是SCON,TCON,TMOD,SCON等,各代表什么含义呢? 一个寻址地址99H。CPU 在读SBUF 时会指到接收寄存器,在写时会指到发送寄存器,而且接收寄存器是双缓冲寄存器,这样可以避免接收中断没有及时的被响应,数据没有被取走,下一帧数据已到来,而造成的数据重叠问题。发送器则不需要用到双缓冲,一般情况下我们在写发送程序时也不必用到发送中断去外理发送数据。操作SBUF寄存器的方法则很简单,只要把这个99H地址用关键字sfr定义为一个变量就可以对其进行读写操作了,如sfr SBUF = 0x99;当然你也可以用其它的名称。通常在标准的reg51.h 或atx51.h 等头文件中已对其做了定义,只要用#include 引用就可以了。
SCON 串行口控制寄存器通常在芯片或设备中为了监视或控制接口状态,都会引用到接口控制寄存器。SCON 就是51 芯片的串行口控制寄存器。它的寻址地址是98H,是一个可以位寻址的寄存器,作用就是监视和控制51 芯片串行口的工作状态。51芯片的串口可以工作在几个不同的工作模式下,其工作模式的设置就是使用SCON 寄存器。
REM为允许接收位,REM 置1 时串口允许接收,置0 时禁止接收。REM 是由软件置位或清零。如果在一个电路中接收和发送引脚P3.0,P3.1 都和上位机相连,在软件上有串口中断处理程序,当要求在处理某个子程序时不允许串口被上位机来的控制字符产生中断,那么可以在这个子程序的开始处加入REM=0 来禁止接收,在子程序结束处加入REM=1 再次打开串口接收。大家也可以用上面的实际源码加入REM=0 来进行实验。
TB8 发送数据位8,在模式2 和3 是要发送的第9 位。该位可以用软件根据需要置位或清除,通常这位在通信协议中做奇偶位,在多处理机通信中这一位则用于表示是地址帧还是数据帧。
RB8 接收数据位8,在模式2 和3 是已接收数据的第9 位。该位可能是奇偶位,地址/数据标识位。在模式0 中,RB8 为保留位没有被使用。在模式1 中,当SM2=0,RB8 是已接收数据的停止位。
TI 发送中断标识位。在模式0,发送完第8 位数据时,由硬件置位。其它模式中则是在发送停止位之初,由硬件置位。TI 置位后,申请中断,CPU 响应中断后,发送下一帧数据。在任何模式下,TI 都必须由软件来清除,也就是说在数据写入到SBUF 后,硬件发送数据,中断响应(如中断打开),这时TI=1,表明发送已完成,TI 不会由硬件清除,所以这时必须用软件对其清零。
RI 接收中断标识位。在模式0,接收第8 位结束时,由硬件置位。其它模式中则是在接收停止位的半中间,由硬件置位。RI=1,申请中断,要求CPU 取走数据。但在模式1中,SM2=1时,当未收到有效的停止位,则不会对RI置位。同样RI也必须要靠软件清除。常用的串口模式1 是传输10个位的,1位起始位为0,8位数据位,低位在先,1 位停止位为1。它的波特率是可变的,其速率是取决于定时器1 或定时器2 的定时值(溢出速率)。ATC51 和ATC2051 等51 系列芯片只有两个定时器,定时器0和定时器1,而定时器2是ATC52 系列芯片才有的。
波特率在使用串口做通讯时,一个很重要的参数就是波特率,只有上下位机的波特率一样时才可以进行正常通讯。波特率是指串行端口每秒内可以传输的波特位数。有一些初学的朋友认为波特率是指每秒传输的字节数,如标准9600 会被误认为每秒种可以传送9600个字节,而实际上它是指每秒可以传送9600 个二进位,而一个字节要8 个二进位,如用串口模式1来传输那么加上起始位和停止位,每个数据字节就要占用10 个二进位,9600波特率用模式1 传输时,每秒传输的字节数是9600÷10=960 字节。51 芯片的串口工作模式0的波特率是固定的,为fosc/12,以一个12M 的晶振来计算,那么它的波特率可以达到1M。模式2 的波特率是固定在fosc/ 或fosc/32,具体用那一种就取决于PCON 寄存器中的SMOD位,如SMOD为0,波特focs/,SMOD为1,波特率为focs/32。模式1 和模式3 的波特率是可变的,取决于定时器1 或2(52 芯片)的溢出速率。
2.2晶振复位电路
晶振是石英振荡器的简称,英文名为Crystal,晶振分为有源晶振和无源晶振两种,其作用是在电路产生震荡电流,发出时钟信号。它是时钟电路中最重要的部件,它的作用是向IC等部件提供基准频率,它就像个标尺,工作频率不稳定会造成相关设备工作频率不稳定,自然容易出现问题。由于制造工艺不断提高,在晶振的频率偏差、温度稳定性、老化率、密封性等重要技术指标都很好,已不容易出现故障,但在选用时仍可留意晶振的质量。复位电路是为确保微机系统中电路稳定可靠工作必不可少的一部分,复位电路的第一功能是上电复位。一般微机电路正常工作需要供电电源为5V±5%,即4.75~5.25V。由于微机电路是时序数字电路,它需要稳定的时钟信号,因此在电源上电时,只有当VCC超过4.75V低于5.25V以及晶体振荡器稳定工作时,复位信号才被撤除,微机电路开始正常工作。如下图(2.2)
图(2.2)
2.3报警电路
此报警电路图由蜂鸣器和LED灯组成,当大于用户设定的温度时LED灯亮且蜂鸣器发出嗡嗡的声音,报警器默认的报警温度是37度,用户可在0~120度之间调整,
如下图(2.3)所示。
图(2.3)
2.4 中断电路
低电平触发外部中断,用来调整用户设定的温度。如下图(2.4)
图(2.4)
2.5 放大电路
调整放大器的放大倍数使之与一一温度对应起来
图(2.5)
2.5 设计总电路
3系统软件设计
3.1程序流程图
3.1.1程序总流程图
主流程序流程图如下图(3.11)
图(3.11)
3.1.2外部中断程序流程图
外部中断0流程图如图(3.1.2)所示。
图(3.1.2)
3.2源程序
3.21 数模转换子程序
AD_CONV:SETB CS
CLR CLK
NOP
NOP
CLR CS
NOP
NOP
SETB CLK
NOP
NOP
CLR CLK
NOP
NOP
SETB CLK
NOP
NOP
MOV R0,#08H
AD_READ:CLR CLK
MOV C,D0
RLC A
SETB CLK
NOP
NOP
DJNZ R0,AD_READ
SETB CS
MOV AD_TMP,A
RET
3.2.2 显示实际温度子程序
DISPLAY: MOV A,AD_TMP
MOV DPTR,#TAB1
MOVC A,@A+DPTR
CJNE A,35H,S1
SJMP S3
S1:JNC S2
SJMP S4
S2:CLR P3.0
SJMP S4
S3:SETB P3.0
S4:MOV B,#100
DIV AB
MOV AD_TMP_1,A
MOV A,B
MOV B,#10
DIV AB
MOV AD_TMP_2,A
MOV AD_TMP_3,B
MOV DPTR,#TAB
MOV A,AD_TMP_1
MOVC A,@A+DPTR
MOV P0,A
SETB P2.1
LCALL DLY
CLR P2.1
MOV A,AD_TMP_2
MOVC A,@A+DPTR
MOV P0,A
SETB P2.2
LCALL DLY
CLR P2.2
MOV A,AD_TMP_3
MOVC A,@A+DPTR
MOV P0,A
SETB P2.3
LCALL DLY
CLR P2.3
RET
3.2.3 外部中断1和外部中断2子程序
DS1:PUSH PSW
PUSH ACC
INC R5
CJNE R5,#10,W1
MOV R5,#0
SJMP E1
W1 :JNC W2
SJMP E1
W2:SJMP E1
E1:MOV A,R5
MOV B,#10
MUL AB
MOV AD_TMP_7,A
ADDC A,R6
MOV 35H,A
POP ACC
POP PSW
RETI
DS2:PUSH PSW
PUSH ACC
INC R6
CJNE R6,#10,Z1
MOV R6,#0
SJMP E2
Z1:JNC Z2
SJMP E2
Z2:LCALL E2
SJMP E2
E2:MOV A,R6
ADDC A,AD_TMP_7
MOV 35H,A
POP ACC
POP PSW
RETI
4 系统仿真与调试
4.1 电路仿真
采用Proteus仿真软件进行仿真,在仿真之前先按照预设值好的电路图进行连线,以及布局,再运行开始仿真。此截图是用户设定37度报警时的仿真图如下图(4.1)
图(4.1)
4.2 系统调试
(1)接系统仿真图接线,为了连线方便,实验时,部分线路采用了数据总线来代替连线。
(2)开始进行A/D转换仿真,通过调节可调滑动电位器,可以观察到ADC0830输出电平值的改变,从而可以确定转换是否正常。
(3)进行整体运行,通过调节可调滑动电位器观察数码管的显示是否符合要求,如果不符合,则再调试。直至满足要求。
5总结与展望
5.1 总结
通过单片机课程设计,加深了我对单片机指令系统,中断系统,放大器放大倍数,模数转换有了深刻的理解,开始我对 SJMP,LCALL这两种指令的返回点不清楚,我就把书上所有SJMP,LCALL指令对照起来看,然后再去问老师和同学,在他们的帮助下我对这些指令有了深刻的认识,在调试中断的时候,只产生了一次中断,原来中断没有换回,在调试换大器的放大倍数时候,是一份精细的工作,我整整用了一天的时间把它给弄好,开始我弄报警器就是简单的固定温度报警,没有体现人性化的一点,在胡老师的指点下,加一个用户自定义报警温度,更能满足社会的需求,然后我加了两个外部中断就可以把此要求实现,完美满足了用户的需要,能够更好的把此理论将理论应用到实际当中去,而且我还学会了如何去培养我们的创新精神,而且要有坚持不懈的精神。还让我认识到单片机作为一门实践性很强的学科,动手能力是非常有必要而且必须的。在这次课程设计中,遇到了不少问题,不过经过老师的指导,查阅各种资料,最后都一一解决了,比较顺利的完成了这次设计,在这里我感谢胡湘娟的耐心指导和帮助。
5.2 展望
单片机技术作为一门应用性很强的学科,其发展直接影响着人们的生活、工厂的生产,甚至国防、军事、通信等许多方面。数字温度报警器作为一种报警器,在工程设计,工业生产中得到了广泛的应用和发展,我相信随着单片机以及嵌入式系统的应用和发展,数字报警器将愈来愈朝着精度高、灵敏度高、实用性广等方面得到发展的。
参考文献
[1] 童诗白.华成英.模拟电子技术基础。北京:高等教育出版社,2008
[2] 彭介华.电子技术课程设计指导。北京:高等教育出版社,2010
[3] 孙梅生.电子技术基础课程设计。北京:高等教育出版社,2007
[4] 杨国治.新颖实用电子器具制作。北京:人民邮电出版社,2006
[5] 王俊峰.电子产品开发设计与制作。北京:人民邮电出版社,2009
[6] 朱立彬.传感器技术2003。北京:人民邮电出版社,2007
[7] 陆首群.振兴电子工业奔向信息化。北京:电子工业出版社,2003
致 谢
本次设计我能完成,算是有了很大的收获。但最终要感谢许老师的细心辅导。在这次课程设计的撰写过程中,我得到了许多人的帮助。
首先我要感谢胡湘娟老师在课程设计上给予我的指导、提供给我的支持和帮助,这是我能顺利完成这次报告的主要原因,更重要的是老师帮我解决了许多技术上的难题,让我能把系统做得更加完善。在此期间,我不仅学到了许多新的知识,而且也开阔了视野,提高了自己的设计能力。
其次,我要感谢帮助过我的同学,他们也为我解决了不少我不太明白的设计上的难题。同时也感谢学院为我提供良好的做课程设计的环境。
最后再一次感谢所有在设计中曾经帮助过我的良师益友和同学。
附录
CS BIT P3.7
CLK BIT P3.6
D0 BIT P3.5
AD_TMP EQU 30H ;A/D转换之后的实际值
AD_TMP_1 EQU 31H
AD_TMP_2 EQU 32H
AD_TMP_3 EQU 33H
AD_TMP_4 EQU 36H
AD_TMP_5 EQU 37H
AD_TMP_6 EQU 38H
AD_TMP_7 EQU 40H
AD_TMP1 EQU 34H
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP DS1
ORG 0013H
LJMP DS2
ORG 0098H
MAIN:CLR P2.4 ;高位数码管不显示
CLR P2.0
START:SETB EX0 ;开外部中断0和外部中断1
SETB EX1
SETB IT0
SETB IT1
SETB EA
MOV 35H,#25H
MOV A,35H
CJNE A,#100,YC0
SJMP YC1
YC0:JNC YC1
YC2:MOV B,#10
DIV AB
MOV R5,A
MOV R6,B
SJMP LP
YC1:MOV B,#100
DIV AB
MOV A,B
MOV B,#10
MOV R5,A
MOV R6,B
MOV B,#10
MUL AB
MOV AD_TMP_7,A
LP:LCALL AD_CONV ;调用0831A/D转换子程序
LCALL DISPLAY ;调用显示子程序
LCALL S5
LJMP LP
//******数模转换子程序******
AD_CONV:SETB CS
CLR CLK
NOP
NOP
CLR CS
NOP
NOP
SETB CLK
NOP
NOP
CLR CLK
NOP
NOP
SETB CLK
NOP
NOP
MOV R0,#08H
AD_READ:CLR CLK
MOV C,D0
RLC A
SETB CLK
NOP
NOP
DJNZ R0,AD_READ
SETB CS
MOV AD_TMP,A
RET
//******显示实际温度子程序******
DISPLAY: MOV A,AD_TMP
MOV DPTR,#TAB1
MOVC A,@A+DPTR ;由A/D转换的值查表取得实际温度值
CJNE A,35H,S1 ;当温度大于35H单元的数值时,发出声音和光报警
SJMP S3
S1:JNC S2 ;当温度大于35H单元的数值时,发出声音和光报警
SJMP S4
S2:CLR P3.0
SJMP S4
S3:SETB P3.0
S4:MOV B,#100
DIV AB
MOV AD_TMP_1,A
MOV A,B
MOV B,#10
DIV AB
MOV AD_TMP_2,A
MOV AD_TMP_3,B
MOV DPTR,#TAB
MOV A,AD_TMP_1
MOVC A,@A+DPTR
MOV P0,A
SETB P2.1
LCALL DLY
CLR P2.1
MOV A,AD_TMP_2
MOVC A,@A+DPTR
MOV P0,A
SETB P2.2
LCALL DLY
CLR P2.2
MOV A,AD_TMP_3
MOVC A,@A+DPTR
MOV P0,A
SETB P2.3
LCALL DLY
CLR P2.3
RET
//******显示用户设定的温度******
S5:MOV A,35H
MOV DPTR,#TAB1
MOVC A,@A+DPTR
MOV B,#100
DIV AB
MOV AD_TMP_4,A
MOV A,B
MOV B,#10
DIV AB
MOV AD_TMP_5,A
MOV AD_TMP_6,B
MOV DPTR,#TAB
MOV A,AD_TMP_4
MOVC A,@A+DPTR
MOV P1,A
SETB P2.5
LCALL DLY
CLR P2.5
MOV A,AD_TMP_5
MOVC A,@A+DPTR
MOV P1,A
SETB P2.6
LCALL DLY
CLR P2.6
MOV A,AD_TMP_6
MOVC A,@A+DPTR
MOV P1,A
SETB P2.7
LCALL DLY
CLR P2.7
RET
//******外部中断0子程序******
DS1:PUSH PSW
PUSH ACC
INC R5
CJNE R5,#10,W1
MOV R5,#0
SJMP E1
W1 :JNC W2
SJMP E1
W2:SJMP E1
E1:MOV A,R5
MOV B,#10
MUL AB
MOV AD_TMP_7,A
ADDC A,R6
MOV 35H,A
POP ACC
POP PSW
RETI
//******外部中断1子程序******
DS2:PUSH PSW ;保护现场
PUSH ACC
INC R6
CJNE R6,#10,Z1
MOV R6,#0
SJMP E2
Z1:JNC Z2
SJMP E2
Z2:LCALL E2
SJMP E2
E2:MOV A,R6
ADDC A,AD_TMP_7
MOV 35H,A
POP ACC ;恢复现场
POP PSW
RETI
TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H
DB 80H,90H,88H,83H,0C6H,0A1H,86H,8EH
TAB1:DB 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23
DB 24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44
DB 45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,,65,66,67
DB 68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,,90
DB 91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109
DB 110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125
//******延时子程序******
DLY:MOV R4,#2
D1:MOV R3,#248
DJNZ R3,$
DJNZ R4,D1
RET
END