Paso 6: programación
En este punto, vamos a trabajar exclusivamente con el MPLAB X IDE. Para comenzar, observe el panel titulado proyectos en el lado izquierdo de la ventana del MPLAB IDE. Desde este panel, crear un código:
Haga clic derecho en la carpeta 'Source Files' a continuación su proyecto > Nuevo > archivo de principal C
Sentirse libre nombrar como te deseo ('Main' está muy bien) ahora verás que MPLAB X ha creado un archivo principal, visible en el panel central.
Código: Para los propósitos de este tutorial proporcionarán el código necesario, que usted puede copiar y pegar en esa ventana de centro (después de eliminar todos los otros textos en el archivo) para darte una idea de lo que está haciendo el código, he incluido una breve descripción a continuación así como comentarios dentro del código real sí mismo (pegado a continuación)
Resumen: Hay un par de distintas partes del código para programar un microcontrolador PIC, que se detallan a continuación.
Definir declaraciones: Definir declaraciones permiten a los programadores a usar palabras que pueden significar algo más para el equipo. Por ejemplo, podríamos definir la palabra OFF en el sentido de un binario '0'. Así mientras que vemos la palabra apagado, haciendo el código más fácil de entender, la computadora Lee un '0' binario.
Incluyen declaraciones: Incluyen declaraciones Dile el compilador para incluir varios ficheros de cabecera. Estos archivos externos pueden consistir en archivos que definen funciones de entrada/salida (stdlib.h), o una variedad de funciones estándar de C (stdio.h), etc..
Directivas pragma: Directivas pragma se utiliza para definir los bits de configuración en el microcontrolador que controla aspectos como selección de oscilador, protección de código, etc.. No dude en revisar los bits de configuración seleccionando ventana > PIC memoria vistas > Bits de configuración
Funciones: Las funciones son secciones del programa que realizan tareas específicas. La función principal es donde el programa inicia su ejecución.
Programa:
/********************************************************************
Cómo programar un PIC y un programa encoder
Última revisión: 03/01/14
Autores: Carson Miller
Escrito por: PIC18F4525 (versión actual)
*********************************************************************/
#define entrada 1
#define salida 0
#define _XTAL_FREQ //Used 4000000 por la macro de delay_ms(x) XC8
PIC18F25K22 configuración de bits
asignación de hardware #include < xc.h > //Includes PIC
#include "GenericTypeDefs.h" tipos de variables estándar de //Includes
#pragma config declaraciones deben preceder incluye archivo de proyecto.
Usar enumeraciones de proyecto en lugar de #define para encendido y apagado.
CONFIG1H
#pragma config OSC = INTIO7 / selección de oscilador pedacitos (bloque oscilador interno, función CLKOUT en RA6, función del puerto en RA7)
#pragma config FCMEN = OFF / / FAIL-SAFE Clock Monitor activar bit (FAIL-SAFE Clock Monitor desactivado)
#pragma config estamos = OFF / / cambio de oscilador interno y externo del pedacito (conmutación oscilador modo desactivado)
CONFIG2L
#pragma config PWRT = OFF / / temporizador Power-up Enable bit (PWRT deshabilitado)
#pragma config BOREN = SBORDIS / / Brown-out Reset Enable pedacitos (Brown-out Reset activado en hardware (SBOREN está desactivado))
#pragma config BORV = 3 / / Brown Out Reset tensión bits (configuración mínima)
CONFIG2H
#pragma config WDT = OFF / / Watchdog Timer activar bit (WDT habilitado)
#pragma config WDTPS = 32768 / Watchdog Timer Postscale seleccione pedacitos (1:32768)
CONFIG3H
#pragma config CCP2MX = PORTC / / CCP2 MUX de bits (entrada/salida de CCP2 es multiplexado con RC1)
#pragma config PBADEN = ON / / PORTB A/D activar bit (pines PORTB < 0 4 > se configuran como canales de entrada analógica en el reinicio).
#pragma config LPT1OSC = OFF / / baja potencia permitir que oscilador Timer1 bit (Timer1 configurado para funcionar a mayor potencia)
#pragma config MCLRE = ON / / MCLR Pin activar bit (pin MCLR activado; RE3 entrada pin desactivado)
CONFIG4L
#pragma config STVREN = ON / / Stack Reset permiten Full/desbordamiento de capacidad inferior del pedacito (completo/subdesbordamiento de pila hará Reset)
#pragma config LVP = OFF / / solo-fuente ICSP permite bit (ICSP solo suministro habilitado)
#pragma config XINST = OFF / / extendido instrucción Set activar bit (extensión y direccionamiento indexado el modo desactivado (modo heredado) del conjunto de instrucciones)
CONFIG5L
#pragma config CP0 = OFF / / bit de protección de código (bloque 0 (000800-003FFFh) no protegido por el código)
#pragma config CP1 = OFF / / bit de protección de código (bloque 1 (004000-007FFFh) no protegido por el código)
#pragma config CP2 = OFF / / bit de protección de código (bloque 2 (008000-00BFFFh) no protegido por el código)
CONFIG5H
#pragma config CPB = OFF / / bit de protección de código del bloque de arranque (bloque de arranque (000000-0007FFh) no protegido por el código)
#pragma config CPD = OFF / / bit de protección de código de EEPROM de datos (EEPROM de datos no protegidos por el código)
CONFIG6L
#pragma config WRT0 = OFF / / escribir el bit de protección (bloque 0 (000800-003FFFh) no protegido contra escritura)
#pragma config WRT1 = OFF / / escribir el bit de protección (bloque 1 (004000-007FFFh) no protegido contra escritura)
#pragma config WRT2 = OFF / / escribir el bit de protección (bloque 2 (008000-00BFFFh) no protegido contra escritura)
CONFIG6H
#pragma config WRTC = OFF / / registro de configuración escribe bit de protección (registros de configuración (300000-3000FFh) no protegido contra escritura)
#pragma config WRTB = OFF / / bloque de inicio escribir bits de protección (bloque de arranque (000000-0007FFh) no protegido contra escritura)
#pragma config WRTD = OFF / / protección de datos de EEPROM escribir bits (datos EEPROM no protegido contra escritura)
CONFIG7L
#pragma config EBTR0 = OFF / / mesa Lee bits de protección (bloque 0 (000800-003FFFh) no protegido de mesa lee en otros bloques)
#pragma config EBTR1 = OFF / / mesa Lee bits de protección (bloque 1 (004000-007FFFh) no protegido de mesa lee en otros bloques)
#pragma config EBTR2 = OFF / / mesa Lee bits de protección (bloque 2 (008000-00BFFFh) no protegido de mesa lee en otros bloques)
CONFIG7H
#pragma config EBTRB = OFF / / tabla de bloque de arranque Lee bits de protección (bloque de arranque (000000-0007FFh) no protegido de mesa lee en otros bloques)
Configuración de variables dummy
Distancia UINT = 0;
CHAR dirección = 0;
CHAR error = 0;
void configure(void)
{
Configuración del ADC
ADCON1bits.PCFG = 1111; Desactiva todas las entradas analógicas (ver hoja de datos p. 224)
Configuración del oscilador
OSCCONbits.IRCF = 110; Oscilador a 4MHz de conjuntos
Interrumpir el programa de instalación
INTCONbits.GIE = 1; Permite todos desenmascarado o alta prioridad interrumpe (dependiendo del IPEN)
INTCONbits.PEIE = 1; Permite todas las interrupciones periféricas desenmascaradas o interrupciones de baja prioridad (dependiendo del IPEN)
INTCONbits.INT0IF = 0; Borra el bit 0 bandera de interrupción (debe ocurrir antes de habilitar la interrupción)
INTCONbits.INT0IE = 1; Habilita la interrupción externa INT0
INTCON2bits.INTEDG0 = 1; Sistemas externos interrumpen 0 interrupción en flanco ascendente
RCONbits.IPEN = 0; Deshabilita los niveles de prioridad de interrupciones
TRISBbits.TRISB0 = entrada; Establece INT0 como entrada
TRISBbits.TRISB1 = entrada; Establece INT1 como entrada
}
void main()
{
Configure();
while(1)
{
Bucle de programa
}
}
Rutina de servicio principal de interrupción (ISR)
anular la interrupción ISR()
{
Compruebe para ver si se trata de interrupción 0
Si (INTCONbits.INT0IF == 1)
{
distancia ++;
INTCONbits.INT0IF = 0; Borra bandera de interrupción
}
otra cosa
error = 1;
}