用单片机89C2051制作的延时控制器程序

发布者:亚瑟摩根最新更新时间:2018-03-12 来源: eefocus关键字:单片机  89C2051  延时控制器 手机看文章 扫描二维码
随时随地手机看文章

;***************************************************
;*    用单片机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


关键字:单片机  89C2051  延时控制器 引用地址:用单片机89C2051制作的延时控制器程序

上一篇:如何以10进位显示8位数的七段显示器?
下一篇:DS18B20汇编程序与C程序

推荐阅读最新更新时间:2024-03-16 15:57

51单片机--仿真出租车计价器
这汇编的程序,编写的很复杂,实现的功能却还是很简陋。 在硬件方面,显示金额的位数也不足。 做而论道用 C 重新编写了一个程序,如下: #include reg52.h #include intrins.h #define BAITIAN 10 //白天价格/km #define YEJIAN 14 //夜间价格/km #define DENGREN 1 //停车等人价格/30s sbit QD = P3^4; sbit RY = P3^7; unsigned char danjia, jvli, n_X0, mode; unsigned int jinee, n_50ms; bit ye;
[单片机]
51<font color='red'>单片机</font>--仿真出租车计价器
单片机硬件参数设计解析
摘要:随着目前新技术、新工艺的不断出现,高速单片机的应用越来越广,对硬件的可靠性问题便提出更高的要求。本文将从硬件的可靠性角度描述高速单片机设计的关键点。 关键词:高速单片机 可靠性 特性阻抗 SI PI EMC 热设计 引 言   随着单片机的频率和集成度、单位面积的功率及数字信号速度的不断提高,而信号的幅度却不断降低,原先设计好的、使用很稳定的单片机系统,现在可能出现莫名其妙的错误,分析原因,又找不出问题所在。另外,由于市场的需求,产品需要采用高速单片机来实现,设计人员如何快速掌握高速设计呢? 硬件设计包括逻辑设计和可靠性的设计。逻辑设计实现功能。硬件设计工程师可以直接通过验证功能是否实现,来判定是否满足需求。这方面的资料
[单片机]
基于上位机控制自动接线的单片机实验系统研究
  0 引言   对单片机实验系统的基本需求是:在有限的IO 接口上可以进行多个项目的实验。为了实现这个基本需求,在进行多个不同项目实验时,要对单片机各个IO口进行现场重接线。传统的单片机实验装置现场重接线方法有2类:   一类是现场手工插拔自锁紧接插件;   另一类是现场手工插拔积木式实验模块。   这两类接线方式的实质都属于机械式金属接触。单片机实验系统经过较长时间的使用,都难免会发生金属接触件之间的接触不良现象。特别是自锁紧接插件,问题更为严重:即使线芯开路了,从表面也难以通过肉眼发觉。导致实验成功率低下,占用学生甚至指导老师的排故时间,严重影响了实验效果。现代单片机实验或单片机开发都离不开上位机对软件的编译和程序的
[单片机]
基于上位机控制自动接线的<font color='red'>单片机</font>实验系统研究
单片机实现简单音乐发生器
/* 主程序 */ void main() { uchar key,k; TMOD = 0x01; // T0,工作方式1 ET0 = 1; EA = 1; while(1) { P1 = 0xf0; // 发全0行扫描码 if ((P1&0xf0)!=0xf0) // 若有键按下 { delay(); // 延时去抖动
[单片机]
一种简单串行鼠标控制的单片机实现
摘要:通过对鼠标底层通信原理与协议的深入分析,探讨以AT89C2051单片机构成串行鼠标的实现方法;介绍鼠标编码器数据取软件的设计原理及方法,给出串行鼠标的软件设计。 关键词:鼠标 AT89C2051 软件设计 鼠标是一种快速定位器,通过移动鼠标可以快速定位屏幕上的对象,是计算机图形界面交互的必用外部设备。通常,鼠标通过微机中的串口或PS/2鼠标插口与主机连接。当在平面上移动鼠标时,通过机械或光学的方法把鼠标滚轮移动的距离和方向转换成脉冲信号传送给计算机,计算机鼠标驱动程序将脉冲个数转换成鼠标的水平方向和垂直方向的位移量,从而控制显示屏上光标箭头随鼠标的移动而移动。根据此原理,我们可利用鼠标的上位机驱动程序来设计测控系统中的
[应用]
基于51单片机的瓦斯报警器设计
引言    当前,随着采矿技术的不断发展,井下作业的安全越来越有保障,但是仍然有许多采矿企业的机械化程度低,对现场采矿的工作人员的生命安全造成潜在的威胁,特别是针对瓦斯气体的检测和报警仍旧存在隐患,每年由于瓦斯泄露造成的特大事故依然很多。瓦斯是在成煤过程中形成并大量储存与煤层之中的气体,是煤矿井下危害最大的气体。瓦斯是一种无色无味的气体,主要成份是甲烷(CH4),密度为0.716kg/ m3,对人体的危害是超时限能引起人窒息死亡。在地下采矿时候,井内常常会泄露一定量的CH4、CO和SO2等气体,后一种含量少,切易溶于水。经煤矿开采时的喷水处理后变成酸。但前两种气体含量多,且几乎不容于水,属于易燃易爆气体。    由于瓦斯气体本身
[单片机]
基于51<font color='red'>单片机</font>的瓦斯报警器设计
单片机之前要学什么?C语言和单片机有什么关系?
学习单片机之前要学什么?提起这个就想起我当年开始学习单片机的血泪史了。 08年我加入学校的电子实验室,为08年的全国电子大赛做准备。 08年的电子大赛分类3类, 硬件设计类、单片机软件类、产品的调试动手类 。 现在的大赛应该有所改动。 我选择的是软件类,选择这个的原因是我觉得这个更加的神秘,就是这个神秘感让我对软件更加的有兴趣。 刚开始真的是一窍不通,我 买了一本C语言书 ,独自学习了 2个月 ,做了 3本笔记 ,然后 又学习了1个月的数字电路 ,到这个时候,我都快奔溃了,3个月过去了,还是啥都不懂! 这个时候我已经做好放弃的准备了,最后想想:自己选的路,跪着也要走完。 正好那段时间每天也闲的蛋疼,就抱着边玩边学的态度,说出来你可
[单片机]
机器人常用的单片机使用经验(一)
一 学习单片机的捷径是什么? 所谓捷径就是少走弯路。我刚开始学单片机时走了不少弯路,很多朋友和我都有相似的经历,刚开始接触 单片机 ,面对琳琅满目的图书教材,不知选择哪本;想实践时不知到哪买单片机;不知如何编程下载程序…… A 对于初学者仔细看本文就是学习单片机的捷径之一。 B 到图书馆或者书店在数十本单片机书中选一本你能看懂,而且觉得案例有趣的“实在、生动、活泼”的单片机书做为你的入门读物。 C 建议先从51单片机学起。掌握51后再学AVR,然后学ARM、DSP等。 D 在学习过程中实践非常必要。你需要一台电脑。如果是台式电脑,你可以花十几元购买25针并口下载线,如果是笔记本电脑,你只能购买几十元到几百
[模拟电子]
机器人常用的<font color='red'>单片机</font>使用经验(一)
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved