Email: Password: Remember Me | Create Account (Free)

Back to Subject List

Old thread has been locked -- no new posts accepted in this thread
???
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

List of 8 messages in thread
TopicAuthorDate
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      

Back to Subject List