最新51单片机定时汇编程序.docx

上传人:b****3 文档编号:1969029 上传时间:2022-10-25 格式:DOCX 页数:23 大小:21.37KB
下载 相关 举报
最新51单片机定时汇编程序.docx_第1页
第1页 / 共23页
最新51单片机定时汇编程序.docx_第2页
第2页 / 共23页
最新51单片机定时汇编程序.docx_第3页
第3页 / 共23页
最新51单片机定时汇编程序.docx_第4页
第4页 / 共23页
最新51单片机定时汇编程序.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

最新51单片机定时汇编程序.docx

《最新51单片机定时汇编程序.docx》由会员分享,可在线阅读,更多相关《最新51单片机定时汇编程序.docx(23页珍藏版)》请在冰豆网上搜索。

最新51单片机定时汇编程序.docx

最新51单片机定时汇编程序

 

51单片机定时汇编程序

;******************;

;定时器程序;

;采用89c51;

;2001.10;

;******************;

;

;******************

;伪定义;

;******************

SLEQU30H;SL存放秒的个位数

SHEQU31H;SH存放秒的十位数

MLEQU32H;ML存放分的个位数

MHEQU33H;MH存放分的十位数

HLEQU34H;HL存放时的个位数

HHEQU35H;HH存放时的十位数

;

L0EQU36H;L0~L3:

显示数据存储器

L1EQU37H

L2EQU38H

L3EQU39H

DSPLYPEQU3AH;显示数据指针(DISPLAY-POINT)

PLYTSEQU3BH;显示次数计数器(DISPLAY-TIMES)

;

LPLMODBIT39H;低两位显示方式(LOW-PLAY-MOD)

HPLMODBIT3AH;高两位显示方式(HIGH-PLAY-MOD)

BRIGHTBIT3BH;DISPLAY子程序参数:

亮灭指示位

;

TCOUNTEQU3CH;时间计数器(TIME-COUNT)

;

ADDRESEQU3DH;加1子程序参数

MAXEQU3EH;加1子程序参数

IFDECBIT20H;BCD加法子程序参数

;

R_MODEQU3FH;响铃方式参数

;

LED4BIT30H;发光管状态位

BELLBITP1.7;蜂鸣器

SWITCHBITP3.7;继电器

FKEYBITP3.0;功能键(S1)

MKEYBITP3.1;修改键(S2)

;

WORKINBIT38H;工作状态指示位

;

;******************

;中断入口;

;******************

ORG0000H

START:

LJMPMAIN;0000H引向主程序

LJMPERR;0003H

NOP

NOP

LJMPERR;引向出错处理程序

LJMPPGT0;000BH引向中断处理程序PGT0

NOP

NOP

LJMPERR;引向出错处理程序

LJMPERR;0013HINT1

NOP

NOP

LJMPERR

LJMPERR;001BHT1

NOP

NOP

LJMPERR

LJMPERR;0023H

NOP

NOP

LJMPERR

LJMPERR;002BH

NOP

NOP

;

;************

;主程序;

;************

MAIN:

MOVIE,#00H;关中断

MOVSP,#57H;设置堆栈指针

MOVPSW,#00H;选用寄存器组0

MOVTMOD,#11H;设定中断工作方式为T0和T1

;

MOVA,56H

CJNEA,#0AAH,CSTART;判上电复位标志,无标志转冷启动

MOVA,57H

CJNEA,#55H,CSTART;无标志转冷启动

AJMPHSTART;有上电复位标志转热启动

NOP

NOP

LJMPERR;软件陷阱,引向出错处理程序

CSTART:

MOVP1,#0FFH;冷启动,全面初始化

MOVP3,#0FFH

MOVTCON,#00H;计时停止

MOVTL0,#0B0H;赋中断T0初值

MOVTH0,#3CH

MOVTCOUNT,#0AH;赋定时器初值

MOVR5,#00H;R5为一空单元(备用)

MOVR4,#00H;R4为工作模式选择寄存器

MOVSL,#00H;定时单元清零

MOVSH,#00H;秒

MOVML,#00H;

MOVMH,#00H;分

MOVHL,#00H;

MOVHH,#00H;时

MOVPLYTS,#64H;赋显示次数初值为100次

MOVDSPLYP,#L0;显示指针指向显存单元

MOVL0,#0AH;送显示数据"-----"

MOVL1,#0AH

MOVL2,#0AH

MOVL3,#04H

SETBLED4;LED4为数码管之间的发光二极管

SETBLPLMOD;设定显示方式为闪烁

SETBHPLMOD;

SETBBRIGHT;允许显示

CLRWORKIN;清工作标志,待命

AJMPSETUP;转开始工作

NOP

NOP

LJMPERR;软件陷阱

HSTART:

MOVSCON,#00H;有上电标志,热启动,清串行口控制寄存器

MOVIP,#00H;清中断优先控制寄存器

SETBFKEY;重设按键

SETBMKEY

SETBEA;开中断

AJMPBEGIN;转向继续工作

NOP

NOP

LJMPERR;软件陷阱

SETUP:

SETBEA;开中断

;

MAIN1:

ACALLDISPLY;调用显示

JBFKEY,JUDGE;按键扫描

ACALLKEYDLY;延时消抖动

JBFKEY,JUDGE;无键按下转向判断是否到点

CLRET0;功能键被按下,则

CLRTR0;暂停计时

ACALLMENU;调用菜单设置程序

BEGIN:

SETBWORKIN;置工作标志位,开始工作

SETBET0;开中断

SETBTR0;开始计时

MOVA,R4;移入工作模式选择

RLA;指针放大

MOVDPTR,#M_TAB

JMP@A+DPTR;根据工作模式跳转到相应程序段

M_TAB:

AJMPWORK1

AJMPWORK2

AJMPWORK3

AJMPWORK4

NOP

NOP

LJMPERR;软件陷阱

WORK1:

;

WORK2:

CLRSWITCH;工作方式1和2:

开继电器

AJMPMAIN2

NOP

NOP

LJMPERR;软件陷阱

WORK3:

;

WORK4:

SETBSWITCH;工作方式3和4:

不开继电器

MAIN2:

CLRBELL;蜂鸣器短鸣一声,以示开始工作

ACALLDL05S

SETBBELL

JUDGE:

JNBWORKIN,MAIN1;判断是否在定时之中

MOVA,SL;判断秒是否为零

JNZMAIN1

MOVA,SH;判断秒是否为零

JNZMAIN1

MOVA,ML;判断分是否为零

JNZMAIN1

MOVA,MH;判断分是否为零

JNZMAIN1

MOVA,HL;判断时是否为零

JNZMAIN1

MOVA,HH;判断时是否为零

JNZMAIN1;若时分秒全为零则

CLRET0;停止计时

CLRTR0;

ACALLACTION;调用到点工作子程序

AJMPMAIN;返回

NOP

NOP

LJMPERR;软件陷阱

;

;******************

;倒计时程序;

;******************

PGT0:

CLREA;关中断

PUSHACC;保护现场

PUSHPSW

PUSHDPL

PUSHDPH

MOVPSW,#08H;选用寄存器组1

CLRTR0;暂停计时

MOVA,#0B7H;中断同步修正

ADDA,TL0

MOVTL0,A

MOVA,#3CH

ADDA,TH0

MOVTH0,A

SETBTR0;恢复计时

DECTCOUNT;定时器T0每50000毫秒溢出一次,则

MOVA,TCOUNT;溢出10次为0.5秒

JNZOUTT0;判断是否到半秒

MOVTCOUNT,#0AH;

CPLLED4;若到半秒LED取反

JNBLED4,OUTT0;LED每闪烁一次是一秒

MOVR0,#SH;移入秒位的地址

SETBIFDEC;BCD子程序参数,使其做减法

ACALLADDBCD;调用BCD子程序,秒减1

CJNER3,#99H,OUTT0;判断秒要否借位

MOVSH,#05H;要借位则

MOVSL,#09H;送数据59(否则显示99)

MOVR0,#MH;移入分位的地址

ACALLADDBCD;分减1

CJNER3,#99H,OUTT0;判断分要否借位

MOVMH,#05H

MOVML,#09H

MOVR0,#HH

ACALLADDBCD

OUTT0:

POPDPH;恢复现场

POPDPL

POPPSW

POPACC

SETBEA

RETI;中断返回

NOP

NOP

LJMPERR;软件陷阱

;

;

;**************************

;BCD子程序(加1或减1);

;**************************

ADDBCD:

MOVA,@R0;移入被操作数的高位

DECR0;指针减一

SWAPA

ORLA,@R0;移入被操作数的低位

MOVB,#01H;B寄存器送立即数#01H

MOVC,IFDEC;若减法标志位为1,则

MOVB.3,C;

MOVB.4,C;B寄存器的值被改为#99H

MOVB.7,C;

ADDA,B;对一个压缩的BCD码加#99H等于对其减一

DAA;BCD码调整

MOVR3,A;暂存结果

ANLA,#0FH;取低位码

MOV@R0,A;存数

MOVA,R3;取回结果

INCR0;指针加一

SWAPA;交换

ANLA,#0FH;取结果数的高位

MOV@R0,A;存数

RET

NOP

NOP

LJMPERR;软件陷阱

;

;**************

;加1程序;

;**************

ADDONE:

MOVR0,ADDRES;移入被加数单元的地址

CLRIFDEC;设定BCD子程序做加法

ACALLADDBCD;调用BCD子

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1