Programación de interrupción PIC18F4520 :: LED de alternancia

-2


[Editar: se reemplazó la foto lateral con la foto vertical]
Recientemente comencé a usar interrupciones en la programación de imágenes. Comencé con este programa, pero no puedo pasar por lo que se ha hecho en este programa.

Quiero saber que:

¿Por qué PORTC y PORTD se han definido como INPUT y OUTPUT respectivamente?

¿Qué es 0x08 (ubicación de interrupción)?

¿Por qué habilitar la interrupción del temporizador, si no lo estamos utilizando?

Gracias por su atención.

    
pregunta prog_SAHIL

1 respuesta

3

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.

    
respondido por el SamGibson

Lea otras preguntas en las etiquetas