这个单片机程序那里错了啊

来源:百度知道 编辑:UC知道 时间:2024/05/28 14:26:26
ORG 000H
LJMP START
ORG 003H
LJMP IN
START: MOV A,#0FFH
MOV P0,A
MOV P2,A
MOV A,#000H
MOV P0,A
MOV P2,A
CLR IT0
SETB EX0
SETB EA
AJMP $
IN: CLR EA
MOV A,P0
MOV B,P2
CJNE A,#0FFH,BEEP
CJNE B,#0FFH,BEEP
SETB P3.6
MOV A,#0FFH
MOV P0,A
MOV P2,A
MOV A,#000H
MOV P0,A
MOV P2,A
RETI
BEEP: SETB P3.7
AJMP $
end

无法编译!高手们能不能优化下程序。如果能优化且能编译我多多送分啊!
pyp187157331 改了还是不行啊!

ORG 000H
LJMP START
ORG 003H
LJMP IN
START: MOV A,#0FFH
MOV P0,A
MOV P2,A
MOV A,#000H
MOV P0,A
MOV P2,A
CLR IT0
SETB EX0
SETB EA
AJMP $
IN: CLR EA ;这条指令没有用,在中断中,EA已经清零
MOV A,P0
MOV B,P2
CJNE A,#0FFH,BEEP
CJNE B,#0FFH,BEEP ;这里没有这条指令
SETB P3.6
MOV A,#0FFH ;P0和P2送0FF后马上又送零有什么意义?中间只隔了几个uS,写入到芯片后根本看不出来
MOV P0,A
MOV P2,A
MOV A,#000H
MOV P0,A
MOV P2,A
RETI
BEEP: SETB P3.7
AJMP $
end
;你这个程序的意思不是很清楚
;当外部中断0发生时检查P0及P2口的值
;若P0/P2不等于0FFFFH时,P3.7置高,程序停止?
;否则P3.6置高,P0/P2发一个高脉冲,继续等待,下一个外部中断发生.

;你这个程序的问题在于,检查P0/P2的值时居然把P0/P2置为零,这样的话
;你读出来的值永远是零!!!

第一行 ORG 0000H
第三行 ORG 0003H
第八行 MOV A,#00H
倒数第七行 MOV A,#00H

IN: CLR EA
MOV A,P0