Está en la página 1de 15

PLAN DE PRÁCTICA NO.

DE PRÁCTICA:
DIRECCIÓN DE CARRERA DE MECATRÓNICA Y 2
SISTEMAS PRODUCTIVOS FECHA:
TITULO DE LA PRÁCTICA: MODELOS ORGANIZACIONALES PÁGINA DE

_______________________
FECHA DE EMISIÓN: 06/06/2020 ELABORÓ: Comisión de Ciencias Económico-Administrativas
FECHA DE REALIZACIÓN: 07/06/2020 REVISÓ: Academia de Mecatrónica
ASIG: MICROCONTROLADORES APROBÓ: M. en E. Felipe de Jesús García Gutiérrez
UNIDAD TEMÁTICA I
TEMA: Contador ascendente y descendente con CUATRIMESTRE: OCTAVO Grupo: 82
interrupciones externas

NÚMERO DE PARTICIPANTES RECOMENDABLE: 1 DURACIÓN: N/A


LUGAR: EXTRACLASE Profesor: ERICK ROJAS
Alumno(a): ALDO VILCHIS SANCHEZ

REQUISITOS TEÓRICOS DE LA PRÁCTICA:

Contador: Un contador es muy necesario para cualquier trabajo que se desee empeñar con un PIC ya
sea llevar el conteo de algún objeto por tiempo o simplemente por llevar un control numérico de alguna
situación.
Interrupciones: Una interrupción es un aviso provocado por un módulo del PIC, por un cambio en el
estado de un pin o un recordatorio de que ha pasado un cierto tiempo. Como su nombre indica este aviso
interrumpirá la tarea que se esté haciendo en ese momento y pasaremos a ejecutar una rutina de servicio
o gestión de la interrupción
Habilitación de interrupciones: Antes de entrar en detalles sobre cada interrupción por separado
hemos de describir un par de bits (bits 7 y 6 del SFR INTCON) que tienen un efecto global sobre la
activación de bloques de interrupciones.

INTCON.GIE -> habilita (1) o deshabilita (0) todas las interrupciones.


INTCON.PEIE -> habilita (1) o deshabilita (0) las interrupciones asociadas a módulos periféricos.

Por ejemplo, antes de poder usar la interrupción del temporizador TMR0 debemos asegurarnos de que
las interrupciones globales estén habilitadas (INTCON.GIE=1). Si lo que deseamos es usar la
interrupción asociada a la recepción del puerto serie, tanto INTCON.GIE como INTCON.PEIE deben estar
a 1, ya que dicha interrupción está declarada como periférica.
PLAN DE PRÁCTICA NO. DE PRÁCTICA:
DIRECCIÓN DE CARRERA DE MECATRÓNICA Y 2
SISTEMAS PRODUCTIVOS FECHA:
TITULO DE LA PRÁCTICA: MODELOS ORGANIZACIONALES PÁGINA DE

_______________________
Bits asociados a cada interrupción: Además de los bits anteriores que afectan de forma global a las
interrupciones, para cada fuente de interrupción hay tres bits asociados:
• IE (interrupt enable): determina si la interrupción está o no habilitada. Si no lo está, aunque la
condición de la interrupción se cumpla, la interrupción no se producirá.
• IF (interrupt flan): indica si la condición de la interrupción se ha producido. Es responsabilidad
del usuario borrar dicho bit antes de regresar de la ISR.
• IP (interrupt priority): indica si la prioridad asociada a la interrupción es alta (1) o baja
(0). Obviamente, solo tiene efecto si está activado el modo de niveles de prioridad.
Cambios en pines (INT0, INT1, INT2, RB): La interrupción se produce con un cambio en el nivel de los
pines RB0, RB1 y RB2 respectivamente. Es posible establecer si la interrupción se produce en el flanco
ascendente o descendente (ver INT1_low2high e INT1_high2low en los ejemplos citados antes).
Rutinas de servicio de interrupciones (ISRs): GIE -> Habilita todas las interrupciones

PEIE -> Necesario (además de GIE) para las interrupciones periféricas.

El bit IE (int enable) de la interrupción deseada, habilitando dicha interrupción en particular.

El bit IF (int flag) de la interrupción, indicando que la condición de la interrupción se ha producido.

OBJETIVO DE LA PRÁCTICA
El alumno realizará la programación de contador ascendente y descendente utilizando las
interrupciones externas: INT0 (registro INTCON) para contador ascendente; INT2 (registro
INTCON3) para contador descendente.
MATERIAL: REACTIVOS: EQUIPO:
N/A
SOFTWARE PROTEUS N/A
SOFTWARE MPLAB
PLAN DE PRÁCTICA NO. DE PRÁCTICA:
DIRECCIÓN DE CARRERA DE MECATRÓNICA Y 2
SISTEMAS PRODUCTIVOS FECHA:
TITULO DE LA PRÁCTICA: MODELOS ORGANIZACIONALES PÁGINA DE

_______________________

PROCEDIMIENTO.
Para el desarrollo de la presente practica se comenzó con investigar un poco más acerca del tema de
interrupciones externas, tal que este era el tema del cual partiría la programación. Después de haber
concluido con la investigación y después de haber entendido más el tema, se comenzó con la
programación de un contador ascendente de 0 a 999 desplegados en displays 7 segmentos.
En el cual se comenzó por declarar variables de tipo entero las cuales fueron contadores de UNIDADES,
DECENAS Y CENTENAS, como se muestra en la siguiente imagen, cabe mencionar que en este caso
se utilizaron cristales externos. Y estos estarían en el número cero para el comienzo de la suma.

Seguidamente se realizó la programación para void __interrupt() ISR(void) { en el cual se habilitaron


todas las interrupciones a utilizar. Se ocupo una estructura if como condicionante de la programación, en
este caso se dio la indicación que el apartado de unidades empezara a contar de 0 a nueve cuando este
fuera mayor a nueve el contador decenas de igual manera comenzaría a contar conforme fuera sumando
el contador de unidades, en caso del contador de centenas funcionaba conforme los otros dos contadores
fuesen sumando.
PLAN DE PRÁCTICA NO. DE PRÁCTICA:
DIRECCIÓN DE CARRERA DE MECATRÓNICA Y 2
SISTEMAS PRODUCTIVOS FECHA:
TITULO DE LA PRÁCTICA: MODELOS ORGANIZACIONALES PÁGINA DE

_______________________

Posteriormente se procedió con la programación de void main(void) donde se declararon los puertos a
utilizar como salidas digitales y de igual manera deshabilitando canales analógicos de dichos puertos
para no presentar errores a la hora de correr el programa. De igual manera se ocuparon los interruptores
0 INT0 (INTC0N) en donde el comando GIE dio la indicación que se habilitaran todas las interrupciones
y el INT0IE determino si la interrupción está o no habilitada en este caso este será el que estará haciendo
el cambio de números.

También se creó un ciclo while en donde se determinaron los pines de los displays a utilizar y en los
cuales tendrían como resultado una salida digital que sería la que determinaría la sumatoria de los
contadores.
En la siguiente imagen se muestra lo dicho antes.
PLAN DE PRÁCTICA NO. DE PRÁCTICA:
DIRECCIÓN DE CARRERA DE MECATRÓNICA Y 2
SISTEMAS PRODUCTIVOS FECHA:
TITULO DE LA PRÁCTICA: MODELOS ORGANIZACIONALES PÁGINA DE

_______________________
Finalmente se procedió a compilar el programa en la cual no hubo complicaciones ya que el maestro
había iniciado la programación de dos displays.

Seguidamente de la compilación se procedió a realizar el circuito para la demostración de la


programación proteus como se muestra en la siguiente imagen.
PLAN DE PRÁCTICA NO. DE PRÁCTICA:
DIRECCIÓN DE CARRERA DE MECATRÓNICA Y 2
SISTEMAS PRODUCTIVOS FECHA:
TITULO DE LA PRÁCTICA: MODELOS ORGANIZACIONALES PÁGINA DE

_______________________

Después de probar la programación realizada en el software proteus se procedió a la realización de un


segundo contador de manera descendente de 999 a 0. En este caso para el contador se utilizó el pin
INT2 (registro INTCON3) el cual se tuvo que cambian un poco de la programación en primer lugar
fue que los displays al correr el programa tuvieran el número nueve desplegados en los displays
como se muestra en la siguiente imagen:
PLAN DE PRÁCTICA NO. DE PRÁCTICA:
DIRECCIÓN DE CARRERA DE MECATRÓNICA Y 2
SISTEMAS PRODUCTIVOS FECHA:
TITULO DE LA PRÁCTICA: MODELOS ORGANIZACIONALES PÁGINA DE

_______________________
Posteriormente se procedió a cambiar la secuencia de las interrupciones en el void __interrupt () ISR
(void) en el cual se indicó que la interrupción se iba dar gracias al INT2IF ubicado en INT2 del pic, cabe
mencionar que la terminación IF indica si la condición de la interrupción se ha producido. Es
responsabilidad del usuario borrar dicho bit antes de regresar de la ISR. Seguidamente se indicó en la
estructura if que ahora en lugar de ser una suma en los contadores se iban ir restando del 9 al 0 y que
cuando el número del display de unidades fuese < a 0 se iba a poner de nuevo en nueve y en el display
de decenas también se le iba a restar uno y así sucesivamente, las mismas indicaciones se iba a realizar
para el contador de centenas en la siguiente imagen se ,muestra las programación de este apartado:

Finalmente se procedio a cambiar el INTCONbits.INT0IE=1 por INTCON3bits.INT2IE=1 donde


determibabamos que interrupcion se daria con INCON3 EN EL PIN INT2 cabe destacar que IE determina
si la interrupción está o no habilitada. Si no lo está, aunque la condición de la interrupción se cumpla, la
interrupción no se producirá. La imagen correspondiente se muestra a continuación:
PLAN DE PRÁCTICA NO. DE PRÁCTICA:
DIRECCIÓN DE CARRERA DE MECATRÓNICA Y 2
SISTEMAS PRODUCTIVOS FECHA:
TITULO DE LA PRÁCTICA: MODELOS ORGANIZACIONALES PÁGINA DE

_______________________
La parte faltante de la programación se quedó de la misma manera ya que las salidas digitales ibas a
estar en los mismos puertos que en el contador anterior, posterior mente se hizo la compilación del
programa el cual fue de manera correcta ya que no presento errores de compilación:

Finalmente se procedió hacer el circuito correspondiente en el software proteus y de la misma manera


se cargo el respectivo programa de acuerdo al contador correspondiente:
PLAN DE PRÁCTICA NO. DE PRÁCTICA:
DIRECCIÓN DE CARRERA DE MECATRÓNICA Y 2
SISTEMAS PRODUCTIVOS FECHA:
TITULO DE LA PRÁCTICA: MODELOS ORGANIZACIONALES PÁGINA DE

_______________________

Análisis de resultados
En el desarrollo de la práctica no se presentaron errores en cuanto al contador ascendente, pero en la
parte del contador descendente se presentaron algunas dudas en cuanto al INT2, pero se investigó y se
solucionaron los detalles. Los resultados fueron los esperados ya que se cumplió con el objetivo de la
práctica . A continuación, se presentará la programación del contador ascendente:

*
* File: contador7segmentosaldomt92.c
* Author: ALDO VILCHIS MT92
*
* Created on 6 de junio de 2020, 03:02 PM
*/

#include <xc.h>
#define _XTAL_FREQ 4000000 //ALDO VILCHIS MT92
#pragma config FOSC = XT //ALDO VILCHIS MT92

int contadorUnidades=0; //ALDO VILCHIS MT92


int contadorDecenas=0; //ALDO VILCHIS MT92
int contadorCentenas=0; //ALDO VILCHIS MT92
int numeros [10]= {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x67}; //ALDO VILCHIS MT92
PLAN DE PRÁCTICA NO. DE PRÁCTICA:
DIRECCIÓN DE CARRERA DE MECATRÓNICA Y 2
SISTEMAS PRODUCTIVOS FECHA:
TITULO DE LA PRÁCTICA: MODELOS ORGANIZACIONALES PÁGINA DE

_______________________

void __interrupt() ISR(void) { //ALDO VILCHIS MT92

if(INT0IF==1){ //ALDO VILCHIS MT92


contadorUnidades++; //ALDO VILCHIS MT92
if(contadorUnidades>9){ //ALDO VILCHIS MT92
contadorUnidades=0; //ALDO VILCHIS MT92
contadorDecenas++;//ALDO VILCHIS MT92
}
if(contadorDecenas>9){ //ALDO VILCHIS MT92//ALDO VILCHIS MT92
contadorDecenas=0; //ALDO VILCHIS MT92
contadorCentenas++; //ALDO VILCHIS MT92
} //ALDO VILCHIS MT92
INT0IF=0; //ALDO VILCHIS MT92
}
}

void main(void) {

TRISC=0; //ALDO VILCHIS MT92


ANSELC=0; //ALDO VILCHIS MT92
TRISA=0; //ALDO VILCHIS MT92
ANSELA=0; //ALDO VILCHIS MT92
LATA=0; //ALDO VILCHIS MT92
TRISB=0; //ALDO VILCHIS MT92
ANSELB=0; //ALDO VILCHIS MT92

INTCONbits.GIE= 1; //ALDO VILCHIS MT92


INTCONbits.INT0IE=1; //ALDO VILCHIS MT92

while(1){
LATCbits.LATC0=0; //ALDO VILCHIS MT92
LATA= numeros[contadorUnidades]; //ALDO VILCHIS MT92
__delay_ms(20); //ALDO VILCHIS MT92
LATCbits.LATC0=1; //ALDO VILCHIS MT92
LATCbits.LATC1=0; //ALDO VILCHIS MT92
LATA=numeros[contadorDecenas]; //ALDO VILCHIS MT92
__delay_ms(20); //ALDO VILCHIS MT92
LATCbits.LATC1=1; //ALDO VILCHIS MT92
LATCbits.LATC2=0; //ALDO VILCHIS MT92
LATA=numeros[contadorCentenas]; //ALDO VILCHIS MT92
__delay_ms(20); //ALDO VILCHIS MT92
LATCbits.LATC2=1; //ALDO VILCHIS MT92

}
return;
}
PLAN DE PRÁCTICA NO. DE PRÁCTICA:
DIRECCIÓN DE CARRERA DE MECATRÓNICA Y 2
SISTEMAS PRODUCTIVOS FECHA:
TITULO DE LA PRÁCTICA: MODELOS ORGANIZACIONALES PÁGINA DE

_______________________

A continuación, se presentará la programación del contador descendente:

*
* File: 7segcontadordescendentealdovilchismt92.c
* Author: ALDO VILCHIS MT92
*
* Created on 6 de junio de 2020, 06:33 PM
*/
#include <xc.h>
#define _XTAL_FREQ 4000000 //ALDO VILCHIS MT92
#pragma config FOSC = XT //ALDO VILCHIS MT92

int contadorUnidades=9; //ALDO VILCHIS MT92


int contadorDecenas=9; //ALDO VILCHIS MT92
int contadorCentenas=9; //ALDO VILCHIS MT92
int numeros [10]= {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x67}; //ALDO VILCHIS MT92
void __interrupt() ISR(void) { //ALDO VILCHIS MT92

if(INT2IF==1){ //ALDO VILCHIS MT92


PLAN DE PRÁCTICA NO. DE PRÁCTICA:
DIRECCIÓN DE CARRERA DE MECATRÓNICA Y 2
SISTEMAS PRODUCTIVOS FECHA:
TITULO DE LA PRÁCTICA: MODELOS ORGANIZACIONALES PÁGINA DE

_______________________
contadorUnidades --; //ALDO VILCHIS MT92
if(contadorUnidades<0){ //ALDO VILCHIS MT92
contadorUnidades=9; //ALDO VILCHIS MT92
contadorDecenas --; //ALDO VILCHIS MT92
}
if(contadorDecenas<0){ //ALDO VILCHIS MT92
contadorDecenas=9; //ALDO VILCHIS MT92
contadorCentenas --; //ALDO VILCHIS MT92
}
INT2IF=0; //ALDO VILCHIS MT92//ALDO VILCHIS MT92
}
}
void main(void) {
TRISC=0; //ALDO VILCHIS MT92
ANSELC=0; //ALDO VILCHIS MT92
TRISA=0; //ALDO VILCHIS MT92
ANSELA=0; //ALDO VILCHIS MT92
LATA=0; //ALDO VILCHIS MT92
TRISB=0; //ALDO VILCHIS MT92
ANSELB=0; //ALDO VILCHIS MT92

INTCONbits.GIE= 1; //ALDO VILCHIS MT92


INTCON3bits.INT2IE=1; //ALDO VILCHIS MT92

while(1){
LATCbits.LATC0=0; //ALDO VILCHIS MT92
LATA= numeros[contadorUnidades]; //ALDO VILCHIS MT92
__delay_ms(20); //ALDO VILCHIS MT92
LATCbits.LATC0=1; //ALDO VILCHIS MT92
LATCbits.LATC1=0; //ALDO VILCHIS MT92
LATA=numeros[contadorDecenas]; //ALDO VILCHIS MT92
__delay_ms(20); //ALDO VILCHIS MT92
LATCbits.LATC1=1; //ALDO VILCHIS MT92
LATCbits.LATC2=0; //ALDO VILCHIS MT92
LATA=numeros[contadorCentenas]; //ALDO VILCHIS MT92
__delay_ms(20); //ALDO VILCHIS MT92
LATCbits.LATC2=1; //ALDO VILCHIS MT92
}
return;
}
PLAN DE PRÁCTICA NO. DE PRÁCTICA:
DIRECCIÓN DE CARRERA DE MECATRÓNICA Y 2
SISTEMAS PRODUCTIVOS FECHA:
TITULO DE LA PRÁCTICA: MODELOS ORGANIZACIONALES PÁGINA DE

_______________________

Nota: a continuacion se agragara un link para ver el comportamiento de los


contadores de la presente practica, esto con el fin de que el docente comprube los
resltados mensionados anteriormete:

https://www.youtube.com/watch?v=oa-K5zPkEsg
PLAN DE PRÁCTICA NO. DE PRÁCTICA:
DIRECCIÓN DE CARRERA DE MECATRÓNICA Y 2
SISTEMAS PRODUCTIVOS FECHA:
TITULO DE LA PRÁCTICA: MODELOS ORGANIZACIONALES PÁGINA DE

_______________________

Preguntas
Que es un comtador? Un contador es muy necesario para cualquier trabajo que se desee empeñar
con un PIC

¿Qué es una interrupción? Una interrupción es un aviso provocado por un módulo del PIC, por un
cambio en el estado de un pin o un recordatorio de que ha pasado un cierto tiempo

¿Que es la IE (interrupt enable)? determina si la interrupción está o no habilitada. Si no lo está, aunque


la condición de la interrupción se cumpla, la interrupción no se producirá

¿Qué es IF (interrupt flan)? indica si la condición de la interrupción se ha producido. Es


responsabilidad del usuario borrar dicho bit antes de regresar de la ISR.

Que es IP (interrupt priority indica si la prioridad asociada a la interrupción es alta (1) o baja
(0). Obviamente, solo tiene efecto si está activado el modo de niveles de prioridad

Que es un display 7 segmentos? está compuesto por leds, es decir una pantalla o visualizador que la
información que nos muestra es por medio de luces tipo led
PLAN DE PRÁCTICA NO. DE PRÁCTICA:
DIRECCIÓN DE CARRERA DE MECATRÓNICA Y 2
SISTEMAS PRODUCTIVOS FECHA:
TITULO DE LA PRÁCTICA: MODELOS ORGANIZACIONALES PÁGINA DE

_______________________

CONCLUSION.

At the end of the practice new knowledge was obtained in the same way good results were

obtained, I learned to make a counter. In real life, these types of projects are not very essential and

used in companies since it allows to keep a correct count of many things that the programmer

decides, this is seen a lot in the counters of trucks using sensors, people who enter a store or

shopping center, the rise and fall in companies, the counting of products in the industry, this type

of program has a lot of application in different areas.

This practice was very helpful as well as it was a good practice where it leads us to want to know

more about the subject and go deeper into the world of pic programming.

I am very happy with the results. I liked this practice a lot.

BIBLIOGRAFÍA

http://picfernalia.blogspot.com/2012/06/interrupciones-conceptos-
basicos.html#:~:text=Una%20interrupci%C3%B3n%20es%20un%20aviso,o%20gesti-
%C3%B3n%20de%20la%20interrupci%C3%B3n.

https://es.slideshare.net/jachlmL/manual-mplab

https://www.ecured.cu/Proteus_VSM

También podría gustarte