viernes, 11 de julio de 2008

Baseline. ProgBasico 5.

Este programa pretende destacar el uso de las siguientes instrucciones:

  • OPTION: Registro de configuración.
  • IORWF: Operación lógica OR.
  • XORWF: Operación lógica XOR.
  • NOP: Instrucción que no tiene ninguna función, consume 1 ciclo de reloj.
Para la realización de este programa, se ha utilizado el microcontrolador PIC10F206, cuyas características expuestas por Microchip, se pueden observar en la siguiente dirección: PIC10F206.

El programa es el siguiente:

;**********************************************************************
; AqueronteBlog@gmail.com *
; *
; Este archivo es propiedad intelectual del blog Aqueronte, *
; cuya dirección web, es la siguiente: *
; *
; http://unbarquero.blogspot.com/ *
; *
; Se permite cualquier modificación del archivo siempre y cuando *
; se mantenga la veracidad de su autor. *
; *
; El autor no se responsabiliza de las consecuencias que pueda *
; ocasionar éste código debido a un uso inadecuado del mismo. *
;**********************************************************************
; *
; Filename: Ejemplo5.asm *
; Date: 11-Julio-08 *
; File Version: vs0.0 *
; *
; Author: Manuel Caballero *
; Company: Hades *
; *
; *
;**********************************************************************
; *
; Files Required: P10F206.INC *
; *
;**********************************************************************
; *
; Notes: En este programa, se muestra la utilización de las *
; instrucciones OPTION, iorwf, xorwf y nop. *
;**********************************************************************

list p=10F206 ; Directiva para definir el procesador
#include < p10F206.inc > ; Registros especificas del procesador

__CONFIG _MCLRE_ON & _CP_OFF & _WDT_OFF & _IntRC_OSC

; _MCLRE_ON: Reset externo ACTIVADO.
; _CP_OFF: Protección del código DESACTIVADO.
; _WDT_OFF: Watchdog DESACTIVADO.
; _IntRC_OSC: Oscilador interno de 4MHz.


;***** DEFINICIÓN DE VARIABLES

; Ninguna para este programa

;**********************************************************************
ORG 0x01FF ; Valor del oscilador interno

; El valor del oscilador interno se localiza en la dirección 0xFF
; como una instrucción movlw k, donde k es el valor de configuración del oscilador.

ORG 0x0000 ; Inicio de código
movwf OSCCAL ; Actualiza el valor del oscilador interno a 4MHz
bcf CMCON0,CMPON ; Comparador Off

clrf GPIO

movlw b'11011111'

OPTION ; GP2 pin I/0
clrw
TRIS GPIO
; GPI0-GP2 pin salida

movlw d'7'

Inicio
iorwf GPIO,F ; GPI0-GP2 ON

nop

xorwf GPIO,F ; GPI0-GP2 OFF

goto Inicio


END ; directiva 'fin de programa'



Para ver el resultado, compilamos el código y seleccionamos el MPLAB SIM para poder simularlo.

Abrimos la ventana de Special Function Registers para controlar los registros OPTION_REG, WREG, TRISIO, GPIO y CMCON0.

Simulamos el código paso a paso.

Este microcontrolador tiene 4 pines que pueden actuar como entrada o salida, de los cuales tres de ellos, GP0, GP1 y GP2, pueden ser configurados tanto de entrada como de salida, mientras que el pin GP3 sólo puede ser usado como pin de entrada.

Lo que pretende este programa, es usar dichos los pines GP0, GP1 y GP2 como salida digitales, para ello, deben ser configurados previamente.

El registro CMCON0 es el encargado, entre otras cosas, del comparador que tiene este microcontrolador, inicialmente, dicho comparador está activo sirviéndose de los pines del microcontrolador.

Por lo tanto, el primer paso será desactivar dicho comparador, para ello está la siguiente instrucción:

bcf CMCON0,CMPON

Donde se pone a cero el bit CMPON para desactivar el comparador.



El siguiente paso es desactivar que la transición del Timer que dispone el microcontrolador sea vía GP2.

Para ello, se debe desactivar, ya que al inicio está activado.

movlw  b'11011111' 
OPTION..
..............
Con las instrucciones anteriores, se pone a cero el bit T0CS, pudiéndose utilizar el pin GP2 como salida digital.



Una vez configurados los registros para que el periférico a usar sea de entrada o salida digitales, se pasa a configurarlos para que sean de salidas. Eso se realiza mediante la instrucción siguiente:

TRIS GPIO

Donde un '0' significa pin de salida y un '1' significa pin de entrada.

Una vez configurado todo, se pasa a encender los pines GP0, GP1 y GP2 y a apagarlos continuamente, es decir, a poner a '1' dichos pines y a ponerlos a '0'.

Para ponerlos a '1', se utiliza la siguiente instrucción:

iorwf GPIO,F

Donde previamente el registro de trabajo se habrá cargado con el valor 0x07 (0000 0111) y al ejecutarse la instrucción anterior, realizará una operación lógica OR entre el registro GPIO y el W, guardándose el resultado en el propio registro GPIO, es decir, en los pines que hemos configurado como salida anteriormente.

Posteriormente, se ejecutará una instrucción que no tiene ninguna función, excepto que consume un ciclo de reloj.

nop

En este caso, el reloj es de 4MHz, por lo tanto, la instrucción consumirá 1us.

Y por último, se pretende apagar o poner a cero nuevamente los pines del microcontrolador, para ello, se usa la siguiente instrucción:
xorwf GPIO,F

Realiza la operación lógica XOR el registro de trabajo W y el registro GPIO, almacenándose el resultado en el registro GPIO.



Se puede observar en el siguiente vídeo todo lo explicado anteriormente:





Este proyecto se puede descargar en la siguiente dirección:
Ejemplo 5.
Ejemplo 5.

0 comentarios: