Вы находитесь на странице: 1из 14

ESCUELA SUPERIOR POLITCNICA DEL LITORAL FACULTAD DE INGENIERA ELCTRICA Y COMPUTACIN Laboratorio de Microcontroladores Prctica 6

INTERRUPCIONES Y TEMPORIZADORES EN LENGUAJE C

Integrantes Isaac Mguez V. Ericka Oyague B. Paralelo: 2 Grupo: 2

Fecha de presentacin: 16/07/2013 2013 1 TRMINO

OBJETIVOS:
Familiarizarse con el entorno de programacin en Lenguaje C Comprender el manejo de interrupciones en C Trabajar con temporizadores y el Perro Guardin (WDT)

1.- Enunciado del proyecto


La prctica consiste en cuatro programas. Cada uno utiliza los temporizadores que contiene el microcontrolador: TIMER 0, TIMER 1, TIMER 2 y el WDT. Cada TIMER se los utiliza como retardos temporizados para notar los cambios en el puerto B, excepto el WDT que se lo utiliza para reiniciar el programa principal. Para el primer programa, cuando se ejecuta el desborde del TMR0, producir la rutina de interrupcin, que incrementa un contador interno; Que al contar cuatrocientas interrupciones se incrementar en uno, el valor de PORTB. El segundo programa utiliza el Timer1 como temporizador; As como el primer programa en cada interrupcin por desbordamiento, internamente incrementar un contador de interrupciones; Que al contar setenta y seis interrupciones presentar el complemento del valor anterior del puerto B, el cual inicia con 0xF0 h. El tercer programa utiliza el Timer2 como temporizador; As como el anterior programa en cada interrupcin por desbordamiento, internamente incrementar un contador de interrupciones; Que al contar ms de treinta interrupciones presentar el complemento del valor anterior del puerto B, el cual inicia con 0xAA h. El cuarto programa utiliza el WDT como temporizador. Al ejecutarse el programa cada vez que se desborde el WDT, reinicia el programa principal; El cual contiene un retardo de 30 milisegundos entre la presentacin de los valores 0x0F h y 0xF0 h en el puerto B. Solo suceder la anterior ejecucin al borrar la sentencia de encerar el valor del WDT presente en el cdigo descrito; Caso contrario nunca ocurrir el desborde del WDT y solo se presentar una vez la ejecucin. 2.- Diagrama de Bloques Programa 1,2 y 3:
RUTINA INTERRUPCIN O DESBORDE POR WDT

PULSADOR DESDE MCLR

PIC16F887

ENCENDIDO DE LEDS QUE REPRESENTAN UN VALOR QUE TENDRAN EN LAS DISTINTAS INTERRUPCIONES PORTB

3.- Diagrama de Flujo funcional del Programa principal y de las subrutinas


Programa Principal 1
INICIO

SETEO DE PUERTOS,INICIALIZAR VARIABLES; TMR0=96 CONFIGURACIN DE LA INTERRUPCIN USANDO EL TMR0 COMO TEMPORIZADOR

LAZO WHILE

Cnt=400

PORTB<=PORTB+1

0=>Cnt

TOIF=1

INICIO DE INTERRUPCIN

Programa Principal 2
INICIO

SETEO DE PUERTOS,INICIALIZAR VARIABLES; TMR1H=0X80h,TMR1L=0X00h CONFIGURACIN DE LA INTERRUPCIN USANDO EL TMR1 COMO TEMPORIZADOR

LAZO WHILE
F

Cnt=76

PORTB<=COMP(PORTB)

0=>Cnt

TMR1IF=1

INICIO DE INTERRUPCIN

Programa Principal 3
INICIO

SETEO DE PUERTOS,INICIALIZAR VARIABLES; TMR2<=0X00H CONFIGURACIN DE LA INTERRUPCIN USANDO EL TMR2 COMO TEMPORIZADOR

LAZO WHILE
F

Cnt>30

PORTB<=COMP(PORTB)

0=>Cnt

PIR1,TMR2IF=1

INICIO DE INTERRUPCIN

Programa Principal 4

INICIO

SETEO DE PUERTOS,INICIALIZAR VARIABLES; TMR2<=0X00H CONFIGURACIN DE LA INTERRUPCIN USANDO EL TMR0 COMO TEMPORIZADOR DEL WDT
V

WDTCON=1 PORTB=0X0Fh RETARDO DE 30ms

PORTB=0XF0h

bandera WDT=1

WDT<=0

Subrutina Parte 1
INICIO INTERRUPCION

Subrutina Parte 2
INICIO INTERRUPCION

Cnt<= cnt+1

Cnt<= cnt+1

TMR0<=96

TMR1H=0X80h TMR1L=0X00h

INTCON<= 0X20

TMR1IF<=0

REGRESO A LAZO WHILE

REGRESO A LAZO WHILE

Subrutina Parte 3

INICIO INTERRUPCION

Cnt<= cnt+1

TMR2<=0

PIR1,TMR2IF<=0

REGRESO A LAZO WHILE

5.- Listado del programa fuente en lenguaje ensamblador con


comentarios en las lneas de cdigo que considere fundamentales Programa 1
/* * Nombre del Proyecto: P6a_t0.c * Nombre del Autor: (c) Mikroelektronika, 2009. * Description: (Explicacin del ejercicio) * Test configuration: MCU: PIC16F887 Oscillator: HS, 08.0000 MHz SW: mikroC PRO for PIC * NOTES: Cada vez que el TMR0 se desborda ocurre una interrupcin. Dentro de cada Interrupcin aumenta el valor de cnt, el cual cuenta cada interrupcin Realizada en el programa. Aumenta el valor del puerto B cada vez que se produzca 400 interrupciones; Lo que reinicia el contador de las interrupciones cnt. */ /*Header******************************************************/ unsigned cnt; void interrupt() { cnt++; TMR0 = 96; INTCON = 0x20; } void main() { OPTION_REG = 0x84; ANSEL = 0; ANSELH = 0; TRISB = 0; PORTB = 0x0; TMR0 = 96; INTCON = 0xA0; cnt = 0; do { if (cnt == 400) { PORTB = PORTB++; cnt = 0; } } while(1); } // Define variable cnt // Interrupt causes cnt to be incremented by 1 // Timer TMR0 is returned its initial value // Bit T0IE is set, bit T0IF is cleared

// Prescaler is assigned to timer TMR0 // All I/O pins are configured as digital // // // // // // // // // All port B pins are configured as outputs Reset port B Timer T0 counts from 96 to 255 Enable interrupt TMR0 Variable cnt is assigned a 0 Endless loop Increment port B after 400 interrupts Increment number on port B by 1 Reset variable cnt

Programa 2
/* * Nombre del Proyecto: P6a_t0.c * Nombre del Autor: (c) Mikroelektronika, 2009. * Description: (Explicacin del ejercicio) * Test configuration: MCU: PIC16F887 Oscillator: HS, 08.0000 MHz SW: mikroC PRO for PIC * NOTES: Cada vez que el TMR1 se desborda ocurre una interrupcin. Dentro de cada Interrupcin aumenta el valor de cnt, el cual cuenta cada interrupcin Realizada en el programa. Realiza el complement del valor anterior del puerto B, cada vez que se produzca 76 interrupciones; Lo que reinicia el contador de las interrupciones cnt.

*/ /*Header******************************************************/ unsigned short cnt; // Define variable cnt void interrupt() { cnt++; PIR1.TMR1IF = 0; TMR1H = 0x80; TMR1L = 0x00; } void main() { ANSEL = 0; ANSELH = 0; PORTB = 0xF0; TRISB = 0; T1CON = 1; PIR1.TMR1IF = 0; TMR1H = 0x80; TMR1L = 0x00; PIE1.TMR1IE = 1; cnt = 0; INTCON = 0xC0; do { if (cnt == 76) { PORTB = ~PORTB; cnt = 0; } } while (1); } // Interrupt causes cnt to be incremented by 1 // Reset bit TMR1IF // TMR1H and TMR1L timer registers are returned // their initial values

// All I/O pins are configured as digital // // // // // Initial value of port B bits Port B pins are configured as outputs Set timer TMR1 Reset bit TMR1IF Set initial value for timer TMR1

// Enable interrupt on overflow // Reset variable cnt // Enable interrupt (bits GIE and PEIE) // // // // Endless loop Change port B state after 76 interrupts Number in port B is inverted Reset variable cnt

Programa 3
/* * Nombre del Proyecto: P6a_t0.c * Nombre del Autor: (c) Mikroelektronika, 2009. * Description: (Explicacin del ejercicio) * Test configuration: MCU: PIC16F887 Oscillator: HS, 08.0000 MHz SW: mikroC PRO for PIC * NOTES: Cada vez que el TMR2 se desborda ocurre una interrupcin. Dentro de cada Interrupcin aumenta el valor de cnt, el cual cuenta cada interrupcin Realizada en el programa. Presenta el complemento del valor anterior del puerto B cada vez que se produzca mas de 30interrupciones. Lo que reinicia el contador de las interrupciones cnt. */ /*Header******************************************************/ unsigned short cnt; void Replace() { PORTB = ~PORTB; } // Define variable cnt // Define new function Replace // Function inverts port state If bit TMR2IF = 1, Increment variable cnt by 1 Reset bit and reset register TMR2

void interrupt() { if (PIR1.TMR2IF) { // cnt++ ; // PIR1.TMR2IF = 0;// TMR2 = 0; // } } // main

void main() { cnt = 0; ANSEL = 0; ANSELH = 0; PORTB = 0b10101010; TRISB = 0; T2CON = 0xFF; TMR2 = 0; PIE1.TMR2IE = 1; INTCON = 0xC0; while (1) { if (cnt > 30) { Replace(); cnt = 0; } } }

// Reset variable cnt // All I/O pins are configured as digital // // // // // // // // // // Logic state on port B pins All port B pins are configured as outputs Set timer T2 Initial value of timer register TMR2 Enable interrupt Set bits GIE and PEIE Endless loop Change PORTB after more than 30 interrupts Function Replace inverts the port B state Reset variable cnt

Programa 4
/* * Nombre del Proyecto: P6a_t0.c * Nombre del Autor: (c) Mikroelektronika, 2009. * Description: (Explicacin del ejercicio) * Test configuration: MCU: PIC16F887 Oscillator: HS, 08.0000 MHz SW: mikroC PRO for PIC * NOTES: El cuarto programa utiliza el WDT como temporizador. Al ejecutarse el programa cada vez que se desborde el WDT, reinicia el programa principal; El cual contiene un retardo de 30 milisegundos entre la presentacin de los valores 0x0F h y 0xF0 h en el puerto B. Solo suceder la anterior ejecucin al borrar la sentencia de encerar el valor del WDT; Caso contrario nunca ocurrir el desborde del WDT y solo se presentar una vez la ejecucin. */ /*Header******************************************************/ void main() { OPTION_REG = 0x08; // Prescaler is assigned to timer WDT (1:64) WDTCON = 1; PORTB = 0x0F; TRISB = 0; Delay_ms(300); PORTB = 0xF0; while (1) { asm CLRWDT; } // Initial value of the PORTB register // All port B pins are configured as outputs // 30mS delay // Porta B value different from initial

// Assembly command to reset WDT timer

}// timer resets the microcontroller

6).- Copia impresa del circuito armado en PROTEUS para la simulacin en el momento de su ejecucin. PROGRAMA 1: EN EL PUERTO B SE ENCUENTRAN LOS VALORES QUE TOMAN LOS LED EN CADA INTERRUPCIN.
U1
15 16 17 18 23 24 25 26 19 20 21 22 27 28 29 30 8 9 10 RC0/T1OSO/T1CKI RE3/MCLR/VPP RC1/T1OSI/CCP2 RC2/P1A/CCP1 RA0/AN0/ULPWU/C12IN0RC3/SCK/SCL RA1/AN1/C12IN1RC4/SDI/SDA RA2/AN2/VREF-/CVREF/C2IN+ RC5/SDO RA3/AN3/VREF+/C1IN+ RC6/TX/CK RA4/T0CKI/C1OUT RC7/RX/DT RA5/AN4/SS/C2OUT RA6/OSC2/CLKOUT RD0 RA7/OSC1/CLKIN RD1 RD2 RB0/AN12/INT RD3 RB1/AN10/C12IN3RD4 RB2/AN8 RD5/P1B RB3/AN9/PGM/C12IN2RD6/P1C RB4/AN11 RD7/P1D RB5/AN13/T1G RB6/ICSPCLK RE0/AN5 RB7/ICSPDAT RE1/AN6 RE2/AN7 PIC16F887 RB7 1 2 3 4 5 6 7 14 13 33 34 35 36 37 38 39 40 RB0 RB1 RB2 RB3 RB4 RB5 RB6 RB7 RB0

MCLR

R1
10k

D1 D2
RB1 LED-RED

R9
330

R8
330

D3
RB2

LED-RED

R7
330

D4
RB3

LED-RED

R6
330

D5
RB4

LED-RED

R5
330

RB5

D6 LED-RED D7 LED-RED D8 LED-RED


LED-RED

R4
330

RB6

R3
330

R2
330

PROGRAMA 2: EN EL PUERTO B SE PRESENTA EN CADA INTERRUPCIN EL COMPLEMENTO DEL VALOR ANTERIOR.


U1
15 16 17 18 23 24 25 26 19 20 21 22 27 28 29 30 8 9 10 RC0/T1OSO/T1CKI RE3/MCLR/VPP RC1/T1OSI/CCP2 RC2/P1A/CCP1 RA0/AN0/ULPWU/C12IN0RC3/SCK/SCL RA1/AN1/C12IN1RC4/SDI/SDA RA2/AN2/VREF-/CVREF/C2IN+ RC5/SDO RA3/AN3/VREF+/C1IN+ RC6/TX/CK RA4/T0CKI/C1OUT RC7/RX/DT RA5/AN4/SS/C2OUT RA6/OSC2/CLKOUT RD0 RA7/OSC1/CLKIN RD1 RD2 RB0/AN12/INT RD3 RB1/AN10/C12IN3RD4 RB2/AN8 RD5/P1B RB3/AN9/PGM/C12IN2RD6/P1C RB4/AN11 RD7/P1D RB5/AN13/T1G RB6/ICSPCLK RE0/AN5 RB7/ICSPDAT RE1/AN6 RE2/AN7 PIC16F887 RB7 1 2 3 4 5 6 7 14 13 33 34 35 36 37 38 39 40 RB0 RB1 RB2 RB3 RB4 RB5 RB6 RB7 RB0

MCLR

R1
10k

U1

MCLR
1 2 3 4 5 6 7 14 13 33 34 35 36 37 38 39 40 RB0 RB1 RB2 RB3 RB4 RB5 RB6 RB7 RB0

R1
10k

D1 D2
RB1 LED-RED

R9
330

R8
330

RB2

D3 LED-RED D4 LED-RED D5
LED-RED

15 16 17 18 23 24 25 26 19 20 21 22 27 28 29 30 8 9 10

R7
330

RB3

R6
330

RB4

R5
330

RB5

D6 LED-RED D7 LED-RED D8
LED-RED

R4
330

RB6

R3
330

RC0/T1OSO/T1CKI RE3/MCLR/VPP RC1/T1OSI/CCP2 RC2/P1A/CCP1 RA0/AN0/ULPWU/C12IN0RC3/SCK/SCL RA1/AN1/C12IN1RC4/SDI/SDA RA2/AN2/VREF-/CVREF/C2IN+ RC5/SDO RA3/AN3/VREF+/C1IN+ RC6/TX/CK RA4/T0CKI/C1OUT RC7/RX/DT RA5/AN4/SS/C2OUT RA6/OSC2/CLKOUT RD0 RA7/OSC1/CLKIN RD1 RD2 RB0/AN12/INT RD3 RB1/AN10/C12IN3RD4 RB2/AN8 RD5/P1B RB3/AN9/PGM/C12IN2RD6/P1C RB4/AN11 RD7/P1D RB5/AN13/T1G RB6/ICSPCLK RE0/AN5 RB7/ICSPDAT RE1/AN6 RE2/AN7 PIC16F887

D1 D2
RB1 LED-RED

R9
330

R8
330

RB2

D3 LED-RED D4 LED-RED D5
LED-RED

R7
330

RB3

R6
330

RB4

R5
330

RB5

D6 LED-RED D7 LED-RED D8
LED-RED

R4
330

RB6

R3
330

R2
330

RB7

R2
330

LED-RED

LED-RED

PROGRAMA 3: EN EL PUERTO B SE PRESENTA EN CADA INTERRUPCIN EL COMPLEMENTO DEL VALOR ANTERIOR.


U1
15 16 17 18 23 24 25 26 19 20 21 22 27 28 29 30 8 9 10 RC0/T1OSO/T1CKI RE3/MCLR/VPP RC1/T1OSI/CCP2 RC2/P1A/CCP1 RA0/AN0/ULPWU/C12IN0RC3/SCK/SCL RA1/AN1/C12IN1RC4/SDI/SDA RA2/AN2/VREF-/CVREF/C2IN+ RC5/SDO RA3/AN3/VREF+/C1IN+ RC6/TX/CK RA4/T0CKI/C1OUT RC7/RX/DT RA5/AN4/SS/C2OUT RA6/OSC2/CLKOUT RD0 RA7/OSC1/CLKIN RD1 RD2 RB0/AN12/INT RD3 RB1/AN10/C12IN3RD4 RB2/AN8 RD5/P1B RB3/AN9/PGM/C12IN2RD6/P1C RB4/AN11 RD7/P1D RB5/AN13/T1G RB6/ICSPCLK RE0/AN5 RB7/ICSPDAT RE1/AN6 RE2/AN7 PIC16F887 1 2 3 4 5 6 7 14 13 33 34 35 36 37 38 39 40 RB0 RB1 RB2 RB3 RB4 RB5 RB6 RB7

MCLR D1
RB0

R1
10k

U1

MCLR
1 2 3 4 5 6 7 14 13 33 34 35 36 37 38 39 40 RB0 RB1 RB2 RB3 RB4 RB5 RB6 RB7

R1
10k

R9
330 LED-RED

D2
RB1

R8
330

D3
RB2

15 16 17 18 23 24 25 26 19 20 21 22 27 28 29 30 8 9 10

LED-RED

R7
330

D4
RB3

LED-RED

R6
330

D5
RB4

LED-RED

R5
330

D6
RB5

LED-RED

R4
330

D7
RB6

LED-RED

R3
330

RC0/T1OSO/T1CKI RE3/MCLR/VPP RC1/T1OSI/CCP2 RC2/P1A/CCP1 RA0/AN0/ULPWU/C12IN0RC3/SCK/SCL RA1/AN1/C12IN1RC4/SDI/SDA RA2/AN2/VREF-/CVREF/C2IN+ RC5/SDO RA3/AN3/VREF+/C1IN+ RC6/TX/CK RA4/T0CKI/C1OUT RC7/RX/DT RA5/AN4/SS/C2OUT RA6/OSC2/CLKOUT RD0 RA7/OSC1/CLKIN RD1 RD2 RB0/AN12/INT RD3 RB1/AN10/C12IN3RD4 RB2/AN8 RD5/P1B RB3/AN9/PGM/C12IN2RD6/P1C RB4/AN11 RD7/P1D RB5/AN13/T1G RB6/ICSPCLK RE0/AN5 RB7/ICSPDAT RE1/AN6 RE2/AN7 PIC16F887

D1
RB0

R9
330 LED-RED

D2
RB1

R8
330

D3
RB2

LED-RED

R7
330

D4
RB3

LED-RED

R6
330

D5
RB4

LED-RED

R5
330

D6
RB5

LED-RED

R4
330

D7
RB6

LED-RED

R3
330

D8
RB7

LED-RED

R2
330

D8
RB7

LED-RED

R2
330

LED-RED

LED-RED

PROGRAMA 4: SE PUEDE ONSERVAR QUE EL PROGRAMA SOLO EJECUTA UNA VEZ EL CAMBIO DE 0XF0 A 0X0F EN EL PUERTO B.
U1
15 16 17 18 23 24 25 26 19 20 21 22 27 28 29 30 8 9 10 RC0/T1OSO/T1CKI RE3/MCLR/VPP RC1/T1OSI/CCP2 RC2/P1A/CCP1 RA0/AN0/ULPWU/C12IN0RC3/SCK/SCL RA1/AN1/C12IN1RC4/SDI/SDA RA2/AN2/VREF-/CVREF/C2IN+ RC5/SDO RA3/AN3/VREF+/C1IN+ RC6/TX/CK RA4/T0CKI/C1OUT RC7/RX/DT RA5/AN4/SS/C2OUT RA6/OSC2/CLKOUT RD0 RA7/OSC1/CLKIN RD1 RD2 RB0/AN12/INT RD3 RB1/AN10/C12IN3RD4 RB2/AN8 RD5/P1B RB3/AN9/PGM/C12IN2RD6/P1C RB4/AN11 RD7/P1D RB5/AN13/T1G RB6/ICSPCLK RE0/AN5 RB7/ICSPDAT RE1/AN6 RE2/AN7 PIC16F887 RB7 1 2 3 4 5 6 7 14 13 33 34 35 36 37 38 39 40 RB0 RB1 RB2 RB3 RB4 RB5 RB6 RB7 RB0

MCLR

R1
10k

U1

MCLR
1 2 3 4 5 6 7 14 13 33 34 35 36 37 38 39 40 RB0 RB1 RB2 RB3 RB4 RB5 RB6 RB7 RB0

R1
10k

D1 D2 LED-RED D3 LED-RED D4
RB3 LED-RED

R9
330

RB1

R8
330

15 16 17 18 23 24 25 26 19 20 21 22 27 28 29 30 8 9 10

RB2

R7
330

R6
330

RB4

D5 LED-RED D6 LED-RED D7
LED-RED

R5
330

RB5

R4
330

RB6

R3
330

RC0/T1OSO/T1CKI RE3/MCLR/VPP RC1/T1OSI/CCP2 RC2/P1A/CCP1 RA0/AN0/ULPWU/C12IN0RC3/SCK/SCL RA1/AN1/C12IN1RC4/SDI/SDA RA2/AN2/VREF-/CVREF/C2IN+ RC5/SDO RA3/AN3/VREF+/C1IN+ RC6/TX/CK RA4/T0CKI/C1OUT RC7/RX/DT RA5/AN4/SS/C2OUT RA6/OSC2/CLKOUT RD0 RA7/OSC1/CLKIN RD1 RD2 RB0/AN12/INT RD3 RB1/AN10/C12IN3RD4 RB2/AN8 RD5/P1B RB3/AN9/PGM/C12IN2RD6/P1C RB4/AN11 RD7/P1D RB5/AN13/T1G RB6/ICSPCLK RE0/AN5 RB7/ICSPDAT RE1/AN6 RE2/AN7 PIC16F887

D1 D2 LED-RED D3 LED-RED D4
RB3 LED-RED

R9
330

RB1

R8
330

RB2

R7
330

R6
330

RB4

D5 LED-RED D6 LED-RED D7
LED-RED

R5
330

RB5

R4
330

RB6

R3
330

D8 LED-RED
LED-RED

R2
330

RB7

D8 LED-RED
LED-RED

R2
330

7.- Conclusiones Al final de la prctica el objetivo fundamental fue, familiarizarse con la programacin del microcontrolador en leguaje C en el programa MIKROC; El cual en cierta medida es mucho ms amigable con el usuario, que el lenguaje ensamblador. Tambin hay que recordar que el lenguaje ensamblador es una base de los procesos que se realizaran en C; Siendo un lenguaje ms complejo y eficaz que el C. Se pudo analizar que el manejo de las interrupciones en el lenguaje C son mucho ms fcil de hacer; No es necesario demasiadas lneas de cdigo para realizar un proceso muy largo. Adems el lenguaje C de MIKROC incluye libreras personalizadas para trabajar con cualquier familia del microcontrolador MICROCHIP. El programa MIKROC tambin nos permite escribir comandos propios del lenguaje ensamblador en la estructura de nuestro programa; Siendo una ventaja libre y verstil al trabajar programando un microcontrolador. En esta prctica el diferente uso de las interrupciones por TIMER0, TIMER1, TIMER2 o el WDT, es similar que en el lenguaje ensamblador. Siempre se tendr que configurar los registros de control de cada temporizador y a su vez en cada interrupcin, encerar la bandera de cada timer. Se pudo observar que el WDT, cada vez que se produce su desborde; Reinicia el programa a la primera posicin de la pila de ejecucin. Se pudo observar que el TIMER2 trabaja de forma diferente a los otros dos temporizadores; Adems de tener un pre-escalador y un post-escalador; La

manera de trabajar es comparando su valor con el registro PR2. Que cuando sean iguales produzcan la interrupcin, caso contrario no. Se observ que el TIMER1 posee 16 bits para contar en cada ejecucin; Dividido en dos registros los cuales son: TIMER1H y TIMER1L.

8.- Recomendaciones
Al usar el programa MICROC se debe recordar que ahora, se guarda el archivo de nuestro programa con extensin .c ya que utilizaremos este lenguaje.

Al realizar el programa el lenguaje C, facilita modularizar nuestro programa; Creando funciones las cuales pueden servir dentro del miso programa ms de una vez.

Se debe recordar que siempre se debe configurar los registros del control de cada temporizador para poder usarlos con la funcin que uno desee.

No olvidar encerar el valor de las banderas del temporizador utilizado, en cada interrupcin; Ya que si no se lo realiza nunca saldr de la interrupcin.

Al momento de usar el WDT, se debe tener consideracin que dentro del programa se debe de reiniciar su valor, dentro de procesos que no lo utilice; Ya que puede reiniciar el proceso en una posicin del programa que no sea la debida.

ANEXO
RESPONDER Primer programa: 1) Luego de analizar el programa coloque en la cabecera la descripcin correspondiente. Cada vez que el TMR0 se desborda ocurre una interrupcin. Dentro de cada interrupcin aumenta el valor de cnt, el cual cuenta cada interrupcin Realizada en el programa. Aumenta el valor del puerto B, cada vez que se produzca 400 interrupciones; Lo que reinicia el contador de las interrupciones cnt. 2) Verifique el tiempo que demora en ocurrir una interrupcin

3) Cunto demoran las 400 interrupciones?

Segundo programa: 1) Luego de analizar el programa coloque en la cabecera la descripcin correspondiente. Cada vez que el TMR1 se desborda ocurre una interrupcin. Dentro de cada Interrupcin aumenta el valor de cnt, el cual cuenta cada interrupcin Realizada en el programa. Realiza el complemento del valor anterior del puerto B, cada vez que se produzca 76 interrupciones; Lo que reinicia el contador de las interrupciones cnt. 2) Cada qu tiempo se interrumpe con el Timer 1

3) Cunto demoran las 76 interrupciones?

Tercer Ejercicio 1) Luego de analizar el programa coloque en la cabecera la descripcin correspondiente. Cada vez que el TMR2 se desborda ocurre una interrupcin. Dentro de cada interrupcin aumenta el valor de cnt, el cual cuenta cada interrupcin realizada en el programa. Presenta el complemento del valor anterior del puerto B, cada vez que se produzca ms de 30 interrupciones; Lo que reinicia el contador de las interrupciones cnt.

2) Cada qu tiempo se interrumpe con el Timer 2

3) Cunto demoran 31 interrupciones?6

Cuarto Ejercicio 1) Luego de analizar el programa coloque en la cabecera la descripcin correspondiente. El cuarto programa utiliza el WDT como temporizador. Al ejecutarse el programa cada vez que se desborde el WDT, reinicia el programa principal; El cual contiene un retardo de 30 milisegundos entre la presentacin de los valores 0x0F h y 0xF0 h en el puerto B. Solo suceder la anterior ejecucin al borrar la sentencia de encerar el valor del WDT; Caso contrario nunca ocurrir el desborde del WDT y solo se presentar una vez la ejecucin. 2) Quite la instruccin: asm CLRWDT y explique lo que ocurre. Al ejecutarse el programa cada vez que se desborde el WDT, reinicia el programa principal; El cual contiene un retardo de 30 milisegundos entre la presentacin de los valores 0x0F h y 0xF0 h en el puerto B. Esto ocurre ya que cada vez que se produce la iteracin en el lazo while, al estar no estar CLRWDT; Ya que este enceraba el valor de

WDT lo cual nunca iba a producir un desborde, con lo que al final nunca se producira un reset en el programa y no se presentara el cambio de valor en el puerto B.

Вам также может понравиться