micros pic16f87x srepertorio1

62
Ing. Héctor Jiménez M. MICROCONTROLADORES Repertorio de Instrucciones (1)

Upload: yeyo1081

Post on 25-Sep-2015

229 views

Category:

Documents


0 download

DESCRIPTION

Segunda presentación

TRANSCRIPT

  • Formato de InstruccionesCada instruccin en lenguaje de mquina (binario) contiene un cdigo de operacin (opcode) y puede ser de 3, 4 o 6 bits, dependiendo del tipo

    Registro de Instruccin de 14 bits est dividido en:

    Cdigo de operacin (OPCODE).- Especifica cual es la instruccin a la que se hace referencia teniendo un cdigo en particular

    Operadores.- Especifican cuales registros o valores se vern afectados como resultado de la aplicacin de la instruccin (0 k 255)

  • Campos de opcodef Register file address (0x00 to 0x7F)W Working registerb Bit addressk Literal field, constant data or labelx Don't care location (0 or 1). The assembler will generate code with x = 0. It is the recommended form of use for compatibility with all Microchip software tools[ ] Optionald Destination selectd = 0: store result in Wd = 1: store result in file register f. (Default)

  • Sintaxis

  • Tipo de instruccionesLas instrucciones estn divididas en tres clases:

    Orientadas a bit

    b representa el bit que ser modificado por la operacin

    f representa la direccin donde se encuentra el bit en cuestin

  • Tipo de instruccionesOrientadas a byte

    f representa el registro ser usado por la instruccind representa el destino donde ser colocado el resultado de la operacind=0 el resultado es guardado en Wd=1 el resultado es guardado en la direccin de registro especificada en la instruccin

  • Tipo de instruccionesLiterales o de controlk represent una constante o valor de una literal de 8 o de 11 bits

  • Conjunto de Instrucciones de Rango Medio

  • Operation of the ALU and W RegisterRegistro W.- Registro de 8 bits que guarda resultados temporales de las operaciones realizadas por la ALU

  • Sintaxis(W) (PORTB)El contenido del registro W se transfiere al puerto B

    (2Bh) (W)El contenido de la posicin 2Bh de RAM de datos se transfiere al registro de trabajo

    2Bh (W)El registro de trabajo se carga con el dato 2Bh (Notar la ausencia de parntesis)

  • Repertorio de InstruccionesInstrucciones de cargaInstrucciones de bitInstrucciones aritmticasInstrucciones lgicasInstrucciones salto y subrutinasInstrucciones especiales1 Ciclo de instruccin= 4 periodos de oscilacin = tiempo de ejecucin 1 s (4MHz)

  • Instrucciones de Carga

  • Instrucciones de Bit

  • Instrucciones Aritmticas

  • Instrucciones Lgicas

  • Instrucciones de Salto

  • Instrucciones Especiales

  • Instrucciones de Cargaclrw (Clear W)El contenido del registro W se borra (se carga con b00000000) y el flag Z se activa a 1Tambin se podra considerar como aritmtica

    clrw ; 0 (W)Antes:(W) = ?Z = ?Despus: (W) = 0x00 Z = 1

    clrf f (Clear f)El contenido del registro f se borra (se carga con b00000000) y el flag Z se activa a 1Tambin se podra considerar como aritmtica

    clrf FlagReg ; 0 (FlagReg) Antes: (FlagReg) = ? Z = ?Despus: (FlagReg) = 0x00 Z = 1

  • Instrucciones de Cargamovlw k (Move Literal to W)El registro W se carga con el valor de la constante kNingn flag es afectado en el registro de estado

    movlw 0x5A ;5Ah (W) Antes: (W) = ?Despus: (W) = 0x5A

    movwf f (Move W to f)Se carga el contenido del registro W al registro f Ningn flag es afectado en el registro de estado

    movwf PORTB ; (W) (PORTB) Antes: (PORTB) = ? (W) = 0x4FDespus: (PORTB) = 0x4F (W) = 0x4F

  • Instrucciones de Cargamovf f,d (Move f)El contenido del registro f se carga en el registro destino Si d = 0 el destino es el registro W, Si d = 1 el destino es el propio registro f El flag Z se activa a 1 si el resultado es cero

    movf PORTA,0 ;(PORTA) (W)Antes: (PORTA) = 0x1A, (W) = ?Z = ?Despus: (PORTA) = 0x1A, (W) = 0x1A Z = 0

    movf FSR,1 ;(FSR) (FSR) Antes:(FSR) = 0x00Z = ?Despus: (FSR) = 0x00 Z = 1 (el resultado es 0)

  • Instrucciones de Bitbcf f,b (Bit Clear f)Pone a cero el bit b del registro f

    bcf FlagReg,7 ; 0 (FlagReg,7) Antes: (FlagReg) = b11000111Despus: (FlagReg) = b01000lll

    bsf f,b (Bit Set f)Pone a uno el bit b del registro f

    bsf FlagReg,7 ; 1 (FlagReg,7) Antes: (FlagReg) = b01000l11Despus: (FlagReg) = b 11000111

  • Instruccin de Saltogoto K (Unconditional Branch) Produce un salto a la direccin del programa indicada por k, es decir, la nueva direccin de memoria de programa a partir de la cual comenzarn a leerse las instrucciones despus de ejecutar la instruccinAs pues, esta instruccin simplemente carga la constante k en el contador de programa (PC)

    goto Bucle ;Bucle (PC) Antes: (PC) = ?Despus: (PC) = Direccin apuntada por la etiqueta Bucle

  • ;*************************************************************************************************; Programa ES1.ASM Fecha; Este programa configura las entradas del PORTA como entradas digitales, lee el contenido del; PORTA y muestra su valor sobre los diodos LED conectados al PORTB. ; Programa para PIC16F87X ; Velocidad del Reloj: 4 MHz Reloj Instruccin: 1 MHz = 1 uS ; Perro Guardin: habilitado Tipo de Reloj : XT; Proteccin del cdigo: OFF;*************************************************************************************************List p=16F876 ;Tipo de procesadorinclude P16F876.INC ;Definiciones de registros internosORG 0x00;Vector de ResetgotoINICIOORG 0x05 ;Salva el vector de interrupcinINICIO clrf PORTB ;Borra los latch de salida del PORTBbsf STATUS,RP0 ;Selecciona banco 1movlw b00000110movwf ADCON1 ;PORTA E/S digitalesclrf TRISB ;Configura PORTB como salidamovlw b00011111movwf TRISA ;Configura PORTA como entradabcf STATUS,RP0 ;Selecciona banco 0BUCLE movf PORTA,W ;Lee el PORTA sobre Wmovwf PORTB ;Escribe el valor de W en el PORTAgoto BUCLE ;Salta a BUCLEEND

  • ;*************************************************************************************************; Programa ES1.ASM Fecha; Este programa configura las entradas del PORTA como entradas digitales, lee el contenido del; PORTA y muestra su valor sobre los diodos LED conectados al PORTB. ; Programa para PIC16F87X ; Velocidad del Reloj: 4 MHz Reloj Instruccin: 1 MHz = 1 uS ; Perro Guardin: habilitado Tipo de Reloj : XT; Proteccin del cdigo: OFF;*************************************************************************************************List p=16F876 ;Tipo de procesadorinclude P16F876.INC ;Definiciones de registros internosORG 0x00;Vector de ResetgotoINICIOORG 0x05 ;Salva el vector de interrupcinINICIO clrf 06h ;Borra los latch de salida del PORTBbsf 03,5;Selecciona banco 1movlw b00000110movwf 9Fh ;PORTA E/S digitalesclrf 86h ;Configura PORTB como salidamovlw b00011111movwf 85h ;Configura PORTA como entradabcf 03,5 ;Selecciona banco 0BUCLE movf 05,0 ;Lee el PORTA sobre Wmovwf 06h ;Escribe el valor de W en el PORTAgoto BUCLE ;Salta a BUCLEEND

  • Directivas Pseudo instruccionesMPASM tiene 50 directivas Facilitan la realizacin del programaNo tienen traduccin en leguaje mquinaSe escriben en la 2 columna en maysculasAlgunas deben utilizarse en forma obligatoria, la mayora son opcionales

    Las mas utilizadas son:ENDEQUORG_ _ CONFIGLIST P=P16F84AINCLUDE P16F84A.INC

  • Directivas [] ORG Indica la direccin de memoria en la cual ser colocada el cdigo Si el ORG no es indicado se empieza en la direccin 0ORG 0x04movfIndica que la instruccin movf se escribe en la direccin 0x04

    EQU Permite asignar el valor de una expresin al identificadorEl identificador es un nombre que es familiar para el programadorCONF_ADCON1 EQU b'00000110'Crea el identificador CONF_ADCON1 con valor 0x06

    ENDDe uso obligatorio, sirve para marcar el final del programa. El MPLAB solo reconoce las lneas que escritas previas

  • Directivas LISTLe indica al MPLAB el tipo de procesador que se va a emplear y cual es el formato del archivo *.list list p=16F877

    INCLUDE Incluye el archivo (file) dentro del programa; formar parte del cdigo que se est escribiendoEl parmetro file puede incluir el path en el cual se encuentra el fichero a incluir. En caso que se omita asumir los directorios del MPLAB y del archivo fuente Incluye el archivo p16F877.inc que contiene las etiquetas genricas del PIC16F877

  • Include P16F877A.INC__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_OFF & _HS_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF

  • Configuration Wordbit 13 CP1 = Code protection off

    bit 11 DEBUG1 = In-Circuit Debugger disabled, RB6 and RB7 are general purpose I/O pins

    bit 10-9 WRT1:WRT011 = Write protection off; all program memory may be written to by EECON control

    bit 8 CPD1 = Data EEPROM code protection offbit 7 LVP0 = RB3 is digital I/O, HV on MCLR must be used for programming

    bit 6 BOREN1 = BOR enabled

    bit 3 PWRTEN0 = PWRT enabled

    bit 2 WDTEN0 = WDT disabled

    bit 1-0 FOSC1:FOSC001 = XT oscillator

  • ;*************************************************************************************************; Programa ES1.ASM Fecha; Este programa configura las entradas del PORTA como entradas digitales, lee el contenido del; PORTA y muestra su valor sobre los diodos LED conectados al PORTB. ; Programa para PIC16F87X ; Velocidad del Reloj: 4 MHz Reloj Instruccin: 1 MHz = 1 uS ; Perro Guardin: habilitado Tipo de Reloj : XT; Proteccin del cdigo: OFF;*************************************************************************************************List p=16F876 ;Tipo de procesadorinclude P16F876.INC ;Definiciones de registros internosORG 0x00;Vector de ResetgotoINICIOORG 0x05 ;Salva el vector de interrupcinINICIO clrf PORTB ;Borra los latch de salida del PORTBbsf STATUS,RP0 ;Selecciona banco 1movlw b00000110movwf ADCON1 ;PORTA E/S digitalesclrf TRISB ;Configura PORTB como salidamovlw b00011111movwf TRISA ;Configura PORTA como entradabcf STATUS,RP0 ;Selecciona banco 0BUCLE movf PORTA,W ;Lee el PORTA sobre Wmovwf PORTB ;Escribe el valor de W en el PORTAgoto BUCLE ;Salta a BUCLEEND

  • *****************************************************************; ZONA DE DATOS CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC; Configuracin para el grabador LIST P=16F84A ; Procesador utilizado. INCLUDE ; Definicin de algunos operandos ; utilizados ***************************************************************** ; ZONA DE CDIGOS ORG 0 ; El programa comienza en la direccin 0 de ; memoria de programaInicio bsf STATUS,RPO ; Acceso al Banco 1cfrf TRISB ; Las lneas del Puerto B se configuran como ; salidasmovlw b000 11111movwf TRISA ; Las 5 lneas del Puerto A se configuran ;como entradasbcf STATUS,RPO ; Acceso al Banco 0Principal movf PORTA,W ; Carga el registro de datos del Puerto A en Wmovwf POR 113 ; El contenido de W se deposita en el Puerto Bgoto Principal ; Se crea un bucle cernido e infinitoEND ; Fin del programa

    Ing. Hctor Jimnez M.

    MICROCONTROLADORESPuertos de I/O

  • PuertosContiene 5 puertos que pueden ser configurados como entrada o salida digitales

    Puerto A (RA0-5), contiene 6 lneas Puerto B (RB0-7), contiene 8 lneas Puerto C (RC0-7), contiene 8 lneasPuerto D (RD0-7), contiene 8 lneasPuerto E (RE0-2), contiene 3 lneas

  • PuertosPermiten monitorear o controlar otros componentes y sus pins pueden considerarse como I/O de propsito general (Digitales)

    La flexibilidad y funcionalidad del c radica en que algunos pins estn multiplexados con funciones analgicas alternativas: ADC, comparador, etc.

    En general, cuando alguna de ellas est activa los pin no pueden usarse como I/O de propsito general

  • PuertosLa direccin de las lneas se realiza mediante el registro TRIS, inclusive al usarse como entradas analgicas 0 se comporta como salida1 se comporta como entrada

    La escritura y lectura de valores desde los puertos se hace a travs de los registros PORT

  • PuertosA travs de las instrucciones MOV podemos leer o escribir valores. Desde luego, si se configura un puerto como entrada (lectura) los valores que se escriban en l no tendrn efecto

  • Puerto ATiene 6 bits bidireccionales RA0 - RA5 con mltiples funciones ya sean analgicas o digitales

    Algunos pins pueden configurarse cono entradas analgicas modificando los registros ADCON1 y/o CMCON (A/D y comparadores)

  • Puerto ALos pins RA0/AN0, RA1/AN1, RA2/AN2 tienen 2 funciones E/S digitalentrada de canales 0, 1 y 2 del convertidor A/D

    El pin RA3/AN3/VREF+ tiene 3 funciones:E/S digitalentrada del canal 3 del convertidor A/Dentrada de la tensin de referencia

    El pin RA5/AN4/SS# tiene 3 funciones: E/S digitalentrada del canal 4 del convertidor A/Dseleccin del modo esclavo para comunicacin serie sncrona

  • Puerto AEl pin RA4/T0CKI esta multiplexado con el mdulo de entrada de reloj (Timer0)

    Cuando trabaja con el Timer se comporta como entrada de reloj Schmitt Trigger

    Cuando es una I/O digital como salida a colector abierto (open-drain)

    El resto tiene niveles de entrada TTL y son compatibles con salidas CMOS

  • Puerto ADurante el POR los pins son configurados como entradas analgicas (A/D) y los comparadores estn apagados (digital state) (son ledas como 0)

  • ADCON1 - A/D Control Register1Selecciona la funcin: entrada analgica I/O digital (banco 1, posicin 0x1F)

    Para configurar el PORTA como E/S digitales debe escribirse 011x

  • Configuracin de PuertosDeben seguirse los siguientes pasos:

    Ingresar al banco 1Configurar los puertos TRISA, TRISB, TRISC, TRISD y TRISERegresar al banco 0Escribir o leer datos desde los puertosPORTA, PORTB, PORTC, PORTD y PORTE

  • EjercicioDesarrollar un programa que configure las lneas del puerto A como entrada y las lneas del puerto B como salida.

    Y que muestre en forma permanente la entrada del puerto A en el puerto B

    Al desarrollar el algoritmo se reduce a :1. Configurar PA como entrada y PB salida2. W= PA3. PortB=W4. Ir paso 2

  • ;*************************************************************************************************; Programa ES1.ASM Fecha; Este programa configura las entradas del PORTA como entradas digitales, lee el contenido del; PORTA y muestra su valor sobre los diodos LED conectados al PORTB. ; Programa para PIC16F87X ; Velocidad del Reloj: 4 MHz Reloj Instruccin: 1 MHz = 1 uS ; Perro Guardin: habilitado Tipo de Reloj : XT; Proteccin del cdigo: OFF;*************************************************************************************************List p=16F876 ;Tipo de procesadorinclude P16F876.INC ;Definiciones de registros internosORG 0x00;Vector de ResetgotoINICIOORG 0x05 ;Salva el vector de interrupcinINICIO clrf PORTB ;Borra los latch de salida del PORTBbsf STATUS,RP0 ;Selecciona banco 1movlw b00000110movwf ADCON1 ;PORTA E/S digitalesclrf TRISB ;Configura PORTB como salidamovlw b00011111movwf TRISA ;Configura PORTA como entradabcf STATUS,RP0 ;Selecciona banco 0BUCLE movf PORTA,W ;Lee el PORTA sobre Wmovwf PORTB ;Escribe el valor de W en el PORTAgoto BUCLE ;Salta a BUCLEEND

  • ;*************************************************************************************************; Programa ES1.ASM Fecha; Este programa configura las entradas del PORTA como entradas digitales, lee el contenido del; PORTA y muestra su valor sobre los diodos LED conectados al PORTB. ; Velocidad del Reloj: 4 MHz Reloj Instruccin: 1 MHz = 1 uS ; __config ; _CP_OFF & _DEBUG_OFF & _WRT_ENABLE_ON & _CPD_OFF & _LVP_OFF & _WDT_OFF & _XT_OSC ; CP - DEBUG WRT1 WRT0 CPD LVP BOREN - - PWRTEN WDTEN FOSC1 FOSC0; CP - DEBUG WRT CPD LVP WDT OSC ; 1 - 1 1 1 1 0 1 - - 0 0 0 1; 1 - 1 1 1 1 0 0 - - 1 0 0 1;*************************************************************************************************List p=16F876 ;Tipo de procesadorinclude P16F876.INC ;Definiciones de registros internosORG 0x00;Vector de ResetgotoINICIOORG 0x05 ;Salva el vector de interrupcinINICIO clrf PORTB ;Borra los latch de salida del PORTBbsf STATUS,RP0 ;Selecciona banco 1movlw b00000110movwf ADCON1 ;PORTA E/S digitalesclrf TRISB ;Configura PORTB como salidamovlw b00011111movwf TRISA ;Configura PORTA como entradabcf STATUS,RP0 ;Selecciona banco 0BUCLE movf PORTA,W ;Lee el PORTA sobre Wmovwf PORTB ;Escribe el valor de W en el PORTAgoto BUCLE ;Salta a BUCLEEND

  • EjemploDisear un programa que configure el RB0 como entrada y conectar un pulsador que asegure un 1-lgico cuando est abierto y 0-lgico al presionarlo. El RC0 como salida.

    En el programa evaluaremos el pin RB0; si RB0 = 1-lgico entonces RC0= 0-lgicoRB0 = 0-lgico entonces RC0= 1-lgico

    Algoritmo1. Configurar PORTC salida2. Configura RB0 entrada3. Si RB0 = 1- lgico RC0 =1-lgico4. Si no RC0 = 0 - lgico5. Ir paso 3

  • EjemploObservacin: Resulta claro que solo usaremos el puerto B y C. Sin embargo podemos apreciar que los dems puertos estn configurados como salidas Esta accin es recomendable llevarla a efecto para proteger los puertos ante la presencia de voltajes no deseados o cargas estticas.

  • Ejemplo list p=16f877 ;Comando que indica el PIC usado include "p16f877.inc" ;Etiquetas para el PIC16F877 org0x000 ;Inicio en la posicion 0 de memorianop;Libre (uso del debugger)nopinicio bsf STATUS,RP0 ;Ir banco 1bcf STATUS,RP1clrf TRISA ;PORTA salidaclrf TRISB ;PORTB salidaclrf TRISC ;PORTC salidaclrf TRISD ;PORTD salidaclrf TRISE ;PORTE salidabsf TRISB,0 ;RB0 entradabcf STATUS,RP0 ;Ir banco 0bcf STATUS,RP1bucle btfssPORTB,0 ;RB0 es 1-logico ?goto encendido ;no, RC0=0-logicobcf PORTC,0 ;si, RC0=1-logicogoto _bucle ;Ir _bucleencendido bsf PORTC,0 ;RC0=1-logicogoto _bucle;Ir _bucleEND

  • EjerciciosEnsam_01.asm: Por los LEDs conectados al puerto B se visualiza el valor de una constante, por ejemplo el nmero binario b0l0l0l0l

    Ensam_02.asm: Los LEDs conectados al nibble bajo del Puerto B se apagarn y los del nibble alto se encenderan

    Ensam_03.asm: Por el Puerto B se obtiene el dato de las cinco lneas del Puerto A al que est conectado un array de interruptores. Por ejemplo, si por el Puerto A se introduce --011001, por el Puerto B aparecer xx011001 (no importa el valor de los 2 bits ms altos del Puerto B)En la entrada: Un interruptor cerrado representa un 0 lgicoUn interruptor abierto representa un 1 lgicoEn la salida: Un LED apagado representa un 0 lgicoUn LED encendido representa un 1 lgico

    Ing. Hctor Jimnez M.

    MICROCONTROLADORESPuertos de I/O

  • Observacin: ICD (in circuit debugger) es una caracterstica de algunos microcontroladores. Bsicamente se activa mediante un pin en el momento de la grabacin del dispositivo.Cuando esta activado el microcontrolador espera una direccin de tal forma que procede a ejecutar el programa que tiene grabado en la memoria y se detiene en la direccin que fue pasada como parmetro. A continuacin transmite el contenido de los bancos va puerta serial y queda a la espera de una nueva direccin (que puede ser la inmediata siguiente). La ejecucin de esta tarea demanda cierto recursos que debemos considerar en la elaboracin del programa.1. Siempre debemos dejar en la posicin 0x00 de la memoria de programa un cdigo NOP2. Los pines de RB3, RB6 y RB7 no deben ser empleados en la aplicacin que se va a conectar en el debugger.3. Los 100h ltimas posiciones de memoria del PIC tampoco deben ser empleadas por que all el debugger deposita el programa que lleva la transmisin de los valores.Proceda a instalar y conectar el ICD, la tarjeta demoboard y la PC:1. Conecte el adaptador al tomacorriente.2. Conecte el demoboard al ICD (debugger) a travs del cable RJ-6.3. Conecte el ICD (debugger) al puerto serial 1 de la computadora.4. Conecte el jack de alimentacin del adaptador a la tarjeta demoboard.Si todo esta en orden notar que el led rojo de fuente de la tarjeta demoboard y del ICD estn encendidos.

  • 10

  • Cdigo de InstruccionesEl cdigo para clrf f es 000001 1fffffff toma en cuenta los 7 bit bajos de la direccin del registro f La direccin de PORTB es: 0000 0110 (06h) TRISB es: 1000 0110 (86h)

    Por lo tanto clrf f TRISB y clrf f PORTB Tienen el mismo cdigo de mquina

    00 0001 1000 0110 (186h)

    Lo mismo ocurre con:

    clrf f PORTAclrf f TRISA

    000001 10000101 (185h)

  • Bancos de memoriaToda la memoria de datos est organizada en 4 bancos numerados 0, 1, 2 y 3.Para seleccionar un banco se debe hacer uso de los bits del registro STATUS denominados IRP, RP1 y RP0.Hay dos maneras de acceder a la memoria de datos: Direccionamiento directo e indirecto.

  • Cuando es entrada analgica los pins se leen como 0The user must ensure the TRIS bits are maintained set when using the pins as analog inputs.

    en el bit 0 del TRISA la lnea RA0Los pins pueden configurarse como entradas analgicas o como entradas analgicas con Vrefanalog inputs and analog VREF input)

  • SdDfDfsdDfSd YuGvkVulbhul