Академический Документы
Профессиональный Документы
Культура Документы
Lea detenidamente las siguientes partes del datasheet del PIC18F458 (9.0 I/O
Ports, Pg. 96, 11.0 Timer0, pg. 111, 8.0 Interrupts, pg. 79).
Lea detenidamente las siguientes partes del manual C18_Lib_51297d.pdf (4.5
Delay Functions, pg. 146), referentes a las libreras software de retardos.
Lea detenidamente las siguientes partes del manual C18_Lib_51297d.pdf (2.9
Timer Functions, pg. 61), referentes a las libreras de utilizacin de los timers.
Lea detenidamente las siguientes partes del manual C18_UG__51288e.pdf
(2.9.2.3 Interrupt vectors, pg. 37), referentes a la programacin de los
vectores de interrupcin.
Conocimientos tericos:
-
Recomendaciones:
-
ANEXO
INICIALIZACIN DE PUERTOS DE ENTRADA / SALIDA
En cualquier aplicacin de microcontrolador, es necesario programar la direccin de
los puertos (Entrada Salida). En el caso de los microcontroladores PIC, se utilizan
unos registros especiales de configuracin (TRIS). En el caso del PIC18F458, hay 5
puertos (A-B-C-D-E) y por tanto 5 registros TRIS de configuracin.
------------------------------------------------------------------------------------------------------------------------------#include<p18f458.h>
void main(void)
{
// CONFIGURACIN DEL PIC, PUERTOS Y PERIFRICOS
CMCON = 0x07;
TRISA = 0xFF;
TRISB = 0b11111000;
TRISC = 0b10000000;
TRISD = 0xFF;
TRISE = 0xFF;
while(1)
{
}
}
-------------------------------------------------------------------------------------------------------------------------------
BITS DE PROGRAMACIN
A la hora de programar un microcontrolador PIC es necesario especificar una serie de
bits de configuracin (tipo de reloj, watchdog, etc.)
Para la placa de prcticas utilizaremos la siguiente configuracin (Men: Configure>Configuration Bits):
Oscillator: HS
WatchDog Timer: Disable
Si no configura el reloj correctamente, el microcontrolador no funcionar. Si no
deshabilita el watchdog timer, el microcontrolador se resetear frecuentemente.
Otra opcin es hacerlo por cdigo, por ejemplo, con la directiva
#pragma config OSC = HS
En el directorio de instalacin del compilador (c:\mcc18 c:\archivos de
programa\mcc18) encontrar un directorio (\doc) con documentacin til. En otras
cosas, encontrar el archivo de ayuda hlpPIC18ConfigSet, donde encontrar, para cada
procesador, todos los bits de configuracin con su correspondiente nomenclatura.
DEFINICIONES DE HARDWARE
Para facilitar la programacin y el mantenimiento de una aplicacin basada en
microcontrolador, es comn la definicin de una serie de alias. Para la placa de
prcticas utilizaremos los siguientes alias:
#define LED_VERDE
#define LED_AMARILLO
#define R_CALENTAMIENTO
#define VENTILADOR
LATBbits.LATB0
LATBbits.LATB1
LATCbits.LATC1
LATCbits.LATC2
#define LED_APAGADO
#define LED_ENCENDIDO
#define ACTUADOR_OFF
#define ACTUADOR_ON
1
0
0
1
UTILIZACIN DE RETARDOS
El MPLAB C18 incluye unas libreras para facilitar la generacin de retardos puros (el
microcontrolador pierde el tiempo). Para utilizarlas, es necesario aadir en el programa
principal #include<delays.h>. La llamada a una funcin es del tipo:
Delay10KTCYx(250); // Retardo de 0.5 segundos, 250 x 10,000 ciclos (cada ciclo son 200ns a 20MHz)
Si cada ciclo de reloj son 200ns y tenemos un prescaler de 64, el periodo de reloj ser:
16
200 ns x 64 x 2
= 0.83886 segundos
Cuando el timer llega a 0xFFFF (65535), con el siguiente pulso da la vuelta y empieza
en 0x0000, activando el bit (INTCONbits.TMR0IF). Es necesario borrar este bit en el
programa principal o en el servicio de interrupcin para poder detectar que el timer llega
al final de nuevo.
MANEJO DE INTERRUPCIONES
El microcontrolador PIC18F458 dispone de interrupciones de alta y baja prioridad, que
permiten interrumpir el programa principal y as conseguir implementar aplicaciones en
tiempo real.
INTERRUPCIONES DE ALTA PRIORIDAD
El microcontrolador salta a la direccin de memoria de programa (ROM) 0x08. All se
incluir un salto a nuestra rutina de servicio de interrupcin. En la rutina del servicio de
interrupcin deberemos preguntar de qu interrupcin se trata. Muy importante es borrar
el bit de interrupcin correspondiente para evitar interrupciones reentrantes.
Para inicializar una interrupcin de alta prioridad hay que realizar 3 pasos:
- indicar la interrupcin en concreto. Ej. OpenTimer0(TIMER_INT_ON ....)
- indicar prioridad alta (INTCON2bits.TMR0IP = 1)
- habilitar las interrupciones con prioridad
RCONbits.IPEN = 1;
// Enable priority levels
INTCONbits.GIEH = 1;
// Enable interrupts.
INTERRUPCIONES DE BAJA PRIORIDAD
El PIC18F458 dispone de interrupciones de baja prioridad, es decir, aquellas que
pueden ser interrumpidas por interrupciones de alta prioridad. En este caso, el
microcontrolador salta a la direccin de memoria de programa (ROM) 0x18.
Para inicializar una interrupcin de baja prioridad es necesario:
-
while(1)
{
}
}
//---------------------------------------------------------------------------// Low priority interrupt vector
#pragma code InterruptVectorLow = 0x0018
void InterruptVectorLow(void)
{
_asm
goto
InterruptHandlerLow
_endasm
}