Site hosted by Angelfire.com: Build your free website today!
 

CÓMO PROGRAMAR UN PIC?

 

 

PRÁCTICA

Empecemos entonces nuestro primer ejercicio!

El ejemplo más fácil y básico para aprender a manejar los puertos del PIC es encender y apagar uno o varios LED's.

Abre el editor de programa MPLAB y crea un nuevo proyecto.

Siempre que empecemos un programa debemos establecer como encabezado los registros con su dirección, dada al lado izquierdo de la tabla de registro. Es decir, pondremos primero los registros a utilizar con su respectiva dirección:

STATUS...........equ........0x3

PORTA.............equ........0x5

TRISA...............equ........0x5

PORTB.............equ........0x6

TRISB...............equ........0x6

 

; Los comentarios en un programa se inician con punto y coma ( ; ).

; Declaración de Variables

RP0...................equ........5

RB0...................equ........0...; Omita esta línea hasta que se le

.........................................; indique en el transcurso del programa.

CONTADOR.....RES........1.......; Reserva un espacio de memoria a la

.........................................; variable CONTADOR.

CONTADOR1...RES........1.... ..; Reserva un espacio de memoria a la

............................ ............; variable CONTADOR1.

; Estas dos líneas son variables definidas por el usuario reservadas para una subrutina de retardo que utilizaremos.

ORG..................0....; Hace referencia a una dirección

.................... .......; de memoria en el área de programa

............................; a partir de la cual insertaremos

............. .............; las instrucciones nemónicas que el

...........................; compilador deberá convertir.

; El siguiente paso es entrar al BANCO 1 para definir los puertos.

BSF.........STATUS,RP0..............; Entramos al BANCO 1, RP0 lo

.............................................; declaramos arriba

.............................................; y por lo tanto es igual a 5.

MOVLW............B'00000'............; Movemos 00000 al registro de trabajo.

MOVWF............TRISA..... .........; Configuramos el puerto A como salida.

MOVLW............B'00000000'...... .; Movemos 00000000 al registro de trabajo.

MOVWF............TRISB..... ..........; Configuramos el puerto B como salida.

BCF...................STATUS,RP0......; Salimos del BANCO 1.

; Ahora podemos conectar a cualquiera de las salidas un LED, encenderlo y apagarlo. Detalles de conexión

; al final. Conectemos un LED a la salida RB0 del puerto B, si lo quisiéramos encender solo tendríamos que

; poner un UNO en la SALIDA RB0 del puerto B. Como?............... asi:

 

INICIO...............................; Etiqueta definida por el Usuario.

BSF..........PORTB,0.......; Usted podria poner tanbién en

.................................; vez del cero la variable

.................................; declarada RB0, asegurandose que

.................................; esté en el encabezado.

.................................; Si lo desea agregue la linea que

.................................; omitió y cambie el cero

.................................; por RB0

; Cuando el PIC ejecuta la línea anterior pone un UNO en la salida,

; o sea 5 voltios, y por lo tanto el LED se enciende.

; Para hacerlo intermitente solo tendríamos que apagarlo y repetir

; la operación, pero antes de repetir debemos poner un retardo para

; poder ver el efecto intermitente.

; Esta rutina de retardo la insertaremos antes de apagarlo, luego lo

; apagamos e insertamos otra rutina de retardo.

; para esto utilizaremos una instrucción nueva: CALL, además debemos

; asignar un nombre propio a la subrutina,

; el que queramos, para poder decirle adonde debe ir. Cuando termine de

; ejecutar la subrutina de retardo se encontrará con la instrucción RETURN,

; devolviéndose así donde quedamos.

CALL..................RETARDO...........; Llama a RETARDO, va y lo ejecuta y

..........................................................; luego se devuelve a la siguiente línea.

BCF....................PORTB,0.............; Apaga el LED.

CALL..........RETARDO...........; Llama a RETARDO

GOTO.........INICIO....................; Va a la etiqueta INICIO para mantener

...................................................; el LED intermitente,

...................................................; es decir, vuelve a empezar.

RETARDO

CALL..................RETARDO1

DECFSZ............CONTADOR,1

GOTO.................RETARDO

MOVLW.............80

MOVWF.............CONTADOR

RETURN

RETARDO1

DECFSZ.............CONTADOR1,1

GOTO..................RETARDO1

MOVLW..............80

MOVWF..............CONTADOR1

RETURN

END

Asi se verá nuestro circuito:


En la rutina de retardo encontramos un nueva instrucción de programa, DECFSZ la cual decrementa el registro y salta la línea siguiente solo si el registro se hace cero (0). La explicación de la rutina de retardo es la siguiente:

- La primera línea (call RETARDO1) llama a otra rutina denominada RETARDO1, es esta rutina se ejecuta la instrucción DECFSZ CONTADOR1,1 la cual decrementa el registro llamado CONTADOR1 y va a la siguiente línea (goto RETARDO1), ésta acción se repetirá hasta que CONTADOR1 se haga cero. Cuando esto ocurra la instrucción DECFSZ salta una línea y ejecuta MOVLW 80, la cual carga el registro de trabajo W con el valor especificado, en nuestro caso será 80. La siguiente línea mueve el valor cargado en W a CONTADOR1 y retorna para ejecutar la segunda línea de la rutina llamada RETARDO. En este punto se repite lo anterior, es decir, se decrementa el registro CONTADOR y va a la siguiente línea (goto RETARDO) hasta que se haga cero (0), salta la línea y mueve el valor especificado al registro CONTADOR, luego retorna al primer llamado CALL en el programa.

En la siguiente figura se muestra el diagrama del circuito en el cual trabajamos.

Terminado el programa procedemos a compilarlo y luego a grabarlo en el PIC.

ANTERIOR

 

 

MENÚ / QUÉ ES UN PIC? / QUÉ ES CUPL? / CAMPOS PARA PROGRAMACIÓN EN CUPL / CÓMO PROGRAMAR UN PIC? / BIBLIOGRAFÍA