基于MCS-51单片机的可调六位数字时钟汇编

上传人:w****y 文档编号:47060150 上传时间:2018-06-29 格式:DOC 页数:12 大小:41.01KB
返回 下载 相关 举报
基于MCS-51单片机的可调六位数字时钟汇编_第1页
第1页 / 共12页
基于MCS-51单片机的可调六位数字时钟汇编_第2页
第2页 / 共12页
基于MCS-51单片机的可调六位数字时钟汇编_第3页
第3页 / 共12页
基于MCS-51单片机的可调六位数字时钟汇编_第4页
第4页 / 共12页
基于MCS-51单片机的可调六位数字时钟汇编_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《基于MCS-51单片机的可调六位数字时钟汇编》由会员分享,可在线阅读,更多相关《基于MCS-51单片机的可调六位数字时钟汇编(12页珍藏版)》请在金锄头文库上搜索。

1、;本次编程时钟输出码在 p0 口,控制显示位为 p2.7 p2.6 p2.5,共八个数码管org 0000hajmp mainorg 0003hajmp sj0;外部中断 0 跳转到 sj0org 000bhajmp it0p ;计时中断跳转“it0p”org 00013hajmp sj1 ;外部中断 0 跳转到 sj1org 0100hmain:mov tmod,#01h;设置中断 0 的工作方式为 1clr rs1;设置工作区 0clr rs0;设置工作区 0mov r0,#30h; 给 r0 设置初值 30,使设置处于准备状态mov sp,#20h;堆栈开始于 20-25mov 30h,

2、#14h;给计时赋初次数mov 41h,#00h;给显示位赋值,用于显示设置位用于对应mov 42h,#20h; mov 43h,#40h;可删除 mov 44h,#60h; mov 45h,#80h; mov 46h,#0a0h;可删除mov 47h,#0c0h; mov 48h,#0e0h; mov 33h,#0ah;横杠位对应输出值位置mov 36h,#0ah;横杠位对应输出值位置mov 31h,#00hmov 32h,#00hmov 34h,#00hmov 35h,#00hmov 37h,#00hmov 38h,#00hsetb et0 ;开计时中断 0setb ex0;开外部中断 0

3、setb px1 ;设置外部中断 1 优先级高,使其能中断外部中断 0setb ea ;最后将总中断开启mov th0,#3ch ;给计时器赋初值mov tl0,#0afh ;setb tr0 ;开始让计时器工作,计时有效xiansj: ;计时器工作后,主程序进入显示时钟状态mov dptr,#shuxiang;将数码显示队列起始地址给 dptrloop0:;mov r1,#31h;31 对应秒第一位,mov r2,#00h ; p2 由 00 对应第一位loop1: ;jb ex1,tiao111 ;进入设置后,主程序必须只显示设置位mov a,r1;中断完毕后,跳转回来时,r1 改变也无所

4、谓movc a,a+dptr;只要去 r1 处于 31-38 即可mov p0,#0ffhmov p2,r2;mov p0,ainc r1;r1 自加 1,准备对下一个数值进行显示mov a,#20h ;p2 的显示位对应以 20 为间隔add a,r2mov r2,a ;对寄存器进行加法的步骤mov a,r1cjne r1,#39h,loop1;判断 r1 达到的值,对下一位数进行显示ajmp loop0 ;当 8 位数值显示完毕,跳转回显示状态起始处tiao111: ;acall fangfuxyw ;调用反复显示设置位程序ajmp loop1 ;跳回 loop1 使设置完毕主程序后进入显

5、示时钟状态shuxiang:db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,0bfhfangfuxyw: ;反复显示设置位程序mov a,r0subb a,#31hmov b,#20hmul ab mov r5,a ;r5 是显示位置,与 r0 有对应关系mov a,r0movc a,a+dptrmov p0,#0ffhmov p2,r5mov p0,aretsj0:clr ex0;中断 0 程序开始push accclr tr0jingts1:mov a,#01hadd a,r0mov r0,acjne r0,#33h,tiao3ajmp ji

6、ngts1tiao3:cjne r0,#36h,tiao6;可以不讨论 33.36 两种情况,因为中断 1 会处理ajmp jingts1tiao6:cjne r0,#39h,tiao000mov r5,38h ;判断设置是否超过 24cjne r5,#02h,panduan3mov a,37hsubb a,#03hjc panduan3;clr ex1dec r0mov 4bh,#0ffh;to01:mov 4ch,#0ffh;to02:acall fangfuxyw;dec r0;acall fangfuxyw;inc r0;djnz 4ch,to02;djnz 4bh,to01;mov

7、r0,#37h;setb ex1ajmp tiao000 ;panduan3:mov p0,#0bfhmov p2,#40hacall yanshimov p2,#0a0hacall yanshiclr ex1pop accmov r0,#30hsetb ex0setb tr0reti;设置时间结束 跳回主程序tiao000:setb ex1 ;acall yanshixian ;pop acc;setb ex0;reti ;sj1: ;外部中断 1,对设置位进行加 1clr ea ;在加 1 时,关闭所有中断,防止抖动。;改为关闭中断 1(clr ex1)亦可,对应跳出前开启也应修改push

8、 acc ;累加器 a 发生改变,应保护mov a,#01h ;进行加 1,必须使用累加器,由于分支较多,在开始处设置cjne r0,#31h,ssj2 ;现在判断 r0 为何值,因为不同情况最大值有区别ajmp ssj000ssj2:cjne r0,#32h,ssj3ajmp ssj666ssj3:cjne r0,#33h,ssj4ajmp retunt3ssj4:cjne r0,#34h,ssj5ajmp ssj000ssj5:cjne r0,#35h,ssj6ajmp ssj666ssj6:cjne r0,#36h,ssj7ajmp retunt3ssj7:cjne r0,#37h,ss

9、j8ajmp ssj000ssj8:cjne r0,#38h,ssj9ajmp ssj222ssj9:cjne r0,#39h,yichan00mov 31h,#00h ;当 r0 等于 39,若进入中断 1mov 32h,#00h ;则视为对时钟清零mov 34h,#00h ;mov 35h,#00hmov 37h,#00hmov 38h,#00hajmp wangshi ;准备跳出,但不延时yichan00:mov r0,#31h;发生异常,给 r0 赋值ajmp wangshi ;跳出程序ssj000: ;限制最大值为 10 时cjne r0,#09h,ssj0001;到达是否限制数mo

10、v r0,#00hajmp retunt3 ssj0001: add a,r0 ;没到达限制数时,加 1mov r0,aajmp retunt3 ;准备跳出ssj666: ;限制最大值为 5 时cjne r0,#05h,ssj6661 ;mov r0,#00hajmp retunt3ssj6661:add a,r0 ;没到达限制数时,加 1mov r0,aajmp retunt3ssj222:;限制最大值为 2 时cjne r0,#02h,ssj2221mov r0,#00hajmp retunt3ssj2221:add a,r0mov r0,aajmp retunt3 ;准备跳出retunt

11、3:;外部中断 1(sj1)所有分支结束跳转点acall yanshixian ;延时并显示设置位wangshi: ;此跳转点专为清零后直接跳出pop acc ;每次跳出前应该对应出栈setb ea;对应每次中断关闭总中断,开启reti;完成设置位的增 1,跳出外部中断 1yanshixian:mov 4bh,#40h ;延时同时显示设置位too01:mov 4ch,#0ffhtoo02:acall fangfuxywdjnz 4ch,too02djnz 4bh,too01retyanshi:mov 4bh,#04h;延时程序,约为 0.5 秒lpp0:mov 4ch,#0ffhlpp1:mo

12、v 4dh,#0ffh ;djnz 4dh,$djnz 4ch,lpp1djnz 4bh,lpp0ret;从子程序中返回it0p: ;当计时 0.05s 后跳转到这里push psw ; 对状态及累加器保护push acc;mov th0,#3ch ; 给计时重新赋初值mov tl0,#0afh ;djnz 30h,retunt ;判断是否到达 1 秒mov 30h,#14h ;1 秒到达,重新赋初值计时 1smov a,#01h ;给秒一位加 1add a,31h ;mov 31h,a ;加 1 步骤cjne a,#0ah,retunt;判断是否到达 10 秒mov 31h,#00h ;到达

13、 10 秒,重新赋值计算mov a,#01h ;给秒二位加 1add a,32hmov 32h,acjne a,#6h,retunt ;60 秒是否到达mov 32h,#00h ;到达 60 后,重新赋值计算mov a,#01hadd a,34hmov 34h,a ;同时给分位加 1cjne a,#0ah,retunt ;判断分一位是否到达 10mov 34h,#00h ;mov a ,#01hadd a,35hmov 35h,acjne a,#6h,retunt ;步骤逐步递推mov 35h,#00hmov a,#01hadd a,37hmov 37h,acjne a,#0ah,retuntmov 37h,#00hmov a ,#01hadd a,38hmov 38h,acjne a,#2h,retuntmov r3,#37hcjne r3,#04h,retunt ;当 20 小时到达,判断是否到达 24mov 37h,#00hmov 38h,#00h ;24 小时到达,清零钟位retunt:pop acc;中断终结点跳转到此处pop psw ;对应堆栈出栈retiend ;程序结束

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 毕业论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号