秒表汇编语言!

小弟刚刚用借用了一个汇编语言编写的(共阳极)秒表程序,想让各位 看看有什么疏漏没,顺便帮我解析下程序内容意义!
课题要求:
⑴两个数码管显示秒,用一个数码管显示零点几秒,最多可显示99.9秒。
⑵ 一个按钮用于启动或停止计时,启动和停止交替进行。如:若当前正在计时,按该按钮则停止计时;若当前已停止计时,按该按钮则继续计时。若计时到99.9秒后又从0.00秒继续计时,循环不止。
⑶ 另一个按钮用于计时器清零。
2、课题要求
(1) 时间的定时采用89C51单片机的定时器和软件计数的方式实现。
(2) 因CMOS型单片机的拉电流很小,为了减少额外的驱动开销,采用共阳极的数码管。
3、参考设计方案
(1)参考硬件电路
用89C51的P0、P1、P2口分别连接三个共阳数码管。两个按钮连到P3口的
任意两个引脚。 =12MHZ。具体的硬件电路略。
(2)参考控制程序
采用定时器T0工作在方式1定时50ms,计数初值为15536,用软件计数20次
即为1秒。具体程序略。

程序:
ORG 0000H
LJMP YANG
ORG 0003H
LJMP WEN
ORG 000BH
LJMP LP1
ORG 0013H
LJMP ZHI
ORG 001BH
LJMP LP4
ORG 0030H
YANG: MOV SP,#60H
MOV DPTR,#TAB
MOV TMOD,#22H
MOV TL0,#06H
MOV TH0,#06H
MOV TL1,#06H
MOV TH1,#06H
MOV IP,#04H
MOV R7,#200
MOV R6,#20
MOV R5,#20
MOV R4,#20
MOV 30H,#0
MOV 40H,#0
SETB IT0
SETB IT1
SETB EA
SETB ET0
SETB ET1
SETB EX0
SETB EX1
SETB TR0
SETB TR1
SJMP $
LP1: LCALL LP3
DJNZ R7,LOOP
MOV R7,#200
DJNZ R6,LOOP
MOV R6,#20
MOV A,30H
ADD A,#1
DA A
CJNE A,#99H,LP2
CLR A
LP2:MOV 30H,A
LJMP LP3
LP3:MOV A,30H
ANL A,#0FH
MOVC A,@A+DPTR
MOV P1,A
MOV A,30H
SWAP A
ANL A,#0FH
MOVC A,@A+DPTR
MOV P0,A
RETI
LP4:DJNZ R5,LOOP
MOV R5,#20
DJNZ R4,LOOP
MOV R4,#20
MOV A,40H
ADD A,#1
DA A
CJNE A,#09H,LP5
CLR A
LP5:MOV 40H,A
SJMP LP6
LP6:MOV A,40H
ANL A,#0FH
MOVC A,@A+DPTR
MOV P2,A
RETI
LOOP:RETI
WEN:CLR EA
CLR TR0
CLR TR1
PUSH ACC
PUSH 30H
PUSH 40H
PUSH P1
PUSH P0
PUSH P2
SETB EA
LP7:JBC IE0,LP9
SJMP LP7
LP9:CLR EA
POP P2
POP P0
POP P1
POP 40H
POP 30H
POP ACC
SETB TR0
SETB TR1
SETB EA
RETI
ZHI:CLR EA
PUSH P1
PUSH P2
PUSH A
SETB EA
CLR ET0
CLR ET1
CLR TL0
CLR TH0
CLR TL1
MOV A,#40H
MOV P0,A
MOV P1,A
MOV P2,A
SETB ET0
SETB ET1
CLR EA
POP A
POP P2
POP P0
POP P1
SETB EA
RETI
TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
END

第1个回答  2010-12-03
程序不能正常运行出来所要求的结果,建议看看以下链接,有关时钟的,还有好多:
http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/blog/item/74d5c34fa69ffdc7d0c86a0b.html本回答被提问者采纳
相似回答