Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Bootloader for 18f452 [solved]
#9
(2011-04-05, 22:15:36)Mikael Gustafsson Wrote: Unless you know exactly what you do and you have a good reason to, DON'T write configs.
Please try that first.

My friend, as you said, I did not write configs, but not again. my code is working but bootloader is canceled

Can I make a request from you?
There is a Bootloader code and small code example below.

My Code:
Code:
//**************CCS V4.114*****************
#include <18F452.h>
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay(clock=10000000)
#use fast_io(a)
#use fast_io(d)
#include "2x16_4x20_LCD.c"
//=========================================================================================

void main()
{
   set_tris_a(0b00000111);
   set_tris_d(0b00000000);
   output_d(0x00);
   delay_ms(10);
   lcd_init();
  

    while(TRUE)
   {

    LCD_gotoxy(3,1);
    printf(lcd_putc,"ds30 Loadre");
    LCD_gotoxy(1,2);
    printf(lcd_putc,"Download Example");

  
   }
}

Bootloader:
Code:
;------------------------------------------------------------------------------
; Includes
;------------------------------------------------------------------------------
        #include "settings.inc"
        

;------------------------------------------------------------------------------
; UARTs
;------------------------------------------------------------------------------
        #ifndef USE_UART1
            #ifndef USE_UART2
                #ifndef USE_CAN
                    error "No communication is specified"
                #endif
            #endif
        #endif
        
        #ifdef USE_CAN
            #ifndef HAS_CAN
                error "CanBus specified for a device that only has uart"
            #endif
            #ifdef USE_UART1
                error "UART1 and Canbus specified"
            #endif
            #ifdef USE_UART2
                error "UART2 and Canbus specified"
            #endif
            #ifdef USE_TXENABLE
                error "TX enable is not available for CAN"
            #endif
        #endif
        

        #ifdef USE_UART1
            #ifdef USE_UART2
                error "Both uarts are specified"
            #endif
            #ifdef TXSTA
                   #define TXSTA_    TXSTA                    ;uart status
                   #define    RCSTA_    RCSTA                    ;uart status
                   #define    SPBRG_    SPBRG                    ;uart baudrate
                   #define    TXREG_    TXREG                    ;uart transmit
                   #define    RCREG_    RCREG                    ;uart receive
            else
                   #define    TXSTA_    TXSTA1                    ;uart status
                   #define    RCSTA_    RCSTA1                    ;uart status
                   #define    SPBRG_    SPBRG1                    ;uart baudrate
                   #define    TXREG_    TXREG1                    ;uart transmit
                   #define    RCREG_    RCREG1                    ;uart receive
            #endif
        #endif

        #ifdef USE_UART2
            #ifdef USE_UART1
                error "Both uarts are specified"
            #endif        
            #ifndef HAS_UART2
                error "UART2 specified for a device that only has uart1"
            #endif

               #define    TXSTA_        TXSTA2                    ;uart status
               #define    RCSTA_        RCSTA2                    ;uart status
               #define    SPBRG_        SPBRG2                    ;uart baudrate
               #define    TXREG_        TXREG2                    ;uart transmit
               #define    RCREG_        RCREG2                    ;uart receive
        #endif
        
        
;------------------------------------------------------------------------------
; Defines
;------------------------------------------------------------------------------
        #define    VERMAJ        2                                        ;firmware version major
        #define    VERMIN        0                                        ;firmware version minor
        #define    VERREV        3                                        ;firmware version revision
        
        #define HELLO         0xC1
        #define OK             'K'                                        ;erase/write ok
        #define CHECKSUMERR    'N'                                        ;checksum error
        #define    VERFAIL        'V'                                        ;verification failed
        #define    BLPROT        'P'                                      ;bl protection tripped
        #define    UCMD         'U'                                      ;unknown command

                
        #define    BL10MS        ( 10 * (OSCF / 4000) / (255 * 7) )        ;10ms delay
        #define    BLSTART        ( BLINIT / 10 )                            ;count for boot receive delay
        #define    BLDELAY        ( BLTIME / 10 )                            ;count for receive delay
        
        #define    UBRG        ( (((OSCF / BAUDRATE) / 8) - 1) / 2 )    ;baudrate
        
        #define    PAGESIZEW    32                                        ;pagesize [words]
        #define    PAGESIZER    (PAGESIZEW/ROWSIZEW)                    ;pagesize [rows]
        #define    ROWSIZEB    (ROWSIZEW*2)                            ;rowsize [bytes]
        #define STARTADDR    ( MAX_FLASH - BLPLP * PAGESIZER * ROWSIZEW * 2 )            ;bootloader placement
        
        ; Debug output
        ;messg    STARTADDR_IS #(STARTADDR)
        ;messg    UBRG_IS        #v(UBRG)
        ;messg    bldelayis     #v(BLDELAY)
        ;messg    blstartis     #v(BLSTART)

                
;------------------------------------------------------------------------------
; Range check
;------------------------------------------------------------------------------
        if UBRG > 255
            error spbrg_value_ is out of range
        #endif
        if UBRG == 0
            error spbrg_value_ might be out of range
        #endif
                        
        if BLSTART > 255
            error BLSTART_ is out of range
        #endif
        if BLSTART == 0
            error spbrg_value_ might be out of range
        #endif            
        
        if BLDELAY > 255
            error BLDELAY_ is out of range
        #endif            
        if BLDELAY == 0
            error BLDELAY_ might be out of range
        #endif
                
        
;------------------------------------------------------------------------------
; Variables
;------------------------------------------------------------------------------
        cblock 0
            crc            ;receive checksum
            dcnt        ;datacount
            cnt1        ;receive timeout timer
            cnt2        ;receive timeout timer
            cnt3        ;receive timeout timer
            cntHello    ;
            rowcnt        ;row iterator
            rowcnt2        ;
            cmd            ;command
            doerase        ;do erase before next write
            ttblptru
            ttblptrh
            ttblptrl
        ;endc
        ;cblock 10
            buffer:65    ;receive buffer
        endc
        
        
;------------------------------------------------------------------------------
; Send macro
;------------------------------------------------------------------------------     
SendL     macro     sbyte
            movlw     sbyte
            rcall    Send
        endm

    
;------------------------------------------------------------------------------
; Reset vector
;------------------------------------------------------------------------------
        org     0x0000
        goto    blstart


;------------------------------------------------------------------------------
; GOTO user application
;------------------------------------------------------------------------------     
        org     STARTADDR - 4    ;space to deposit goto to user application
loadusr    nop
        nop
    
    
;------------------------------------------------------------------------------
; Start of bootloader code
;------------------------------------------------------------------------------     
        org     STARTADDR
blstart        
        
        ;----------------------------------------------------------------------
        ; User init
        ;----------------------------------------------------------------------         
        ; Enable digital i/o    
        #ifdef    ADCON1
        ;    error Do you need to configura uart pins to be digital? If not, remove this line
        #endif
        ;movlw     b'01100000'        ;xxx disable
        ;movwf     ADCON1            ;xxx analog on tx/rx
        
        ; Set internal oscillator to 8MHz
        ;movlw b'01110000'    
        ;movwf OSCCON
        
        ; Make tx enable pin output and set to 0
        #ifdef USE_TXENABLE
            bcf    TRISR_TXE, TRISB_TXE
            bcf    LATR_TXE, LATB_TXE
        #endif
        
        
        ;----------------------------------------------------------------------
        ; Init
        ;----------------------------------------------------------------------         
        clrf    doerase
        ; Uart
        #ifndef USE_CAN
            movlw     b'00100100'        ;enable transmit and
            movwf     TXSTA_            ; high speed mode
            movlw     UBRG            ;use only SPBRG_ (8 bit mode default) not using BAUDCON
            movwf     SPBRG_
            movlw     b'10010000'        ;enable serial port
            movwf     RCSTA_            ; and receive
        #endif
        #ifdef USE_CAN
            bsf        PORTB, RB2
            bcf        TRISB, RB2

            movlb    15
            movlw   b'00000001'
            movwf   TXB0DLC,BANKED
            
            ;xxx If transmit ID & receive ID are the same then comment lines marked with * (free 2 instructions)
            movlw    (ID_GUI<<5)&0xE0    ;Load SID2:SID0, EXIDE = 0 / User configure transmit ID        
            movwf   TXB0SIDL,BANKED
            movlw    (ID_PIC<<5)&0xE0    ;Load SID2:SID0, EXIDE = 0 / User configure receive ID *
            movwf    RXF0SIDL, BANKED
            
            movlw   ID_GUI>>3         ;Load SID10:SID3 / User configure transmit ID
            movwf   TXB0SIDH,BANKED
            movlw    ID_PIC>>3            ;Load SID10:SID3 / User configure receive ID *
            movwf    RXF0SIDH, BANKED
            
            movlw    b'11111111'     ;Prevent filter 1 from causing a
            movwf    RXF1SIDL        ; receive event
            movwf    RXM0SIDH        ;Set mask
            movlw    b'11100000'
            movwf    RXM0SIDL
            movlb    0                ;Set bit rate
            
            movlw    b'00000001'        ;xxx User configure Baudrate (Default 500kBd with HSPLL and 10MHz crystal)
            movwf    BRGCON1
            movlw    b'11111010'        ;xxx User configure Baudrate
            movwf    BRGCON2
            movlw    b'00000111'        ;xxx User configure Baudrate
            movwf    BRGCON3
            bsf     CIOCON, ENDRHI
            clrf    CANCON            ;Enter Normal mode
        #endif
        
        
        ;----------------------------------------------------------------------
        ; Wait for computer
        ;----------------------------------------------------------------------
        clrf    cntHello
        movlw    BLSTART
rhello    rcall     RcvIni
        sublw     HELLO
        bz         sendid        
        ; Not hello received
        incf    cntHello
        movf    cntHello
        sublw    HELLOTRIES
        bz        exit
        bra        rhello        
        
        
        ;----------------------------------------------------------------------
        ; Send device id and firmware version
        ;----------------------------------------------------------------------        
sendid    SendL     DEVICEID
        SendL    (VERMAJ + 128)    ;128 to indicate PIC18F
        SendL    ((VERMIN<<4) + VERREV)
        
        
        ;----------------------------------------------------------------------
        ; Main loop
        ;----------------------------------------------------------------------            
Main    SendL     OK                ; "-Everything OK, ready and waiting."
mainl    clrf     crc
        

        ;----------------------------------------------------------------------
        ; Receive address
        ;----------------------------------------------------------------------            
        ;Upper byte
        rcall     Receive            
        movwf     TBLPTRU
        ; High byte
        rcall     Receive
        movwf     TBLPTRH
        #ifdef    BIGEE
            movwf    EEADRH        ;for eeprom
        #endif        
        ; Low byte
        rcall     Receive
        movwf     TBLPTRL
        #ifdef    EEADR
            movwf     EEADR        ;for eeprom
        #endif

                    
        ;----------------------------------------------------------------------
        ; Receive command
        ;----------------------------------------------------------------------            
        rcall     Receive    
        movwf     cmd    
        
        
        ;----------------------------------------------------------------------
        ; Receive nr of data bytes that will follow
        ;----------------------------------------------------------------------            
        rcall     Receive    
        movwf     dcnt    
        
        
        ;----------------------------------------------------------------------
        ; Receive data
        ;----------------------------------------------------------------------    
        lfsr     FSR0, buffer    ;load buffer pointer to fsr0
rcvoct    rcall     Receive
        movwf     POSTINC0
        decfsz     dcnt
        bra     rcvoct
                
        
        ;----------------------------------------------------------------------
        ; Check checksum
        ;----------------------------------------------------------------------            
chksum    tstfsz     crc                
        bra     crcfail
                    
                
        ;----------------------------------------------------------------------
        ; 0x00 goto protection
        ;----------------------------------------------------------------------    
        #ifdef    PROT_GOTO
            ; Only for write row command
            ;btfss     cmd, 1            
            ;bra     ibufpt        
            ; Check for row 0
            tstfsz    TBLPTRU
            bra        ibufpt
            tstfsz    TBLPTRH
            bra        ibufpt
            tstfsz    TBLPTRL
            bra        ibufpt                        
            ; Init buffer pointer
            lfsr     FSR0, buffer    ;load buffer pointer to fsr0
            ; 1st word low byte = low address byte
            movlw     ((STARTADDR>>1)&0xff)
            movwf    POSTINC0
            ; 1st word high byte = goto instruction
            movlw    0xef
            movwf    POSTINC0
            ; 2nd word low byte = upper address byte
            movlw     (((STARTADDR>>1)&0xff00)>>8)
            movwf    POSTINC0
            ; 2nd word high byte = uppder address nibble + goto instruction            
            movlw     (0xf0 + (((STARTADDR>>1)&0xf0000)>>16))
            movwf    POSTINC0
        #endif
        
        
        ;----------------------------------------------------------------------
        ; Init buffer pointer
        ;----------------------------------------------------------------------            
ibufpt    lfsr     FSR0, buffer    ;load buffer pointer to fsr0
        
        
        ;----------------------------------------------------------------------
        ; Check command
        ;----------------------------------------------------------------------            
        ; Erase page, set do erase status flag
        btfss    cmd, 0
        bra        cmdrow
        setf    doerase
        bra        Main
        ; Write row
cmdrow    btfsc     cmd, 1            
        bra     blprot
        #ifdef    EEDATA
            ; Write eeprom word
            btfsc     cmd, 2            
            bra     eeprom
        #endif
        ; Write config
        btfsc     cmd, 3
        bra     cfg    
        ; Else, unknown command
        SendL   UCMD        
        bra     mainl    
        
                
        ;------------------------------------------------------------------------------
        ; Exit, placed here so it can be branched to from all code, max +-127
        ;------------------------------------------------------------------------------                
        #ifndef USE_CAN
exit        clrf    RCSTA_            ;reset receive status and control register
            clrf    TXSTA_            ;reset transmit status and control register
        #endif
        #ifdef USE_CAN
exit           bsf     CANCON, REQOP2  ;reset receive status and control register
        #endif
        bra     loadusr        
        
                            
        ;----------------------------------------------------------------------
        ; Bootloader protection
        ;----------------------------------------------------------------------
blprot    nop
        #ifdef PROT_BL
            ; Make a copy of address
            movff    TBLPTRU, ttblptru
            movff    TBLPTRH, ttblptrh
            movff    TBLPTRL, ttblptrl
            ; Calculate page number of received address
            movlw    6        ;2^6=64=pagesize[bytes]
            movwf    cnt1
            bcf        STATUS, C    ;clear carry bit
calcpage    rrcf    ttblptru, 1
            rrcf    ttblptrh, 1
            rrcf    ttblptrl, 1
            decfsz    cnt1
            bra        calcpage            
            ; Received page high < bl start page = OK
            movlw    ((STARTADDR/64)>>8)
            subwf    ttblptrh, 0
            bn        blprotok
            ; Received page = bl start page
            movlw    ((STARTADDR/64)>>8)
            subwf    ttblptrh, 0
            bnz        chkgt    
            ; Received page low < bl start page low = OK        
            movlw    ((STARTADDR/64)&0xff)
            subwf    ttblptrl, 0
            bn        blprotok
            ; Received page high > bl end page = OK
chkgt        movlw    (((STARTADDR/64)+BLSIZEP-1)>>8)
            subwf    ttblptrh, 0
            bz        chkgt2
            bn        chkgt2
            bra        blprotok
            ; Received page = bl end page
chkgt2        movlw    (((STARTADDR/64)+BLSIZEP-1)>>8)
            subwf    ttblptrh, 0
            bnz        proterr    
            ; Received page low > bl end page low = OK        
            movlw    (((STARTADDR/64)+BLSIZEP-1)&0xff)
            subwf    ttblptrl, 0
            bz        proterr
            bn        proterr
            bra        blprotok
            ; Protection tripped
proterr        SendL   BLPROT        
            bra     mainl
        #endif
        
        
        ;----------------------------------------------------------------------
        ; Erase page
        ;----------------------------------------------------------------------                    
blprotok
erase    btfss     doerase, 0
        bra     wrloop
        movlw    b'10010100'        ;setup erase
        rcall     Write
        clrf    doerase
        
        
        ;----------------------------------------------------------------------
        ; Write row
        ;----------------------------------------------------------------------            
wrloop    movlw     ROWSIZEB
        movwf     rowcnt    
        movwf    rowcnt2    
        ; Load latches
wrbyte    movff     POSTINC0, TABLAT
        tblwt    *+
        decfsz     rowcnt
        bra     wrbyte        
        ; Write
        tblrd    *-                ;point back into row
        movlw    b'10000100'        
        rcall     Write
        
        
        ;----------------------------------------------------------------------
        ; Write finished, verify row
        ;----------------------------------------------------------------------    
        lfsr     FSR0, (buffer+ROWSIZEB-1)    ;load buffer pointer to fsr0
        ; Read
verbyte    tblrd    *-        
        movf     POSTDEC0, w
        ; Compare
        cpfseq    TABLAT
        bra        verfail
        ; Loop?
        decfsz     rowcnt2
        bra     verbyte        
        ; Verify succesfull
        bra     Main
            
        
        ;----------------------------------------------------------------------
        ; Write eeprom byte
        ;----------------------------------------------------------------------            
        #ifdef    EEADR
            ; Load latch
eeprom        movff    INDF0, EEDATA
            ; Write
            movlw     b'00000100'
            rcall     Write
            ; Verify, read byte
            movlw     b'00000001'
            bsf        EECON1, RD
            movf    INDF0, w
            ; Compare
            cpfseq    EEDATA
            bra        verfail
            ; Verify succesfull
            bra     Main
        #endif
        
                
        ;----------------------------------------------------------------------
        ; Write config byte
        ;----------------------------------------------------------------------                    
        ; Load latch
cfg        movff     INDF0, TABLAT
        tblwt    *
        ; Write
        movlw     b'11000100'
        rcall     Write
        ; Write finished
        bra        Main
        
                
        ;----------------------------------------------------------------------
        ; Verify fail
        ;----------------------------------------------------------------------
verfail    SendL     VERFAIL
        bra     mainl
        
                
        ;----------------------------------------------------------------------
        ; Checksum error
        ;----------------------------------------------------------------------
crcfail    SendL     CHECKSUMERR
        bra     mainl
        
        
;------------------------------------------------------------------------------
; Write()
;------------------------------------------------------------------------------        
Write    movwf     EECON1
        movlw     0x55
        movwf     EECON2
        movlw     0xAA
        movwf     EECON2
        bsf     EECON1, WR
        ; Wait for write to finish, only needed for eeprom
waitwre    btfsc     EECON1, WR
        bra     waitwre
        bcf     EECON1,WREN        ;disable writes
        return
        
        
;------------------------------------------------------------------------------
; Send()
;------------------------------------------------------------------------------        
#ifndef USE_CAN
Send    ; Enable tx
        #ifdef USE_TXENABLE
            bsf    LATR_TXE, LATB_TXE
            nop        ;needed?
            nop
            nop
        #endif        
        ;Send byte
        movwf     TXREG_
        ; Wait for transmit shift register to get empty
txwait    btfss    TXSTA_, TRMT
        bra        txwait
        ; Disable tx
        #ifdef USE_TXENABLE
            bcf    LATR_TXE, LATB_TXE
        #endif
        ; Send complete
        return
#endif
#ifdef USE_CAN
Send
        movlb    15                        ;One BANKSEL
        movwf    TXB0D0,BANKED
        bsf     TXB0CON, TXREQ             ;Normal priority; Request transmission
        ;If required, wait for message to get transmitted
txwait    BTFSC   TXB0CON, TXREQ,BANKED    ;Is it transmitted?
        BRA     txwait                     ;No.  Continue to wait...
        movlb    0
        ; Send complete
        return
#endif

;------------------------------------------------------------------------------
; Receive()
;------------------------------------------------------------------------------    
#ifndef USE_CAN
Receive    movlw     BLDELAY
RcvIni    movwf    cnt1            ;
rpt2    movlw    BL10MS            ;
        movwf    cnt2            ;        
rpt3    clrf     cnt3        
rptc    clrwdt
        btfss     PIR1, RCIF        ;test RX
        bra     notrcv
        movf     RCREG_, w        ;return read data in W
        addwf     crc, f            ;compute crc
        return        
notrcv    decfsz     cnt3
        bra     rptc
        decfsz     cnt2
        bra     rpt3
        decfsz     cnt1
        bra     rpt2
        ; Receive timed out if we get here
        bra        exit
#endif
#ifdef USE_CAN
Receive    movlw     BLDELAY
RcvIni    movwf    cnt1            ;
rpt2    movlw    BL10MS            ;
        movwf    cnt2            ;        
rpt3    clrf     cnt3        
rptc    clrwdt
        btfss    RXB0CON, RXFUL     ;Does RXB0 contain a message?
        bra     notrcv
        movf     RXB0D0, w        ;Return read data in W
        addwf     crc, f            ;Compute crc
        bcf        RXB0CON, RXFUL
        return        
notrcv    decfsz     cnt3
        bra     rptc
        decfsz     cnt2
        bra     rpt3
        decfsz     cnt1
        bra     rpt2
        ; Receive timed out if we get here
        bra        exit
#endif    


;------------------------------------------------------------------------------
; End of code
;
; After reset
; Do not expect the memory to be zero,
; Do not expect registers to be initialised as described in datasheet.
;------------------------------------------------------------------------------            
        end

Settings:
Code:
------------------------------------------------------------------------------
; Device
;------------------------------------------------------------------------------
        LIST          P=18F452;                        ;xxx


;------------------------------------------------------------------------------
; Includes
;------------------------------------------------------------------------------
        #include    "devices.inc"


;------------------------------------------------------------------------------
; User preferences
;------------------------------------------------------------------------------
        radix DEC

        #define        OSCF            10000000        ;xxx oscillator frequency
        #define        BAUDRATE         38400            ;xxx baudrate
        #define        BLTIME            1000            ;xxx data receive timeout [ms]
        #define        BLINIT            1000            ;xxx hello receive timeout [ms]
        #define        HELLOTRIES        2                ;xxx number of non hello characters received before branching to the user application
        
        #define        USE_UART1        1                ;xxx uncomment to use uart1
        ;#define        USE_UART2        1                ;xxx uncomment to use uart2
        ;#define USE_CAN                                ;xxx uncomment to use CAN instead of UART
            
        #define        USE_TXENABLE    1                ;xxx uncomment to use a tx enable pin        
        #ifdef USE_TXENABLE
            #define    TRISR_TXE        TRISC            ;xxx tris register containing tx enable
            #define    LATR_TXE        LATC            ;xxx port register containing tx enable
            #define    TRISB_TXE        5                ;xxx tris bit for tx enable
            #define LATB_TXE        5                ;xxx port bit for tx enable
        #endif


;------------------------------------------------------------------------------
; CAN settings
;------------------------------------------------------------------------------        
        #define        ID_PIC        1                    ;xxx node number for this device
        #define     ID_GUI     0x7ff                    ;xxx node number of the ds30 Loader gui


;------------------------------------------------------------------------------
; Advanced settings
;------------------------------------------------------------------------------        
        #define        PROT_GOTO    1                    ;xxx protect goto at 0x00
        #define        PROT_BL     1                    ;xxx protect bootloader
        
        #define        BLPLP        7                    ;bootloader placement, pages from end
        #define        BLSIZEP        7                    ;bootloader size [pages], used by bootloader protection    
        

;------------------------------------------------------------------------------
; Configuration bits, these macros can be found at the end of the inc-files located in
; C:\Program Files\Microchip\MPASM Suite\
;
; These can also be set in MPLAB IDE instead, they are found in Configure->Configuration bits...
;------------------------------------------------------------------------------
        ;config     OSC     = INTIO2    ;internal oscillator
        ;config     FSCM     = OFF        ;failsafe clock monitor
        ;config     IESO     = OFF        ;internal external switchover mode
        ;config     PWRT     = OFF        ;power-up timer
        ;config     BOR     = OFF        ;brown-out reset
        ;config     BORV    = 27        ;brown-out reset value
        ;config     WDT     = OFF        ;watchdog timer
        ;config     WDTPS     = 1            ;1:1 WDT prescalar
        ;config     MCLRE     = ON        ;MCLR
        ;config     STVR     = ON        ;stack overflow reset
        ;config     LVP     = OFF        ;low voltage programming
        ;config        DEBUG    = OFF        ;debug
        ;config     CP0     = OFF        ;
        ;config     CP1     = OFF        ;
        ;config     CPB     = OFF        ;
        ;config     CPD     = OFF        ;
        ;config     WRT0     = OFF        ;
        ;config     WRT1     = OFF        ;
        ;config     WRTB     = OFF        ;
        ;config     WRTC     = OFF        ;
        ;config     WRTD    = OFF        ;
        ;config     EBTR0     = OFF        ;
        ;config     EBTR1     = OFF        ;
        ;config     EBTRB     = OFF        ;
        
        ;__CONFIG _CONFIG1L, _PLLDIV_5_1L & _CPUDIV_OSC3_PLL4_1L & _USBDIV_2_1L
        ;__CONFIG _CONFIG1H, _FOSC_HSPLL_HS_1H & _FCMEM_OFF_1H & _IESO_OFF_1H
        ;__CONFIG _CONFIG2L, _PWRT_ON_2L & _BOR_OFF_2L ; _VREGEN_OFF_2L
        ;__CONFIG _CONFIG2H, _WDT_OFF_2H & _WDTPS_1_2H
        ;__CONFIG _CONFIG3H, _MCLRE_ON_3H & _PBADEN_OFF_3H & _CCP2MX_OFF_3H
        ;__CONFIG _CONFIG4L, _DEBUG_OFF_4L & _LVP_OFF_4L & _STVREN_OFF_4L & _XINST_OFF_4L
        ;__CONFIG _CONFIG5L, _CP0_OFF_5L & _CP1_OFF_5L & _CP2_OFF_5L
        ;__CONFIG _CONFIG5H, _CPB_OFF_5H & _CPD_OFF_5H
        ;__CONFIG _CONFIG6L, _WRT0_OFF_6L & _WRT1_OFF_6L & _WRT2_OFF_6L & _WRT3_OFF_6L
        ;__CONFIG _CONFIG6H, _WRTB_OFF_6H & _WRTC_OFF_6H & _WRTD_OFF_6H
        ;__CONFIG _CONFIG7L, _EBTR0_OFF_7L & _EBTR1_OFF_7L & _EBTR2_OFF_7L & _EBTR3_OFF_7L
        ;__CONFIG _CONFIG7H, _EBTRB_OFF_7H

        __CONFIG   _CONFIG1H, _OSCS_OFF_1H & _HS_OSC_1H
          __CONFIG   _CONFIG2L, _BOR_ON_2L & _BORV_20_2L & _PWRT_ON_2L
          __CONFIG   _CONFIG2H, _WDT_OFF_2H & _WDTPS_128_2H
          __CONFIG   _CONFIG4L, _STVR_ON_4L & _LVP_OFF_4L & _DEBUG_OFF_4L

Device:
Code:
    ifdef    __18F1220
        #include    p18F1220.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x1000
        #define        DEVICEID        1
        #define        ROWSIZEW        4
    endif
    ifdef    __18F1230
        #include    p18F1230.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x1000
        #define        DEVICEID        2
        #define        ROWSIZEW        4
    endif
    ifdef    __18F2220
        #include    p18F2220.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x1000
        #define        DEVICEID        3
        #define        ROWSIZEW        4
    endif
    ifdef    __18F2221
        #include    p18F2221.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x1000
        #define        DEVICEID        4
        #define        ROWSIZEW        4
    endif
    ifdef    __18F4220
        #include    p18F4220.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x1000
        #define        DEVICEID        5
        #define        ROWSIZEW        4
    endif
    ifdef    __18F4221
        #include    p18F4221.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x1000
        #define        DEVICEID        6
        #define        ROWSIZEW        4
    endif
    ifdef    __18F1320
        #include    p18F1320.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x2000
        #define        DEVICEID        7
        #define        ROWSIZEW        4
    endif
    ifdef    __18F1330
        #include    p18F1330.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x2000
        #define        DEVICEID        8
        #define        ROWSIZEW        4
    endif
    ifdef    __18F13K22
        #include    p18F13K22.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x2000
        #define        DEVICEID        9
        #define        ROWSIZEW        4
    endif
    ifdef    __18F13K50
        #include    p18F13K50.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x2000
        #define        DEVICEID        10
        #define        ROWSIZEW        4
    endif
    ifdef    __18F2320
        #include    p18F2320.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x2000
        #define        DEVICEID        11
        #define        ROWSIZEW        4
    endif
    ifdef    __18F2321
        #include    p18F2321.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x2000
        #define        DEVICEID        12
        #define        ROWSIZEW        4
    endif
    ifdef    __18F2331
        #include    p18F2331.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x2000
        #define        DEVICEID        13
        #define        ROWSIZEW        4
    endif
    ifdef    __18F23K20
        #include    p18F23K20.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x2000
        #define        DEVICEID        14
        #define        ROWSIZEW        8
    endif
    ifdef    __18F4320
        #include    p18F4320.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x2000
        #define        DEVICEID        15
        #define        ROWSIZEW        4
    endif
    ifdef    __18F4321
        #include    p18F4321.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x2000
        #define        DEVICEID        16
        #define        ROWSIZEW        4
    endif
    ifdef    __18F4331
        #include    p18F4331.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x2000
        #define        DEVICEID        17
        #define        ROWSIZEW        4
    endif
    ifdef    __18F43K20
        #include    p18F43K20.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x2000
        #define        DEVICEID        18
        #define        ROWSIZEW        8
    endif
    ifdef    __18F14K22
        #include    p18F14K22.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x4000
        #define        DEVICEID        19
        #define        ROWSIZEW        8
    endif
    ifdef    __18F14K50
        #include    p18F14K50.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x4000
        #define        DEVICEID        20
        #define        ROWSIZEW        8
    endif
    ifdef    __18F2420
        #include    p18F2420.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x4000
        #define        DEVICEID        21
        #define        ROWSIZEW        16
    endif
    ifdef    __18F2423
        #include    p18F2423.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x4000
        #define        DEVICEID        22
        #define        ROWSIZEW        16
    endif
    ifdef    __18F2431
        #include    p18F2431.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x4000
        #define        DEVICEID        23
        #define        ROWSIZEW        4
    endif
    ifdef    __18F2450
        #include    p18F2450.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x4000
        #define        DEVICEID        24
        #define        ROWSIZEW        8
    endif
    ifdef    __18F2480
        #include    p18F2480.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x4000
        #define        DEVICEID        25
        #define        HAS_CAN         1
        #define        ROWSIZEW        4
    endif
    ifdef    __18F24K20
        #include    p18F24K20.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x4000
        #define        DEVICEID        26
        #define        ROWSIZEW        16
    endif
    ifdef    __18F4420
        #include    p18F4420.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x4000
        #define        DEVICEID        27
        #define        ROWSIZEW        16
    endif
    ifdef    __18F4423
        #include    p18F4423.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x4000
        #define        DEVICEID        28
        #define        ROWSIZEW        16
    endif
    ifdef    __18F4431
        #include    p18F4431.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x4000
        #define        DEVICEID        29
        #define        ROWSIZEW        4
    endif
    ifdef    __18F4450
        #include    p18F4450.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x4000
        #define        DEVICEID        30
        #define        ROWSIZEW        8
    endif
    ifdef    __18F4480
        #include    p18F4480.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x4000
        #define        DEVICEID        31
        #define        HAS_CAN         1
        #define        ROWSIZEW        4
    endif
    ifdef    __18F44K20
        #include    p18F44K20.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x4000
        #define        DEVICEID        32
        #define        ROWSIZEW        16
    endif
    ifdef    __18F2455
        #include    p18F2455.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x6000
        #define        DEVICEID        33
        #define        ROWSIZEW        16
    endif
    ifdef    __18F2458
        #include    p18F2458.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x6000
        #define        DEVICEID        34
        #define        HAS_CAN         1
        #define        ROWSIZEW        16
    endif
    ifdef    __18F4455
        #include    p18F4455.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x6000
        #define        DEVICEID        35
        #define        ROWSIZEW        16
    endif
    ifdef    __18F4458
        #include    p18F4458.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x6000
        #define        DEVICEID        36
        #define        ROWSIZEW        16
    endif
    ifdef    __18F2520
        #include    p18F2520.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x8000
        #define        DEVICEID        37
        #define        ROWSIZEW        16
    endif
    ifdef    __18F2523
        #include    p18F2523.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x8000
        #define        DEVICEID        38
        #define        ROWSIZEW        16
    endif
    ifdef    __18F2550
        #include    p18F2550.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x8000
        #define        DEVICEID        39
        #define        ROWSIZEW        16
    endif
    ifdef    __18F2553
        #include    p18F2553.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x8000
        #define        DEVICEID        40
        #define        ROWSIZEW        16
    endif
    ifdef    __18F2580
        #include    p18F2580.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x8000
        #define        DEVICEID        41
        #define        HAS_CAN         1
        #define        ROWSIZEW        4
    endif
    ifdef    __18F25K20
        #include    p18F25K20.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x8000
        #define        DEVICEID        42
        #define        ROWSIZEW        16
    endif
    ifdef    __18F4520
        #include    p18F4520.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x8000
        #define        DEVICEID        43
        #define        ROWSIZEW        16
    endif
    ifdef    __18F4523
        #include    p18F4523.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x8000
        #define        DEVICEID        44
        #define        ROWSIZEW        16
    endif
    ifdef    __18F4550
        #include    p18F4550.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x8000
        #define        DEVICEID        45
        #define        ROWSIZEW        16
    endif
    ifdef    __18F4553
        #include    p18F4553.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x8000
        #define        DEVICEID        46
        #define        ROWSIZEW        16
    endif
    ifdef    __18F4580
        #include    p18F4580.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x8000
        #define        DEVICEID        47
        #define        HAS_CAN         1
        #define        ROWSIZEW        4
    endif
    ifdef    __18F45K20
        #include    p18F45K20.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x8000
        #define        DEVICEID        48
        #define        ROWSIZEW        16
    endif
    ifdef    __18F6520
        #include    p18F6520.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x8000
        #define        DEVICEID        49
        #define        HAS_UART2        1
        #define        BIGEE           1
        #define        ROWSIZEW        4
    endif
    ifdef    __18F8520
        #include    p18F8520.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x8000
        #define        DEVICEID        50
        #define        HAS_UART2        1
        #define        BIGEE           1
        #define        ROWSIZEW        4
    endif
    ifdef    __18F2525
        #include    p18F2525.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0xC000
        #define        DEVICEID        51
        #define        BIGEE           1
        #define        ROWSIZEW        32
    endif
    ifdef    __18F2585
        #include    p18F2585.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0xC000
        #define        DEVICEID        52
        #define        HAS_CAN         1
        #define        BIGEE           1
        #define        ROWSIZEW        32
    endif
    ifdef    __18F4525
        #include    p18F4525.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0xC000
        #define        DEVICEID        53
        #define        BIGEE           1
        #define        ROWSIZEW        32
    endif
    ifdef    __18F4585
        #include    p18F4585.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0xC000
        #define        DEVICEID        54
        #define        HAS_CAN         1
        #define        BIGEE           1
        #define        ROWSIZEW        32
    endif
    ifdef    __18F6527
        #include    p18F6527.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0xC000
        #define        DEVICEID        55
        #define        HAS_UART2        1
        #define        BIGEE           1
        #define        ROWSIZEW        32
    endif
    ifdef    __18F8527
        #include    p18F8527.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0xC000
        #define        DEVICEID        56
        #define        HAS_UART2        1
        #define        BIGEE           1
        #define        ROWSIZEW        32
    endif
    ifdef    __18F2620
        #include    p18F2620.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x10000
        #define        DEVICEID        57
        #define        BIGEE           1
        #define        ROWSIZEW        32
    endif
    ifdef    __18F2680
        #include    p18F2680.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x10000
        #define        DEVICEID        58
        #define        HAS_CAN         1
        #define        BIGEE           1
        #define        ROWSIZEW        32
    endif
    ifdef    __18F26K20
        #include    p18F26K20.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x10000
        #define        DEVICEID        59
        #define        BIGEE           1
        #define        ROWSIZEW        32
    endif
    ifdef    __18F4620
        #include    p18F4620.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x10000
        #define        DEVICEID        60
        #define        BIGEE           1
        #define        ROWSIZEW        32
    endif
    ifdef    __18F4680
        #include    p18F4680.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x10000
        #define        DEVICEID        61
        #define        HAS_CAN         1
        #define        BIGEE           1
        #define        ROWSIZEW        32
    endif
    ifdef    __18F46K20
        #include    p18F46K20.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x10000
        #define        DEVICEID        62
        #define        BIGEE           1
        #define        ROWSIZEW        32
    endif
    ifdef    __18F6622
        #include    p18F6622.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x10000
        #define        DEVICEID        63
        #define        HAS_UART2        1
        #define        BIGEE           1
        #define        ROWSIZEW        32
    endif
    ifdef    __18F8622
        #include    p18F8622.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x10000
        #define        DEVICEID        64
        #define        HAS_UART2        1
        #define        BIGEE           1
        #define        ROWSIZEW        32
    endif
    ifdef    __18F2682
        #include    p18F2682.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x14000
        #define        DEVICEID        65
        #define        HAS_CAN         1
        #define        BIGEE           1
        #define        ROWSIZEW        32
    endif
    ifdef    __18F4682
        #include    p18F4682.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x14000
        #define        DEVICEID        66
        #define        HAS_CAN         1
        #define        BIGEE           1
        #define        ROWSIZEW        32
    endif
    ifdef    __18F2685
        #include    p18F2685.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x18000
        #define        DEVICEID        67
        #define        HAS_CAN         1
        #define        BIGEE           1
        #define        ROWSIZEW        32
    endif
    ifdef    __18F4685
        #include    p18F4685.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x18000
        #define        DEVICEID        68
        #define        HAS_CAN         1
        #define        BIGEE           1
        #define        ROWSIZEW        32
    endif
    ifdef    __18F6627
        #include    p18F6627.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x18000
        #define        DEVICEID        69
        #define        HAS_UART2        1
        #define        BIGEE           1
        #define        ROWSIZEW        32
    endif
    ifdef    __18F6628
        #include    p18F6628.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x18000
        #define        DEVICEID        70
        #define        HAS_UART2        1
        #define        BIGEE           1
        #define        ROWSIZEW        32
    endif
    ifdef    __18F8627
        #include    p18F8627.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x18000
        #define        DEVICEID        71
        #define        HAS_UART2        1
        #define        BIGEE           1
        #define        ROWSIZEW        32
    endif
    ifdef    __18F8628
        #include    p18F8628.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x18000
        #define        DEVICEID        72
        #define        HAS_UART2        1
        #define        BIGEE           1
        #define        ROWSIZEW        32
    endif
    ifdef    __18F6722
        #include    p18F6722.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x20000
        #define        DEVICEID        73
        #define        HAS_UART2        1
        #define        BIGEE           1
        #define        ROWSIZEW        32
    endif
    ifdef    __18F6723
        #include    p18F6723.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x20000
        #define        DEVICEID        74
        #define        HAS_UART2        1
        #define        BIGEE           1
        #define        ROWSIZEW        32
    endif
    ifdef    __18F8722
        #include    p18F8722.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x20000
        #define        DEVICEID        75
        #define        HAS_UART2        1
        #define        BIGEE           1
        #define        ROWSIZEW        32
    endif
    ifdef    __18F8723
        #include    p18F8723.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x20000
        #define        DEVICEID        76
        #define        HAS_UART2        1
        #define        BIGEE           1
        #define        ROWSIZEW        32
    endif
    ifdef    __18F452
        #include    p18F452.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x8000
        #define        DEVICEID        77
        #define        ROWSIZEW        4
    endif
    ifdef    __18F458
        #include    p18F458.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x8000
        #define        DEVICEID        78
        #define        ROWSIZEW        4
    endif
    ifdef    __18F448
        #include    p18F448.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x4000
        #define        DEVICEID        79
        #define        HAS_CAN         1
        #define        ROWSIZEW        4
    endif
    ifdef    __18F258
        #include    p18F258.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x8000
        #define        DEVICEID        80
        #define        HAS_CAN         1
        #define        ROWSIZEW        4
    endif
    ifdef    __18F248
        #include    p18F248.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x4000
        #define        DEVICEID        81
        #define        HAS_CAN         1
        #define        ROWSIZEW        4
    endif
    ifdef    __18F8680
        #include    p18F8680.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x10000
        #define        DEVICEID        82
        #define        BIGEE           1
        #define        ROWSIZEW        4
    endif
    ifdef    __18F25K22
        #include    p18F25K22.inc
        #define        VALID_DEV        1
        #define        MAX_FLASH        0x8000
        #define        DEVICEID        83
        #define        HAS_UART2        1
        #define        ROWSIZEW        32
    endif


;------------------------------------------------------------------------------
;
;------------------------------------------------------------------------------         
        ifndef VALID_DEV
            error "Unknown device specified"
        #endif


Bootlader works firstly, but When I download my code bootlader is cancelled Sad

Can you give me an example of the application is working continuously Bootloder?Please Sad

[Image: examplegrz.png]
Reply


Messages In This Thread
Bootloader for 18f452 [solved] - by thenorthstar - 2011-04-01, 16:37:46
RE: Bootloader for 18f452 - by Mikael Gustavsson - 2011-04-01, 22:01:39
RE: Bootloader for 18f452 - by thenorthstar - 2011-04-02, 09:29:03
RE: Bootloader for 18f452 - by Mikael Gustavsson - 2011-04-02, 18:55:47
RE: Bootloader for 18f452 - by thenorthstar - 2011-04-03, 15:20:49
RE: Bootloader for 18f452 - by Mikael Gustavsson - 2011-04-04, 22:46:34
RE: Bootloader for 18f452 - by thenorthstar - 2011-04-05, 10:50:32
RE: Bootloader for 18f452 - by Mikael Gustavsson - 2011-04-05, 22:15:36
RE: Bootloader for 18f452 - by thenorthstar - 2011-04-06, 08:08:41
RE: Bootloader for 18f452 - by Mikael Gustavsson - 2011-04-06, 21:20:32
RE: Bootloader for 18f452 - by thenorthstar - 2011-04-07, 08:36:08
RE: Bootloader for 18f452 - by Mikael Gustavsson - 2011-04-07, 20:06:56

Forum Jump:


Users browsing this thread: 1 Guest(s)