Este código parece ser del libro: PIC Microcontroller and Embedded Systems: Using Assembly and C for PIC18
¿Por qué PORTC y PORTD se han definido como INPUT y OUTPUT respectivamente?
Eso se explica 1 página anteriormente en su libro, antes de la versión de ensamblador anterior del mismo código. El autor dice: "El programa 11-4 conecta un interruptor a INT0 [que se muestra en la figura 11-9 como pin RB0] y un LED al pin RB7. En este programa, cada vez que se activa INT0, se enciende el LED, mientras que al mismo tiempo los datos se transfieren de PORTC a PORTD ". [Mi negrita]
Entonces, la respuesta a su pregunta es que esto es lo que los autores del libro decidieron hacer en su programa de muestra. Esto podría estar tratando de mostrar que el bucle principal (que es simplemente esa declaración PORTD=PORTC;
) no necesita preocuparse por lo que sucede en el ISR para manejar la conmutación de LED, por ejemplo.
¿Qué es 0x08 (ubicación de interrupción)?
Esto se explica en el capítulo 11 del libro y en la documentación de PIC18. En resumen, es la dirección definida en la arquitectura PIC18, para mantener el ISR (o un salto al ISR) para la interrupción de "Alta prioridad" PIC18.
¿Por qué habilitar la interrupción del temporizador, si no lo estamos utilizando?
Eso es un error en el comentario (no en el código), en la lista C del libro. Esa línea dice:
INTCONbits.INT0IE=1; enable Timer0 interrupt
Compare eso con la versión de assembler en la página anterior, que dice:
BSF INTCON,INT0IE ; enable INT0 interrupt
que es en realidad el comentario correcto: el pin RB0 activa INT0 y, como lo menciona el autor, su descripción es que hay un interruptor conectado al pin RB0. Por lo tanto, para que ese interruptor cause una interrupción, el código debe habilitar INT0 como fuente de interrupción. Lea el capítulo 11 con cuidado, donde se explica esto.
Si el comentario en la línea fuente de C tenía razón al habilitar la interrupción Timer0, el código C correcto sería: INTCONbits.TMR0IE=1;
. Por lo tanto, el código en esa línea del libro ( INTCONbits.INT0IE=1;
) le muestra que la parte comentario de esa línea ("habilitar la interrupción de Timer0") es incorrecta.
Editar: no pude encontrar ninguna página oficial de erratas para este libro, sin embargo, vi estos comentarios en dos revisiones de Amazon para el libro:
enlace
¡Advertencia! Este libro contiene muchas inexactitudes. Solo he terminado el
Los primeros dos capítulos, pero ya tengo serias preocupaciones sobre el uso
este libro.
y
Cuidado, este libro tiene algunos errores graves al menos en el paso a paso.
esquemas motores. [...] Mi preocupación aquí es que dañes tu
pic et al si está cableado como se indica. Este tipo de errores nunca deben
Lo han hecho para imprimir.