He leido la ayuda de Microchip y comenta que debo situar el reset en 0800 y las interrupciones en 0808. Esto es acorde con lo que decia el forero de Microchip que programaba en PBP, sin embargo metiendo esas direcciones de memoria en la sentencia #build consigo que inicie en 800, pero me acaba empezando el programa en 000.
Estoy usando este codigo simple, quiero alternar el color de un LED, simplemente para probar si funciona el bootloader o no:
#include <18f4550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN,NOPBADEN,WRTB
#use delay (clock=20000000)
#build (reset=0x0800, interrupt=0x0808)
void main(void)
{
do{
output_low(PIN_B0);
delay_ms(200);
output_high(PIN_B0);
delay_ms(200);
}while(TRUE);
}
Utilizando las nuevas funionalidades de CCS, en las que te muestra tu codigo en ASM en pantalla, me encuentro con esto:
CCS PCH C Compiler, Version 4.023, 25097 19-feb-07 03:56
Filename: C:\Documents and Settings\Mariano\Escritorio\Prueba\Prueba.lst
ROM used: 86 bytes (0%)
Largest free fragment is 30716
RAM used: 5 (0%) at main() level
6 (0%) worst case
Stack: 1 locations
*
0800: GOTO 0026
....................
....................
.................... #include <18f4550.h>
.................... //////// Standard Header file for the PIC18F4550 device ////////////////
.................... #device PIC18F4550
.................... #list
....................
.................... #fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN,NOPBADEN,WRTB
.................... #use delay (clock=20000000)
*
0000: CLRF FEA
0002: MOVLW 06
0004: MOVWF FE9
0006: MOVF FEF,W
0008: BZ 0024
000A: MOVLW 06
000C: MOVWF 01
000E: CLRF 00
0010: DECFSZ 00,F
0012: BRA 0010
0014: DECFSZ 01,F
0016: BRA 000E
0018: MOVLW 7B
001A: MOVWF 00
001C: DECFSZ 00,F
001E: BRA 001C
0020: DECFSZ FEF,F
0022: BRA 000A
0024: RETLW 00
....................
.................... #build (reset=0x0800, interrupt=0x0808)
....................
....................
.................... void main(void)
.................... {
0026: CLRF FF8
0028: BCF FD0.7
002A: CLRF FEA
002C: CLRF FE9
002E: MOVF FC1,W
0030: ANDLW C0
0032: IORLW 0F
0034: MOVWF FC1
0036: MOVLW 07
0038: MOVWF FB4
....................
.................... do{
.................... output_low(PIN_B0);
003A: BCF F93.0
003C: BCF F8A.0
.................... delay_ms(200);
003E: MOVLW C8
0040: MOVWF 06
0042: RCALL 0000
.................... output_high(PIN_B0);
0044: BCF F93.0
0046: BSF F8A.0
.................... delay_ms(200);
0048: MOVLW C8
004A: MOVWF 06
004C: RCALL 0000
.................... }while(TRUE);
.................... }
004E: BRA 003A
....................
0050: SLEEP
Configuration Fuses:
Word 1: 0E24 NOIESO NOFCMEN HSPLL PLL5 CPUDIV1 USBDIV
Word 2: 1E3E BROWNOUT NOWDT BORV20 PUT WDT32768 VREGEN
Word 3: 8100 NOPBADEN CCP2C1 MCLR NOLPT1OSC RESERVED
Word 4: 0081 STVREN NODEBUG NOLVP NOXINST NOICPRT RESERVED
Word 5: C00F NOPROTECT NOCPD NOCPB
Word 6: A00F NOWRT NOWRTD NOWRTC WRTB
Word 7: 400F NOEBTR NOEBTRB
Es decir que si empieza en 800, pero me hace un GOTO a 0026 ¿sabe alguien por que?
Gracias de nuevo.