MCS51系列单片机系统及其应用Word文档格式.docx

上传人:b****4 文档编号:8315931 上传时间:2023-05-11 格式:DOCX 页数:9 大小:17.31KB
下载 相关 举报
MCS51系列单片机系统及其应用Word文档格式.docx_第1页
第1页 / 共9页
MCS51系列单片机系统及其应用Word文档格式.docx_第2页
第2页 / 共9页
MCS51系列单片机系统及其应用Word文档格式.docx_第3页
第3页 / 共9页
MCS51系列单片机系统及其应用Word文档格式.docx_第4页
第4页 / 共9页
MCS51系列单片机系统及其应用Word文档格式.docx_第5页
第5页 / 共9页
MCS51系列单片机系统及其应用Word文档格式.docx_第6页
第6页 / 共9页
MCS51系列单片机系统及其应用Word文档格式.docx_第7页
第7页 / 共9页
MCS51系列单片机系统及其应用Word文档格式.docx_第8页
第8页 / 共9页
MCS51系列单片机系统及其应用Word文档格式.docx_第9页
第9页 / 共9页
亲,该文档总共9页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

MCS51系列单片机系统及其应用Word文档格式.docx

《MCS51系列单片机系统及其应用Word文档格式.docx》由会员分享,可在线阅读,更多相关《MCS51系列单片机系统及其应用Word文档格式.docx(9页珍藏版)》请在冰点文库上搜索。

MCS51系列单片机系统及其应用Word文档格式.docx

将内部的RAM中的78H—7FH这八个单元作为显示缓冲区,将时钟要显示的初值的数字(非字型代码)置入这八个单元中,等待显示子程序利用其中的数据去查出相应的字型代码,送出显示。

用有寄存器间接寻址功能的工作寄存器R0作为显示缓冲区的指示器,将显示缓冲区内的数据与查表类指令发生联系,以便按显示缓冲区内的数据查表。

主程序初始化时首先将定时器中断的总开关关闭,选择一个定时器,设定该定时器的工作方式,将该定时器的两个计数单元赋一预先设好的初始数据。

开启所有与所选择的定时器有关的中断开关,但不启动计数器,作好准备。

当主程序初始化完毕之后,开始调用显示子程序之前开启计数器,此时主程序即进入无休止的调用显示子程序的状态,随时准备着被定时器所中断。

在中断子程序的入口处若有必要保护主程序在中断时主要寄存器的状态,请务必执行堆栈以保护中断时CPU的现场。

并且关闭所选择的定时器的中断允许控制位,但不要让定时计数器停止计数,重新对定时器的定时单元进行赋值(与主程序初始化时所赋的值相同)。

靠定时器溢出一次,不可能产生秒信号,所以要在定时器溢出发生中断,程序条入中断服务程序后,不仅要给定时器重新赋值,而且要设计一个计数器,让定时器溢出若干次,直到定时器定时的累积值达到1秒为止,然后对显示缓冲区的秒位加“1”,在加“1”之后还要判断是否产生进位,然后加以处理,结果让屏幕上所显示的数字为时钟的有效数值,即秒位与分位不能超出60,小时位则不能超出24(统一将时钟设计为24小时制)。

7:

为了使所设计的程序简短,建议将程序中相同的部分都设计成子程序。

参考程序二例:

(CJC7.ASM、CJC8.ASM)

参考程序(CJC7.ASM与CJC8.ASM)的有关说明:

程序一(CJC7.ASM)中编制了多个子程序,在程序的长度上与参考程序二(CJC8.ASM)相当。

主程序略有不同,中断服务程序则大有差别,但都能实现同一个目的(电子时钟)。

参考程序一:

CJC7.ASM

ORG0000H

AJMP0030H

ORG000BH;

定时器中断入口地址

AJMPINTT0;

跳入中断服务子程序

MAIN:

MOV78H,#00H

MOV79H,#00H

MOV7AH,#0AH

MOV7BH,#00H

MOV7CH,#00H

MOV7DH,#0AH

MOV7EH,#02H

MOV7FH,#01H;

显示缓冲区初始化;

-----------------------------------------

MOVSP,#50H;

修改堆栈指针

MOVR0,#78H;

给定显示缓冲区首地址

MOVTMOD,#01H;

设置定时器的定时方式

MOVTH0,#17H

MOVTL0,#0B8H;

预置定时初值

SETB8CH

SETB0AFH

SETB0A9H;

开中断、启动定时器

MOVR6,#08H

LOOP0:

LCALLDISP;

调用显示子程序

SJMPLOOP0;

----------------------------------

DISP:

MOVR1,#01H

LOOP1:

MOVA,@R0

MOVCA,@A+DPTR

MOVP0,A

MOVP1,R1;

显示1个数字

ACALLDELAY

INCR0

MOVA,R1

CJNEA,#01H,LOOP1;

显示8个数字

MOVR0,#78HRET;

DELAY:

MOVR3,#0FFH

DJNZR3,$

MOVR4,#0FFH

DJNZR4,$

RET;

0.5毫秒延时;

DATA:

DB0C0H,0F9H,0A4H

DB0B0H,99H,92H

DB82H,0F8H,80H

DB90H,0BFH;

显示字型代码表

;

-----------------------------------

INTT0:

MOVTH0,#17H;

中断服务程序

定时器再次预置初值

PUSHACC

PUSHPSW;

保护现场

SETBPSW.3

MOVA,30H

DECA

MOV30H,A

JNZRETO;

到1秒否?

MOV30H,#08H

-------------------------------------

MOVR0,#79H

ACALLADD1;

秒加“1”

MOVA,R2

XRLA,#60;

到60秒否?

JNZRETO

ACALLCLR0;

秒位清零

-------------------------------------

MOVR0,#7CH

分加“1”

XRLA,#60

到60分否?

分位清零

---------------------------------

MOVR0,#7FH

小时加“1”

MOVA,R2

XRLA,#24

到24小时否?

小时位清零

RETO:

POPPSW

POPACC;

恢复现场

RETI;

中断返回

-----------------------------------

ADD1:

MOVA,@R0;

加“1”子程序

DECR0

SWAPA

ORLA,@R0;

合并字节

ADDA,#01H;

加“1”

DAA

MOVR2,A

ANLA,#0FH;

坼分字节

MOV@R0,A;

放入显示缓冲区

ANLA,#0F0H

RET

CLR0:

CLRA

MOV@R0,A

RET;

清零子程序

---------------------------------------------------

参考程序二:

CJC8.ASM

AJMP000EH;

主程序入口

定时器中断程序入口

跳入中断服务程序

ORG000EH

显示缓冲区初始化

MOVR0,#78H

MOVTMOD,#01H

MOVTL0,#0B8H

SETBTR0

SETBET0

SETBEA;

定时器的控制

调用显示程序

SJMPLOOP0

------------------------------------------

MOVR1,#01H;

显示子程序

MOVA,@R0

MOVP1,R1

RLA

MOVR1,A

CJNEA,#01H,LOOP1

MOVR0,#78H

RET

RET;

显示用延时程序

---------------------------------------

DB0B0H,99H,92H

MOVTH0,#17H;

中断服务程序

PUSHACC

DJNZR6,RETO

INC78H

MOVA,78H

CJNEA,#0AH,RETO

MOV78H,#00H

INC79H

MOVA,79H

CJNEA,#06H,RETO

MOV79H,#00H

INC7BH

MOVA,7BH

INC7CH

MOVA,7CH

MOV7CH,#00H

INC77H

INC7EH

MOVA,77H

CJNEA,#24,TEET

-------------------------------

RETO:

MOV77H,#00H

MOV7EH,#00H

MOV7FH,#00H

POPACC

RETI

REET:

MOVA,7EH

INC7FH

MOVA,7FH

CJNEA,#03H,RETO

AJMPRETO;

加“1”及判断程序

注意:

以上二程序仅供参考,不过稍加思考即可使程序成功地运行,请大家务必注意程序设计中的细节部分,吾故如此,旨在让大家悉心思考之,以便学习。

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

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2