| ??? 01/06/08 22:50 Read: times |
#149094 - new question about external interrupt code Responding to: ???'s previous message |
uh, I realized that when the external interrupt flag is set and it is automatically cleared AND then Program counter goes to org 0003h to execute the code, the program counter MUST go through the RETI instruction or else the interrupt is executed only once!!! ahhh, the 8051 tutorial on this site is awesome...
SEEMS LIKE THE PROBLEM HAS BEEN SOLVED...HOPEFULLY I AM RECEIVING SOMETHING LIKE THIS FROM HYPER TERMINAL: N0%N1 N2 N33N4 N88N9 note that the adc and the 8051 are like not 'synched'. hmmm....i mean i need to receive N0%N1N2N3N4N5 (since i have only the N0 adc connected). Why is this happening? Note the uneven spacing between each Nx....and the extra 8 after N8...strange....anybody knows why????? This is my new code ;PROGRAM MODIFIED TO USE EXTERNAL INTERRUPT INT0
;NOTE: MAKE SURE TO MODIFY BREADBOARD WIRING!!<-OK
ORG 0000H
LJMP MAIN ;DO JUMP TO AVOID GETTING A 'RET ASSEMBLY ERROR' ON PROGRAM STARTUP
ORG 0003H ;STANDARD EXTERNAL INTERRUPT INT0 ENTRY POINT
EXTINT0:
MOV A,P0
SETB P3.7 ;HIGH TO LOW TRANSITION TO CLR INTERRUPT LINE AND ENABLE OUTPUT LATCHES
CLR P3.7 ;NOTE: P3.7 = RD PIN ON 8051
MOV R5,#0FFH
RETI
ORG 0030H ;STANDARD MAIN PROGRAM ENTRY POINT (WHEN USING INTERRUPTS)
MAIN:
MOV SP,#256-32
MOV SCON,#01010000B
MOV TMOD,#00100101B ;T1=MODE 2(8-BIT AUTO RELOAD MODE),TIMER
MOV PCON,#10000000B ;TURN SMOD HIGH (DOUBLE BAUD)
MOV TH1,#0FH ;TH1 = 256 - ((Crystal / 192) / Baud) WHEN SMOD HIGH
MOV TL1,#0BH ;TH1 = 256 - ((18.432E6 / 192) / 19200 ) = 251
;THEREFORE AT TH1=256 BAUD RATE = 19200
MOV IE,#01H ;ENABLE EXTERNAL TIMER ZERO INTERRUPT (INT0)
SETB EA ;ENABLE GLOBAL INTERRUPT BIT IN IE REGISTER (OR SFR)
SETB IT0 ;SET IT0 IN TCON SFR TO MAKE INT0 -VE EDGE TRIGGERED <BE SURE>
MOV A,#01111111B ;ENABLE N7 ADC
MOV P2,#11111111B
MOV R0,#1
N0N7:
;FIRST 8 ADCS (N0 TO N7)
PUSH ACC
MOV P1,A
JNB P1.0,HERE
JNB P1.1,HERE2
JNB P1.2,N5
JNB P1.3,N4
JNB P1.4,N3
JNB P1.5,N2
JNB P1.6,N1
JNB P1.7,N0
CONT: SETB P3.6 ;HIGH TO LOW PULSE TO ADC0804 WR PIN
CLR P3.6
NOP
NOP
SETB P3.6 ;LOW TO HIGH PULSE TO ADC0804 WR PIN (START CONVERSION)
HERE5: CJNE R5,#0FFH,HERE5
MOV R5,#00H
LCALL TX_BYTE
POP ACC
RR A
INC R0
CJNE R0,#9,N0N7
LCALL N8N9
LJMP N0N7
HERE:
LJMP N7
HERE2:
LJMP N6
N0:
MOV A,#'N'
CALL TX_BYTE
MOV A,#'0'
CALL TX_BYTE
LJMP CONT
N1:
MOV A,#'N'
CALL TX_BYTE
MOV A,#'1'
CALL TX_BYTE
LJMP CONT
N2:
MOV A,#'N'
CALL TX_BYTE
MOV A,#'2'
CALL TX_BYTE
LJMP CONT
N3:
MOV A,#'N'
CALL TX_BYTE
MOV A,#'3'
CALL TX_BYTE
LJMP CONT
N4:
MOV A,#'N'
CALL TX_BYTE
MOV A,#'4'
CALL TX_BYTE
LJMP CONT
N5:
MOV A,#'N'
CALL TX_BYTE
MOV A,#'5'
CALL TX_BYTE
LJMP CONT
N6:
MOV A,#'N'
CALL TX_BYTE
MOV A,#'6'
CALL TX_BYTE
LJMP CONT
N7:
MOV A,#'N'
CALL TX_BYTE
MOV A,#'7'
CALL TX_BYTE
LJMP CONT
N8:
MOV A,#'N'
CALL TX_BYTE
MOV A,#'8'
CALL TX_BYTE
RET
N9:
MOV A,#'N'
CALL TX_BYTE
MOV A,#'9'
CALL TX_BYTE
RET
N8N9: ;LAST 2 ADCS (N8 AND N9
MOV P1,#11111111B
MOV P2,#01111111B
LCALL N8
MOV A,P0
CALL TX_BYTE
MOV P2,#10111111B
LCALL N9
MOV A,P0
MOV A,#01111111B
MOV P2,#11111111B
MOV R0,#1
RET
TX_BYTE:
PUSH IE
CLR TI
MOV SBUF,A
JNB TI,$
CLR TI
POP IE
RET
END
Thanks in advance for any help! Kai Busuttil |
| Topic | Author | Date |
| Check my External Interrupt code | 01/01/70 00:00 | |
| new question about external interrupt code | 01/01/70 00:00 | |
| Scarry Type ISR Programming | 01/01/70 00:00 | |
| Problem solved...almost... | 01/01/70 00:00 | |
| Bogus Interrupt Usage | 01/01/70 00:00 | |
| An alternative to your solution? | 01/01/70 00:00 | |
set a trap and walk right into it | 01/01/70 00:00 | |
| A comment on comments | 01/01/70 00:00 |



