Autor Tema: bootloader para pi16f877-A  (Leído 5353 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado alogic.on

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 772
bootloader para pi16f877-A
« en: 05 de Noviembre de 2007, 16:14:31 »
hola
estoy mirando este pedacito de programa con ojos lascivos  :D bootloader dice ser un programa para cargar en el pic y despues se puede reprogramar por la usart, aun no he tenido ocasion de probarlo no me quedan pics vivos. pero tengo unas cuantas dudas o muchas mas tendre eso seguro. incluso antes de usarlo, que seguro alguien de aqui ya a probado algo de esto
para cargar un pic por la usart dicen que deberia usar este programa el cual no puedo configurar el baudrate para que funcione con las aplicaciones que utilizo, que funcionan a 31250bauds para este tema debe existir algun tipo de norma comun supongo.Si conocen donde puedo encontrar algo de informacion ya saben donde escribirlo  :D uno de los programas que utilizo para otro bootloader es MIOS Studio con este cargo un hex y el programa se encarga de enviarlo por el pueto midi, una solucion que se me ha ocurrido podria ser si encuentro otro programa con el que pueda configurar el baud rate a placer hacer un cable de puerto com al del aparato aunque .... no es tan bonito, preferiria algo de informacion de como funciona este tipo de protocolo para adaptarlo como alguna web ande expliquen, o un ejemplillo que vale mas que mil palabras  :D yo mientras tanto les aseguro que estoy rasterizando la red desde hace dias y lo que encontre fue por casulidad 

la web pone que solo con escribir esta entrada y no modificar una serie de registros reservados es suficiente para generar el hex que reprogramara el pic

buff         EQU   0x20
; RAM address 0x70 reserved for MPLAB-ICD
amount         EQU   0x71
chk1         EQU   0x72
chk2         EQU   0x73
retry         EQU   0x74
address         EQU     0x75
tmpaddr         EQU     0x77
temp         EQU   0x79
time         EQU   0x7A
count         EQU     0x7B

help                    EQU     0x7C
lcount         EQU   0x7d

org 0      ; RESET vector location
RESET clrf  STATUS
movlw 0x00
movwf PCLATH
goto  start

start                  ; Begin of user program

y poco mas les puedo decir yo, que me pueden contar de esta manera de programar el pic, experiencias o ventajas y sus contras que le encuentren a esta forma de programar

un saludo y gracias

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: bootloader para pi16f877-A
« Respuesta #1 en: 05 de Noviembre de 2007, 17:56:55 »
Un bootloader es un programa hecho para un pic determinado el cual permite comunicarse con la PC al arrancar el pic (BOOTear).

El bootloader y el programa de la pc se tienen que 'entender'.  tienen que manejar un lenguaje común.  En este punto no hay 'estándares', solo la forma en que se le ocurra al diseñador hacerlo.

El programa de pc tiene que leer el .hex y enviárselo al pic el cual tendrá el programa 'hecho a medida' que permitirá autograbarse.

El software hecho para el pic también tendrá que tener en cuenta de que no ocupe la parte del código donde está el bootloader. 

Espero se haya entendido.
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado alogic.on

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 772
Re: bootloader para pi16f877-A
« Respuesta #2 en: 05 de Noviembre de 2007, 18:13:15 »
 yo creo que bastante claro  :-)
seguire rascando el bootloader para comprender como escribe el programa en la memoria a ver en que acaba.
conoceis algun proyecto documentado sobre este tema.

gracias y un saludo

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: bootloader para pi16f877-A
« Respuesta #3 en: 06 de Noviembre de 2007, 08:31:56 »
seguire rascando el bootloader para comprender como escribe el programa en la memoria a ver en que acaba.
conoceis algun proyecto documentado sobre este tema.
La verdad no conozco uno 'bien documentado' porqué no usé jamás uno pero sí te puedo sugerir que si programas en C, en www.microchipc.com hay un par de bootloaders que he visto de pasada.

Sino puedes buscar en www.piclist.com

- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: bootloader para pi16f877-A
« Respuesta #4 en: 06 de Noviembre de 2007, 16:25:41 »
Para escribir la memoria simplemente utiliza la escritura en memoria de programa (EECON1, EECON2, EEDATA, etc.) para cada palabra recibida. Lo importante del bootloader es poder reconocer a qué dirección va el código (en el .hex se especifica), cuántos bytes le siguen, etc. La mejor explicación de un bootloader está en una nota de applicación de Microchip.

Pero esta parte cambia de pic en pic..  No es lo mismo para un 16f877 que para un 16F877A , que para un 18F452 o para un 18F45j10... parecen similares a primera vista pero tienen diferencias bastante notables.

- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: bootloader para pi16f877-A
« Respuesta #5 en: 06 de Noviembre de 2007, 19:20:12 »
Citar
Pero esta parte cambia de pic en pic..  No es lo mismo para un 16f877 que para un 16F877A , que para un 18F452 o para un 18F45j10... parecen similares a primera vista pero tienen diferencias bastante notables.

Por supuesto. Eso ya se da por un hecho. Que aburrido $ería el mundo si existiera la portabilidad al 100%.

;) lo dejé aclarado por las dudas por si alguien más lee el hilo se puede llegar a confundir.

saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado alogic.on

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 772
Re: bootloader para pi16f877-A
« Respuesta #6 en: 10 de Noviembre de 2007, 07:38:40 »
hola,
mirando el codigo me dio curiosidad, qué rutina en el codigo al escribirle #define BAUD D'31250' esta calculaba por si sola el baud rate de la usart  :shock: y me encontre con esto

Código: [Seleccionar]
IF ((FOSC/(D'16' * BAUD))-1) < D'256'
#define DIVIDER (FOSC/(D'16' * BAUD))-1
#define HIGH_SPEED 1
ELSE
#define DIVIDER (FOSC/(D'64' * BAUD))-1
#define HIGH_SPEED 0
ENDIF

BAUD_REAL EQU FOSC/((D'64'-(HIGH_SPEED*D'48'))*(DIVIDER+1))

IF BAUD_REAL > BAUD
IF (((BAUD_REAL - BAUD)*D'100')/BAUD) > BAUD_ERROR
ERROR "wrong baud rate"
ENDIF
ELSE
IF (((BAUD - BAUD_REAL)*D'100')/BAUD) > BAUD_ERROR
ERROR "wrong baud rate"
ENDIF
ENDIF

que es esto, es otro lenguaje u comandos que no conocia. se puede mezclar asi como asi uno u otro lenguaje en el mpasm.  :shock:
Citar
....no usé jamás uno pero sí te puedo sugerir que si programas en C,...
creo que con esta pregunta respondo que solo programo o chapurreo mejor dicho, algo de ensamblador 

gracias y un saludo

Desconectado alogic.on

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 772
Re: bootloader para pi16f877-A
« Respuesta #7 en: 12 de Noviembre de 2007, 18:48:17 »
ok gracias por la aclaración, estaba arrugao de comerme la cabeza. He localizado esta web que las explican

http://perso.wanadoo.es/pictob/directivas_mpasm.htm
y a seguir estudiando¡¡

un saludo y gracias

Desconectado alogic.on

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 772
Re: bootloader para pi16f877-A
« Respuesta #8 en: 23 de Marzo de 2008, 07:20:59 »
hola
bueno retomo este tema que tenia aparcado, lo deje de lado en su momento por muuuchas razones. la principal que yo no utilizo el puerto rs232 para env/recibir datos del ordenador si no midi y el hacer un programa que usara este puerto, aun sigue fuera de mis posibilidades, pero esto ya existe, se llama dentro del protocolo midi datos SYSEX. esto lo puedo hacer con un programa, midiox el protocolo es el siguiente, aunque quien tenga alguna sugerencia le estare muy agradecido pues es bastante escasa la informacion al respecto que he encontrado.
Citar
El formato de transmisión consta de un ancabezamiento o header, cuyo primer byte es el de inicio de SysEx (dec 240, hex F0, bin 1111 0000), y cuyo segundo byte es el ID del fabricante. Lo que sigue es libremente determinado por el fabricante, pero generalmente el header tiene un tercer byte correspondiente al modelo. (Cuando una serie de modelos diferentes tienen arquitectura muy similar, el fabricante puede designar para todos ellos el mismo ID, como forma de reservar números para el futuro. Recordar que sólo hay 128 valores disponibles). Luego viene una serie de cualquier longitud posible de bytes de datos, con la única condición de que todos tengan 0 como bit más significativo. Iniciar con bit 1 significaría un byte de estatus, y eso interrumpiría el SysEx. Los únicos bytes de estatus que pueden intercalarse son los del tipo System Real Time (ver 2.3). El fin del sistema exclusivo está indicado por el byte dec 247 (hex F7, bin 1111 0111).

SYSEX 0xf0--> id del fabricante 0xf7--> nº de modelo 0x3f--> bloque de datos .hex--> EOX 0xf7 y espera por si queda programa

bueno ahora queda confeccionar una rutina que este situada en la ultima pagina de datos yo la he puesto en la direccion ORG   0X1C00 para que no la pise ninguno de los programas que queramos instalar desde el boot. voy a intentar describir como funciona o creo, para ver si existe otra manera de capturar las cadenas de datos que he visto muy pocos ejemplos de como hacerlo en assembler y es algo que me trae de pelos  :P
lo primero es que, para iniciar el boot sin tener que configurar un pin como interruptor he puesto una demora de 8seg que continuamente testea si llega algun dato por la usart
Código: [Seleccionar]
demora_2seg
  movlw     .43       ; 1 set numero de repeticion  (C)
                movwf     PDel0     ; 1 |
PLoop0b 
movlw     .226      ; 1 set numero de repeticion  (B)
                movwf     PDel1     ; 1 |
PLoop1b 
movlw     .205      ; 1 set numero de repeticion  (A)
                movwf     PDel2     ; 1 |
PLoop2b 
clrwdt              ; 1 clear watchdog
                clrwdt              ; 1 ciclo delay
BANKSEL PIR1
BTFSC PIR1,RCIF
GOTO LLEGADA ;test de mensaje SYSEX
VUELTA ;para que vuelva de llegada
        decfsz    PDel2, 1  ; 1 + (1) es el tiempo 0  ? (A)
        goto      PLoop2b    ; 2 no, loop
        decfsz    PDel1,  1 ; 1 + (1) es el tiempo 0  ? (B)
        goto      PLoop1b    ; 2 no, loop
        decfsz    PDel0,  1 ; 1 + (1) es el tiempo 0  ? (C)
        goto      PLoop0b    ; 2 no, loop
        clrwdt              ; 1 ciclo delay
;------------------------------------------
BANKSEL N_POTE
DECFSZ N_POTE
GOTO BOOTLOADER_CONFIG_1
;------------------------------------------
FIN_BOOTLOADER
BANKSEL PUNTEROS
BTFSC PUNTEROS,4 ;SI NO SE RECIBIO NADA DE SYSEX O SE RECIBIO EL BYTE EOX ESTE PIN
;->ESTARÁ A CERO POR LO QUE SALDRÁ DEL BOOTLOADER PARA IR AL PROGRAMA PRINCIPAL
GOTO BOOTLOADER_CONFIG_1
BANKSEL PCLATH
PAGESEL INICIO
GOTO FIN
de esta forma solo se puede utilizar al encender el aparato. la rutina LLEGADA es a la que salta el pc cuando se ha levantado la bandera RCIF. aqui es donde me surgen dudas en la manera en que testeo si es un mensaje sysex, a mi ver, seguro que existe otra forma de hacerlo mas fiable, la parte que concierne a los mensajes sysex es la siguiente, si coincide el orden de envios con los valores de cada uno, el programa levanta un puntero que le hace saltar a la parte del bloque datos hex
Código: [Seleccionar]
LLEGADA
BCF PIR1,RCIF
BANKSEL RCREG
MOVF RCREG,W
MOVWF REG_DIVISOR
MOVLW SYSEX
SUBWF REG_DIVISOR,W
BTFSC STATUS,Z
CALL RECONOCIMIENTO ;SI ES UN MENSAJE SYSEX PONE A UNO
MOVLW EOX
SUBWF REG_DIVISOR,W
BTFSC STATUS,Z
BCF PUNTEROS,4 ;ERA SYSEX_OFF Y VUELVE AL PROGRAMA
                BTFSS PUNTEROS,4              ;si salta comienza con el orden de datos hex de intel
.......... la rutina continua mas adelante
como vereis hago continuas restas con W y REG_DIVISOR que si movlw sysex y subwf reg...,w pero ademas de tener que ir en su orden la usart se mueve a 31250bauds no se que tan rapido es esto entre dato y dato y si le va a dar tiempo a ir grabando codigo en la flash a la vez que esta transmitiendo.

continuando con el programa, si coinciden los sysex salta a la parte que concierne a los hex donde tambien tengo mis dudas sobre como esta formado, me he guiado por un post de Mariano_pic en el que explica el formato intel

Citar
Ejemplo:
Parte de e001.lst:

    0000  3007   movlw  0x07   ;Carga primer sumando en W
    0001  3E08   addlw  0x08   ;Suma W con segundo sumando
    0002  0090   movwf  0x10   ;Almacena el resultado

e001.hex completo:

    :020000040000FA
    :060000000730083E9000ED
    :00000001FF

Observemos la 2 línea:

    :060000000730083E9000ED

    :06000000
        06 6 bytes: 07, 30, 08, 3E, 90, 00.
        0000 dirección 0
        00 al no ser el registro final

    730083E9000ED
        07 30 es 3007
        08 3E es 3E08
        90 00 es 0090
        ED es el checksum
por lo que he echo esto para guardar los datos ciñendome a la segunda linea una vez reconocido que es un mensaje sysex tomando como ej los valores del post anterior
bloque de datos.hex
Código: [Seleccionar]
......continua rutina
REPROGRAMA
BTFSS PUNTEROS,4              ;si salta comienza con el orden de datos hex de intel
GOTO VUELTA
CALL SYSEX_DATO ;RECIBE EL Nº DE BYTES A RECIBIR
BANKSEL N_BUTON_CON
MOVWF N_BUTON_CON ;SE GUARDA PARA DECREMENTAR Y QUE EL PROGRAMA VUELVA A ESPERAR

CALL SYSEX_DATO ;POSICION ALTA DE LA MEMORIA DONDE SE VA A EMPEZAR A ESCRIBIR
BANKSEL ADDRH
MOVWF ADDRH

CALL SYSEX_DATO ;POSICION BAJA DE LA MEMORIA DONDE SE VA A EMPEZAR A ESCRIBIR
BANKSEL ADDRL
MOVWF ADDRL

CALL SYSEX_DATO ;NO SE MUY BIEN DICE QUE SI ES CERO NO ES EL FINAL????????? PREGUNTAR
BANKSEL FINAL_REG
MOVWF FINAL_REG
REPROGRAMA1
CALL SYSEX_PROGRAM
BANKSEL N_BUTON_CON
DECFSZ N_BUTON_CON
GOTO REPROGRAMA1
GOTO VUELTA
.06 lo guardo en N_BUTON_CON indica el nº de datos que se van a transmitir
los dos siguientes bytes son la direccion ande se va a escribir
00 00 el primero lo guardo en ADDRH y el siguiente en ADDRL que posteriormente se guardaran en los registros de la rutina de escritura para indicar la direccion donde empieza a escribir EEADRH y ADDR pero que son esas otras dos lineas de codigo la primera y tercera como las reconozco ademas el byte de registro final no se qe es ni que seria si fuese el final o que hago con el byte de checsum cuando llegue este significa que ha terminado el bloque de datos entonces para que me sirve estar decrementando un registro que indica el nº de bytes de datos  :shock: 06
 si conoceis algun link que expliquen algo de como esta formado el hex me vendria de perlas :mrgreen:
para continuar picatecleando
creo que como segundo episaodio de mis dudas voy a plantear la escritura sobre la flash aunque primero he de solventar estas sobre el hex

un saludo y gracias

Desconectado stk500

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4919
Re: bootloader para pi16f877-A
« Respuesta #9 en: 23 de Marzo de 2008, 09:00:26 »
Hola Fito un Saludo  :mrgreen:
segun tengo entendido y se lo que tu busca solo que en Midi no encuentros muchas cosas aparte mi tiempo  :mrgreen: tu sabe,
pero se que hay modulo Bootloader Guiado por Menu y atacado a una PC Etc con varios IF asi hacer Cascada donde cada unico Modulo con Jumper se define pero
no me he ido lejo con el Temas, cualquier cosas ya sabe donde estoy  :D :D
Saludo

Desconectado alogic.on

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 772
Re: bootloader para pi16f877-A
« Respuesta #10 en: 30 de Marzo de 2008, 10:42:29 »
hola
pues aqui sigo, buscando info poco a poco, de momento a base de mirar un codigo y otros para un 16f877 he visto que la cabecera del hex siempre es igual y acaba en 0xFA asi es que he configurado la rutina para que espere hasta que llega este byte y a partir de ahí, comienza el programa en el hex. no es una solucion pro pero ya que no se lo que es pues habra que saltarselo. pero aun no tengo claro como localizar que es el ultimo byte de programa a recibir, mas menos puede hacer lo mismo, hacer que espere hasta que llegue 0xFF pero antes de este se reciben una serie de bytes que para algo serviran  :?
bueno aqui les dejo mis dudillas por si pueden arrojar un poquitin de luz

Código: ASM
  1. ORG             0X00
  2.                 GOTO    CONFIGURACION
  3.                 ORG             0X04
  4.                 GOTO    RSI
  5.                 ORG             0X05
  6. CONFIGURACION
  7.                 BANKSEL PCLATH
  8.                 PAGESEL BOOTLOADER
  9.                 GOTO    BOOTLOADER
  10. RSI
  11.                 ORG             .250
  12. PROGRAMA
  13.                 ORG             0X1C00
  14. BOOTLOADER
  15.                 CALL    CONFIG_CCP2_PWM
  16.                 CALL    CONFIG_RS232
  17.                 CALL    CONFIG_TMR1
  18.                 CALL    CONFIG_TMR2
  19.                 CALL    CONFIG_TRISES
  20.                 CALL    CONFIG_ADCON1
  21.                 CALL    CONFIG_OPTION_REG
  22.                 CALL    CONFIG_INTERRUPTS
  23.                 BANKSEL ADDRH
  24.                 CLRF    ADDRH
  25.                 CLRF    ADDRL
  26.                 CALL    CONFIG_RS232
  27.                 BANKSEL N_POTE
  28.                 MOVLW   .4
  29.                 MOVWF   N_POTE                  ;A BASE DE ESPERAR ENTRE BLOQUE Y BLOQUE SE PUEDE OBVIAR QUE HA TERMINADO DE RECIBIR EL PROGRAMA 8SEG
  30. BOOTLOADER_CONFIG_1
  31. ;-------------------------------------------------------------
  32. demora_2seg
  33.                 movlw     .43       ; 1 set numero de repeticion  (C)
  34.         movwf     PDel0     ; 1 |
  35. PLoop0b  
  36.                 movlw     .226      ; 1 set numero de repeticion  (B)
  37.         movwf     PDel1     ; 1 |
  38. PLoop1b  
  39.                 movlw     .205      ; 1 set numero de repeticion  (A)
  40.         movwf     PDel2     ; 1 |
  41. PLoop2b  
  42.                 clrwdt              ; 1 clear watchdog
  43.         clrwdt              ; 1 ciclo delay
  44.                 BANKSEL PIR1
  45.                 BTFSC   PIR1,RCIF
  46.                 GOTO    LLEGADA                 ;test de mensaje SYSEX
  47. VUELTA                                                  ;para que vuelva de llegada
  48.         decfsz    PDel2, 1      ; 1 + (1) es el tiempo 0  ? (A)
  49.         goto      PLoop2b       ; 2 no, loop
  50.         decfsz    PDel1,  1     ; 1 + (1) es el tiempo 0  ? (B)
  51.         goto      PLoop1b       ; 2 no, loop
  52.         decfsz    PDel0,  1     ; 1 + (1) es el tiempo 0  ? (C)
  53.         goto      PLoop0b       ; 2 no, loop
  54.         clrwdt                  ; 1 ciclo delay
  55. ;------------------------------------------
  56.                 BANKSEL N_POTE
  57.                 DECFSZ  N_POTE,F
  58.                 GOTO    BOOTLOADER_CONFIG_1
  59. ;------------------------------------------
  60. FIN_BOOTLOADER
  61.                 BANKSEL PUNTEROS
  62.                 BTFSC   PUNTEROS,4                      ;SI NO SE RECIBIO NADA DE SYSEX O SE RECIBIO EL BYTE EOX ESTE PIN
  63.                                                                         ;->ESTARÁ A CERO POR LO QUE SALDRÁ DEL BOOTLOADER PARA IR AL PROGRAMA PRINCIPAL
  64.                 GOTO    BOOTLOADER_CONFIG_1
  65.                 BANKSEL PCLATH
  66.                 PAGESEL 0x05
  67.                 GOTO    PROGRAMA
  68.  
  69. ;------------------------------------------
  70. ; This write routine FLASH-MEMORY
  71. ;
  72. GUARDA_FLASH
  73.                 BANKSEL N_BUTON_CON
  74.                 DECF    N_BUTON_CON,F   ;DECREMENTA EL CONTADOR SIEMPRE SON PARTE ALTA Y PARTE BAJA DOS ENVIOS
  75.                                                                 ;->POR DIRECCION, ESTE NUNCA LLEGA A CERO
  76.                 BANKSEL ADDRH
  77.                 MOVF    ADDRH,W                 ; Load initial address
  78.                 MOVWF   EEADRH                  ;
  79.                 MOVF    ADDRL,W                 ;
  80.                 MOVWF   EEADR                   ;
  81.                 BANKSEL RCREG
  82.                 MOVF    RCREG,W                 ; Load initial data address
  83.                 BANKSEL PIR1
  84.                 BCF             PIR1,RCIF
  85.                 BANKSEL EEDATA
  86.                 MOVWF   EEDATA                  ;LO PONE EN LA PARTE BAJA DE LA MEMORIA
  87.                 BANKSEL PIR1
  88. LOOP
  89.                 BTFSC   PIR1,RCIF               ;ESPERA HASTA EL SIGUIENTE DATO
  90.                 GOTO    LOOP
  91.                 BCF             PIR1,RCIF
  92.                 BANKSEL RCREG
  93.                 MOVF    RCREG,W
  94.                 MOVWF   EEDATH ;                ;Y LO PONE EN LA PARTE ALTA DE LA MEMORIA
  95.  
  96.                 BSF     STATUS,RP0              ; Bank 3
  97.                 BSF     EECON1,EEPGD    ; Point to program memory
  98.                 BSF     EECON1,WREN     ; Enable writes
  99.                 MOVLW   0X55                    ; Start of required write sequence:
  100.                 MOVWF   EECON2                  ; Write 55h
  101.                 MOVLW   0XAA                    ;
  102.                 MOVWF   EECON2                  ; Write AAh
  103.                 BSF     EECON1,WR               ; Set WR bit to begin write
  104.                 NOP                                     ; Any instructions here are ignored as processor
  105.                                                                 ; halts to begin write sequence
  106.                 NOP                                     ; processor will stop here and wait for write complete
  107. LOOP1                                                           ; after write processor continues with 3rd instruction
  108.                 BANKSEL PIR2
  109.                 BTFSS   PIR2,EEIF               ;ESTA SECUENCIA NO ME QUEDA CLARA ES EL MISMO FLAG EL DE LA EEPROM QUE LA FLASH
  110.                 GOTO    LOOP1                   ;ESPERA HASTA QUE TERMINE DE ESCRIBIR LA FLASH CUANDO EL FLAG SE PONGA A UNO
  111.                 BCF             PIR2,EEIF              
  112.                 BANKSEL EECON1
  113.                 BCF     EECON1,WREN     ; Disable writes
  114.                 BCF     STATUS,RP0              ; Bank 2
  115.                 ANDLW   0x03                    ; Indicates when four words have been programmed
  116.                 XORLW   0x03                    ;
  117.                 CLRW
  118.                 GOTO    VUELVE_DE_GUARDAR
  119. ;------------------------------------------------------
  120. RECONOCIMIENTO
  121.                 CALL    SYSEX_DATO
  122.                 BANKSEL REG_DIVISOR
  123.                 MOVWF   REG_DIVISOR
  124.                 MOVLW   IDENTIFICATIVO
  125.                 SUBWF   REG_DIVISOR,W
  126.                 BTFSS   STATUS,Z
  127.                 RETURN
  128. MODELO
  129.                 CALL    SYSEX_DATO
  130.                 BANKSEL REG_DIVISOR
  131.                 MOVWF   REG_DIVISOR
  132.                 MOVLW   NMODELO
  133.                 SUBWF   REG_DIVISOR,W
  134.                 BTFSS   STATUS,Z
  135.                 RETURN
  136.                 BSF             PUNTEROS,4
  137.                 RETURN
  138. ;------------------------------------------------------
  139.  
  140. ;------------------------------------------------------
  141.        
  142. ;------------------------------------------------------
  143. LLEGADA
  144.                 BCF             PIR1,RCIF
  145.                 BANKSEL RCREG
  146.                 MOVF    RCREG,W
  147.                 MOVWF   REG_DIVISOR
  148.                 MOVLW   SYSEX
  149.                 SUBWF   REG_DIVISOR,W
  150.                 BTFSC   STATUS,Z
  151.                 BSF             PUNTEROS,4              ;CALL   RECONOCIMIENTO  ;SI ES UN MENSAJE SYSEX PONE A UNO
  152.                 MOVLW   EOX
  153.                 SUBWF   REG_DIVISOR,W
  154.                 BTFSC   STATUS,Z
  155.                 BCF             PUNTEROS,4              ;ERA SYSEX_OFF Y VUELVE AL PROGRAMA
  156. REPROGRAMA
  157.                 BTFSS   PUNTEROS,4
  158.                 GOTO    VUELTA
  159. BUSQUEDA
  160.                 CALL    SYSEX_DATO
  161.                 MOVLW   COMIENZO                ;ESPERA HASTA QUE LLEGUE 0XFA LOS BYTES ANTERIORES TODAVIA NO SE PARA QUE SON
  162.                 SUBWF   REG_DIVISOR
  163.                 BTFSS   STATUS,Z
  164.                 GOTO    BUSQUEDA
  165.         ;----------------------------ESPERA HASTA 0XFA
  166.                 CALL    SYSEX_DATO              ;RECIBE EL Nº DE BYTES A RECIBIR
  167.                 BANKSEL N_BUTON_CON            
  168.                 MOVWF   N_BUTON_CON             ;SE GUARDA PARA DECREMENTAR Y QUE EL PROGRAMA VUELVA A ESPERAR
  169.                 INCF    N_BUTON_CON,F   ;PARA IGUALAR QUE AL LLEGAR A CERO SALTA
  170.         ;----------------------------CABECERA, INDICA EL NUMERO DE BYTES A SER ENVIADOS
  171.                 CALL    SYSEX_DATO              ;POSICION ALTA DE LA MEMORIA DONDE SE VA A EMPEZAR A ESCRIBIR
  172.                 BANKSEL ADDRH
  173.                 MOVWF   ADDRH
  174.         ;----------------------------PARTE ALTA DE LA DIRECCION A ESCRIBIR
  175.                 CALL    SYSEX_DATO              ;POSICION BAJA DE LA MEMORIA DONDE SE VA A EMPEZAR A ESCRIBIR
  176.                 BANKSEL ADDRL
  177.                 MOVWF   ADDRL
  178.         ;----------------------------PARTE BAJA DE LA DIRECCION A ESCRIBIR
  179.                 CALL    SYSEX_DATO              ;NO SE MUY BIEN DICE QUE SI ES CERO NO ES EL FINAL????????? PREGUNTAR
  180.                 BANKSEL FINAL_REG
  181.                 MOVWF   FINAL_REG
  182. REPROGRAMA1            
  183.                 BANKSEL N_BUTON_CON
  184.                 DECFSZ  N_BUTON_CON             ;SALTA CUANDO SE AGOTAN LOS REGISTROS DE ENVIO
  185.                 GOTO    REPROGRAMA2            
  186.  
  187.                 CALL    SYSEX_DATO
  188.                 BANKSEL REG_DIVISOR
  189.                 MOVWF   REG_DIVISOR
  190.                 MOVLW   CHECKSUM
  191.                 SUBWF   REG_DIVISOR
  192.                 BTFSS   STATUS,Z
  193.                 GOTO    VUELTA
  194.                 GOTO    REPROGRAMA1    ;SI NO HAY CHECKSUM ES QUE QUEDAN DATOS POR GRABAR
  195. ;-------------------------------
  196. REPROGRAMA2
  197.                 CALL    SYSEX_PROGRAM
  198.                 GOTO    REPROGRAMA1
  199. ;-------------------------------                               
  200. SYSEX_PROGRAM
  201.                 BANKSEL PIR1                    ;ESPERA HASTA RECIBIR PROXIMO DATO
  202.                 BTFSS   PIR1,RCIF
  203.                 GOTO    SYSEX_PROGRAM
  204.                 GOTO    GUARDA_FLASH    ;LO GUARDA EN LA MEMORIA
  205. VUELVE_DE_GUARDAR
  206.                 BANKSEL ADDRL
  207.                 INCFSZ  ADDRL,F                 ;INCREMENTA LA DIRECCION HASTA QUE TERMINE EL LOOP REPROGRAMA1
  208.                 RETURN
  209. MAS_UNO
  210.                 INCF    ADDRH,F
  211.                 CLRF    ADDRL
  212.                 RETURN
  213. ;--------------------------------
  214. SYSEX_DATO
  215.                 BANKSEL PIR1
  216.                 BTFSS   PIR1,RCIF
  217.                 GOTO    SYSEX_DATO
  218.                 BANKSEL RCREG
  219.                 MOVF    RCREG,W
  220.                 BANKSEL PIR1
  221.                 BCF             PIR1,RCIF
  222.                 RETURN                 
  223. ;--------------------------------

un saludo y gracias



Desconectado alogic.on

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 772
Re: bootloader para pi16f877-A
« Respuesta #12 en: 30 de Marzo de 2008, 17:09:25 »
 :mrgreen: gracias nocturno
ya se un poquito mas para seguir haciendo la rutina

Record types:

00 - Data record
01 - End of file record
02 - Extended segment address record
03 - Start segment address record
04 - Extended linear address record
05 - Start linear address record

en el caso del ejemplo que comentaba
Citar
    :020000040000FA
    :060000000730083E9000ED
    :00000001FF

Observemos la 2 línea:

    :060000000730083E9000ED

    :06000000
        06 6 bytes: 07, 30, 08, 3E, 90, 00.
        0000 dirección 0
        00 al no ser el registro final
00 al no ser registro final
y la ultima linea :00 0000 01 ff, poco a poco ire sacando que son y como usar esto en el programa.
: inicio de bloque
00 nº de bytes
00 00 direccion de la memoria
01 End of file record
ff final del to
los que no he visto en mis hex son los casos 02 03 04 y 05
me podriais ayudar con estos no se a que se refieren

aun asi ya veo bastante mas claro como continuar he cambiado alguna cosilla seguire buscando info
Código: ASM
  1. ORG             .250
  2. COMIENZO_DESPUES_DE_BOOT
  3.                 ORG             0X1C00
  4. BOOTLOADER
  5.                 CALL    CONFIG_CCP2_PWM
  6.                 CALL    CONFIG_RS232
  7.                 CALL    CONFIG_TMR1
  8.                 CALL    CONFIG_TMR2
  9.                 CALL    CONFIG_TRISES
  10.                 CALL    CONFIG_ADCON1
  11.                 CALL    CONFIG_OPTION_REG
  12.                 CALL    CONFIG_INTERRUPTS
  13.                 BANKSEL ADDRH
  14.                 CLRF    ADDRH
  15.                 CLRF    ADDRL
  16.                 CALL    CONFIG_RS232
  17.                 BANKSEL N_POTE
  18.                 MOVLW   .4
  19.                 MOVWF   N_POTE                  ;A BASE DE ESPERAR ENTRE BLOQUE Y BLOQUE SE PUEDE OBVIAR QUE HA TERMINADO DE RECIBIR EL PROGRAMA 8SEG
  20. BOOTLOADER_CONFIG_1
  21. ;-------------------------------------------------------------
  22. demora_2seg
  23.                 movlw     .43       ; 1 set numero de repeticion  (C)
  24.         movwf     PDel0     ; 1 |
  25. PLoop0b  
  26.                 movlw     .226      ; 1 set numero de repeticion  (B)
  27.         movwf     PDel1     ; 1 |
  28. PLoop1b  
  29.                 movlw     .205      ; 1 set numero de repeticion  (A)
  30.         movwf     PDel2     ; 1 |
  31. PLoop2b  
  32.                 clrwdt              ; 1 clear watchdog
  33.         clrwdt              ; 1 ciclo delay
  34.                 BANKSEL PIR1
  35.                 BTFSC   PIR1,RCIF
  36.                 GOTO    LLEGADA                 ;test de mensaje SYSEX
  37. VUELTA                                                  ;para que vuelva de llegada
  38.         decfsz    PDel2, 1      ; 1 + (1) es el tiempo 0  ? (A)
  39.         goto      PLoop2b       ; 2 no, loop
  40.         decfsz    PDel1,  1     ; 1 + (1) es el tiempo 0  ? (B)
  41.         goto      PLoop1b       ; 2 no, loop
  42.         decfsz    PDel0,  1     ; 1 + (1) es el tiempo 0  ? (C)
  43.         goto      PLoop0b       ; 2 no, loop
  44.         clrwdt                  ; 1 ciclo delay
  45. ;------------------------------------------
  46.                 BANKSEL N_POTE
  47.                 DECFSZ  N_POTE,F
  48.                 GOTO    BOOTLOADER_CONFIG_1
  49. ;------------------------------------------
  50. FIN_BOOTLOADER
  51.                 BANKSEL PUNTEROS
  52.                 BTFSC   PUNTEROS,4                      ;SI NO SE RECIBIO NADA DE SYSEX O SE RECIBIO EL BYTE EOX ESTE PIN
  53.                                                                         ;->ESTARÁ A CERO POR LO QUE SALDRÁ DEL BOOTLOADER PARA IR AL PROGRAMA PRINCIPAL
  54.                 GOTO    BOOTLOADER_CONFIG_1
  55.                 BANKSEL PCLATH
  56.                 PAGESEL COMIENZO_DESPUES_DE_BOOT
  57.                 GOTO    COMIENZO_DESPUES_DE_BOOT
  58.  
  59. ;------------------------------------------
  60. ; This write routine FLASH-MEMORY
  61. ;
  62. GUARDA_FLASH
  63.                 BANKSEL N_BUTON_CON
  64.                 DECF    N_BUTON_CON,F   ;DECREMENTA EL CONTADOR SIEMPRE SON PARTE ALTA Y PARTE BAJA DOS ENVIOS
  65.                                                                 ;->POR DIRECCION, ESTE NUNCA LLEGA A CERO
  66.                 BANKSEL ADDRH
  67.                 MOVF    ADDRH,W                 ; Load initial address
  68.                 MOVWF   EEADRH                  ;
  69.                 MOVF    ADDRL,W                 ;
  70.                 MOVWF   EEADR                   ;
  71.                 BANKSEL RCREG
  72.                 MOVF    RCREG,W                 ; Load initial data address
  73.                 BANKSEL PIR1
  74.                 BCF             PIR1,RCIF
  75.                 BANKSEL EEDATA
  76.                 MOVWF   EEDATA                  ;LO PONE EN LA PARTE BAJA DE LA MEMORIA
  77.                 BANKSEL PIR1
  78. LOOP
  79.                 BTFSC   PIR1,RCIF               ;ESPERA HASTA EL SIGUIENTE DATO
  80.                 GOTO    LOOP
  81.                 BCF             PIR1,RCIF
  82.                 BANKSEL RCREG
  83.                 MOVF    RCREG,W
  84.                 MOVWF   EEDATH ;                ;Y LO PONE EN LA PARTE ALTA DE LA MEMORIA
  85.  
  86.                 BSF     STATUS,RP0              ; Bank 3
  87.                 BSF     EECON1,EEPGD    ; Point to program memory
  88.                 BSF     EECON1,WREN     ; Enable writes
  89.                 MOVLW   0X55                    ; Start of required write sequence:
  90.                 MOVWF   EECON2                  ; Write 55h
  91.                 MOVLW   0XAA                    ;
  92.                 MOVWF   EECON2                  ; Write AAh
  93.                 BSF     EECON1,WR               ; Set WR bit to begin write
  94.                 NOP                                     ; Any instructions here are ignored as processor
  95.                                                                 ; halts to begin write sequence
  96.                 NOP                                     ; processor will stop here and wait for write complete
  97. LOOP1                                                           ; after write processor continues with 3rd instruction
  98.                 BANKSEL PIR2
  99.                 BTFSS   PIR2,EEIF               ;ESTA SECUENCIA NO ME QUEDA CLARA ES EL MISMO FLAG EL DE LA EEPROM QUE LA FLASH
  100.                 GOTO    LOOP1                   ;ESPERA HASTA QUE TERMINE DE ESCRIBIR LA FLASH CUANDO EL FLAG SE PONGA A UNO
  101.                 BCF             PIR2,EEIF              
  102.                 BANKSEL EECON1
  103.                 BCF     EECON1,WREN     ; Disable writes
  104.                 BCF     STATUS,RP0              ; Bank 2
  105.                 ANDLW   0x03                    ; Indicates when four words have been programmed
  106.                 XORLW   0x03                    ;
  107.                 CLRW
  108.                 GOTO    VUELVE_DE_GUARDAR
  109. ;------------------------------------------------------
  110. RECONOCIMIENTO
  111.                 CALL    SYSEX_DATO
  112.                 BANKSEL REG_DIVISOR
  113.                 MOVWF   REG_DIVISOR
  114.                 MOVLW   IDENTIFICATIVO
  115.                 SUBWF   REG_DIVISOR,W
  116.                 BTFSS   STATUS,Z
  117.                 RETURN
  118. MODELO
  119.                 CALL    SYSEX_DATO
  120.                 BANKSEL REG_DIVISOR
  121.                 MOVWF   REG_DIVISOR
  122.                 MOVLW   NMODELO
  123.                 SUBWF   REG_DIVISOR,W
  124.                 BTFSS   STATUS,Z
  125.                 RETURN
  126.                 BSF             PUNTEROS,4
  127.                 RETURN
  128. ;------------------------------------------------------
  129.  
  130. ;------------------------------------------------------
  131.        
  132. ;------------------------------------------------------
  133. LLEGADA
  134.                 BCF             PIR1,RCIF
  135.                 BANKSEL RCREG
  136.                 MOVF    RCREG,W
  137.                 MOVWF   REG_DIVISOR
  138.                 MOVLW   SYSEX
  139.                 SUBWF   REG_DIVISOR,W
  140.                 BTFSC   STATUS,Z
  141.                 BSF             PUNTEROS,4              ;CALL   RECONOCIMIENTO  ;SI ES UN MENSAJE SYSEX PONE A UNO
  142.                 MOVLW   EOX
  143.                 SUBWF   REG_DIVISOR,W
  144.                 BTFSC   STATUS,Z
  145.                 BCF             PUNTEROS,4              ;ERA SYSEX_OFF Y VUELVE AL PROGRAMA
  146. REPROGRAMA
  147.                 BTFSS   PUNTEROS,4              ;SOLO CUANDO RECIBE UN COMANDO SYSEX SALTA PARA ESPERAR EL PROGRAMA
  148.                 GOTO    VUELTA                  ;SI NO VUELVE A LA RUTINA A ESPERAR UN COMANDO SYSEX
  149. BUSQUEDA
  150.                 CALL    SYSEX_DATO
  151.                 MOVLW   COMIENZO                ;ESPERA HASTA QUE LLEGUE 0X3A EN ASCII SERIAN LOS :
  152.                 SUBWF   REG_DIVISOR,W
  153.                 BTFSS   STATUS,Z
  154.                 GOTO    BUSQUEDA                ;UNA VEZ LLEGA ESTE PUEDE CONTINUAR EL PROGRAMA
  155.         ;----------------------------
  156.                 CALL    SYSEX_DATO              ;RECIBE EL Nº DE BYTES A RECIBIR
  157.                 BANKSEL N_BUTON_CON            
  158.                 MOVWF   N_BUTON_CON             ;SE GUARDA PARA DECREMENTAR Y QUE EL PROGRAMA VUELVA A ESPERAR
  159.                 INCF    N_BUTON_CON,F   ;ESTO ES PARA IGUALAR QUE AL LLEGAR DE UNO A CERO SALTA Y NO PONGA .255
  160.         ;----------------------------CABECERA, INDICA EL NUMERO DE BYTES A SER ENVIADOS
  161.                 CALL    SYSEX_DATO              ;POSICION ALTA DE LA MEMORIA DONDE SE VA A EMPEZAR A ESCRIBIR
  162.                 BANKSEL ADDRH
  163.                 MOVWF   ADDRH
  164.         ;----------------------------PARTE ALTA DE LA DIRECCION A ESCRIBIR
  165.                 CALL    SYSEX_DATO              ;POSICION BAJA DE LA MEMORIA DONDE SE VA A EMPEZAR A ESCRIBIR
  166.                 BANKSEL ADDRL
  167.                 MOVWF   ADDRL
  168.         ;----------------------------PARTE BAJA DE LA DIRECCION A ESCRIBIR
  169.                 CALL    SYSEX_DATO              ;SI ES UN 01 SE ACABO EL PROGRAMA
  170.                 BANKSEL FINAL_REG               ;PERO ESTE PUEDE SER 02 03 04 05 DE MOMENTO VAMOS A PENSAR QUE SOLO PUEDE LLEGAR 00 ó 01
  171.                 MOVWF   FINAL_REG
  172.                 MOVLW   0X01
  173.                 SUBWF   FINAL_REG,W
  174.                 BTFSC   STATUS,Z                ;SI ES DIFERENTE DE 01 SALTA
  175.                 GOTO    TERMINO                 ;SI ES 01 ACABO EL HEX Y VA AL FINAL
  176. REPROGRAMA1                                             ;SI NO FUE 01 ES POR QUE VAN A LLEGAR DATOS
  177.                 BANKSEL N_BUTON_CON
  178.                 DECFSZ  N_BUTON_CON,F           ;SALTA CUANDO SE AGOTAN LOS REGISTROS DE ENVIO
  179.                 GOTO    REPROGRAMA2             ;CUANDO LLEGA A CERO EL REGISTRO SALE DE LA RUTINA
  180. BUSQUEDA_CHECKSUM
  181.                 CALL    SYSEX_DATO              ;PARA ESPERAR EL CHECSUM QUE INDICA EL FINAL DE LA TRAMA
  182.                 BANKSEL REG_DIVISOR            
  183.                 MOVWF   REG_DIVISOR            
  184.                 MOVLW   CHECKSUM
  185.                 SUBWF   REG_DIVISOR,W
  186.                 BTFSC   STATUS,Z
  187.                 GOTO    BUSQUEDA                        ;QUE ESPERARA HASTA EL SIGUIENTE BLOQUE DE DATOS
  188.                 CALL    ERROR_SYSEX
  189.                 GOTO    BUSQUEDA_CHECKSUM       ;SI NO LLEGA EL CHECSUM VUELVE PARA ESPERARLO DEBERIA DE PONER ERROR EN TODA ESTA TRAMAS
  190.                                                                         ;SI NO LLEGA EL BYTE ESPERADO QUE ENVIE ALGO PARA RECONOCERLO
  191. ERROR_SYSEX                                                     ;SI EL BYTE ESPERADO NO COINCIDE CON EL QUE QUEREMOS ENVIARA ESTO
  192.                 MOVLW   ERROR_BYTE
  193.                 CALL    ENVIAR_USART
  194.                 RETURN
  195.  
  196. TERMINO
  197.                 CALL    SYSEX_DATO              ;DESPUES DE HABER LLEGADO 01 DEBERIA DE LLEGAR 0XFF
  198.                 BANKSEL FINAL_REG
  199.                 MOVWF   FINAL_REG
  200.                 MOVLW   0XFF                    ;FINAL DEL HEX BYTE 0XFF
  201.                 SUBWF   FINAL_REG,W
  202.                 BTFSC   STATUS,Z
  203.                 GOTO    TERMINO                
  204. TERMINO_1
  205.                 CALL    SYSEX_DATO              ;FINAL DEL MIDI BYTE EOX
  206.                 BANKSEL REG_DIVISOR
  207.                 MOVWF   REG_DIVISOR
  208.                 MOVLW   EOX
  209.                 SUBWF   REG_DIVISOR,W
  210.                 BTFSS   STATUS,Z
  211.                 GOTO    TERMINO_1
  212.                 BANKSEL PUNTEROS
  213.                 BCF             PUNTEROS,4              ;LO PONE A NIVEL BAJO PARA INICAR QUE HA TERMINADO EL PROGRAMA
  214.                 GOTO    FIN_BOOTLOADER
  215. ;-------------------------------
  216. REPROGRAMA2
  217.                 CALL    SYSEX_PROGRAM
  218.                 GOTO    REPROGRAMA1
  219. ;-------------------------------                               
  220. SYSEX_PROGRAM
  221.                 BANKSEL PIR1                    ;ESPERA HASTA RECIBIR PROXIMO DATO
  222.                 BTFSS   PIR1,RCIF
  223.                 GOTO    SYSEX_PROGRAM
  224.                 GOTO    GUARDA_FLASH    ;LO GUARDA EN LA MEMORIA
  225. VUELVE_DE_GUARDAR
  226.                 BANKSEL ADDRL
  227.                 INCFSZ  ADDRL,F                 ;INCREMENTA LA DIRECCION HASTA QUE TERMINE EL LOOP REPROGRAMA1
  228.                 RETURN
  229. MAS_UNO
  230.                 INCF    ADDRH,F
  231.                 CLRF    ADDRL
  232.                 RETURN
  233. ;--------------------------------
  234. SYSEX_DATO
  235.                 BANKSEL PIR1
  236.                 BTFSS   PIR1,RCIF
  237.                 GOTO    SYSEX_DATO
  238.                 BANKSEL RCREG
  239.                 MOVF    RCREG,W
  240.                 BANKSEL PIR1
  241.                 BCF             PIR1,RCIF
  242.                 RETURN                 
  243. ;--------------------------------MACROS DE CONFIGURACION Y USART
  244.                 ENVIO_DE_USART
  245.                 CONFIGURACION_16F877
  246.         ;--------------------------------------------------------
  247.  
  248.                 END

un saludo y gracias

Desconectado JVS_serge512

  • PIC10
  • *
  • Mensajes: 1
Re: bootloader para pi16f877-A
« Respuesta #13 en: 09 de Mayo de 2008, 01:23:55 »
Hola Sou¡y nuevo en el foro  :D
y la verdad esta muy chevere...

respecto del bootloader excistem muchos en internet yo encontre uno que logre que sirviera hoy  despues de 3 semamas luchando contra el hardware.
no me presenta problemas y me permite hacer reset por RST, cosa que no se hacer y pido que me ayuden, por lo demas con el reset manual sirve muy bien y no crea conflicto con el .hex que descargo, uso el HT - PICC 9.60 compiler de prueba, el cual me permite reservar la memoria y asi no entrometerme con el bootloader.

esta es la pagina esta en ENGLiSH pero es muy sencillo de entender:

Tiny PIC Bootloader