诺德英蓝国际金融:用汇编语言编一个闹钟的程序

来源:百度文库 编辑:杭州交通信息网 时间:2024/05/02 15:33:54
这是我们实训的课题,我一点思路也没有...帮帮忙,给点提示也好!!!

我有一个,使我们老师编的,可供参考:
ORG 0000H ;上电入口
AJMP MAIN
ORG 000BH ;定时器T0中断入口地址
AJMP TIM0
ORG 001BH ;定时器T1中断入口地址
AJMP TIM1
MAIN:
MOV SP,#5AH ;设置堆栈指针栈底地址
MOV P1,#0FFH ;P1口初始化
MOV SCON,#00H ;串行控制字0方式通讯
MOV TMOD,#00H ;设定定时器T0、T1均为方式0
MOV TH1,#3CH ;赋予时间常数
MOV TL1, #0B0H
MOV TH0, #3CH
MOV TL0, #0B0H
MOV 20H, #0FFH ;设置标志位
MOV 21H, #00H
MOV 10H, #0BH ;赋初值
MOV 11H, #0BH
MOV 12H, #0BH
MOV 13H, #0AH
MOV 14H, #13H ;动态存储单元
MOV 22H, #00H ;显存地址初始化
MOV 23H, #00H
MOV 24H, #00H
MOV 25H, #00H
MOV 26H, #00H ;循环变量赋初值
MOV 35H, #1FH
MOV 50H, #02H
SETB ET0 ;开T0中断
SETB ET1 ;开T1中断
SETB EA ;开总中断
WW0: ACALL DISP0
AA: JB P1.0, AA
ACALL DELAY
MOV 21H,#00H
JB P1.0, WORK1
AJMP AA00
WORK1: AJMP WORK
AA00:
MOV 10H,23H ;显缓赋值
MOV 11H, 24H
MOV 12H, 25H
MOV 13H, 26H
SETB TR0 ;启动定时器T0
SETB TR1 ;启动定时器T1
SETB EA
MOV 21H,#00H
AA3:
JNB 08H, AA1
AJMP ADDA ;转增数程序
AA1:
JNB 09H, AA2
AJMP MOVE ;转移位程序
AA2:
JNB 0AH, AA3
AJMP EXIT ;转退出程序
TIM1:
MOV TH1, #03CH
MOV TL1, #0B0H
DJNZ 35H, MM2
MOV 35H, #1FH
JNB 0EH,MM0
DJNZ 50H,MM2
MOV 50H,#02H
SETB 0DH
AJMP MM2
MM0:
JNB 0BH, MM
AJMP MM1
MM:
MOV R0, #14H
MOV A, @R0
MOV R0, A
MOV A, #0BH
MOV @R0, A
SETB 0BH
MM1: CLR 0BH
MM3:
ACALL DISP
MOV 10H, 23H
MOV 11H, 24H
MOV 12H, 25H
MOV 13H, 26H
MM2: RETI
DISP:
MOV DPTR , #PAWT ;送断码首址
MOV R1, #10H ;赋显缓首址
MOV R4, #04H ;循环计数次数
LOOP:
MOV A, @R1
MOVC A, @A+DPTR
MOV R5, A
MOV A, R1
CJNE A, #12H, GG
MOV A, R5
ANL A, #0FEH
MOV R5, A
GG:
MOV A, R5
MOV SBUF, A ;输出断码
LL:
JNB TI, LL ;循环判位
CLR TI
INC R1
DJNZ R4,LOOP
rET ;子程序返回
PAWT: DB 03H,9FH,25H,0DH,99H,49H,41H,1FH,01H,09H,31H,0FFH ;断码表1
DISP0: MOV DPTR , #PAWT0
MOV R1, #10H
MOV R4, #04H
LOOP0: MOV A, @R1
MOVC A, @A+DPTR
MOV SBUF, A
LL0: JNB TI, LL0
CLR TI
INC R1
DJNZ R4, LOOP0
RET
PAWT0: DB 03H,9FH, 5H,0DH,99H,49H,41H,1FH,01H,09H,31H,0FFH ;断码表2
ADDA: CLR 08H ;加数子程序
MOV R0, #14H
MOV A, @R0
MOV R0, A
MOV A, @R0
INC A
CJNE A, #0AH, BB
MOV A, #00H
BB: MOV @R0, A
MOV A,10H
CJNE A,#0AH , L1
L1: JC L2
CLR A
L2: MOV 23H,A
MOV A,11H
CJNE A,#06H , L3
L3: JC L4
CLR A
L4: MOV 24H,A
MOV A,13H
CJNE A,#02H , L5
MOV 26H,A
MOV A,12H
CJNE A,#04H , L6
L6: JC L7
CLR A
L7: MOV 25H,A
AJMP AA3
L5: JC L8
CLR A
L8: MOV 26H,A
MOV A,12H
CJNE A,#0AH , L9
L9: JC L10
CLR A
L10: MOV 25H,A
AJMP AA3
MOVE: CLR 09H
MOV R0, #14H
MOV A, @R0
INC A
CJNE A, #14H , WW
MOV A,#10H
WW: MOV @R0,A
AJMP AA3
TIM0: MOV TL0,#3CH ;赋时间常数
MOV TL1,#0BH
MOV C, P1.0 ;设置P1.0标志位
MOV 00H,C
MOV C,01H
ANL C,/00H
JNC QQ
SETB 08H
QQ: MOV C,P1.0
MOV 01H,C
MOV C,P1.1
MOV 02H,C
MOV C,03H
ANL C,/02H
JNC QQ1
SETB 09H
QQ1: MOV C,P1.1 ;设置P1.1标志位
MOV 03H,C
MOV C,P1.2
MOV 04H,C
MOV C,05H
ANL C,/04H
JNC QQ2
SETB 0AH
QQ2: MOV C,P1.2 ;设置P1.2标志位
MOV 05H,C
RETI
DELAY: MOV 36H,#0FFH ;执行延时子程序
CC2: MOV 37H,#0FFH
CC1: MOV 38H,#0AH
CC: DJNZ 38H,CC
DJNZ 37H,CC1
DJNZ 36H,CC2
RET
EXIT: MOV 23H,10H ;退出子程序
MOV 24H,11H
MOV 25H,12H
MOV 26H,13H
MOV 10H,#0BH
MOV 11H,#0BH
MOV 12H,#0BH
MOV 13H,#0AH
CLR TR0
CLR TR1
CLR 0AH
AJMP WW0
WORK: MOV 10H, 23H
MOV 11H, 24H
MOV 12H, 25H
MOV 13H, 26H
SETB 0EH ;工作子程序
CLR ET0 ;关T0中断
SETB TR1 ;启动定时器T1
WORK2: JB P1.2 , RR1 ;判退出键
AJMP EXIT
RR1: JNB 0DH , WORK2 ;判分钟定时
CLR 0DH
MOV R0,#11H
ACALL ADD1
MOV A,R3
CLR C
CJNE A,#60H,ADDM
ADDM: JC OUT_TO
ACALL CLR_0
MOV R0,#13H
ACALL ADD1
MOV A,R3
CLR C
CJNE A,#24H,ADDM1
ADDM1: JC OUT_TO
ACALL CLR_0
OUT_TO: MOV 23H,10H ;WORK退出
MOV 24H,11H
MOV 25H,12H
MOV 26H,13H
ACALL DISP
AJMP WORK2
ADD1: MOV A,@R0 ;WORK加一程序
DEC R0
SWAP A
ORL A,@R0
ADD A,#01H
DA A
MOV R3,A
ANL A,#0FH
MOV @R0,A
MOV A,R3
INC R0
ANL A,#0F0H
SWAP A
MOV @R0,A
RET
CLR_0: CLR A ;WORK清零程序
MOV @R0,A
DEC R0
MOV @R0,A
RET
END