历史上的今天
返回首页

历史上的今天

今天是:2025年03月12日(星期三)

正在发生

2018年03月12日 | 用单片机89C2051制作的延时控制器程序

2018-03-12 来源:eefocus

;***************************************************
;*    用单片机89C2051制作的延时控制器      *
;*      T0、TT0配合构成为秒脉冲发生器              *
;*      TSBIN 为秒计数器(二进制,0~60) ;21H单元  *
;*      TMBIN 为分计数器(二进制,0~60) ;22H单元  *
;*      THBIN 为时计数器(二进制,0~24) ;23H单元  *
;*      KEYCODE 为键盘值;29H单元                  *
;*      KEYPRE 为按键标志字;PSW.5                *
;*      当倒计时至00H00M00S 时,P3.0, P3.1端输出  *
;*      反相信号。                                *
;*      S1----对时按钮;S2--对分按钮;          *
;*      S3--对秒按钮;S4--退出对时            *  
;***************************************************

 TMSBIN EQU 20H
 TSBIN EQU 21H
 TMBIN EQU 22H
 THBIN EQU 23H
 KEYCODE EQU 29H
 TT0 EQU 2BH
 OUT EQU 2DH

 KEYPRE BIT PSW.5
 
 DPS1 DATA 11001111B ;S4
 DPM0 DATA 11010111B ;S3
 DPM1 DATA 11011111B ;S2
 DPH0 DATA 11100111B ;S1
 DPH1 DATA 11101111B
 HIDE DATA 11111111B ;消隐字

 ORG 0000H
 AJMP MAIN

 ORG 000BH
 SJMP I_T0

 ORG 001BH
I_T1: AJMP MAIN1
 RETI

;***********  T0中断服务    ***********
 ORG 0030H
I_T0: PUSH ACC
 PUSH PSW 
 MOV TH0,#0DCH  ;0.01s时间,常数因子为DC00H
 ;MOV TL0,#00H 
 CLR C
 MOV A,TMSBIN
 SUBB A,#01H
 MOV TMSBIN,A
 MOV R3,TT0  
 DJNZ R3,I_T01  ;中断次数<100(每次中断0.01S),转出
 CPL KEYPRE
 MOV R3,#100  ;中断次数=100次,重新下一个计数
 MOV TMSBIN,#100
 CLR C
 MOV A,TSBIN  ;秒计数器加1
 SUBB A,#01H
 MOV TSBIN,A
 ;SUBB A,#60   ;秒计数器>59?  Y,秒计数器=00
 JNC I_T01
 MOV A,TMBIN
 ADD A,THBIN
 JNZ M1
 MOV OUT,#11111101B
 CLR TR0
 MOV TSBIN,#00H
 SJMP I_T01 
M1: MOV TSBIN,#59
 CLR C
 MOV A,TMBIN  ;分计数器加1
 SUBB A,#01H
 MOV TMBIN,A
 JNC I_T01
 MOV A,THBIN
 JZ I_T01
 MOV TMBIN,#59
 CLR C
 MOV A,THBIN  ;时计数器加1
 SUBB A,#01H
 MOV THBIN,A
 ;SUBB A,#24  ;时计数器>23? Y,时计数器=00
 JNC I_T01
 MOV THBIN,#00H 
I_T01: MOV TT0,R3
 POP PSW
 POP ACC
 RETI

 ORG 00F0H
MAIN: MOV P1,#0FFH
 MOV OUT,#11111110B    ;P3.0输出低电平
 MOV P3,OUT
 MOV SP,#40H  ;初始化堆栈指针  
 MOV TMOD,#11H  ;T0、T1工作于16为定时器
 MOV TT0,#100
 MOV TH0,#0DCH  ;T0初值
 MOV TL0,#00H
 MOV TH1,#00H  ;T1初值
 MOV TL1,#00H
 MOV TSBIN,#59
 MOV TMBIN,#59
 MOV THBIN,#23
 CLR EX0
 CLR EX1
 CLR ES
 SETB ET0  ;开T0、T1中断
 SETB ET1
 SETB TR0
 SETB TR1
 SETB EA
MAIN1: MOV R6,#80H  ;主处理过程
DISP: MOV KEYCODE,#00H
 MOV TH1,#00H
 MOV TL1,#00H
 ACALL DISPLY  ;调用显示子程序
 DJNZ R6,DISP
 MOV DPTR,#KEY
 MOV A,KEYCODE  ;读键盘值
 JMP @A+DPTR  ;按键值跳相应处理程序

KEY: SJMP MAIN1
 SJMP KEY1         ;依次为:KEY值+2,4,6,8,因为SJMP占2个字节
 SJMP KEY2         ;S1的KEYCODE=02H,S2: KEYCODE=04H
 SJMP KEY3         ;S3: KEYCODE=06H, S4: KEYCODE=08H
 SJMP KEY4
KEY1: CLR TR0   ;时计数器加1
 MOV A,THBIN
 CLR C
 ADDC A,#01H
 MOV THBIN,A
 SUBB A,#24  ;24D
 JC KEY11
 MOV THBIN,#00H
KEY11:  SJMP MAIN1
 NOP
KEY2: CLR TR0   ;分计数器加1
 MOV A,TMBIN
 CLR C
 ADDC A,#01H
 MOV TMBIN,A
 SUBB A,#60  ;60D
 JC KEY21
 MOV TMBIN,#00H
KEY21:  SJMP MAIN1
 NOP
KEY3: CLR TR0   ;秒计数器加1
 MOV A,TSBIN
 CLR C
 ADDC A,#01H
 MOV TSBIN,A
 SUBB A,#60  ;60D
 JC KEY31
 MOV TSBIN,#00H
KEY31:  SJMP MAIN1 
 NOP
KEY4: MOV TH0,#0DCH  ;退出校时状态
 MOV TL0,#00H
 SETB TR0
 SJMP MAIN1


; **********    显示子程序    **************
     ORG 0200H  
DISPLY: MOV A,TSBIN  ;秒计数器调入A
 MOV B,#0AH
 DIV AB    ;秒计数值÷10 (结果十位存于A,个位存于B) 
 SWAP A
 ORL A,#07H  ;显示秒的十位
 MOV P1,A
 MOV A,#DPS1
 ANL A,OUT
 MOV P3,A
 ACALL DSPDEL  ;延时(显示时)0.5ms
 MOV C,P3.7  ;读S4按键状态
 MOV A,#HIDE
 ANL A,OUT
 MOV P3,A
 JC NP1
 MOV KEYCODE,#08H ;S4按下,键盘值=8 
NP1: MOV P1,#0F7H  ;消隐
 NOP
 NOP
 NOP
 MOV A,B   ;显示秒的个位
 SWAP A
 ORL A,#07H
 MOV P1,A
 MOV A,#DPS0
 ANL A,OUT
 MOV P3,A
 ACALL DSPDEL
 MOV A,#HIDE
 ANL A,OUT
 MOV P3,A
 NOP
 NOP
 NOP
 MOV A,TMBIN  ;
 MOV B,#0AH
 DIV AB   ;
 SWAP A   ;显示分的十位
 ORL A,#07H
 MOV P1,A
 MOV A,#DPM1
 ANL A,OUT
 MOV P3,A
 ACALL DSPDEL
 MOV C,P3.7  ;检测S2是否按下
 MOV A,#HIDE
 ANL A,OUT
 MOV P3,A
 JC NP2
 MOV KEYCODE,#04H ;S2按下,键盘值=4
 NOP
NP2: MOV P1,#0F7H  ;消隐
 NOP
 NOP
 MOV A,B
 SWAP A   ;显示分的个位
 ORL A,#07H
 MOV P1,A
 ;MOV C,KEYPRE
 ;MOV P1.3,C
 SETB P1.3
 MOV A,#DPM0
 ANL A,OUT
 MOV P3,A
 ACALL DSPDEL
 MOV C,P3.7  ;判断S3是否按下
 MOV A,#HIDE
 ANL A,OUT
 MOV P3,A

 JC NP3
 MOV KEYCODE,#06H ;若S3按下,键盘值=6
 NOP  
NP3: MOV P1,#0F7H  ;消隐
 NOP
 NOP
 MOV A,THBIN  ;
 MOV B,#0AH 
 DIV AB   ;
 SWAP A   ;显示时的十位
 JNZ DISPLY1
 MOV A,#0F7H
DISPLY1:ORL A,#07H
 MOV P1,A
 MOV A,#DPH1
 ANL A,OUT
 MOV P3,A
 ACALL DSPDEL
 MOV A,#HIDE
 ANL A,OUT
 MOV P3,A
 NOP
 MOV A,B
 SWAP A   ;显示时的个位
 ORL A,#07H
 ANL A,OUT
 MOV P1,A
 SETB P1.3
 MOV A,#DPH0
 ANL A,OUT
 MOV P3,A
 ACALL DSPDEL
 MOV C,P3.7  ;判断S1是否按下
 MOV A,#HIDE
 ANL A,OUT
 MOV P3,A
 JC NP4
 MOV KEYCODE,#02H ;S1按下,键盘值=2
 NOP
NP4: MOV P1,#0F7H  ;消隐
 NOP
 NOP
 NOP
 RET


;**********    延时子程序    **************8
DSPDEL: MOV R7,#0FFH  ;延时程序0.5ms
 DJNZ R7,$
 RET
 END


推荐阅读

史海拾趣

Excelight Communications Inc公司的发展小趣事

随着5G技术的兴起,光通信行业迎来了新的发展机遇。Excelight紧跟时代步伐,投入大量资源进行技术研发。在李明和团队的共同努力下,公司成功研发出了一款具有自主知识产权的高速光通信芯片,这一成果不仅填补了国内空白,还使Excelight在国际市场上占据了有利地位。

技术突破后,Excelight的产品性能得到了显著提升,同时也带动了整个产业链的升级。公司开始与更多的国内外企业建立合作关系,共同推动光通信行业的发展。

DCD [Digital Core Design]公司的发展小趣事

在市场竞争日益激烈的情况下,DCD公司意识到单打独斗难以取得更大的发展。因此,公司开始寻求与其他企业建立战略合作关系。通过与上下游企业的紧密合作,DCD公司实现了资源共享和优势互补,进一步提升了自身的竞争力。同时,公司还积极参与行业标准的制定和推广工作,为行业的健康发展贡献了自己的力量。

Dicon Fiberoptics Inc公司的发展小趣事

进入21世纪后,随着互联网的普及和信息技术的飞速发展,光纤通信技术迎来了新的发展机遇。DiCon凭借其在微机电系统(MEMS)、微光学设计等领域的技术积累,成功推出了一系列具有创新性的光纤通信产品。这些产品不仅提高了数据传输的速度和稳定性,还降低了成本,进一步扩大了公司在市场上的份额。

GAPTEC Electronic GmbH & Co. KG公司的发展小趣事

背景:随着市场需求的不断增长,Galaxy Microelectronics意识到需要不断迭代技术和扩大产能。

发展:2010年,公司成功研发出3D V-NAND技术,这一技术革命性地提高了存储密度和性能,降低了功耗。同时,公司开始在全球范围内建设新的生产基地,以满足日益增长的市场需求。通过技术迭代和产能扩张,Galaxy Microelectronics逐渐成为了全球闪存市场的领军企业之一。

EVERLIGHT公司的发展小趣事

面对未来,EVERLIGHT有着明确的发展规划。公司将继续加大研发投入,不断推出创新型的LED产品和技术解决方案。同时,公司还将加强与国际知名品牌的合作,拓展更广阔的市场空间。此外,EVERLIGHT还将积极应对市场变化和竞争挑战,不断提升自身的核心竞争力和市场影响力。在未来的发展中,EVERLIGHT将继续秉持创新、品质、环保的理念,为电子行业的发展做出更大的贡献。

Communications公司的发展小趣事

在通信行业的细分市场中,一家名为“精准通信”的公司凭借其专业的技术和精准的市场定位,逐渐崭露头角。他们专注于为特定行业提供定制化的通信解决方案,如工业自动化、医疗信息化等领域。

通过深入了解行业需求和痛点,“精准通信”成功开发出了多款具有针对性的通信产品,有效解决了行业内的通信难题。他们的产品和服务得到了客户的广泛认可,市场份额也逐年攀升。

问答坊 | AI 解惑

一些常用小软件下载

本帖最后由 paulhyde 于 2014-9-15 09:27 编辑 这里是我们竞赛成用的一些小软件下载 大家有兴趣的可以看看  …

查看全部问答>

求:单片机串口转USB的免驱动方案

求:单片机(Freescale MC13213)串口转USB的免驱动方案!!可以用2块转换芯片!…

查看全部问答>

关于ARM中断处理的问题----《ARM嵌入式系统开发-软件设计与优化》第九章中疑问

各位过年好哦~ 呵呵,小弟这里有点疑惑相同大家讨论讨论~,这个问题是《ARM嵌入式系统开发-软件设计与优化》一书中的见下: 第九章-中断处理 9.3.2嵌套中断 在这一节中,描述了如何处理嵌套式的中断(不能单纯的在IRQ模式下打开中断允许位) ...…

查看全部问答>

求教wince 5.0 扩展16550串口的问题

找了一些资料,但还是有点不明白, http://topic.eeworld.net/u/20090319/17/48afc467-5061-476c-ac41-5a0f8fdd4622.html这位仁兄也问了差不多的问题 方法是不是主要将%_WINCEROOT%\\Public\\Common\\Oak\\Drivers\\Serial\\COM16550目录复制到 ...…

查看全部问答>

This file should only be compiled with iccavr or aavr with processor option -v1

#error This file should only be compiled with iccavr or aavr with processor option -v1 有人用IAR AVR遇到过这个问题吗?…

查看全部问答>

无线电通信

RT 无线电通信怎么入门啊~~~…

查看全部问答>

ECC检验有什么优势,我不明白,请玩过Nand flash 的朋友谈谈

搞了半天都没明白ECC的原理是什么?但根据网友提供的代码,基本上知道怎么去调用它,但我有点纳闷:还不如自己写完一个Sector后,写个函数再读出这个扇区一个一个字节与原数据做比较,不一一对应,擦除再写,直到写对为止,难道ECC算法查到某位写错后,不用经 ...…

查看全部问答>

设计家用电器电路控制板时的EMC方法

家电控制板的小体积,低成本决定了在线路中不会使用高成本的材料来解决其电磁干扰问题。家电控制板的干扰主要来自三大方面:一是控制板本身产生的干扰,二是来自负载的干扰,三是来自线路上的干扰。解决这些干扰可以分别采用不同的方案来达成。 控 ...…

查看全部问答>

请教,stm8a的芯片,有没有位寻址功能,求解用过大侠们

                                 请教,stm8a的芯片,有没有位寻址功能,我看没大量资料,没有看到有关说明,求解用过大侠们~~~~~~~~~~~~~~~~~~~~~~ ...…

查看全部问答>

OV系列摄像头配置格式如何解释?

FPGA的I2C对摄像头配置怎么没有地址,只有数据呢。谁能解释下。///////////// Config Data LUT  ////////////////////////// alwaysbegin case(LUT_INDEX) // Audio Config Data 0 : LUT_DATA <= 16\'h0000; 1 : LUT_DATA <= 16\'h1140; ...…

查看全部问答>