martes, 30 de abril de 2013

Ensamblador y Memoria PIC16F84A

MPLAB
Esta herramienta la utilizamos para escribir nuestro código, el lenguaje nativo es el ASEMBLAR.
El código se escribe en un archivo con formato .asm, la hoja donde programemos se divide en 4 columnas.
  1. La primera es Labels, que son las etiquetas 
  2. La segunda es Código de Operación, es la instrucción
  3. La tercera es el Operando
  4. Y la última se utiliza para los comentarios, anteriormente se ponen ";" para hacer comentarios.

Las Etiquetas, su principal función es identificar una determinada instrucción del programa, asignando a esa etiqueta el valor de la dirección del programa.
Ejemplo:
Aca
       goto   Aca   ; salta a la posción de memoria especificada (Aca)
Empieza con letras y después admiten letras números y guión bajo, no puede haber espacios o expresiones reservados como sleep, goto, etc.

El Código de Operación especifica la tarea a realizar por el microcontrolador.
Los Operandos o datos, pueden contener uno o más operandos separados por copas, dependiendo de la instrucción puede ser números o etiquetas que representan constantes o direcciones.
Los comentarios son elementos indispensables porque ayuda al programador a documentar su programa, aclarando el sentido de las instrucciones.
             
Todo programa se escribe en asemblar, se compone de instrucciones que componen el programa que tiene que ejecutar el uC y las directivas al ensamblador, estas son órdenes que se le dan al programa que nos va a  instruir nuestro programa escrito en asemblar cada empresa tiene directivas propias.

El archivo .asm es la fuente y es el mas importante, el archivo .hex es el ejecutable, no es hexadecimal puro, Intel lo estandarizó y Microchip se adecuó a las normas de Intel.

DIRECTIVAS E INSTRUCCIONES UTILIZADAS
DIRECTIVAS
Son comandos insertados en el programa que controlan el proceso de ensamblado, no son parte de las instrucciones del programador por ende no tiene traducción al código máquina, se las llama también pseudoinstrucciones.

END                            Indica el fin del programa, con esta directiva el programa sabe donde tiene que
                                   detener el proceso.
                                              
EQU                            Es una directiva de asignación, lo que hace es asignar una expresión a una
                                   etiqueta label
Sintaxis: <laber> EQU <exp>

ORG                            Esa directiva indica al programa ensamblador la dirección de memoria a partir de
                                    la cual deber ensamblarse las instrucciones.
Sintaxis: ORG <exp>

__CONFIG                Esta directiva indica la configuración para el proceso de grabación:
                                   _XT_OSC        = Utiliza un oscilador de cristal de cuarzo
                                   _WDT_OFF     = El Watch Dog t esta deshabilitado
                                   _PWRTE_ON  = EL Power-Up Timer esta habilitado
                                   _CP_OFF         = No está activada la Protección de Código
Si no se especifica la configuración por defecto es:  _RC_OSC, _WDT_ON, _PWRTE_OFF, _CP_OFF
Ejemplo: __CONFIG   _XT_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF

LIST                           Indica el procesador utilizado
Ejemplo: LIST P=PIC16F84A

INCLUDE                  Señala el fichero donde se localiza las etiquetas que nombran los diferentes registros
Ejemplo: INCLUDE <PIC16F84A.INC>

ERROR LEVEL         Omite el error en la linea 302
Ejemplo: ERRORLEVEL -302

#DEFINE                  Esta directiva define el reemplazo de una cadena de caracteres por otra
Sintaxis: #DEFINE <name><string>
Ejemplo: #DEFINE Banco0 bcf STATUS,RP0

INSTRUCCIONES
Son comandos que interpreta el microcontrolador para funcionar de cierta manera, sin las instrucciones el microcontrolador no haría nada.

bcf  f,b   (bit clear file)                   Pone en 0 el bit "b" del registro "f"
bsf  f,b   (bit set file)                      Pone en 1 el bit "b" del registro "f"
Ejemplo: bsf  STATUS,RP0       ; vamos al bank 1
               bcf  TRISB,7              ; seteamos como salida el puertob 7 (0 es salida)
           
goto k                                        Instrucción de salto, salta a la dirección k, esta instrucción tarda el doble
                                                  que las normales
Ejemplo:  ACA
                        goto   ACA
nop                                            No realiza ninguna operación, ocupa un espacio de salto                

clrwdt   (clear watch dog timer)  Borra el WDT

retfie                                          Vuelve hacia la interrupción
Ejemplo: ORG 0x004  ; interrupción
              retfie              ; vuelve hacia la interrupción

btfsc   (bit test file,skip if clear)    Si el bit f es 1 la instrucción que sigue continua normalmente
                                                      Si el bit f es 0 la instrucción que sigue la salta, solo salta una instrucción
btfss   (bit test file,skip if set)      Si el bit f es 0 la instrucción que sigue continua normalmente
                                                      Si el bit f es 1 la instrucción que sigue la salta, solo salta una instrucción

MEMORIA PIC16F84A

EL PIC16F84A dispone de:
  • Una memoria de programa ROM flash que tiene 1024 posiciones, cada posición dispone de 14 bits, esta memoria se mantiene por más que le saques la alimentación. Comienza en la posición 000h (posición inicial de reset) y llega hasta la 3ffh. La memoria esta paginada, dividida en 4 partes con 256 posiciones cada uno, cada página tiene un nombre Page0,Page1,Page2,Page3.
  • Memoria de datos dividida en: 
    • Área RAM constituía por 22 registros de propósito específico SFR cada uno de los registros cumple un propóstito específico y 68 de general propósito GPR son de uso general se usa para guardar los datos temporales del programa que se esta ejecutando, se guardan los datos y las variables, estos desaparecen cuando desaparece la alimentación.
      - La memoria de datos cuenta con dos bancos Banco 0 y Banco 1.
      - Los registros SFR van desde la dirección 00h a 0Bh en el Banco 0 y 80h a 8Bh para el Banco 1
      - Los registros GPR se acceden desde el banco 0, porque el Banco 1 se mapea sobre el 0, es decir si se apunta a un GPR  del banco 1 estas accediendo al Banco 0.
      -Para acceder al Banco 0 RP0=0 para acceder al Banco 1 RP0=1. Las zonas de memoria 50h-1Fh y D0h-FFh no son empleadas y devuelven un 0 si se las lee.

    • Área EEPROM de datos formado por 64 registros de 8 bits, es una pequeña área de memoria de datos de lectura y escritura no volátil, por lo que la información no se pierde.
  • ALU de 8 bits y registro de trabajo W, se encarga de hacer las operaciones aritmeticologicas que requiere la ejecución del programa con dos operandos, uno proviene del registro de trabajo W y el otro el el propio código de instrucción.
  • Contador de Programa de 13 bits, es un resgistro interno que se utiliza para redireccionar las intrucciones del programa que estan almacendas en la memoria del programa.
  • 2 puertos PORTA de 5 bits y PORTB de 8 bits
PORTA se encuentra en la posición 05h del banco 0, puerto de entrada/salida de 5 bits, se puede leer o escribir como si se tratara de un registro cualquiera, el registro que controla el sentido (entrada y salida) se llama TRISA.
PORTB se encuentra en la posición 06h del banco 0, puerto de entrada/salida de 8 bits, se puede leer o escribir como si se tratara de un registro cualquiera, el registro que controla el sentido (entrada y salida) se llama TRISB.
TRISA se encuentra en la posición 85h del banco 1, es el registro de configuración de las líneas del puerto A. Un 0 en el bit corresponde a salida y un 1 como entrada.
TRISB se encuentra en la posición 86h del banco 1, es el registro de configuración de las líneas del puerto B. Un 0 en el bit corresponde a salida y un 1 como entrada.

Registro de configuración
Se encuentran el FOSC,que es para la selecion del oscilador que puede ser:
  • FOSC = 00    LP (bajo consumo): 32KHz - 200KHz
  • FOSC = 01    XT (estandar): 100KHz - 4MHz
  • FOSC = 10    HS (alta velocidad): 4MHz - 20MHz
  • FOSC = 11    RC (bajo coste)
El WDTE, que es el bit de habilitación del Watch Dog Timer, sirve por si el programa se va de ruta a un lugar donde nosotros no queremos que vaya , el WDT hay que ir reseteándolo en el transcurso del programa.
  • WDTE = 0 Watchdog está deshabilitado
  • WTDE = 1 Watchdog está habilitado
EL PWRTE, es la activación del temporizador Power-Up que espera 72mseg antes de arrancar
  • PWRTE = 0 Temporizador Power-Up habilitado
  • PWRTE = 1 Temporizador Power-UP deshabilitado
CP, es la protección del codigo, si esta activado no podremos exportar el programa que creamos
  • CP = 0 Toda la memoria esta protegida contra lecturas indeseables
  • CP = 1 La memoria se puede leer, no está protegido.

No hay comentarios:

Publicar un comentario