??? 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 |