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

Back to Subject List

Old thread has been locked -- no new posts accepted in this thread
???
03/21/09 01:43
Read: times


 
#163723 - IAP on NXP P89V51RC2
Hi,

I am working on an IAP (In Application Programming) project right now. I got the source code of IAP online and tried to integrated into my test program. I did check the content of the code and believed that it really followed the requirement of spec. The expected result is that it will print out the welcome message and print out the manufacture ID of the chip. (In this case, Philips is 15) However, it just kept printing out welcome message again and again. It seems that it won't execute the IAP code properly but reenter the main function when we called the IAP routine. Is there anyone who can give me some suggestion? Thanks.
IAP Code

  
PGM_MTP	EQU	01FF0H
FCF	DATA	0B1H       
RSEG  ?PR?iap_read_manufacturer_id?RX2IAPLIB
iap_read_manufacturer_id:
        PUSH    IE                       ; disable interrupts
        CLR     EA  
        MOV     A,CMOD
        MOV     R2,A                     ; store copy of CMOD
        JNB     ACC.6,?IAPTAG2           ; if watchdog enabled then disable
        ANL     CMOD,#0BFH
?IAPTAG2:
	ANL	FCF,#0FCH		 ; enable bootrom
        MOV     R1,#00H
        MOV     DPH,#00H
	MOV	DPL,#00H
        CALL    PGM_MTP                  ; call iap routine
        MOV     R7,A                     ; id in accumulator
	ORL	FCF,#01H		 ; disable bootrom
        MOV     CMOD,R2                  ; restore CMOD (restore watchdog state)
        POP     IE                       ; restore interrupts to initial state
        RET     

; end of iap_read_manufacturer_id
 


Main
sfr		WDTC 	= 0xC0;
#define KILL_WDT	WDTC = 0
#define DISABLE_ALL_INTERRUPT		EA = false;		///< Disable all interrupt.

void main( void )
{

	BYTE man_id;
	DISABLE_ALL_INTERRUPT //disable all interrupt
	KILL_WDT;		// Disable watchdog
	TI = false;		// Clear serial transmission interrupt
	RI = false;		// Clear serial receiving interrupt
    
        initSioPoll();  // initialize serial port
	printf("Welcome");
        man_id = iap_read_manufacturer_id(); //obtain the manufacture ID by calling IAP function
        printf("Manufacturer ID = %2.2bxHn",man_id);

        while(1);
}
 



List of 12 messages in thread
TopicAuthorDate
IAP on NXP P89V51RC2            01/01/70 00:00      
   Is the code located above 0x2000?            01/01/70 00:00      
      It didn't start from 0x2000h            01/01/70 00:00      
         This is the Linker's job            01/01/70 00:00      
            Linker works. But Erase and Program could work only half way            01/01/70 00:00      
               Boot loader            01/01/70 00:00      
               sawing the branch you are sitting on...            01/01/70 00:00      
                  Parts of a live application can be replaced with care            01/01/70 00:00      
                  Update Prgram using IAP            01/01/70 00:00      
                     Back to boot loader concept again            01/01/70 00:00      
                        About Locate Function in C code            01/01/70 00:00      
                           It worked finally            01/01/70 00:00      

Back to Subject List