发表于:2006/7/10 17:16:00
#0楼
我的这个程序其实很简单,就是P1,P2口述出不同的两种状态,然后互相交替。
但是我的程序出现了一个问题,就是我的TIME子程序,我本来是想用定时加循环,
来完成一个长定时(30S),但是现在是TIME1没有中断循环,而是执行了一次后
就直接到了TIME2,还请各位大虾帮帮小弟会诊一下,看看我的程序到底病在哪里?
各位大哥请帮帮我啊,小弟第一次写出的完整程序,有很多地方都用很多毛病,还请各位大哥耐心看完,多给建议和批评,小弟在着多谢各位高人指点了.
ORG 0000H
LJMP MAIN
ORG 1000H
ORG 000BH
LJMP LOOP
ORG 001BH
LJMP LOOP1
ORG 1000H
MAIN:MOV TMOD,#11H 设定定时器的工作状态
MOV A,#00H
MOV P1,A
MOV P2,A
XS1:MOV A,#36H P1,P2进入第一个显示状态
MOV P1,A
MOV A,#1BH
MOV P2,A
LCALL time1 调用子程序TIME1,定时30S
ZHUAND1:MOV A,#2DH P1,进入显示状态2
MOV P1,A
LCALL time2 调用子程序TIME2
XS2:MOV A,#1BH P1,P2进入第二显示状态
MOV P1,A
MOV A,#36H
MOV P2,A
LCALL TIME1 调用子程序TIME1
ZHUAND2:MOV A,#2DH
MOV P2,A
LCALL TIME2
AJMP XS1 循环P1,P2第一显示状态
TIME1:SETB EA 子程序开中断
SETB ET0
SETB ET1
MOV 60H,#0D0H 装定时中断循环的次数
CZ:MOV TL0,#0DCH 给定时器装初值
MOV TH0,#0BH
setb tr0 开定时器
LOOP:MOV A,60H 定时器循环
DEC A
MOV 60H,A
JNZ CZ
RET
TIME2:SETB EA
SETB ET0
SETB ET1
MOV 50H,#18H
CZ1:MOV TL1,#0DCH
MOV TH1,#0BH
SETB TR1
LOOP1:MOV A,50H
DEC A
MOV 50H,A
JNZ CZ1
RET
end
但是我的程序出现了一个问题,就是我的TIME子程序,我本来是想用定时加循环,
来完成一个长定时(30S),但是现在是TIME1没有中断循环,而是执行了一次后
就直接到了TIME2,还请各位大虾帮帮小弟会诊一下,看看我的程序到底病在哪里?
各位大哥请帮帮我啊,小弟第一次写出的完整程序,有很多地方都用很多毛病,还请各位大哥耐心看完,多给建议和批评,小弟在着多谢各位高人指点了.
ORG 0000H
LJMP MAIN
ORG 1000H
ORG 000BH
LJMP LOOP
ORG 001BH
LJMP LOOP1
ORG 1000H
MAIN:MOV TMOD,#11H 设定定时器的工作状态
MOV A,#00H
MOV P1,A
MOV P2,A
XS1:MOV A,#36H P1,P2进入第一个显示状态
MOV P1,A
MOV A,#1BH
MOV P2,A
LCALL time1 调用子程序TIME1,定时30S
ZHUAND1:MOV A,#2DH P1,进入显示状态2
MOV P1,A
LCALL time2 调用子程序TIME2
XS2:MOV A,#1BH P1,P2进入第二显示状态
MOV P1,A
MOV A,#36H
MOV P2,A
LCALL TIME1 调用子程序TIME1
ZHUAND2:MOV A,#2DH
MOV P2,A
LCALL TIME2
AJMP XS1 循环P1,P2第一显示状态
TIME1:SETB EA 子程序开中断
SETB ET0
SETB ET1
MOV 60H,#0D0H 装定时中断循环的次数
CZ:MOV TL0,#0DCH 给定时器装初值
MOV TH0,#0BH
setb tr0 开定时器
LOOP:MOV A,60H 定时器循环
DEC A
MOV 60H,A
JNZ CZ
RET
TIME2:SETB EA
SETB ET0
SETB ET1
MOV 50H,#18H
CZ1:MOV TL1,#0DCH
MOV TH1,#0BH
SETB TR1
LOOP1:MOV A,50H
DEC A
MOV 50H,A
JNZ CZ1
RET
end