51单片机定时汇编程序word资料14页Word文件下载.docx
- 文档编号:20923613
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:21
- 大小:22.72KB
51单片机定时汇编程序word资料14页Word文件下载.docx
《51单片机定时汇编程序word资料14页Word文件下载.docx》由会员分享,可在线阅读,更多相关《51单片机定时汇编程序word资料14页Word文件下载.docx(21页珍藏版)》请在冰豆网上搜索。
BRIGHTBIT3BH;
DISPLAY子程序参数:
亮灭指示位
TCOUNTEQU3CH;
时间计数器(TIME-COUNT)
ADDRESEQU3DH;
加1子程序参数
MAXEQU3EH;
IFDECBIT20H;
BCD加法子程序参数
R_MODEQU3FH;
响铃方式参数
LED4BIT30H;
发光管状态位
BELLBITP1.7;
蜂鸣器
SWITCHBITP3.7;
继电器
FKEYBITP3.0;
功能键(S1)
MKEYBITP3.1;
修改键(S2)
WORKINBIT38H;
工作状态指示位
中断入口;
ORG0000H
START:
LJMPMAIN;
0000H引向主程序
LJMPERR;
0003H
NOP
LJMPERR;
引向出错处理程序
LJMPPGT0;
000BH引向中断处理程序PGT0
0013HINT1
LJMPERR
001BHT1
0023H
LJMPERR
LJMPERR;
002BH
主程序;
MAIN:
MOVIE,#00H;
关中断
MOVSP,#57H;
设置堆栈指针
MOVPSW,#00H;
选用寄存器组0
MOVTMOD,#11H;
设定中断工作方式为T0和T1
MOVA,56H
CJNEA,#0AAH,CSTART;
判上电复位标志,无标志转冷启动
MOVA,57H
CJNEA,#55H,CSTART;
无标志转冷启动
AJMPHSTART;
有上电复位标志转热启动
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;
转开始工作
软件陷阱
HSTART:
MOVSCON,#00H;
有上电标志,热启动,清串行口控制寄存器
MOVIP,#00H;
清中断优先控制寄存器
SETBFKEY;
重设按键
SETBMKEY
SETBEA;
开中断
AJMPBEGIN;
转向继续工作
LJMPERR;
SETUP:
MAIN1:
ACALLDISPLY;
调用显示
JBFKEY,JUDGE;
按键扫描
ACALLKEYDLY;
延时消抖动
无键按下转向判断是否到点
CLRET0;
功能键被按下,则
CLRTR0;
暂停计时
ACALLMENU;
调用菜单设置程序
BEGIN:
SETBWORKIN;
置工作标志位,开始工作
SETBET0;
SETBTR0;
开始计时
MOVA,R4;
移入工作模式选择
RLA;
指针放大
MOVDPTR,#M_TAB
JMP@A+DPTR;
根据工作模式跳转到相应程序段
M_TAB:
AJMPWORK1
AJMPWORK2
AJMPWORK3
AJMPWORK4
NOP
LJMPERR;
WORK1:
WORK2:
CLRSWITCH;
工作方式1和2:
开继电器
AJMPMAIN2
WORK3:
WORK4:
SETBSWITCH;
工作方式3和4:
不开继电器
MAIN2:
CLRBELL;
蜂鸣器短鸣一声,以示开始工作
ACALLDL05S
SETBBELL
JUDGE:
JNBWORKIN,MAIN1;
判断是否在定时之中
MOVA,SL;
判断秒是否为零
JNZMAIN1
MOVA,SH;
MOVA,ML;
判断分是否为零
MOVA,MH;
MOVA,HL;
判断时是否为零
MOVA,HH;
JNZMAIN1;
若时分秒全为零则
CLRET0;
停止计时
CLRTR0;
ACALLACTION;
调用到点工作子程序
AJMPMAIN;
返回
倒计时程序;
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;
移入分位的地址
分减1
判断分要否借位
MOVMH,#05H
MOVML,#09H
MOVR0,#HH
ACALLADDBCD
OUTT0:
POPDPH;
恢复现场
POPDPL
POPPSW
POPACC
SETBEA
RETI;
中断返回
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;
交换
取结果数的高位
RET
加1程序;
ADDONE:
MOVR0,ADDRES;
移入被加数单元的地址
CLRIFDEC;
设定BCD子程序做加法
调用BCD子程序
CLRC;
判断被加数是否大于
MOVA,R3;
最大值"
MAX"
CJNEA,MAX,JGOVER
JGOVER:
JCENDADO
CLRA;
若大于"
则清零
MOV@R0,A
DECR0
ENDADO:
LJMPERR;
调时快进程序;
QUICK:
CLRLPLMOD;
设定显示方式不闪烁
CLRHPLMOD
ACALLADDONE;
调用加1子程序
MOVL0,R4;
将工作模式选择数移入显存
INCL0;
加1转化成显示值
ACALLKEYDLY;
延时
ACALLDL100
JNBMKEY,QUICK;
判断键是否松开
若松开则恢复闪烁显示方式
CJNER6,#02H,ENDQUK
SETBHPLMOD
CLRLPLMOD
ENDQUK:
功能菜单程序;
MENU:
MOVR6,#00H;
初始化;
R6计功能键按键次数
MOVADDRES,#05H;
将R5的地址送入,以便于改变R4的值
MOVMAX,#04H;
定义工作模式选择寄存器R4的最大值
MOVDSPLYP,#L0;
定义显示指针指向显存
SETBLPLMOD;
设定低两位数闪烁
CLRHPLMOD
MOVL0,R4;
F-0X"
INCL0
MOVL1,#00H
MOVL2,#0BH
MOVL3,#00H
SETBLED4
WAITFK:
等待F键释放
JNBFKEY,WAITFK
MENU1:
ACALLDISPLY
JBMKEY,JGFKEY;
M键扫描
未按下则转F键扫描
CJNER6,#00H,NEXT1;
MOVSL,#00H;
若中途改变定时方式,则清除原计时数据
MOVSH,#00H
MOVML,#00H
MOVMH,#00H
MOVHL,#00H
MOVHH,#00H
NEXT1:
MOVR2,#00H;
R2用于判断按键时间是否超过0.5秒
NEXT2:
调用加1程序
移入工作方式选择数
WAITMK:
等待M键释放
INCR2;
R2自增一
CLRC
CJNER2,#0C8H,JGQUIC;
若R2大于等于200则调用快进子程序
JGQUIC:
JCWATMK1
ACALLQUICK
WATMK1:
JNBMKEY,WAITMK;
R2小于200则等待M键释放
JGFKEY:
JBFKEY,MENU1;
功能(F)键扫描
键未按下则转修改(M)键扫描
INCR6;
F键按键次数加1
MOVA,R6;
移入按键次数
RLA;
MOVDPTR,#FUNTAB
JMP@A+DPTR;
根据按键次数跳转到相应的程序段
FUNTAB:
AJMPWAITFK
AJMPSETLOW
AJMPSETHI
AJMPENDMEN
STWKMD:
工作模式设定,不需另外改变菜单
SETLOW:
MOVMAX,#60H;
设置低位(秒位或分位)
MOVA,R4;
移入工作模式选择数
RLA;
MOVDPTR,#FTAB1
JMP@A+DPTR;
根据工作模式选择数跳转到相应的程序段
FTAB1:
AJMPSETSS
AJMPSETM60
AJMPSETSS
AJMPSETM60
AJMPWAITFK
SETSS:
MOVDSPLYP,#SL;
设定显示区域为MM:
SS
MOVADDRES,#SH
SETM60:
MOVDSPLYP,#ML;
设定显示区域为HH:
MM
MOVADDRES,#MH
SETHI:
CLRLPLMOD;
设置高位(分位或时位)
SETBHPLMOD;
高两位数码管闪烁
MOVMAX,#31H;
最大数为30
RLA;
MOVDPTR,#FTAB2;
移入表首地址
FTAB2:
AJMPSETM30
AJMPSETHH
AJMPSETM30
AJMPSETHH
AJMPWAITFK;
返回等待键释放
SETM30:
MOVADDRES,#MH;
转向等待键释放
SETHH:
MOVADDRES,#HH;
移入时位的地址
AJMPWAITFK;
ENDMEN:
CLRHPLMOD;
恢复不闪烁显示方式
RET
到点工作程序;
ACTION:
送显示数"
SETBLED4
MOVDSPLYP,#L0;
指针指向显存
MOVDPTR,#A_TAB
根据工作模式选择数跳转
A_TAB:
AJMPACTF1;
工作模式一
AJMPACTF1;
工作模式二
AJMPACTF3;
工作模式三
AJMPACTF3;
工作模式四
ACTF1:
工作模式一(或二):
关继电器
MOVR_MOD,#82H;
响铃模式参数#82H
MOVR2,#96H;
响铃次数参数#96H
ACTF11:
ACALLRING;
调用响铃子程序
JNBMKEY,ENDACT;
等待键按下
JNBFKEY,ENDACT;
有键按下则结束响铃
DJNZR2,ACTF11;
次数未满继续响铃
MOVR_MOD,#0FFH;
参数#0FF使响铃无效
AJMPACTF11;
无键按下返回
ACTF3:
工作模式三(或四):
开继电器
蜂鸣器短鸣一声
ACALLDL1S
响铃模式参数#0FFH
响铃时间参数#96H
ACTF31:
ACALLRING;
有键按下则结束
DJNZR2,ACTF31;
次数未满继续
重新赋值
短鸣一声(说明:
响铃模式参数#0FFH使
ACALLDL100;
响铃程序无效,仅起延时作用,
SETBBELL;
每延时一段时间短鸣一声,以
AJMPACTF31;
提醒使用者继电器仍在工作)
ENDACT:
SETBSWITCH;
关继电器
AWAITF:
JNBFKEY,AWAITF;
等待键释放
AWAITM:
JNBMKEY,AWAITM;
响铃程序;
RING:
MOVR5,#18H;
R5为循环控制变量
RING1:
JNBMKEY,R_EXIT;
键扫描
JNBFKEY,R_EXIT;
有键按下则退出
MOVA,R_MOD;
移入响铃模式参数
MOVC,ACC.7;
根据响铃模式参数改变响铃
MOVBELL,C
RLA
MOVR_MOD,A
DJNZR5,RING1;
循环次数控制
R_EXIT:
关闭响铃
显示程序;
DISPLY:
PUSHACC;
数据压栈保护
PUSHPSW
MOVPSW,#10H;
选用寄存器组2
MOVR0,DSPLYP;
移入显示指针
MOVR2,#0FDH;
R2寄存的是数码管选通数
MOVA,PLYTS;
移入显示循环控制量
JNZPLAY;
不为0则转PLAY
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 51 单片机 定时 汇编程序 word 资料 14