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 20:47
Read: times


 
#149093 - Check my External Interrupt code
Hi!

I am currently working on a project where I have to interface 10 ADC0804 analog to digital converters to an AT89C51AC2 microcontroller. The ADCS are digitizing an analog signal provided from 5 ADXL202 accelerometers. The Adc0804 are Tristate devices and are activated with a low signal on their CS pin. For know I have built a circuit comprising a single adxl202 accelerometer where its X axis analog out is feeded to an adc804 which in turn is interfaced to the 8051 micro.The micro is then interface to PC through serial port.

The program I have coded is supposed to send the following through serial:

N0!N1$N2&N3*N4(N5@N6#N7&N8!N9&N0!N1~.....etc etc

Note that !$&* i.e. the symbol after say N0, is the ascii equivalent character sample sent from accelerometer number 0 and so on and so forth.

Please could you tell me what I am doin g wrong? The circuit is properly built as I have coded a previous version of the program withought using interrupts and setting up the adc to continously convert the digital data from the accelerometer into a digital value, altough some samples where being lost (hence the use of the interrupts).

Thanks in advance for any help.

Kai Busuttil
Industrial Electronics Student



;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			      
	LCALL TX_BYTE
	POP ACC				      
	RR A					      	
	INC R0					      
	CJNE R0,#9,N0N7			      
	LCALL N8N9
	LJMP N0N7
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)			      	
    	SJMP $ 		        	 		

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



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