Tutorial MPLAB

download Tutorial MPLAB

of 30

description

esta bueno

Transcript of Tutorial MPLAB

Tutorial MPLABEl mplab es un software que brinda la empresa MICROCHIPde forma gratuita para la creacin de programas para sus microcontroladores pic.Para empezar primero debemos de descargar el programa MPLAB Para ello vamos al link de descarga http://ww1.microchip.com/downloads/en/DeviceDoc/MPLAB_IDE_8_40.zip Una vez instalado procedemos a la creacin del proyecto para ello vemos el siguiente video de gua.Vamos a utilizar el microcontrolador PIC16F628A para la realizacin de nuestros ejercicios, se eligi este microcontrolador porque este remplazara al obsoleto pic16f84a.

PARTES DE UN PROGRAMA EN ASSEMBLEREtiquetas:la primera columna es el campo de etiquetas, estas expresiones pueden ser alfanumricas, las etiquetas sirven para guiar el programa a dicha direccin.Las etiquetas deben empezar por letras, nmeros.Cdigo de operacin:esta segunda columna sirve para escribir las instrucciones del programa.Operandos:la tercera columna es para los datos u operandos, este a su vez puede tener uno o ms operandos.Comentarios: en esta columna se describen para que sirva cada instruccin escrita respectivamente.

DESARROLLO DEL MODULO BASICO PARA LA SIMULACION DE LOS PROGRAMASTodas las prcticas se simularan en el PROGRAMA de simulacin virtual PROTEUS7.6 aunque las otras versiones de proteus mayor alproteus 7.1 pueden servir. Haga lo posible por buscarlo en ares o emule, no les puedo poner el link de descarga de este programa porque estarainfringiendo lasnormas de esta pagina web.Este software es el mejor en simulacinde microcontroladores as como otros dispositivos electrnicos les recomiendo.Lo primero debemos de tener el modulo se simulacin bsico, este modulo se compone de:Diagrama de simulacin virtual:en este diagrama se simularan todas las prcticas que realicemos.

Diagrama esquemtico: este diagrama muestra todas las conexiones del circuito del modulo bsico.Al puerto A se le ha conectado resistencias de 10k este puerto recibir la entrada de los pulsadores. Y el puerto B se le ha conectado ledsesto no servir para visualizar los datos que mandaremos a este puerto, y la entrada de reset sirve para poner a cero todo el puerto b.

Vista 3d del Modulo Bsico PIC16F628A

Descargue aqu el diagrama de simulacin del modulo bsico-diagrama esquemtico-diagrama del pcb-lista de componentes. http://www.4shared.com/file/160966295/2af9ddc8/Modulo_Basico.html PASOS PARA LA REALIZACIN DEL PRIMER PROGRAMA.1)Lo primero que se realiza en un programa para microcontroladoreses configuras sus respectivos puertos. En este caso lo primero ser utilizar los registros TRISA que configura el puerto B Y el TRISB que configura el PORTA.Un cero en un bit del registro TRISB configura el pin del puerto B como salidaUn uno en un bit del registro TRISB configura el pin del puerto B como entradaUna vez configurado el puerto el puerto B como salida podemos enviar voltajes de 5v o cero voltiosUn cero en un bit del registro PORTBpone 0 voltios el pin del puerto bUn uno en un bit del registro PORTBpone 5v voltios el pin del puerto bEl PORTA puede ser configurado como analgica o digital en el modo analgico se puede recibir seales analgicas,y como digital puede ser configurado como salida/entrada digital.Un cero en un bit del registro TRISA configura el pin del puerto A como salida, excepto el RA5 que solo se puede configurar como entrada.Un uno en un bit del registro TRISA configura el pin del puerto A como entradaUna vez configurado el puerto el puerto A como salida podemos enviar voltajes de 5v o cero voltiosUn cero en un bit del registro PORTApone 0 voltios el pin del puerto bUn uno en un bit del registro PORTApone 5v voltios el pin del puerto ben las practicas se deshabilitara las entradas analgicas para ello debemos de cargar al registro CMCONcon 7.Registro STATUS: este registro nos servir para cambiar de bancos para la configuracin de los puertos a y b. en la siguiente figura se muestra los bits de registro status.

En la siguiente figura se muestra una tabla para seleccionar el banco que utilizaremos.

Por defecto cuando el pic16f628a recibe alimentacin se encuentra el el banco 02) La numeracin que se utiliza son las siguientes:Decimal.1; se pone el punto y se escribe el numeroHexadecimal0x00 ;Binariab00000000 se pone b y se escribe la cantidad binariaLa numeracin binaria como el decimal se puede escribir de 0 a 255 que es lo mximo que se puede incrementar un registro de 1 byte.3)Instrucciones de carga

Instruccin movlw Esta instruccin sirve para cargar un dato al registro de trabajo wEjemplo:Movlw.4; carga 4 al registro de trabajo wInstruccin movwf Esta instruccin deposita el contenidodel registro de trabajo w al registro destino.Ejemplo:MovwfRegistro_A; deposita el contenidodel registro de trabajo w al Registro_A

InstruccinmovfEstainstruccin sirve para moverel contenido delregistro f al registro de trabajo wEjemplo:MovfRegistro_A, w; mueveel contenidodelRegistro_Aal registro de trabajo w

Instruccin BSFEsta instruccin pone auno el bit del registro destino.Ejemplo:Bsfstatus,0; pone a uno el bit cero del registro status

Instruccin BCFEsta instruccin pone acero el bit del registro destino.Ejemplo:BCfstatus,0; pone a cero el bit cero del registro status

Instruccin clrfEsta instruccin pone acero todoel registro destino.Ejemplo:ClrfPORTB; pone a cero todo el puerto B

Instruccin gotoEsta instruccin es de salto incondicional permite ir a una etiqueta, direccin del programa .Ejemplo:Gotoinicio; va a la etiqueta inicioInicio; etiqueta inicio

; ********************** ****** ***Ejercicio 1 *******************************************;Se configura el puerto a como entrada como entrada y el puerto b como salida, adems se pondr;a 0v todo el puerto b.__CONFIG_BODEN_OFF & _CP_ON & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _MCLRE_ON & _INTRC_OSC_NOCLKOUT ;Bits de configurationLISTP=16F628A; procesador utilizado#include; fichero que definen las etiquetas del picorg00000h; el programa comenzara a partir de la Direccin 0x00gotoInicio; vamos a la etiqueta inicioorg0005h; a partir de aqu escribiremos nuestro programaInicio; etiqueta inicioMOVLW.7; cargamos 7 al registro de trabajo wMOVWFCMCON; el contenido del registro w se deposita en el registro CMCONBSFSTATUS, RP0; pone 1 el bit 5 del registro statusBCFSTATUS, RP1; pone 0 el bit 6 del registro status, con esto accedemos al banco 1MOVLWB'11111111'; configuramos el porta como entradaMOVWFTRISAMOVLWB'00000000'; configuramos el puerto b como salidaMOVWFTRISBBCFSTATUS, RP0; pone a 0 el bit 5 del registro status, accedemos al banco 0ProgramaCLRFPORTB; ponemos a cero el puerto bEND; fin del programa;********************************************************************************************En el siguiente video se muestra como ensamblar el proyecto y despus simularlo virtualmente en el proteus, para ello descargue el diagrama de simulacin.Video1; ********************** ****** ***Ejercicio 2 *******************************************;Se configura el puerto a como entrada como entrada y el puerto b como salida, adems se pondr;a RB0, RB1,RB2,RB3 a 0v y RB4,RB5,RB6 y RB7 a 5v.__CONFIG_BODEN_OFF & _CP_ON & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _MCLRE_ON & _INTRC_OSC_NOCLKOUT; Bits de configurationLISTP=16F628A; procesador utilizado#include; fichero que definen las etiquetas del picorg00000h; el programa comenzara a partir de la Direccin 0x00gotoInicio; vamos a la etiqueta inicioorg0005h; a partir de aqu escribiremos nuestro programaInicio; etiqueta inicioMOVLW.7; cargamos 7 al registro de trabajo wMOVWFCMCON; el contenido del registro w se deposita en el registro CMCONBSFSTATUS, RP0; pone 1 el bit 5 del registro statusBCFSTATUS, RP1; pone 0 el bit 6 del registro status, con esto accedemos al banco 1MOVLWB'11111111'; configuramos el porta como entradaMOVWFTRISAMOVLWB'00000000'; configuramos el puerto b como salidaMOVWFTRISBBCFSTATUS, RP0; pone a 0 el bit 5 del registro status, accedemos al banco 0ProgramaMovlwb'11110000'; cargamos el valor binario 11110000 al registro de trabajo wMovwfPORTB; y lo depositamos en el puerto bEND; fin del programa;********************************************************************************************; ********************** ****** ***Ejercicio 3 *******************************************;Se configura el porta RA0, RA1, RA2 Y RA3 como salida y RA4, RA6, RA7 como entrada y el puerto b como salida;y se pondr a 0 voltios el RA0, RA1, RA2, RA3 Del puerto a y todo el puerto b a 0 voltios.__CONFIG_BODEN_OFF & _CP_ON & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _MCLRE_ON & _INTRC_OSC_NOCLKOUT; Bits de configurationLISTP=16F628A; procesador utilizado#include; fichero que definen las etiquetas del picorg00000h; el programa comenzara a partir de la Direccin 0x00gotoInicio; vamos a la etiqueta inicioorg0005h; a partir de aqu escribiremos nuestro programaInicio; etiqueta inicioMOVLW.7; cargamos 7 al registro de trabajo wMOVWFCMCON; el contenido del registro w se deposita en el registro CMCONBSFSTATUS, RP0; pone 1 el bit 5 del registro statusBCFSTATUS, RP1; pone 0 el bit 6 del registro status, con esto accedemos al banco 1MOVLWB'11110000'; configuramos el porta RA0, RA1, RA2 Y RA3 como salida y RA4, RA6, RA7, como entradaMOVWFTRISAMOVLWB'00000000'; configuramos el puerto b como salidaMOVWFTRISBBCFSTATUS, RP0; pone a 0 el bit 5 del registro status, accedemos al banco 0ProgramaMovlwb'11110000'; cargamos el valor binario 11110000 al registro de trabajo wMovwfPORTA; y lo depositamos en el puerto aCLRFPORTB; apagamos todoel puerto bEND; fin del programa;********************************************************************************************; *********************************Ejercicio 4 *******************************************;Se configura el puerto a como entrada como entrada y el puerto b como salida, se mover el contenido del puerto a;Al puerto b por ejemplo si se pulsa el pulsador RA0 se apagara el LED RB0.__CONFIG_BODEN_OFF & _CP_ON & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _MCLRE_ON & _INTRC_OSC_NOCLKOUT; Bits de configurationLISTP=16F628A; procesador utilizado#include; fichero que definen las etiquetas del picorg00000h; el programa comenzara a partir de la Direccin 0x00gotoInicio; vamos a la etiqueta inicioorg0005h; a partir de aqu escribiremos nuestro programaInicio; etiqueta inicioMOVLW.7; cargamos 7 al registro de trabajo wMOVWFCMCON; el contenido del registro w se deposita en el registro CMCONBSFSTATUS, RP0; pone 1 el bit 5 del registro statusBCFSTATUS, RP1; pone 0 el bit 6 del registro status, con esto accedemos al banco 1MOVLWB'11111111'; configuramos el porta como entradaMOVWFTRISAMOVLWB'00000000'; configuramos el puerto b como salidaMOVWFTRISBBCFSTATUS, RP0; pone a 0 el bit 5 del registro status, accedemos al banco 0ProgramaMOVFPORTA,W; mueve el contenido del puerto a el registro de trabajo wMOVWFPORTB; el contenido del registro de trabajo se deposita al puerto bGOTOPrograma; va hacia la etiqueta Programa as se creara un bucle infinito de repeticinEND; fin del programa;********************************************************************************************3) Instrucciones de aritmticasInstruccin addlwEsta instruccin suma el contenido del registro w con la constante k,donde k es un numero de 0 a 255.Ejemplo:Addlw.7;suma7 al registro de trabajo wInstruccin addwfEsta instruccin suma el contenido del registro w con el contenido del registro f,Ejemplo1:AddwfRegistro_A, w;sumael contenido delRegistro_A a l registro de trabajo wEjemplo2:AddwfRegistro_A, f;sumael contenido del registro de trabajo w alRegistro_AInstruccin sublwEsta instruccin resta el contenido de la constante menos el contenido del registro de trabajo w y almacena el resultado en w,Ejemplo:Sublw.5;resta 5 menos el contenido del registro de trabajo w y deposita el resultado en wInstruccin subwfEsta instruccin resta el contenido del registro f menos el contenido de trabajo wEjemplo:SubwfRegistro_A, f;restael contenido delRegistro_Amenos el contenidodel registro detrabajo w y deposita el resultado en el Registro_ADirectiva de direccin de memoria RAM de usuarioLa memoria RAM que posee el microcontrolador es de 224 bytes divididas en 4 bancos, en las practicas se usaran la memoria RAM del banco 1 que tiene la direccin 0x20 hasta 7fh o sea 96 bytes de RAM de usuario.Ejemplo: se desea asignar 5 posiciones de memoria RAM.CBLOK0X20; inicio de direccin de la memoria RAMREGISTRO_A; direccin de memoriaRAM 0x20REGISTRO_B; direccin de memoriaRAM 0x21REGISTRO_C; direccin de memoriaRAM 0x22REGISTRO_D; direccin de memoriaRAM 0x23REGISTRO_E; direccin de memoriaRAM 0x24ENDC; final de asignacin de memoria RAMEjemplos de usos de las instrucciones aritmticas; *********************************Ejercicio 5 *******************************************;Se configura el puerto a como entrada y el puerto b como salida, se sumara 10 al registro de trabajo w y luego;se depositara el resultado al puerto b__CONFIG_BODEN_OFF & _CP_ON & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _MCLRE_ON & _INTRC_OSC_NOCLKOUT; Bits de configurationLISTP=16F628A; procesador utilizado#include; fichero que definen las etiquetas del picorg00000h; el programa comenzara a partir de la Direccin 0x00gotoInicio; vamos a la etiqueta inicioorg0005h; a partir de aqu escribiremos nuestro programaInicio; etiqueta inicioMOVLW.7; cargamos 7 al registro de trabajo wMOVWFCMCON; el contenido del registro w se deposita en el registro CMCONBSFSTATUS, RP0; pone 1 el bit 5 del registro statusBCFSTATUS, RP1; pone 0 el bit 6 del registro status, con esto accedemos al banco 1MOVLWB'11111111'; configuramos el porta como entradaMOVWFTRISAMOVLWB'00000000'; configuramos el puerto b como salidaMOVWFTRISBBCFSTATUS, RP0; pone a 0 el bit 5 del registro status, accedemos al banco 0ProgramaMOVLW.4; cargamos 4 al registro de trabajo wADDLW.10; sumamos 10 al registro de trabajo w ahora w = 14MOVWFPORTB; el contenido del registro de trabajo se deposita al puerto bEND; fin del programa;********************************************************************************************; *********************************Ejercicio 6 *******************************************;Se configura el puerto a como entrada y el puerto b como salida, se sumara el contenido del puerto b al;al registro de trabajo w y luego se depositara el resultado al puerto b__CONFIG_BODEN_OFF & _CP_ON & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _MCLRE_ON & _INTRC_OSC_NOCLKOUT; Bits de configurationLISTP=16F628A; procesador utilizado#include; fichero que definen las etiquetas del picorg00000h; el programa comenzara a partir de la Direccin 0x00gotoInicio; vamos a la etiqueta inicioorg0005h; a partir de aqu escribiremos nuestro programaInicio; etiqueta inicioMOVLW.7; cargamos 7 al registro de trabajo wMOVWFCMCON; el contenido del registro w se deposita en el registro CMCONBSFSTATUS, RP0; pone 1 el bit 5 del registro statusBCFSTATUS, RP1; pone 0 el bit 6 del registro status, con esto accedemos al banco 1MOVLWB'11111111'; configuramos el porta como entradaMOVWFTRISAMOVLWB'00000000'; configuramos el puerto b como salidaMOVWFTRISBBCFSTATUS, RP0; pone a 0 el bit 5 del registro status, accedemos al banco 0ProgramaMOVLW.2; cargamos 2 al registro de trabajo wMOVWFPORTB; el contenido del registro de trabajo se deposita al puerto bADDWFPORTB, f; sumamos el contenido del registro de trabajo w mas el puerto b y el; Resultado lo depositamos en el puerto b, ahora el puerto b=4END; fin del programa;********************************************************************************************; *********************************Ejercicio 7 *******************************************;Se configura el puerto a como entrada y el puerto b como salida, se sumara el contenido del REGISTRO_Aal;al registro REGISTRO_B el resultado se depositara al registro de trabajo w y luego al puerto b__CONFIG_BODEN_OFF & _CP_ON & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _MCLRE_ON & _INTRC_OSC_NOCLKOUT; Bits de configurationLISTP=16F628A; procesador utilizado#include; fichero que definen las etiquetas del picCBLOCK 0X20; direccin de memoria RAM de usuarioREGISTRO_A; registro auxiliar de 1 byteREGISTRO_B; registro auxiliar de 1 byteENDC; trmino de definicin de memoria RAM de usuarioorg00000h; el programa comenzara a partir de la Direccin 0x00gotoInicio; vamos a la etiqueta inicioorg0005h; a partir de aqu escribiremos nuestro programaInicio; etiqueta inicioMOVLW.7; cargamos 7 al registro de trabajo wMOVWFCMCON; el contenido del registro w se deposita en el registro CMCONBSFSTATUS, RP0; pone 1 el bit 5 del registro statusBCFSTATUS, RP1; pone 0 el bit 6 del registro status, con esto accedemos al banco 1MOVLWB'11111111'; configuramos el porta como entradaMOVWFTRISAMOVLWB'00000000'; configuramos el puerto b como salidaMOVWFTRISBBCFSTATUS, RP0; pone a 0 el bit 5 del registro status, accedemos al banco 0ProgramaMOVLW.2; cargamos 2 al registro de trabajo wMOVWFREGISTRO_A; el contenido del registro de trabajo se deposita alREGISTRO_AMOVLW.3; cargamos 3 al registro de trabajo wMOVWFREGISTRO_B; el contenido del registro de trabajo se deposita alREGISTRO_BMOVFREGISTRO_A,W; movemos el contenido del REGISTRO_A al registro de trabajo wADDWFREGISTRO_B, W; sumamos el contenido del registro REGISTRO_B al de trabajo w y elMOVWFPORTB; resultado lo depositamos en el puerto b, ahora el puerto b=5END; fin del programa;********************************************************************************************; *********************************Ejercicio 8 *******************************************;Se configura el puerto a como entrada y el puerto b como salida, se restara la constante k=9 menos el contenido;Del registro de trabajo w=1__CONFIG_BODEN_OFF & _CP_ON & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _MCLRE_ON & _INTRC_OSC_NOCLKOUT; Bits de configurationLISTP=16F628A; procesador utilizado#include; fichero que definen las etiquetas del picCBLOCK 0X20; direccin de memoria RAM de usuarioREGISTRO_A; registro auxiliar de 1 byteREGISTRO_B; registro auxiliar de 1 byteENDC; trminode definicin de memoria RAM de usuarioorg00000h; el programa comenzara a partir de la Direccin 0x00gotoInicio; vamos a la etiqueta inicioorg0005h; a partir de aqu escribiremos nuestro programaInicio; etiqueta inicioMOVLW.7; cargamos 7 al registro de trabajo wMOVWFCMCON; el contenido del registro w se deposita en el registro CMCONBSFSTATUS, RP0; pone 1 el bit 5 del registro statusBCFSTATUS, RP1; pone 0 el bit 6 del registro status, con esto accedemos al banco 1MOVLWB'11111111'; configuramos el porta como entradaMOVWFTRISAMOVLWB'00000000'; configuramos el puerto b como salidaMOVWFTRISBBCFSTATUS, RP0; pone a 0 el bit 5 del registro status, accedemos al banco 0ProgramaMOVLW.1; cargamos 2 al registro de trabajo wSUBLW.9; restamos 9 menos el registro de trabajo w y el resultado se deposita en wMOVWFPORTB; resultado lo depositamos en el puerto b, ahora el puerto b=8END; fin del programa;********************************************************************************************; *********************************Ejercicio 9 *******************************************;Se configura el puerto a como entrada y el puerto b como salida, se restara el contenido del REGISTRO_B menos;el contenido registro REGISTRO_A el resultado se depositara al registro de trabajo w y luego al puerto b__CONFIG_BODEN_OFF & _CP_ON & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _MCLRE_ON & _INTRC_OSC_NOCLKOUT; Bits de configurationLISTP=16F628A; procesador utilizado#include; fichero que definen las etiquetas del picCBLOCK 0X20; direccin de memoria RAM de usuarioREGISTRO_A; registro auxiliar de 1 byteREGISTRO_B; registro auxiliar de 1 byteENDC; trmino de definicin de memoria RAM de usuarioorg00000h; el programa comenzara a partir de la Direccin 0x00gotoInicio; vamos a la etiqueta inicioorg0005h; a partir de aqu escribiremos nuestro programaInicio; etiqueta inicioMOVLW.7; cargamos 7 al registro de trabajo wMOVWFCMCON; el contenido del registro w se deposita en el registro CMCONBSFSTATUS, RP0; pone 1 el bit 5 del registro statusBCFSTATUS, RP1; pone 0 el bit 6 del registro status, con esto accedemos al banco 1MOVLWB'11111111'; configuramos el porta como entradaMOVWFTRISAMOVLWB'00000000'; configuramos el puerto b como salidaMOVWFTRISBBCFSTATUS, RP0; pone a 0 el bit 5 del registro status, accedemos al banco 0ProgramaMOVLW.5; cargamos 5 al registro de trabajo wMOVWFREGISTRO_A; el contenido del registro de trabajo se deposita alREGISTRO_AMOVLW.12; cargamos 12 al registro de trabajo wMOVWFREGISTRO_B; el contenido del registro de trabajo se deposita alREGISTRO_BMOVFREGISTRO_A,W; movemos el contenido del REGISTRO_A al registro de trabajo wSUBWFREGISTRO_B,W; restamos el contenido del registro REGISTRO_B menos el registro de trabajo w y elMOVWFPORTB; resultado lo depositamos en el puerto b, ahora el puerto b=7END; fin del programa;********************************************************************************************En el prximo tutorial veremos como hacer secuencias de luces as como el uso de la librera retardos.incEjercicios: si usted desea aprender a programar los microcontroladores pic es necesario que practique lo que se ha enseado.1)Desarrolle un programa que configure el puerto aRA0, RA1 como salida y RA2, RA3, RA4, RA6, RA7 como entrada y el puerto b como salida.2)Desarrolle un programa que el bit RB0 este a 5v y los dems pines del puerto b a 0 voltios.3)Desarrolle un programa que el bit RA0 este a 0 voltios y todo el puerto b a 5 voltios.4)Desarrolle un programa queSume dos registros A Y By al resultado le resta uno y despus visualice el resultado por el puerto b.5)Desarrolle un programa queSume tres registros A, ByCY despus visualice el resultado por el puerto b6)Desarrolle un programa quereste dos registros A y B y al resultado le resta 2Yvisualice el resultado por el puerto b.7)Desarrolle un programa queSume dosregistros A, By que le reste el contenido del Registro_CY visualice el resultado por el puerto b.