joajas
Junior Member level 1
When I run the code on the actual hardware. The controller interrupt always trigger twice when I press the interrupt trigger button once, or when I do a hardware reset. Below is the code. Please advice how I can overcome this problem, thanks.
I am using a Atmel 89S51 controller with some leds and couple of push buttons.
#include <sfr51.inc>
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN: SETB EA ;ENABLE EXTERNAL INTERRUPT 0 AND INTERRUPT 1
SETB EX1
SETB IT0 ;SET TO EDGE TRIGGERED (NEGATIVE EDGE)
SETB IT1 ;SET TO EDGE TRIGGERED (NEGATIVE EDGE)
HERE: LJMP HERE
EX0_ISR: MOV P2,#FFH
LCALL DELAY
CLR P2.2
LCALL DELAY
CLR P2.3
LCALL DELAY
CLR P2.4
LCALL DELAY
RET
DELAY: MOV TMOD,#10H
MOV R0,#1EH
NEXT: MOV TH1,#B1H
MOV TL1,#E0H
SETB TR1
WAIT1: JNB TF1, WAIT1
CLR TR1
CLR TF1
DJNZ R0, NEXT
RET
ORG 0013H
LCALL EX0_ISR
RETI
END
I am using a Atmel 89S51 controller with some leds and couple of push buttons.
#include <sfr51.inc>
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN: SETB EA ;ENABLE EXTERNAL INTERRUPT 0 AND INTERRUPT 1
SETB EX1
SETB IT0 ;SET TO EDGE TRIGGERED (NEGATIVE EDGE)
SETB IT1 ;SET TO EDGE TRIGGERED (NEGATIVE EDGE)
HERE: LJMP HERE
EX0_ISR: MOV P2,#FFH
LCALL DELAY
CLR P2.2
LCALL DELAY
CLR P2.3
LCALL DELAY
CLR P2.4
LCALL DELAY
RET
DELAY: MOV TMOD,#10H
MOV R0,#1EH
NEXT: MOV TH1,#B1H
MOV TL1,#E0H
SETB TR1
WAIT1: JNB TF1, WAIT1
CLR TR1
CLR TF1
DJNZ R0, NEXT
RET
ORG 0013H
LCALL EX0_ISR
RETI
END