Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

[SOLVED] Problem with Program Counter(PC) of 89c52

Status
Not open for further replies.

nikhildascl

Full Member level 3
Joined
Apr 15, 2012
Messages
150
Helped
15
Reputation
30
Reaction score
14
Trophy points
1,318
Location
Kerala, India
Activity points
2,115
I am doing a project containing LCD, EEPROM, KEYPAD with a 89C52 microcontroller. I am using keil to compile my assembly code. But, whileexecuting, the PC(Program Counter) is randomly jumping to some other location. Please help me. Thank you in advance.
 

Try to set various break pointers in go step by step..
Keil is very good tool!
 

But my program is not working. While debugging, i have seen that, suddenly PC jumping to some random location. And that location does not contain any operation. This is mt problem.
 

if possible write here your code......?!
What is with your stack pointer (SP)? Have you enough stack RAM?
 

This is my code... I am using 89c52. I don't know whether stack pointer is a problem or not. Please help me...

Code:
            ORG 0000H
			SCL EQU P3.7
			SDA EQU P3.6
			MOV SP,#70H

;--------------------------------------------------
;TO READ FROM EEPROM
;--------------------------------------------------		


		LCALL EEPROM_START			;SEND START BIT
		MOV A,#0A0H					;SEND EEPROM ADDRESS WITH WRITE INSTUCTION
		LCALL EEPROM_WRITE
		MOV A,#03H					;SEND WORD ADDRESS
		LCALL EEPROM_WRITE
		LCALL EEPROM_START			;SEND START BIT
		MOV A,#0A1H					;SEND EEPROM ADDRESS WITH READ INSTRUCTION
		LCALL EEPROM_WRITE
		MOV A,#00H					;TO READ WORD TO A
		LCALL EEPROM_READ
		LCALL EEPROM_STOP			;SEND STOP BIT
		MOV 42H,A
		

//_ _ _ _ _ _ _ _ _ _ _ _ _ _  _  _ _ _ _ _ _ _ _ _ _ _ _ _  _ _ _ _ _ _ _ _ _ _ _ _ __ _ _ _ _ _  _ _ _  _
                            
                              //SET UP MICROCONTROLLER FOR SERIAL COMMUNICATION//

         	MOV TMOD,#20H                            ;TIMER1 ,MODE2 (AUTORELOAD)
         	MOV TH1,#0FDH                                 ;BAUD RATE OF MICROCONTROLLER = 9600 bps
         	MOV SCON,#50H                             ;8 BIT, 1 STOP BIT, REN ENABLED
         	SETB TR1                                          ;START TIMER1
//_ _ _ _ _ _ _ _ _ _ _ _ _ _  _  _ _ _ _ _ _ _ _ _ _ _ _ _  _ _ _ _ _ _ _ _ _ _ _ _ __ _ _ _ _ _  _ _ _  _
                                                     
                                                           //LCD INITIALLISATION//

         	MOV A,#38H				; 2 LINES AND 5x7 MATRIX
         	LCALL COMNWRT
        	LCALL DELAY
        	MOV A,#0FH				; DISPLAY ON,CURSOR BLINKING
        	LCALL COMNWRT
        	LCALL DELAY
        	MOV A,#01H				; CLEAR DISPLAY SCREEN
        	LCALL COMNWRT
        	LCALL DELAY
        	MOV A,#06H               ; SHIFT CURSOR TO RIGHT
        	LCALL COMNWRT
        	LCALL DELAY
        	MOV A,#84H				; FORCE CURSOR TO 4th POSITION OF 1ST LINE
        	LCALL COMNWRT
       	    LCALL DELAY
//_ _ _ _ _ _ _ _ _ _ _ _ _ _  _  _ _ _ _ _ _ _ _ _ _ _ _ _  _ _ _ _ _ _ _ _ _ _ _ _ __ _ _ _ _ _  _ _ _  _ _ _ 
                                                    
                                       //DISPLAY WELCOME ON THE LCD//
	
	LCALL DELAY
	MOV DPTR,#MYDATA 
	LCALL M22
	LCALL DELAY
	LCALL CLRLCD
  
//_ _ _ _ _ _ _ _ _ _ _ _ _ _  _  _ _ _ _ _ _ _ _ _ _ _ _ _  _ _ _ _ _ _ _ _ _ _ _ _ __ _ _ _ _ _  _ _ _  _ _ _   
                         
                                   //SET THE BAUD RATE OF GSM MODEM AS 9600 bps //

  	MOV DPTR,#MYDATA1
	LCALL SEND
	LCALL RECV
	LCALL DELAY
	LCALL DELAY
	
//_ _ _ _ _ _ _ _ _ _ _ _ _ _  _  _ _ _ _ _ _ _ _ _ _ _ _ _  _ _ _ _ _ _ _ _ _ _ _ _ __ _ _ _ _ _  _ _ _  _ _ _ 
                 
                        //GIVES ADDITIONAL INFORMATION ON TEXT MODE//                  
                                          
	MOV DPTR,#MYDATA2
	LCALL SEND
	LCALL RECV
	LCALL DELAY
	LCALL DELAY
//_ _ _ _ _ _ _ _ _ _ _ _ _ _  _  _ _ _ _ _ _ _ _ _ _ _ _ _  _ _ _ _ _ _ _ _ _ _ _ _ __ _ _ _ _ _  _ _ _  _ 

                                      //SELECT THE MESSAGE FORMAT AS TEXT MODE//
	
	MOV DPTR,#MYDATA3
	LCALL SEND
	LCALL RECV
	LCALL DELAY
	LCALL DELAY
//_ _ _ _ _ _ _ _ _ _ _ _ _ _  _  _ _ _ _ _ _ _ _ _ _ _ _ _  _ _ _ _ _ _ _ _ _ _ _ _ __ _ _ _ _ _  _ _ _  _ _ _ 
                          
                                    //SELECTS THE PROCEDURE FOR MESSAGE RECEPTION//                  

	MOV DPTR,#MYDATA4
	LCALL SEND
	LCALL RECV
	LCALL DELAY
	LCALL DELAY
	LCALL CLRLCD
//_ _ _ _ _ _ _ _ _ _ _ _ _ _  _  _ _ _ _ _ _ _ _ _ _ _ _ _  _ _ _ _ _ _ _ _ _ _ _ _ __ _ _ _ _ _  _ _ _  _ _ _

                                                    
                                       //DISPLAY WELCOME ON THE LCD//
	SETB P0.7
	MOV DPTR,#INIT 
	LCALL M22
	LCALL DELAY
	LCALL DELAY
	LCALL DELAY
	LCALL DELAY
	LCALL DELAY
	LCALL DELAY
	LCALL DELAY
	LCALL CLRLCD
	CLR P0.7

//_ _ _ _ _ _ _ _ _ _ _ _ _ _  _  _ _ _ _ _ _ _ _ _ _ _ _ _  _ _ _ _ _ _ _ _ _ _ _ _ __ _ _ _ _ _  _ _ _  _ _ _ 
                                                    
									   //SELECT MODE OF OPERATION

	MOV DPTR,#SELMODE
	LCALL M22
	LCALL DELAY
	LCALL CLRLCD
//_ _ _ _ _ _ _ _ _ _ _ _ _ _  _  _ _ _ _ _ _ _ _ _ _ _ _ _  _ _ _ _ _ _ _ _ _ _ _ _ __ _ _ _ _ _  _ _ _  _ _ _ 
													// MODES
REIN:
	
	MOV DPTR,#MODE1
	LCALL M22
	LCALL DELAY
	MOV A,#0C0H
	LCALL COMNWRT
	LCALL DELAY
	MOV DPTR,#MODE2
	LCALL M22
	LCALL DELAY
	LCALL KEY
	LCALL DELAY
	CJNE A,#'1',SNDDATA						//'1' FOR SEND SMS
	LCALL CLRLCD
	LCALL DELAY
	SJMP LLRD
SNDDATA: 								   //'2' FOR MODIFY DATA
	CJNE A,#'2',INLD
	LCALL CLRLCD
	LCALL DELAY
	LCALL ENTDATA
INLD:
	LCALL CLRLCD						 // IF NOT 1 N 2, THEN DISPLAY INVALID AND DISPLAY MENU AGAIN
	LCALL DELAY
	MOV DPTR,#INVALID
	LCALL M22
	LCALL DELAY
	LCALL CLRLCD
	LJMP REIN
//_ _ _ _ _ _ _ _ _ _ _ _ _ _  _  _ _ _ _ _ _ _ _ _ _ _ _ _  _ _ _ _ _ _ _ _ _ _ _ _ __ _ _ _ _ _  _ _ _  _ _ _
                                    //DISPLAY READY ON THE LCD//

LLRD:LCALL CLRLCD
	LCALL DELAY	
	MOV DPTR,#READY 
M11:	CLR A
	MOVC A,@A+DPTR
	JZ NEXT1				//JZ =jump if Accumulator is zero
	LCALL DATAWRT
 	LCALL DELAY
	INC DPTR
	SJMP M11
NEXT1:	LCALL DELAY
	LCALL DELAY
	LCALL DELAY
	

//_ _ _ _ _ _ _ _ _ _ _ _ _ _  _  _ _ _ _ _ _ _ _ _ _ _ _ _  _ _ _ _ _ _ _ _ _ _ _ _ __ _ _ _ _ _  _ _ _  _ _ _ 	
   
ST:	MOV R1,#30H                                ;STORE THE MESSAGE IN RAM FROM 30H	
MSG:JNB RI,MSG
	SETB P3.5
 	MOV A,SBUF
	CLR RI
	CJNE A,#23H,MSG                     ;CHECKS FOR THE SECURITY CODE  ‘#’
GO:	JNB RI,GO                                      ;MSG RECEPTION TAKES PLACE IF SECURITY CODE .                                                                
	CLR A
	MOV A,SBUF
	MOV @R1,A                               ;EACH CHARACTER IS STORED FROM 30H
	INC R1 
	CLR RI
	CJNE A,#23H,GO 
    CLR P3.5               
//_ _ _ _ _ _ _ _ _ _ _ _ _ _  _  _ _ _ _ _ _ _ _ _ _ _ _ _  _ _ _ _ _ _ _ _ _ _ _ _ __ _ _ _ _ _  _ _ _  _ _ _ 
                                    
                                       //SEND MESSAGE //
	  
D0:	LCALL CLRLCD
	// ROUTINE TO IDENTIFY ROLL NO. AND REPLY
	MOV A,30H
	CJNE A,#51,INV			//LOOK FOR 3x   
		MOV A,31H				//IF A=3 THEN LOOK FOR x 
		CJNE A,#48,INV			//LOOK FOR 30
			MOV DPTR,#THIRTY
			LCALL SEND
			LCALL DELAY
			MOV DPTR,#THIRTYN
			LCALL SEND
			LCALL DELAY
			MOV DPTR,#PMARK
			LCALL SEND
			LCALL DELAY
			MOV R1,#40H
			LCALL SEND2
			LCALL DELAY
			MOV DPTR,#PATT
			LCALL SEND
	    	LCALL DELAY
			MOV R1,#42H
			LCALL SEND2
			LCALL DELAY
			MOV DPTR,#MSGEND
			LCALL SEND
			LCALL DELAY
			LCALL DELAY
			LJMP LLRD
		
INV:	MOV DPTR,#INVRQST
		LCALL M22
		LCALL DELAY
		LCALL CLRLCD
		LJMP LLRD		
AGAIN:  SJMP AGAIN


//_ _ _ _ _ _ _ _ _ _ _ _ _ _  _  _ _ _ _ _ _ _ _ _ _ _ _ _  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _  _ _ _  _ _ _ _ _  


M22:CLR A
	MOVC A,@A+DPTR
	JZ NEXT22				//JZ =jump if Accumulator is zero
	LCALL DATAWRT
 	LCALL DELAY
	INC DPTR
	SJMP M22
NEXT22:	LCALL DELAY
	LCALL DELAY
	RET

 //_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
 
                                                     //SEND THE AT COMMANDS//

SEND: CLR A
	  MOVC A,@A+DPTR
	  JZ B1
	  MOV SBUF,A
H1:	  JNB TI,H1
	  CLR TI
	  INC DPTR
	  SJMP SEND
B1:	  RET

//_ _ _ _ _ _ _ _ _ _ _ _ _ _  _  _ _ _ _ _ _ _ _ _ _ _ _ _  _ _ _ _ _ _ _ _ _ _ _ _ __ _ _ _ _ _  _ _ _  _ _ _

								;RECEIVE FROM GSM

RECV: JNB RI,RECV
      SETB P0.7
	  MOV A,SBUF 
	  CLR RI
	  LCALL DELAY
	  CLR P0.7
RE2:  JNB RI,RE2
	  SETB P0.7
	  MOV A,SBUF
	  CLR RI
 	  LCALL DELAY
	  CLR P0.7
	  RET


//_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

												//SEND2
SEND2: CLR A
	  MOV A,@R1
	  JZ B2
	  MOV SBUF,A
H2:	  JNB TI,H2
	  CLR TI
	  INC R1
	  MOV A,@R1
	  JZ B2
	  MOV SBUF,A
B2:	  RET
//_ _ _ _ _ _ _ _ _ _ _ _ _ _  _  _ _ _ _ _ _ _ _ _ _ _ _ _  _ _ _ _ _ _ _ _ _ _ _ _ __ _ _ _ _ _  _ _ _  _ _ _ 
                                        
                                                             //CLEAR THE LCD//

CLRLCD:  	MOV A,#01H
        	LCALL COMNWRT
        	LCALL DELAY
	   		MOV A,#80H
       		LCALL COMNWRT
        	LCALL DELAY
			RET
//_ _ _ _ _ _ _ _ _ _ _ _ _ _  _  _ _ _ _ _ _ _ _ _ _ _ _ _  _ _ _ _ _ _ _ _ _ _ _ _ __ _ _ _ _ _  _ _ _  _ _ _ 
                                  
                                //WRITE COMMANDS TO LCD’S INTERNAL REGISTERS//

COMNWRT:	MOV P2,A
		    CLR P3.4
			CLR P3.3
       	    SETB P3.2
        	LCALL DELAY
        	CLR P3.2
        	RET
//_ _ _ _ _ _ _ _ _ _ _ _ _ _  _  _ _ _ _ _ _ _ _ _ _ _ _ _  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

                                            //WRITE DATA ON PORT1 TO THE LCD//

DATAWRT:	MOV P2,A					   //rs
        	SETB P3.4
        	CLR P3.3
         	SETB P3.2
        	LCALL DELAY
        	CLR P3.2
        	RET
//_ _ _ _ _ _ _ _ _ _ _ _ _ _  _  _ _ _ _ _ _ _ _ _ _ _ _ _  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _  _ _ _  _ _ _ 

                                                           //DECLARING DELAY//

DELAY:  	 MOV R3,#255
HERE2:  	 MOV R4,#255
HERE:    	 DJNZ R4,HERE
        	 DJNZ R3,HERE2
        	 RET

//__________________________________________________________________________

EEPROM_START:
		SETB SDA
		SETB SCL
		NOP
		NOP
		NOP
		CLR SDA
		CLR SCL
		RET
//_ _ _ _ _ _ _ _ _ _ _ _ _ _  _  _ _ _ _ _ _ _ _ _ _ _ _ _  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _  _ _ _  _ _ _ _ _  
										;EEPROM FUNCTIONS

EEPROM_WRITE:
		CLR C
		MOV R0,#08
REPEAT:	RLC A
		MOV SDA,C
		SETB SCL
		NOP
		NOP
		NOP
		CLR SCL
		DJNZ R0,REPEAT
		SETB SDA
	
HEREI:	JB SDA,HEREI
		SETB SCL
		NOP
		NOP
		NOP
		CLR SCL
		RET	
//_ _ _ _ _ _ _ _ _ _ _ _ _ _  _  _ _ _ _ _ _ _ _ _ _ _ _ _  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _  _ _ _  _ _ _ _ _  

EEPROM_READ:
		CLR C
		MOV R0,#08
		SETB SDA
REPEAT1:MOV C,SDA				
		RLC A
		SETB SCL
		NOP
		NOP
		CLR SCL
		DJNZ R0,REPEAT1
		SETB SCL
		NOP
		NOP
		CLR SCL
		RET
//_ _ _ _ _ _ _ _ _ _ _ _ _ _  _  _ _ _ _ _ _ _ _ _ _ _ _ _  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _  _ _ _  _ _ _ _ _  
EEPROM_STOP:
		CLR SDA
		SETB SCL
		NOP
		NOP
		NOP
		SETB SDA
		CLR SCL
		RET
//_ _ _ _ _ _ _ _ _ _ _ _ _ _  _  _ _ _ _ _ _ _ _ _ _ _ _ _  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _  _ _ _  _ _ _ _ _  

										//ROUTINE TO ENTER DATA

ENTDATA:
	MOV R1,#60H
	MOV DPTR,#ENT_RN
	LCALL M22
	LCALL DELAY
	LCALL KEY
	LCALL DATAWRT		//DISP 1ST NO
	ANL A,#0FH			 //AND
	SWAP A				 //SWAP
	MOV @R1,A			 //MOV x0 INTO 60H
	CLR A
	INC R1				 //61H
	LCALL KEY			 //DISP 2ND NO
	LCALL DATAWRT
	ANL A,#0FH
	MOV R1,60H
	ORL A,R1
			CJNE A,#30H,RNN1		  //FOR ROLL NO 30
				LCALL CLRLCD
				MOV DPTR,#ENT_PM
				LCALL M22
				LCALL DELAY
				MOV R1,#40H
				LCALL IN
				LCALL CLRLCD
				MOV DPTR,#ENT_PA
				LCALL M22
				LCALL DELAY
				MOV R1,#42H
				LCALL IN
				LCALL CLRLCD
				LCALL DELAY
				LJMP LLRD


RNN1:
	LCALL CLRLCD
	MOV DPTR,#INVALID
	LCALL M22 
	LCALL CLRLCD
	LCALL DELAY
	LJMP LLRD
//_ _ _ _ _ _ _ _ _ _ _ _ _ _  _  _ _ _ _ _ _ _ _ _ _ _ _ _  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _  _ _ _  _ _ _ _ _
					   //INPUT DATA

IN:				LCALL KEY
				LCALL DATAWRT
				MOV @R1,A				 //MOV % MARK1 TO 40
				INC R1
				LCALL KEY
				LCALL DATAWRT
				MOV @R1,A				 //MOV %MARK2 TO 41
				LCALL DELAY
				RET


//_ _ _ _ _ _ _ _ _ _ _ _ _ _  _  _ _ _ _ _ _ _ _ _ _ _ _ _  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _  _ _ _  _ _ _ _ _  
					//KEYPAD

KEY: 
K1:
	
	MOV P1,#11110000B  		; P1.7:P1.5 I/P AND P1.4:P1.1 O/P(GND)

	MOV A,P1
	ANL A,#11110000B		 ;COMPARE ONLY UPPER THREE BITS
	CJNE A,#11110000B,K1	 ;CHECK TILL ALL KEYS RELEASED
KEY_PRESS:
	LCALL DELAY		     ;20msec delay
	MOV A,P1
	ANL A,#11110000B
	CJNE A,#11110000B,K_OVER  ;	CHECK TILL KEY PRESS
	SJMP KEY_PRESS
K_OVER:
	LCALL DELAY			  ;DEBOUNCE TIME
	MOV A,P1
	ANL A,#11110000B
	CJNE A,#11110000B,K_SERCH	  ;KEY PRESSED, FIND ROW ;
	SJMP KEY_PRESS
K_SERCH:
	MOV P1,#11111110B			   ;GROUND 1ST ROW
	MOV A,P1					   ;READ ALL COLUMNS
	ANL A,#11110000B			   ;COMPARE ONLY UPPER THREE BITS
	CJNE A,#11110000B,ROW_1		   ;KEY ROW 0, FIND THE COL.
	
	MOV P1,#11111101B				;GROUND 2ND ROW
	MOV A,P1
	ANL A,#11110000B
	CJNE A,#11110000B,ROW_2			;KEY ROW 0, FIND THE COL.

	MOV P1,#11111011B				;GROUND 3RD ROW
	MOV A,P1
	ANL A,#11110000B
	CJNE A,#11110000B,ROW_3			;KEY ROW 0, FIND THE COL.

	MOV P1,#11110111B				;GROUND 4TH ROW
	MOV A,P1
	ANL A,#11110000B
	CJNE A,#1111000B,ROW_4		   ;KEY ROW 0, FIND THE COL.
	LJMP KEY_PRESS

ROW_1:								;1,2,3
	MOV DPTR,#KCODE0			   
	SJMP FIND					  	;FIND COL. KEY BELONGS TO
ROW_2:								;4,5,6
	MOV DPTR,#KCODE1			   
	SJMP FIND					    ;FIND COL. KEY BELONGS TO
ROW_3:								;7,8,9
	MOV DPTR,#KCODE2				
	SJMP FIND						;FIND COL. KEY BELONGS TO
ROW_4:
	MOV DPTR,#KCODE3				;0
FIND:
	RLC A
	JNC MATCH
	INC DPTR
	SJMP FIND						 ;KEEP SEARCHING
MATCH:
	CLR A
	MOVC A,@A+DPTR
	CJNE A,#'#',RE1
	SJMP KEY
RE1: CJNE A,#'*',RET1
	SJMP KEY
RET1: 
	RET

//_ _ _ _ _ _ _ _ _ _ _ _ _ _  _  _ _ _ _ _ _ _ _ _ _ _ _ _  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _  _ _ _  _ _ _ _ _
ORG 300H
MYDATA: 	 DB "WELCOME",0
MYDATA1:	 DB "AT+IPR=9600",0AH,0DH,0
MYDATA2:	 DB "AT+CSDH=1",0AH,0DH,0
MYDATA3:	 DB "AT+CMGF=1",0AH,0DH,0
MYDATA4:	 DB "AT+CNMI=2,2,0,0,0",0AH,0DH,0
INIT:		 DB "INITIALIZING",0
READY:		 DB "READY",0
//30
THIRTY:		 DB "AT+CMGS=",22H,"9048585579",22H,0AH,0DH,0
THIRTYN:	 DB "NAME30",0AH,0
//31
THIRTY1:	 DB "AT+CMGS=",22H,"9048585579",22H,0AH,0DH,0
THIRTY1N:	 DB "NAME31",0AH,0
//INVALID REQUEST
INVRQST:	 DB "INVALID REQUEST",0
//____________________________________________________
PMARK:		 DB 0AH,"AGGR. % OF MARKS = ",0
PATT:		 DB 0AH,0AH,"% OF ATTNDNCE = ",0
SELMODE:	 DB "SELECT MODE",0
MODE1:		 DB "1.SEND SMS",0
MODE2:		 DB "2.MODIFY DATA",0
INVALID:	 DB "INVALID SELECTION",0
//__________________________________________________________

				//DATA SECTION
ENT_RN:		 DB	"Roll No:",0
ENT_PM:	 	 DB "%MARKS=",0
ENT_PA:		 DB "%ATTNDNCE=",0

//___________________________________________
//RIT KTM CTRLZ
MSGEND:	DB 0AH,0AH,"RIT KTM",0x1A,0
KCODE0: DB 'A','3','2','1'
KCODE1:	DB 'B','6','5','4'
KCODE2: DB 'C','9','8','7'
KCODE3: DB 'D','#','0','*'

END
 

Hi
it's difficult to solve problem without real board/system ... but:
what system stuc at position:
;RECEIVE FROM GSM
RECV: JNB RI,RECV

if nothing received from gsm!!
right?

Please go step by step and make breakepoints .... and you will see quick where your code stuck!
 

Sir, the problem is at somewhere in the middle portion. While debugging, below the REINN: label, there is an LCALL KEY. Then it starts executing KEY routine. Under key routine, when it reaches KEY_PRESS label, it jumps to the NOP operation under the EEPROM_READ. This is the actual problem sir.
 

Seemingly "random" jumps for no apparant reason are usually due to :-
1) bad stack handling
2) an interrupt without a corresponding ISR
3) something wrong with the code setup.

Since you must have checked out your stack by now, do also ensure that your constants declarations (located at 300H) are not overlapping your code !! In general I suggest you let the assembler decide where to put the db data. Try just removing the ORG 300H and see what happens.
 
Cool... Now the problem is solved. Can you please explain the reason for that??? Thank you..
 

Oh good ! :-D
Reason is simple - you were locating your data at 768'th byte onwards, whereas your code obviously extends beyong 768 (300H). So your db declaration was overwriting your code, and the uC was executing db data as if it was code - which gave you strange results.

Your assembler SHOULD have issued a warning about this !? Did it not do so ?
 

Yes. There was an error while debugging. I am using keil uVision 3. But, i got the compiled hex file even in the presence of this error. And while simulation, randomly going to some other part. Now the problem is solved. Thanks a lot Sir.
 

Status
Not open for further replies.

Similar threads

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top