Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Ejemplo
• Se quiere diseñar una aplicación que ejecute las
Ejercicio siguientes tareas, si FCLK = 4 MHz:
• T1: Un lazo infinito. Esta es la tarea principal.
• Diseñar el TMR0 para temporizar 2500 µs. si la
frecuencia de reloj es 8 MHz. • T2: Conmutar el estado de D cada 1000 µs.
#include <htc.h>
Diseño #define LED RB6
__CONFIG(FOSC_XT & WDTE_OFF & PWRTE_ON & LVP_OFF);
void main(void){
TRISB = 0B10111111; //Configura RB6 de salida
OPTION_REG = 0B11010010;
RD = 8 TMR0 = -125;
INTCON |= 0B10100000; // Hbta Int por TMR0
LED = 0; // Enciende D
Inicializaciones: while(1); // Tarea 1
• Configurar RB6 como salida }
• Configurar e inicializar el TMR0 static void interrupt FunInt(void){
if(T0IF){ // Tarea 2
• Habilitar la interrupción TMR0 = -125;
• Definir el estado inicial de D LED = ~LED; // Conmuta el estado de D
Código en C T0IF = 0; // Repone bandera de IRQ
}
Código en ensamblador }
Prof.: Carlos H Cruz V. 11 Prof.: Carlos H Cruz V. 12
1/2
2/2
2. Codificación ASM
ORG 0x0000 ;Vector de Reset
INI: BSF STATUS, RP0 ;Activa banco 1
BCF STATUS, RP1
; El procesador mantiene en modo SLEEP, MOVLW B'01111111' ;Configura RC7
; se despierta cada 0.576 ms. y conmuta RC7 MOVWF TRISC ;como salida
; Codificado por: Carlos Héctor Cruz Vergara MOVLW B'11111101' ;Asigna divisor al WDT
;************************************************ MOVWF OPTION_REG ;y fija rango en 32
#include P16F877.INC BCF STATUS, RP0 ; Activa banco 0
__CONFIG _XT_OSC & _WDT_ON & _PWRTE_ON & _LVP_OFF BCF PORTC, 7 ; Enciende D
;************************************
BUCLA: SLEEP ;Duerme el MC
MOVLW H'80' ;Complementa D
XORWF PORTA, F
GOTO BUCLA
;************************************
END
Prof.: Carlos H Cruz V. 21 Prof.: Carlos H Cruz V. 22
Taller
#include <htc.h> • Diseñar un programa estructurado para los PIC16F87X que
//Bits de configuración controle las siguientes tareas:
__CONFIG(FOSC_XT & WDTE_ON & PWRTE_ON & LVP_OFF); • T1: En el instante de accionar un pulsador se genera una
void main(void){ señal rectangular con TH = 200 µs. y TL = 100 µs. Al accionar
TRISC = 0b01111111; //RC7 como salida nuevamente el pulsador se inhibe la generación de la señal
OPTION_REG = 0b11111101; // rectangular. Consecutivamente, con cada accionada se
RC7 = 0; //Enciende D
genera, se inhibe… la señal rectangular.
do {
SLEEP(); • T2: Generar por el PORTC la secuencia “RESORTICO L5.2”
RC7 = ~RC7; infinitamente. Cada paso de la secuencia tarda 0.8 s.
} while(1);
}
• Nota: La Fclk = 8.5 MHz.