Programacion Lenguaje Assembler 251007 1212174570118517 8

Embed Size (px)

Citation preview

  • PICProf. Nelson An*P I CEL OBJETIVO DE ESTE CURSO ES APRENDER A PROGRAMAR EN LENGUAJE ASSEMBLER

    Circuitos Integrados Programables

    Prof. Nelson An

  • PICProf. Nelson An*PIC 16F628A

    Prof. Nelson An

  • PICProf. Nelson An*PIC 16F628A

    Prof. Nelson An

  • PICProf. Nelson An*Introduccin a la Programacin en Lenguaje AssemblerQu son las Instrucciones?: El set de instrucciones de un microcontrolador es el set de entradas binarias que producen acciones definidas durante un ciclo de instruccin. Un set de instrucciones es para el microcontrolador lo mismo que una tabla de verdad es para una compuerta lgica, etc.Instrucciones Binarias: Una instruccin es un patrn de dgitos binarios el cual debe estar a disposicin del microcontrolador en el tiempo y forma que ste lo requiera. Por ejemplo: cuando un microcontrolador PIC 16F628A recibe el patrn binario de 14 bits 001011 0 0000100el cual corresponde al formato de la instruccindecfsz 0x04,0: 001011 0 0000100

    Prof. Nelson An

  • PICProf. Nelson An*Introduccin a la Programacin en Lenguaje AssemblerPrograma: un Programa es una serie de instrucciones que causan que el microcontrolador realice una tarea en particular.Programa en Assembler: Cmo introducimos un Programa en Assembler en un microcontrolador? Tenemos que traducirlo, compilarlo a hexadecimal a binario. Se puede hacer instruccin a instruccin a mano a travs de un programa en una PC llamado Cdigo Fuente.

    Prof. Nelson An

  • PICProf. Nelson An*Introduccin a la Programacin en Lenguaje AssemblerConvenciones en la escritura del cdigo fuente: Para hacer la tarea ms sencilla del programador, se usan algunas convenciones. En general las convenciones son cualquier accin que facilitan la revisin y comprensin de un programa. Comentaremos algunas convenciones que usaremos:

    Prof. Nelson An

  • PICProf. Nelson An*Introduccin a la Programacin en Lenguaje AssemblerLos ficheros de cdigo fuente llevarn la extensin *.ASMLos ficheros de listado llevarn la extensin *.LSTLos ficheros de cdigo objeto llevarn la extensin *.OBJLos ficheros de errores llevarn la extensin *.ERRLos ficheros ejecutables llevarn la extensin *.HEXLos mnemnicos escritos en mayscula hacen que el cdigo escrito sea ms visible.Comentarios explicando cada lnea de cdigo

    Prof. Nelson An

  • PICProf. Nelson An*Introduccin a la Programacin en Lenguaje AssemblerCaractersticas del Assembler: Campos del Lenguaje Assembler. Las instrucciones estn divididas en un nmero de campos, como se muestra debajo.ETIQUETASOPERACINOPERANDOCOMENTARIOLecturamovfportA,0;lee el puerto Amovwfreg1;escribe en reg1El campo del cdigo de operacin es el nico que nunca puede estar vaco; ste siempre contiene una instruccin una directiva del Assembler.El campo del operando direccin puede contener una direccin un dato, puede estar en blanco.

    Prof. Nelson An

  • PICProf. Nelson An*Introduccin a la Programacin en Lenguaje AssemblerEl campo del comentario de etiquetas es opcional. El programador asignar una etiqueta a una lnea de instruccin agregar un comentario segn su conveniencia.Delimitadores: Los campos van separados slo con espacios y/o tabulaciones. No agregar nunca otros caracteres.No utilice espacios extra, particularmente despus de comas que separan operandos. Ej. movlw 35,0.No use caracteres delimitadores (espacios y tabulaciones) en nombres etiquetas.

    Prof. Nelson An

  • PICProf. Nelson An*Introduccin a la Programacin en Lenguaje AssemblerEtiquetas: La etiqueta es el primer campo en una lnea en Lenguaje Assembler y puede no existir.Si una etiqueta est presente, el Assembler la define como el equivalente a la direccin del primer byte correspondiente a esa instruccin.Esta etiqueta puede volver a usarse en otro lugar pero como operando de una instruccin.El Assembler reemplazar sta etiqueta por el valor de cuando fue creada.Se usan frecuentemente en las instrucciones de salto.

    Prof. Nelson An

  • PICProf. Nelson An*Introduccin a la Programacin en Lenguaje AssemblerNo pueden usarse como nombres de etiquetas las palabras ya reservadas por el Assembler (ORG, EQU) nombres de instrucciones (movf, incf, nop). Por ej.:LeermovfportA,0::gotoleer

    Prof. Nelson An

  • PICProf. Nelson An*Introduccin a la Programacin en Lenguaje AssemblerMnemnicos (cdigos de operacin): La tarea principal del Assembler es la traduccin de los cdigos de operacin (mnemnicos) en sus equivalentes binarios. El Assembler realiza esta tarea usando una tabla como si lo haramos a mano.El Assembler debe hacer algo ms que traducir los cdigos de operacin. Tambin debe determinar cuntos operandos requiere la instruccin y de qu tipo.

    Prof. Nelson An

  • PICProf. Nelson An*Introduccin a la Programacin en Lenguaje AssemblerDirectivas: Algunas instrucciones del Lenguaje Asssembler no se traducen directamente a instrucciones del lenguaje mquina. stas instrucciones son directivas para el Assembler; stas asignan al programa ciertas reas de memoria, definen smbolos, designan reas de RAM para el almacenamiento de datos temporales, colocan tablas datos constantes en memoria y permiten referencias a otros programas.Las directivas se utilizan como comandos escritos en el cdigo fuente para realizar un control directo ahorrar tiempo a la hora de ensamblar.Para usar estas directivas seudo-operandos, el programador las coloca en el campo de cdigo de operaciones, y si lo requiere la directiva, una direccin dato en el campo de direccin.

    Prof. Nelson An

  • PICProf. Nelson An*Introduccin a la Programacin en Lenguaje AssemblerLas directivas de uso frecuente son instrucciones para el compilador. #DEFINE#define []Explicacin: declara una cadena de texto como subttulo de otra.ENDEndExplicacin: indica fin de programaETIQUETAS A DIRECCIONES DE PROGRAMA:Explicacin: son muy tiles para usar con instrucciones CALL (llamada a subrutina) GOTO (salto)

    Prof. Nelson An

  • PICProf. Nelson An*Introduccin a la Programacin en Lenguaje AssemblerEQUportA equ 0x05Explicacin: define una constante de ensambleINCLUDEIncludeExplicacin: incluye en el programa un archivo con cdigo fuenteORGorg 0x00Explicacin: ensambla a partir de la direccin especificada

    Prof. Nelson An

  • PICProf. Nelson An*Introduccin a la Programacin en Lenguaje AssemblerEQU (Equate Equivalente):La directiva EQU permite al programador igualar nombres a datos direcciones. Los nombres utilizados se refieren generalmente a direcciones de dispositivos, datos numricos, direcciones de comienzo, direcciones fijas, posiciones de byte.ORG (Origin Origen):La directiva Origen permite al programador especificar la posicin de memoria donde programas, subrutinas datos residirn. Los programas y los datos pueden estar alojados en diferentes reas de memoria dependiendo de la configuracin de memoria, rutinas de comienzo, subrutinas de interrupcin y otros programas deben comenzar en locaciones de memoria fijados por la estructura del microcontrolador.

    Prof. Nelson An

  • PICProf. Nelson An*Introduccin a la Programacin en Lenguaje AssemblerLa directiva ORG hace al compilador colocar el cdigo que le sigue en una nueva direccin de memoria (la salida del compilador no slo coloca los cdigos de operacin, sino tambin las direcciones de cada instruccin y datos del programa).Usualmente se la utiliza para: reset, programa de servicio de interrupcin. Por ej.:Resetorg0x00gotoinicioorg0x04; vector de interrupcingotointerrupcinorg0x05IniciomovfportA,0; aqu comienza el programa (lee portA)

    Prof. Nelson An

  • PICProf. Nelson An*Introduccin a la Programacin en Lenguaje AssemblerOperandos y Direcciones: Los ensambladores permiten elegir con libertad el tipo de elemento a colocar en el campo de operando direccin.Nmeros decimales: La mayora de los ensambladores asumen el punto como nmeros decimales a no ser que se indiquen de otra manera. Por ej.:movlw.120Significa: mover el nmero literal 120 (decimal) al registro de trabajo w

    Prof. Nelson An

  • PICProf. Nelson An*Introduccin a la Programacin en Lenguaje AssemblerOtros sistemas de numeracin: Los ensambladores tambin aceptan nmeros hexadecimales, binarios.Por ej.: 05h0x05hexadecimalb00000101binarioInclusin de cdigo: Algunos ensambladores permiten incluir cdigo fuente (partes de programa) desde otros archivos. Por ej.:includelectura.asmEsta lnea de programa le indica al compilador que incluya el cdigo que se encuentra en el archivo lectura.asm como si fuese parte del propio programa.

    Prof. Nelson An

  • PICProf. Nelson An*Instrucciones para Ensamblar ProgramasPodemos usar para escribir los programas el block de notas de windows el MPLAB.Una vez escrito el Programa, se guarda con extensin .asm y se lo convierte (ensambla) con un programa ensamblador a formato .hex (archivo hexadecimal); el programa compilador sugerido es el MPASM (assembler de microsoft) que usa la empresa Microchip. Al archivo con extensin .hex resultante lo podemos transferir usando la tarjeta electrnica cargador de PIC a la memoria del PIC16F628A.Existen una serie de directivas que son para el ensamblador y nos hacen la tarea de programacin ms sencilla.

    Prof. Nelson An

  • PICProf. Nelson An*Instrucciones para Ensamblar ProgramasCon estas directivas haremos los siguientes ejemplos: #DEFINEBANCO1BSFSTATUS,5#DEFINEBANCO0BCFSTATUS,6A partir de ahora, cuando escribamos BANCO1 se pondr a 1 el bit de seleccin de banco y cuando escribamos BANCO0 se pondr a 0 el bit de seleccin de banco y pasaremos al banco1, recordemos que rp0 y rp1 son los bits que seleccionan en el registro de Status y empiezan en 00.

    Prof. Nelson An

  • PICProf. Nelson An*Programacin en Lenguaje AssemblerCmo se ordena un Programa? Cuando desarrollamos un Programa, nos ayudarn las siguientes pautas:Al principio van los EQU y los #DEFINE, despus comenzamos con el Programa.El Programa se escribe en cuatro columnas separadas por tabuladores.La primera columna se ponen las etiquetas las direcciones de programa.En la segunda columna se ponen las instrucciones (bcf, clrw, btfss).

    Prof. Nelson An

  • PICProf. Nelson An*Programacin en Lenguaje AssemblerCmo se ordena un Programa? Cuando desarrollamos un Programa, nos ayudarn las siguientes pautas:En la tercera columna se ponen los registros a los que afecta la instruccin.En la cuarta columna se ponen los comentarios que crea pertinente seguidos de un punto y coma.

    Prof. Nelson An

  • PICProf. Nelson An*Aprendiendo a ProgramarEn todo Programa se debe decir cul es el tipo de PIC que se emplear, hay que incluir sus libreras y configurarlo.Al escribir un Programa se realizan las sentencias en columnas.La primera columna se utiliza para nombrar variables colocar etiquetas. La segunda columna se utiliza para aplicar la instruccin. La tercera columna contiene los datos necesarios para que pueda ejecutarse dicha instruccin. La cuarta columna contiene datos tiles para el programador pero que no son tenidos en cuanta por el microcontrolador.

    Prof. Nelson An

  • PICProf. Nelson An*Aprendiendo a ProgramarEjemplo:Vamos a definir a la variable AZUL en la posicin de memoria expresada en nmero hexadecimal 20.1 Col.2 Col.3 Col.4 Col.AZULEQU0x20;defin a la variable AZUL en la posicin 20AZUL es la variable que defin.EQU es la directiva que significa asignar definir.0x20 es la posicin de la memoria de datos expresado en hexadecimal.

    Prof. Nelson An

  • PICProf. Nelson An*Aprendiendo a ProgramarSe emplean signos para efectuar determinadas consideraciones. Por ejemplo:; se emplea para colocar observaciones. El Programa no toma en cuenta todo lo que est en una lnea luego de dicho signo.: se utiliza normalmente para definir etiquetas, que son lugares a donde va el programa cuando as lo requiere. se utilizan para decir que lo que est entre ellas es el nmero y puede estar expresado en sistemas de numeracin decimal, binario hexadecimal.. se emplea para definir un nmero en decimal.Un Programa siempre deber comenzar con la directiva ORG y terminar con la directiva END.

    Prof. Nelson An

  • PICProf. Nelson An*Instrucciones para Ensamblar ProgramasMOVFLECTURAmovf f,dinstruccinoperandosd={0,1} 0=< f=< 127M=memoriaM(f) d=0 WM(f)=posicin de memoriad=1M(f)flagZ=1M(f)=0Cd. OP:001000dfff ffff movf d=0 d=1

    Prof. Nelson An

  • PICProf. Nelson An*Instrucciones para Ensamblar ProgramasMOVWFmover a fESCRITURA movwf 0=< f=< 127M=memoriaM(f)=posicin de memoriaW M(f)Cd. OP:0000001fff ffff

    Prof. Nelson An

  • PICProf. Nelson An*Instrucciones para Ensamblar Programasmovf 0x20,0movwf 0x30cdigo fuenteEscribir un programa que copie el contenido del registro 0x20 al 0x30

    Prof. Nelson An

  • PICProf. Nelson An*Instrucciones para Ensamblar ProgramasEscribir un programa que copie el contenido del registro 0x20 al 0x30Listp=16F628Aorg0x00movf0x20,0movwf 0x30end

    Prof. Nelson An

  • PICProf. Nelson An*Instrucciones para Ensamblar ProgramasPasar del Cdigo fuente al cdigo mquina objeto, se llama compilacin o ensamblado, denominacin usada porque programamos en assembler.Programa a usar MPLABFunciones:1) editor de Fuente (ingresar cdigo fuente)2) compilador (pasar cdigo fuente a cdigo mquina)3) simulador4) programar PIC

    Prof. Nelson An

  • PICProf. Nelson An*Instrucciones para Ensamblar Programas1) Crear un nuevo proyecto en men Project New Project2) Crear un archivo que contenga el cdigo fuenteFile New ProyectoNOMBRE.pjtFuenteNOMBRE.asmEjemplo:Ej001.pjtEj001.asm3) Asignar al archivo de cdigo el proyectoProject Edit Project

    Prof. Nelson An

  • PICProf. Nelson An*Instrucciones para Ensamblar ProgramasMPLABEditor de textoEnsambladorSimuladorCreacin de ProyectoProjectNew ProyectVentanaFile Namenombre.pjtEj001.pjtguardar en cualquier carpeta ej: exampledar OK

    Prof. Nelson An

  • PICProf. Nelson An*Instrucciones para Ensamblar ProgramasEdit ProjectToolsDevelopment Mode:Change16F628AProcessorToolsMPLAB SIM SIMULATOROKCreacin Archivo FuenteFileNewUntilted 1FileSave AsFile NameEj001.asmSalvar en la misma carpeta llamada exampleOK

    Prof. Nelson An

  • PICProf. Nelson An*Instrucciones para Ensamblar ProgramasProjectEdit ProjectAdd NodeEj001.asm AceptarProject FilesEj001 [.hex]Ej001 [.asm]OK

    1 TabulacinList1 Tabulacinp=16F628Aorg0x00movf0x20,0movwf0x30end

    Prof. Nelson An

  • PICProf. Nelson An*Instrucciones para Ensamblar ProgramasFileSaveProjectBuild AllBuild Completed sucessfully OKBuild FailedMalWindowsProgram Memory apretar botn ROMMemoria de Programacada posicin 14 bits [formato instruccin]00000820movf0x20,w [00100000100000]000100B0movwf0x30 [00000010110000]

    Prof. Nelson An

  • PICProf. Nelson An*Instrucciones para Ensamblar ProgramasWindowsFile Registers ( apretar RAM)Windows ModifyADRESS:0x20Data/OPCODE:0x75WRITEPIES (correr el programa) Program CounterPC: 0x00W: 0x20PC: 0x01W: 0x75PC: 0x02W: 0x75

    DEBUGSYSTEM RESET

    Prof. Nelson An

  • PICProf. Nelson An*Instrucciones para Ensamblar ProgramasEscribir un programa que copie el contenido del registro 0x20 al 0x30Listp=16F628Aorg0x00movf0x20,0movwf 0x30end

    Prof. Nelson An

  • PICProf. Nelson An*Instruccin Movimiento:movlwk0=< k =< 255kwCd. OP: 11 111x kkkk kkkkInstruccin de MovimientoInstruccin de SumaInstruccin Suma:addlwkflags C, DC, ZResultado=00=< k =< 255afectadosZ = 1w + kwResultado>255C = 1

    Prof. Nelson An

  • PICProf. Nelson An*

    Instruccin de SumaUso del C y DC:

    7430C=1 para valores > 255, sea 9 bit8DC=1 para valores > 15, sea 5 bit

    Prof. Nelson An

  • PICProf. Nelson An*Instruccin Sumaaddwf f,dinstruccinoperandosd={0,1}0=< f=< 127M=memoriaW +M(f)W d=0M(f)=posicin de memoriaW +M(f)M(f)d=1flagsafectadosC, DC y Z

    Cd. OP:00 0111dfff ffff

    Prof. Nelson An

  • PICProf. Nelson An*Instrucciones para Ensamblar ProgramasInicioM (0x2C W)W M(0x2E) Finmovf 0x2C,0movwf 0x2Ecdigo fuenteSumar el contenido de 2 posiciones de memoria 0x2C + 0x2D y poner el resultado en 0x2EW+M (0x2D) Waddwf 0x2D,0

    Prof. Nelson An

  • PICProf. Nelson An*Instrucciones para Ensamblar ProgramasSumar el contenido de 2 posiciones de memoria 0x2C + 0x2D y poner el resultado en 0x2E

    Listp=16F628AResetORG0x00movf0x2C,0addwf0x2D,0movwf 0x2Eend

    Prof. Nelson An

  • PICProf. Nelson An*Instruccin Restasubwf f,dinstruccinoperandosd={0,1}0=< f=< 127M=memoriaM(f) - WW d=0M(f)=posicin de memoriaM(f) - WM(f)d=1flagsafectadosC, DC y Z

    Cd. OP:00 0010dfff ffff

    Prof. Nelson An

  • PICProf. Nelson An*Instruccin RestasublwK0== 0 (+)C=0Resultado < 0 (-)Cd. OP:11 110xkkkk kkkk

    Prof. Nelson An

  • PICProf. Nelson An*Instruccin RestaLos nmeros en el microcontrolador no pueden tener signos diferentes, por lo tanto vamos a utilizar el complemento A1 y el complemento A2.K-W=W 0000 0011-0000 0010 = mtodoEjemplo: w=0000 0010complemento A1 = 1111 1101complemento A2 1111 1101 11111 1110+

    Prof. Nelson An

  • PICProf. Nelson An*Instruccin RestaLos nmeros en el microcontrolador no pueden tener signos diferentes, por lo tanto vamos a utilizar el complemento A1 y el complemento A2.K-W=W 0000 0011-0000 0010 = mtodo0000 00111111 11100000 0001+

    Prof. Nelson An

  • PICProf. Nelson An*Binario Codificado en Decimal (BCD)Formato BDC

    2322212000000100012001030011401005010160110701118100091001

    Prof. Nelson An

  • PICProf. Nelson An*Binario Codificado en Decimal (BCD)Formato BDCBCD 23 22 21 20 23 22 21 20 290 0 1 0 1 0 0 1El principio en que se basa el BCD es sencillo.Para poder codificar los dgitos de 0 a 9 se usan 4 bits (con 3, slo se habra podido codificar 8 dgitos) que en principio serviran para codificar hasta 16 dgitos.El dgito 1 por ejemplo se representa mediante el cdigo 0001 y el 9 mediante el cdigo 1001.Desafortunadamente con 4 bits se alcanzan 16 combinaciones distintas, por lo que las 1010 a 1111 no tiene aplicacin, y por lo tanto no se utilizan, es decir son ilegales en un cdigo BCD.

    Prof. Nelson An

  • PICProf. Nelson An*Binario Codificado en Decimal (BCD)Formato BDCConsecuentemente las operaciones aritmticas resultan complicadas.Ejemplo de cmo se suman 2 nmeros en BCD:0001 + 0011 = 0100 1 + 3 = 4resultado correcto1000 + 1000 = 1 0000 8 + 8 = 16En BCD esto es un 1 seguido de un 0, es decir un 10El resultado es incorrecto. La razn es obvia, al usar las reglas de adicin binaria normal habr que saltar los 6 dgitos ilegales en BCD, del 1010 al 1111.

    Prof. Nelson An

  • PICProf. Nelson An*Binario Codificado en Decimal (BCD)Formato BDCDicho de otra manera hay que sumar 6 al resultado siempre que caiga dentro de la zona de cdigos ilegales.Veamos un Ejemplo:1000 + 0110 = 10110 sea en BCD tenemos entonces un 1 seguido de un 6, es decir 16, que es el resultado correcto.Al usar la notacin BCD, tendremos pues que sumar 6 al resultado de la adicin, cuando sta se realice a travs de la zona de cdigos ilegales.

    Prof. Nelson An

  • PICProf. Nelson An*Instrucciones para Ensamblar ProgramasInicioM (0x0A W)W M(0x2A) Finmovf 0x0A,0movwf 0x2Acdigo fuenteRestar el contenido de 2 posiciones de memoria 0x1A y 0x0A y poner el resultado en 0x2AM(0x1A)-W Wsubwf 0x1A,0

    Prof. Nelson An

  • PICProf. Nelson An*Instrucciones para Ensamblar ProgramasRestar el contenido de 2 posiciones de memoria 0x1A y 0x0A y poner el resultado en 0x2A

    Listp=16F628AResetORG0x00movf0x0A,0subwf0x1A,0movwf 0x2Aend

    Prof. Nelson An

  • PICProf. Nelson An*Configuracin de los pines en Entradas / SalidasEn esta parte del curso nos vamos a familiarizar con la configuracin de los pines, y los registros PORTA, PORTB, TRISA y TRISB.Recordemos que estos registros especficos pertenecen a la memoria de datos y estn ubicados en los llamados bancos de la misma.En las siguientes diapositivas se muestra nuevamente la informacin que suministra el fabricante. El objetivo de esto es comunicarnos con el mundo exterior a travs de los pines de entrada, y activar a travs de los pines de salida, dispositivos que nos permitan la visualizacin sonorizacin de las actividades que son controladas a travs de un programa que se ejecuta en el microcontrolador 16F628A.

    Prof. Nelson An

  • PICProf. Nelson An*Sntesis de los 16 pines del 16F628APORTA RA0 RA7PORTB RB0 RB7

    RA2 / VA2 / Vrfe = sirve como in-out como comparadorRA4 entrada Schmitt TriggerRA4 salida Open drain = salida colector abiertoRA5 entrada Schmitt Trigger, sin driver de salida, es un pin que se configura como entradaRA0 RA2 pueden usarse como entradas de los comparadores analgicosRA3 puede usarse como entrada de comparadores analgicos 16 PINES Posibles ENTRADAS/SALIDAS

    Prof. Nelson An

  • PICProf. Nelson An*MEMORIA DE DATOSTRISTRANSFORMER INPUT SOURCE TRANSFORMAR ENTRADA FUENTE

    TRISA Programa el PORT A M(f)=0x85

    TRISB Programa el PORT B M(f)=0x86

    BIT=0salidaBIT=1entrada

    Prof. Nelson An

  • PICProf. Nelson An*

    Prof. Nelson An

  • PICProf. Nelson An*ORGANIZACIN DE LA MEMORIALa tabla anterior indica como acceder a los cuatros bancos de registros:Direcciones F0h-FFh, 170h-17Fh y 1F0h-1FFh se implementan como una RAM comn, y mapeada desde la direccin 70h-7Fh.REGISTRO DE PROPSITOS GENERALES:El registro de Archivos esta organizado como 224x8 en el PIC 16F62X.Se accede tambin directamente e indirectamente a travs del Registro de Seleccin de Archivo (FSR).

    Prof. Nelson An

  • PICProf. Nelson An*

    Prof. Nelson An

  • PICProf. Nelson An*Instrucciones para Ensamblar Programasbsff,bset (pone a 1) el bit b de la posicin f de la memoria 0=< f=< 127M=memoriaM(f)=posicin de memoria0 =< b =< 7Cd. OP:01 01bb bfff ffff

    Prof. Nelson An

  • PICProf. Nelson An*Instrucciones para Ensamblar Programasbcff,breset (pone a 0) el bit b de la posicin f de la memoria 0=< f=< 127M=memoriaM(f)=posicin de memoria0 =< b =< 7Cd. OP:01 00bb bff ffff

    Prof. Nelson An

  • PICProf. Nelson An*Status Register:El Registro de Estado, mostrado en el registro 3-1, contiene: el estado aritmtico de la ALU, el estado reset y los bits que se seleccionan para ingresar al banco de la memoria de datos.El registro de Estado puede ser destino para cualquier instruccin, y de cualquier otro registro. Si el registro de Estado es destino de una instruccin, sta afecta el Z (Cero) y los bits de medio acarreo y acarreo (DC C), entonces l escribe en estos tres bits que estn deshabilitados. Los bits son uno (set), o Cero (cleared) de acuerdo a la lgica del dispositivo.Adems los bits TO y PD no se pueden escribir. Por consiguiente, el resultado de una instruccin con el registro de Estado como destino puede ser diferente al intentado. REGISTRO DE STATUS

    Prof. Nelson An

  • PICProf. Nelson An*REGISTRO de Estado:Por ejemplo, CLRF STATUS borrara los tres bits altos y pondr a uno el bit de Cero (Z). Esto lo vemos como 000uu1uu (donde u = unchanged). Se recomienda el uso solamente de BCF, BSF, SWAPF and MOVWF, instrucciones usadas para alterar el Registro de Estado porque estas instrucciones no afectan ningn bit de estado. Para otras instrucciones, que no afecten ningn bits de estado, ver el set de instrucciones. REGISTRO DE STATUS

    Prof. Nelson An

  • PICProf. Nelson An*

    Prof. Nelson An

  • PICProf. Nelson An*

    Prof. Nelson An

  • PICProf. Nelson An*MTODO PARA ELEGIR BANCOSLos bits RP1 y RP0 del registro de Status y las instrucciones bsf y bcf, son quienes nos posibilitan cambiar de bancos en la memoria de datos.Ejemplo: Para elegir el banco 1:RP1=0bcfStatus, RP1RP0=0bsfStatus, RP0Status, RP1=bit6bcf0x03,6Status, RP0=bit5bsf0x03,5M(f)=Status=0x03

    Prof. Nelson An

  • PICProf. Nelson An*MTODO PARA ELEGIR BANCOSLos bits RP1 y RP0 del registro de Status y las instrucciones bsf y bcf, son quienes nos posibilitan cambiar de bancos en la memoria de datos.Ejemplo: TABLA para Eleccin de BANCOS

    BANCO 0BANCO 1BANCO 2BANCO 3bcf 0x03,6bcf 0x03,5 bcf 0x03,6bsf 0x03,5bsf 0x03,6bcf 0x03,5bsf 0x03,6bsf 0x03,5

    Prof. Nelson An

  • PICProf. Nelson An*InicioSelecciono Banco10x00 TRISB Finmovlw 0xFFmovwf 0x85movlw 0x00movwf 0x86cdigo fuenteProgramar todas las lneas del PORTA como entrada y todas las lneas del PORTB como salida 0xFF TRISAConfiguracin de los pines en Entradas / Salidasbcf 0x03,6bcf 0x03,5

    Prof. Nelson An

  • PICProf. Nelson An*Programar todas las lneas del PORTA como entrada y todas las lneas del PORTB como salida. Listp=16F628AStatusEQU0x03TRISAEQU0x85TRISBEQU0x86ResetORG0x00bcfStatus,6; selecciono Banco 1bsfStatus,5; selecciono Banco 1movlw0xFFmovwf TRISA; programo PuertaAmovlw0x00movwfTRISB; programo PuertaBbcfStatus,5; selecciono Banco 0endInstrucciones para Ensamblar Programas

    Prof. Nelson An

  • PICProf. Nelson An*InicioProgramar PORTA y PORTBInstruccinGOTOSalto incondicional a la direccin que vaya precedida como (etiqueta)GOTO K0
  • PICProf. Nelson An*InicioProgramar PORTA y PORTBProgramar todas las lneas del PORTA como entrada y todas las lneas del PORTB como salida.A continuacin leer contnuamente la PuertaA y copiar su contenido en la PuertaB.Aplicacin 1: Diagrama de FlujoLeer PORTAEscribir en PORTB

    Prof. Nelson An

  • Listp=16F628ASTATUSEQU0x03PORTAEQU0x05PORTBEQU0x06TRISAEQU0x85TRISBEQU0x86CMCONEQU0x1FRESETORG0x00; posicin inicial del programamovlw0x07; deshabilito comparadoresmovwfCMCON; deshabilito comparadoresbcfStatus,6; selecciono Banco 1bsfStatus,5; selecciono Banco 1movlw0xFFmovwf TRISA; programo PuertaAmovlw0x00movwfTRISB; programo PuertaBbcfStatus,5; selecciono Banco 0RUTINAmovfPORTA, 0; PORTA WmovwfPORTB; W PORTBgotoRUTINAendAplicacin 1: Cdigo Fuente

  • PICProf. Nelson An*REGISTROS PCL y PCLATH :GOTO COMPUTADO: El PC est formado por dos registros: PCLATH + PCL = PCSiendo PCLATH = PCY PCL = PCPor lo tanto, cuando se suma este registro PC con uno de los 8 bits, slo se estar modificando los bits menos significativos de PC. Esto es lo que produce que al hacer una tabla se pueda direccionarcomo mximo 255 posiciones aproximadamente.Solucin: el PCLATH es un registro modificable.REGISTROS PCL Y PCLATH

    Prof. Nelson An

  • PICProf. Nelson An*REGISTROS PCL y PCLATH:Existen 2 formas de modificar el PC:Mediante un goto computado, que se refiere a operaciones aritmticas ( lgicas) que modifiquen al PCL.Mediante las instrucciones de salto(goto y call).REGISTROS PCL Y PCLATH

    Prof. Nelson An

  • PICProf. Nelson An*REGISTROS PCL y PCLATH :GOTO COMPUTADO: Estas instrucciones ponen el resultado de la operacin llevada a cabo en los bits menos significativos (8)del registro PC, pero tambin copian el contenido de PCLATH a la parte alta del registro PC.INSTRUCCIONES DE SALTO: A estas instrucciones, se les pasa como parmetro un nmero de 11 bits (que uno generalmente reemplaza por un label, por ejemplo goto loop), y cuando se ejecuta esta instruccin se copian del PCLATH al PC los bits 12 y 11 del PC. En estas instrucciones es donde est el problema del salto, cuando la memoria de programa tiene ms de 2K. REGISTROS PCL Y PCLATH

    Prof. Nelson An

  • PICProf. Nelson An*REGISTROS PCL y PCLATH :Al igual que todos los registros especficos que controlan la actividad del procesador, el Contador de Programa est implementado sobre un par de posiciones de la memoria de datos (RAM).Cuando se escribe el Contador de Programa como resultado de una operacin de la ALU, los 8 bits de menos peso del PC residen en el registro PCL, que ocupa, repetido, la posicin 2 de los dos bancos de la memoria de datos.Los bits de mas peso, PC, residen en los 5 bits de menos peso del registro PCLATH, que ocupa la posicin 0A H de los bancos de la memoria de datos. REGISTROS PCL Y PCLATH

    Prof. Nelson An

  • PICProf. Nelson An*En las instrucciones GOTO y CALL los 11 bits de menos peso del PC provienen del cdigo de la instruccin y los otros dos de los bits PCLATH ver hoja del manual del fabricante (fig3-3).Como los 11 bits que se cargan en el PC desde el cdigo de las instrucciones GOTO y CALL, se puede direccionar una pgina de 2K de la memoria. Los bits restantes PC tienen la misin de apuntar una de las cuatro pginas del mapa de memoria, y en los modelos de PIC que alcanzan ese tamao, dichos bits proceden de PCLATH.La Pila es una zona aislada de las memorias de programa y datos. REGISTROS PCL Y PCLATH

    Prof. Nelson An

  • PICProf. Nelson An*Tiene una estructura LIFO, en la que el ultimo valor guardado es el primero que sale.Tiene 8 niveles de profundidad, cada uno con 13 bits. Funciona como un circular, de manera que el valor que se obtiene al realizar el noveno (pop) es igual al que se obtuvo en el primero.La instruccin CALL y las interrupciones originan la carga del contenido del PC en el nivel superior o de la Pila. El contenido del nivel superior se saca de la Pila al ejecutar las instrucciones RETURN, RETLW y RETFIE.El contenido del registro PCLATH no es afectado por la entrada o salida de la informacin de la Pila. STACK O PILA

    Prof. Nelson An

  • PICProf. Nelson An*

    Prof. Nelson An

  • PICProf. Nelson An*En la figura superior se muestra como se carga el PC cuando una instruccin deposita en l, el resultado que se obtiene de la ALU. Abajo se indica la carga del PC en las instrucciones GOTO Y CALL. En la diapositiva donde el fabricante muestra al PCH y PCL como ambos formando el registro PC sumando bit a bit hablamos 0 a 12, o sea 13 bits, encontramos que de estos 13 bits, 11 bits son del cdigo de Operacin de la instruccin.Goto k :101 kkk kkkk kkkkSTACK O PILA

    Prof. Nelson An

  • PICProf. Nelson An*comff,dcomplementocomplementoM(f)d={0,1}d=0Wd=1M(f)(intercambia 1 y 0)M(f)=posicin de memoriaflagsafectadosZ

    Cd. OP:00 0111dfff ffff Instrucciones para Ensamblar Programas

    Prof. Nelson An

  • PICProf. Nelson An*clrf0x00M(f)borra cualquier posicin de memoriaM(f)=posicin de memoriaflagsafectadosZ=1Z=1si el resultado es = 0Z=0si el resultado es = 0Cd. OP:00 0001 1fff ffff Instrucciones para Ensamblar Programas

    Prof. Nelson An

  • PICProf. Nelson An*clrwborra el registro WflagsafectadosZ=1Z=1si el resultado es = 0Z=0si el resultado es = 0Cd. OP:00 0001 0000 0011 Instrucciones para Ensamblar Programas

    Prof. Nelson An

  • PICProf. Nelson An*incff,dincrementa fM(f) + 1d={0,1}d=0Wd=1M(f)flagsafectadosZCd. OP:00 1010 dfff ffff

    decff,ddecrementa fM(f) - 1d={0,1}d=0Wd=1M(f)flagsafectadosZCd. OP:00 0011 dfff ffff Instrucciones para Ensamblar Programas

    Prof. Nelson An

  • PICProf. Nelson An*btfscf,dtest de bit y saltoSalta una instruccin si f(b) es = 00 =< b =< 7Cd. OP:01 10bb bfff ffff

    btfssf,dtest de bit y saltoSalta una instruccin si f(b) es = 10 =< b =< 7Cd. OP:01 11bb bfff ffff Las instrucciones que saltan una sola instruccin, son saltos condicionados.Instrucciones para Ensamblar Programas

    Prof. Nelson An

  • PICProf. Nelson An*En los PIC de la gama media la memoria de datos est organizada para alojar un mximo de 4 bancos de 128 bytes cada uno. En los mismos se destinan 2 bits del registro de status (RP0 y RP1) para determinar el banco y otros 7 para elegir una de las 128 posiciones del banco seleccionado. DIRECCIONAMIENTO DIRECTO: El operando que utiliza la instruccin en curso se referencia mediante su direccin, que viene includa en el cdigo OP de la misma, concretamente en los 7 bits de menos peso. El banco a acceder lo determinan los bits RP0 y RP1 del registro de status.Direccionamiento de la Memoria de Datos

    Prof. Nelson An

  • PICProf. Nelson An*DIRECCIONAMIENTO INDIRECTO: Este modo de direccionamiento se usa cuando en una instruccin se utiliza como operando el registro INDF (direccin 0x00 en todos los bancos). El registro INDF no est implementado fsicamente y cuando se le hace referencia, se accede a la direccin de un banco especificada con los 7 bits de menos peso del registro FSR (posicin 0x04 en todos los bancos). El bit de ms peso del FSR junto al bit IRP del registro de status se encargan de seleccionar el banco a acceder, mientras que los 7 bits de menos peso del FSR apuntan a la posicin. INDF = contenido del FSR Direccionamiento de la Memoria de Datos

    Prof. Nelson An

  • PICProf. Nelson An*Direccionamiento de la Memoria de DatosINDICEclrfM (indice)870Seleccin del bancoLocalizacin seleccin direccin de memoria

    Prof. Nelson An

  • PICProf. Nelson An*Direccionamiento de la Memoria de DatosM (0x00)WIRP = Punto Registro Indirecto0 x 20FSR0 x 1E M (0x00)carga FSR0W1E0x 20

    Prof. Nelson An

  • PICProf. Nelson An*Direccionamiento IndirectoM (0x00)INDF0 x 20FSRFSR + 1FSRapunto con FSRborrado 0 x 20Poner a 0x00 las posiciones 0x20 a 0x2F del banco 0StartEndbit 4 de FSR=1SiNo

    Prof. Nelson An

  • Listp=16F628AINDFEQU0x00STATUSEQU0x03FSREQU0x04RESETORG0x00bcfStatus,7; 0IRPmovlw0 x 20;movwf FSR; FSR apunta a posicin 0x20NEXTclrfINDF; borra posicin de memoriaincfFSR; FSR + 1 FSR,incremento punterobtfssFSR,4; todo borradogotoNEXT; no borra la siguienteend ; si contina el programaDireccionamiento Indirecto

  • PICProf. Nelson An*incfszf,dincremento y saltoM(f) + 1d={0,1}d=0Wd=1M(f)flagsafectadosZCd. OP:00 1111 dfff ffff

    decfszf,ddecremento y saltoM(f) - 1d={0,1}d=0Wd=1M(f)flagsafectadosZSi el resultado es 0 salta por encima de la siguiente instruccinCd. OP:00 1011 dfff ffff Instrucciones para Ensamblar Programas

    Prof. Nelson An

  • PICProf. Nelson An*AndlwK0=
  • PICProf. Nelson An*Andwff,dWM(f) d={0,1}d=0Wd=1M(f)flagsafectadosZRealiza funcin AND, operacin bit a bitCd. OP:00 0101 dfff ffff Instrucciones para Ensamblar Programas

    Prof. Nelson An

  • PICProf. Nelson An*IORlwK0=
  • PICProf. Nelson An*IORwff,dW+M(f) d={0,1}d=0Wd=1M(f)flagsafectadosZRealiza funcin OR, operacin bit a bitCd. OP:00 0100 dfff ffff Instrucciones para Ensamblar Programas

    Prof. Nelson An

  • PICProf. Nelson An*XORlwK0=
  • PICProf. Nelson An*XORwff,dW + M(f)d={0,1}d=0Wd=1M(f)flagsafectadosZRealiza funcin OR exclusiva, operacin bit a bitCd. OP:00 0110 dfff ffff Instrucciones para Ensamblar Programas

    Prof. Nelson An

  • PICProf. Nelson An*Instrucciones para Ensamblar Programasswapff,dintercambio de finstruccinoperandosd={0,1}0=< f=< 127M=memoriaM(f)W d=0M(f)=posicin de memoriaM(f)M(f)d=1flagsninguno afectadoIntercambia el nibble ms significativo y el menos significativo de M(f)Cd. OP:00 1110 dfff ffff

    Prof. Nelson An

  • PICProf. Nelson An*Instrucciones para Ensamblar ProgramasRLFf,drota a la izquierdainstruccinoperandosd={0,1}0=< f=< 127M=memoriaM(f)W d=0M(f)=posicin de memoriaM(f)M(f)d=1flagsafectadoCCd. OP:00 1101 dfff ffff

    Prof. Nelson An

  • PICProf. Nelson An*Instrucciones para Ensamblar ProgramasRRFf,drota a la derechainstruccinoperandosd={0,1}0=< f=< 127M=memoriaM(f)W d=0M(f)=posicin de memoriaM(f)M(f)d=1flagsafectadoCCd. OP:00 1100 dfff ffff

    Prof. Nelson An

  • PICProf. Nelson An*Instrucciones de Control y EspecialesEn este grupo se incluyen las instrucciones que desvan la secuencia normal del programa, porque alteran el contenido del PC, y tambin las instrucciones especiales. La instruccin de salto incondicional goto carga en el PC la direccin de la nueva instruccin. La instruccin call de llamada a subrutina, antes de cargar el PC con la direccin de la instruccin a saltar, salva la direccin de partida guardando en la cima de la pila el valor actual del PC. De esta manera, al retornar de la subrutina se saca de la pila la direccin de regreso en el programa principal.Para realizar un retorno de una subrutina se pueden emplear dos instrucciones la ms habitual es return, que se limita a extraer de la cima de la pila el valor que carga en el PC.

    Prof. Nelson An

  • PICProf. Nelson An*Instrucciones de Control y EspecialesOtra ms compleja es retlw k, que, adems de hacer lo mismo que return, carga en w el valor inmediato k que contiene. Es decir, devuelve un parmetro desde la subrutina.Para el final de las interrupciones hay otra instruccin cuyo nemnico es retfie. La operatividad de esta instruccin consiste en cargar en el PC el contenido de la cima de la pila y poner el bit GIE=1, pues al comenzar la interrupcin este bit se pone automticamente a cero para evitar que cuando se atienda una interrupcin se produzca otra. GIE es el bit de permiso de todas las interrupciones.En cuanto a las instrucciones especiales se han includo dos en este grupo: clrwdt y sleep.

    Prof. Nelson An

  • PICProf. Nelson An*Instrucciones de Control y EspecialesLa primera pone a cero el contenido del perro guardin, es decir, lo refresca lo reinicializa. El perro guardin si se desborda (pasa de 0xff a 0x00) provoca un Reset. La instruccin clrwdt hay que colocarla estratgicamente en ciertos puntos del programa para evitar la reinicializacin. Ejemplo: explicar las diferencias entres las tres instrucciones de retorno.Solucin: Return: retorna de una subrutina al programa principal. Carga al PC con el contenido de la cima de la pila.Retlw k: hace los mismo que Return y, adems, carga en w el literal k.Retfie: carga al PC con el contenido de la cima de la pila y pone GIE=1.

    Prof. Nelson An

  • PICProf. Nelson An*En ocasiones es necesario realizar un mismo procedimiento en distintos lugares de un programa, por ejemplo desplegar valores en un display. En este caso es ms cmodo y ahorra memoria incluir una sola vez ese trozo de cdigo y utilizarlo (invocarlo) desde distintos puntos del programa, a ese cdigo se le llama SUBRUTINA.Las llamadas a subrutina mediante la instruccin CALL son desviaciones del flujo de control del programa originadas por instrucciones, por lo que se consideran sncronas. Se producen cada vez que se ejecuta dicha instruccin. SUBRUTINAS

    Prof. Nelson An

  • PICProf. Nelson An*Se puede, a lo sumo, usar 8 subrutinas anidadas (stack 8 level de 13 bits)Instruccin CALL K (salto a Subrutina)K=posicin de memoria de programa0
  • PICProf. Nelson An*Carga en el Program Counters (PC) el contenido de la cima de Pila, dejando adems la cima libre Representacin de SubrutinaEn Diagrama de Flujo

    Nombre de la SubrutinaSUBRUTINAS

    Prof. Nelson An

  • PICProf. Nelson An*RETURN: retorna a subrutinaRETLW K (RETORNO, CARGA W) 0
  • PICProf. Nelson An*SUBRUTINAS DE TEMPORIZACINEjemplo: Realizar un temporizador delay de 0,5 segundos con un PIC 16F628A a una frecuencia de 1 MHz.Datos:1 ciclo instruccin = 4T1 MHz = 1 x 10 6 Hz1 ciclo = 1 MHz x 4= 4 x 10 6 Hz1 MHzCLK = 1 us

    Prof. Nelson An

  • PICProf. Nelson An*SUBRUTINAS DE TEMPORIZACINEjemplo: Realizar un temporizador delay de 0,5 segundos con un PIC 16F628A a una frecuencia de 1 MHz.Datos:1 ciclo instruccin = 4T1 MHz = 1 x 10 6 Hz1 ciclo = 1 MHz x 4= 4 x 10 6 HzT = 1/f = 1 us1 clock = 1 us0.5 seg/ 4 x 10 6 Hz = 125.000 ciclos de instruccinque equivalen a 0,5 seg

    Prof. Nelson An

  • PICProf. Nelson An*SUBRUTINAS DE TEMPORIZACINPara lograr este tiempo lo que debo hacer es decrementar (el decremento se puede hacer hasta 256). Es decir necesito decrementar de 248 a 0 para que los nmeros sean exactos. De 248 a 0 hay 249 nmeros contando el 0 y dicha instruccin al llegar al nmero deseado salta un ciclo ms, es decir decrementa 250. Esto es lo que tenemos que obtener: 125.000/ 250 = 500, son las veces que tengo que repetir el decremento para obtener 0,5 segundos 500 miliseg

    Prof. Nelson An

  • inicioA = 2B = 248C = 248DECRE CC = 0NOSI1BA

  • endDECRE BA = 0DECRE ANOSI1BAB = 0NOSI

  • Listp=16F628A; demora 0,5 segVAR1EQU0x21VAR2EQU0x22VAR3EQU0x23RESET ORG0x00INICIOmovlw02 hmovwfVAR1movlw248 hmovwf VAR2movlw248 hmovwfVAR3DECOdecfszVAR3,1; (VAR1,1)gotodecoDOSdecfszVAR2,1gotodosUNOdecfszVAR1,1; (VAR3,1)gotoinicionopend

  • PICProf. Nelson An*SUBRUTINAS DE TEMPORIZACINPara poder ver el tiempo que demora el programa se debe fijar un comienzo y un fin. El comienzo donde el programa dice inicio, y el fin lugar donde vamos a escribir la instruccin NOP antes de la directiva END. Usando el MPLAB para verificar el tiempo que logro obtener vamos a DEBUG.....RUN.....RESET.Luego voy a OPTION DEVELOPMENT MODE elijo el PIC 16F628A clock de 1 MHz y acepto.En ese momento se modifica la configuracin en el MPLAB, indicando que qued pronto para funcionar a esa frecuencia.Luego voy a WINDOWS STOP WATCH (donde se indican los milisegundos) y en el programa indico los puntos de BREAK POINT que corresponden a donde empieza el programa (goto inicio) hasta NOP (lo tenemos que poner para que detenga el conteo).

    Prof. Nelson An

  • PICProf. Nelson An*SUBRUTINAS DE TEMPORIZACIN

    Prof. Nelson An

  • PICProf. Nelson An*SUBRUTINAS DE TEMPORIZACIN

    Prof. Nelson An

  • PICProf. Nelson An*

    Prof. Nelson An

  • PICProf. Nelson An*

    Prof. Nelson An

  • PICProf. Nelson An*

    Prof. Nelson An

  • PICProf. Nelson An*

    Prof. Nelson An

  • PICProf. Nelson An*

    Prof. Nelson An

  • PICProf. Nelson An*

    Prof. Nelson An

  • PICProf. Nelson An*

    Prof. Nelson An

  • PICProf. Nelson An*

    Prof. Nelson An

  • PICProf. Nelson An*

    Prof. Nelson An

  • PICProf. Nelson An*SUBRUTINAS DE TEMPORIZACIN;PIC Time Delay = 0,5000020 s with Osc = 1.000000 MHzmovlwD'3'movwfCounterCmovlwD'140'movwfCounterBmovlwD'83'movwfCounterAloopdecfszCounterA,1gotoloopdecfszCounterB,1gotoloopdecfszCounterC,1gotoloopreturn

    Prof. Nelson An

  • PICProf. Nelson An*SUBRUTINAS DE TEMPORIZACIN

    Prof. Nelson An

  • PICProf. Nelson An*TEMPORIZADORES

    Prof. Nelson An

  • PICProf. Nelson An*TEMPORIZADORES La frecuencia de trabajo del microcontrolador es un parmetro fundamental a la hora de establecer la velocidad en la ejecucin de instrucciones y el consumo de energa. Los pulsos de reloj externos entran por la patita OSC1/CLKIN y se dividen por cuatro internamente dando lugar a las seales Q1, Q2, Q3 y Q4, que configuran un ciclo de instruccin. Durante un ciclo de instruccin, que comprende las cuatro seales mencionadas, se desarrollan las siguientes operaciones:

    Prof. Nelson An

  • PICProf. Nelson An*TEMPORIZADORES Q1: Durante este impulso se incrementa el contador de programa.Q4: Durante este impulso se busca el cdigo de la operacin en la memoria de programa y se carga en el registro de instrucciones.Q2-Q3: Durante la actividad de estas dos seales se produce la decodificacin y la ejecucin de la instruccin.Para conseguir ejecutar cada instruccin en un ciclo de instruccin, se aplica la tcnica de segmentacin, que consiste en realizar en paralelo las dos fases que comprenden cada instruccin.

    Prof. Nelson An

  • PICProf. Nelson An*TEMPORIZADORES Cada instruccin se ejecuta en 2 ciclos: en el primero se lleva a cabo la fase de bsqueda del cdigo de la instruccin en la memoria del programa, y en el segunda se decodifica y se ejecuta (fase de ejecucin). La estructura segmentada del procesador permite realizar al mismo tiempo la fase de ejecucin de una instruccin y la bsqueda de la siguiente instruccin. Cuando la instruccin ejecutada corresponde a un salto no se conoce cul ser la siguiente hasta que se complete, por eso en esta situacin se sustituye la fase de bsqueda de la siguiente instruccin por un ciclo vaco, originando que las instrucciones de salto tarden en realizarse dos ciclos de instruccin. Ver figura 2-1 del fabricante.

    Prof. Nelson An

  • PICProf. Nelson An*TEMPORIZADORES

    Prof. Nelson An

  • PICProf. Nelson An*

    Prof. Nelson An

  • PICProf. Nelson An*

    Prof. Nelson An

  • PICProf. Nelson An*

    Prof. Nelson An

  • PICProf. Nelson An*

    Prof. Nelson An

  • PICProf. Nelson An*

    Prof. Nelson An

  • PICProf. Nelson An*

    Prof. Nelson An

  • PICProf. Nelson An*

    Prof. Nelson An

  • PICProf. Nelson An*

    Prof. Nelson An

  • PICProf. Nelson An*

    Prof. Nelson An

  • PICProf. Nelson An*

    Prof. Nelson An

  • PICProf. Nelson An*

    Prof. Nelson An

  • PICProf. Nelson An*REGISTRO OPCION:OPTION Register es un registro de lectura y escritura, el cual contiene varios bits de control para configurar el TMRO/WDT prescaler, la interrupcin externa RBO/INT, el TMRO y las resistencias de pull-up del puerto B. TEMPORIZADOR TMR0

    Prof. Nelson An

  • PICProf. Nelson An*

    Prof. Nelson An

  • PICProf. Nelson An*TEMPORIZADOR TMR0

    Prof. Nelson An

  • PICProf. Nelson An*La programacin del temporizador depende de la frecuencia de trabajo del PIC.Frecuencia de oscilacin: 4 MHzT= 250ns ciclo de instruccin = 1usEn los programas de control es necesario determinar intervalos concretos de tiempos.Hacer esto por medio de loop (bucle) de programa desperdiciara capacidad de proceso y no siempre fcil de calcular con exactitud. Tambin es necesario contar la cantidad de veces que ocurre un evento externo, el PIC 16F628A dispone de un Timer y Contador de 8 bits llamado TMR0. TEMPORIZADOR TMR0

    Prof. Nelson An

  • PICProf. Nelson An*MODOS DE FUNCIONAMIENTO:1) CONTADOR DE SUCESO: El contador TMR0 cuenta los impulsos que se aplican al Pin RA4/TOCK1/CMP2.Al llegar al valor FF se desborda el contador y con el siguiente impulso pasa a 00, activando un flag (y provocando una interrupcin ,si estn habilitados).Este flag debe ser luego puesto a 0 por el programa.2) TIMER: El TMRO se incrementa con cada ciclo de instruccin (Frec.oscil/4), hasta que d overflod, pasando de FF a 00, activando un flags (provocando una interrupcin si estn habilitadas). Si el registro TMR0 est escrito, el incremento es inhibido durante los 2 prximos ciclos de instruccin. TEMPORIZADOR TMR0

    Prof. Nelson An

  • PICProf. Nelson An*Tiempo = Frec.oscil/4TimerCristal4 MHzT = 250 nsCiclo instruccinT x 4 = 1 us1 MHzT = 1 usCiclo instruccinT x 4 = 4 usT (perodo de instruccin)TEMPORIZADOR TMR0

    Prof. Nelson An

  • PICProf. Nelson An*REGISTRO TMR0:El dispositivo 16F628A dispone de un TMR0.El TMR0 es un contador ascendente de 8 bits, que puede funcionar como reloj interno externo y ser sensible al flanco ascendente descendente. Se le puede asignar el divisor de frecuencia. Una novedad importante en el TMR0 es la posibilidad de generar una interrupcin cuando se desborda. TEMPORIZADOR TMR0

    Prof. Nelson An

  • PICProf. Nelson An*REGISTRO TMR0: Funcionamiento en 10 puntos:El bit T0CS (OPCION) determina si est a 1 que el TMR0 funciona en modo contador y si est a 0 en modo de temporizador, con seal externa de reloj por T0CKI.En el modo contador, el bit TOSE (OPCION) selecciona el tipo de flanco activo en T0CKI. (1: descendente y 0: ascendente).En modo contador el perodo de la seal externa debe ser como mnimo de 4 Tosc. En el modo temporizador la frecuencia de trabajo es Fosc/4.TEMPORIZADOR TMR0

    Prof. Nelson An

  • PICProf. Nelson An*

    El bit PSA (OPTION) asigna el divisor de frecuencia al TMR0 si est a 0 y al WDT si est a 1.El ratio al que funciona el divisor de frecuencia se elige con los bits PS2, PS1 y PS0 (OPTION).El TMR0 se puede leer en cualquier momento para conocer el estado de la cuenta.Cuando se escribe un nuevo valor en TMR0 para establecer una nueva temporizacin, los incrementos del mismo se inhiben durante los dos ciclos de reloj posteriores.TEMPORIZADOR TMR0

    Prof. Nelson An

  • PICProf. Nelson An*Como es un contador ascendente, conviene cargarle con el complemento a 2 del valor deseado para la temporizacin. Se utilizan las mismas frmulas indicadas en la descripcin del TMR0.Cuando se desborda el TMR0, es decir, cuando pasa del valor FF h a 00 h, se activa el bit de INTCON (T0IF). Acta como una bandera de sealizacin del desbordamiento. Si adems, el bit de dicho registro est a 1 (Permiso de interrupcin), se genera una interrupcin. El bit T0IF se debe borrar por software una vez atendida la interrupcin.En el modo de reposo (Sleep) el TMR0 se detiene, por lo que no puede originar interrupcin.TEMPORIZADOR TMR0

    Prof. Nelson An

  • PICProf. Nelson An*0 x 010 x 0B0 x 810 x 8BTMR0BANCO 0BANCO 1TEMPORIZADOR TMR0

    TMR0

    INTCON

    OPTION

    INTCON

    Prof. Nelson An

  • PICProf. Nelson An*BITS DEL REGISTER OPTION:TOCSTOSEOPTION (0 x 81) 5 4BIT = TOCSTOCS: TMR0 CLOCK SOURCE1 = TRANSICIN ENRA4/TOCK1(contador)0 =CLOCK INTERNO DE CICLO DE INSTRUCCINTEMPORIZADOR TMR0

    Prof. Nelson An

  • PICProf. Nelson An*BITS DEL REGISTER OPTION:TOCSTOSEOPTION (0 x 81) 5 4BIT = TOSETOSE: TMR0 SOURCE EDGE SELECT BIT1 = INCREMENTA EN (10) RA4/TOCK10 =INCREMENTA EN (01) RA4/TOCK1TEMPORIZADOR TMR0

    Prof. Nelson An

  • PICProf. Nelson An*REGISTRO INTCON:El INTCON es un registro de lectura y escritura, el cual contiene habilitadas varias banderas de bits, todas fuentes de interrupcin, excepto el mdulo de comparacin.Mire la Seccin 3.2.2.4 PIE1 Register y la Seccin 3.2.2.5 PIR1 Register para una descripcin de la habilitacin del comparador y sus bits.3.2.2.4 PIE1 Register: Este registro contiene bits que habilitan interrupciones3.2.2.5 PIR1 Register: Este registro contiene bits de interrupcin. Nota: Los bits de interrupcin se ponen a uno 1 cuando ocurre una condicin de interrupcin, guardndose el estado del correspondiente bit de habilitacin habilitacin global bit, GIE (INTCON)TEMPORIZADOR TMR0

    Prof. Nelson An

  • PICProf. Nelson An*TEMPORIZADOR TMR0

    Prof. Nelson An

  • PICProf. Nelson An*

    Prof. Nelson An

  • PICProf. Nelson An*

    Prof. Nelson An

  • PICProf. Nelson An*BIT DEL REGISTER INTCON:TOIFINTCON (0 x 0B) 2 (0 x 8B)BIT = TOIFTOIF: TMR0 INTERRUPT FLAG BIT1 = TMR0 se ha desbordado (overflow), hay que ponerlo a cero por programa0 =TMR0 no hay desbordeTEMPORIZADOR TMR0

    Prof. Nelson An

  • PICProf. Nelson An*Clculo para TMR0:1)Determinar el periodo del ciclo de instruccin, el cual coincide con el periodo de incremento de TMR0 T= 4/F.OSCILADOR.2)Calcular el nmero de veces que T cabe en el tiempo que debemos temporizar. N pulsos a contar =tiempo/T3)Calcular el valor a cargar en TMR0, recordar que Toif se pone a 1 al pasar de FF a 00 y que los primeros pulsos luego de cargar TMR0 se pierden. VALOR A CARGAR = 256-N pulsos +2TEMPORIZADOR TMR0

    Prof. Nelson An

  • PICProf. Nelson An*Clculo para TMR0:1)Determinar el periodo del ciclo de instruccin, el cual coincide con el periodo de incremento de TMR0 T= 4/F.OSCILADOR.2)Calcular el nmero de veces que T cabe en el tiempo que debemos temporizar. N pulsos a contar =tiempo/T3)Calcular el valor a cargar en TMR0, recordar que Toif se pone a 1 al pasar de FF a 00 y que los primeros pulsos luego de cargar TMR0 se pierden. VALOR A CARGAR = 256-N pulsos +2TEMPORIZADOR TMR0

    Prof. Nelson An

  • PICProf. Nelson An*Clculo para TMR0:Ejemplo:Cristal = 4 MHztiempo: 100 usT = 4/4 MHz = 1 usN pulsos = tiempo/T = 100 us / 1 us = 100 pulsosValor a agregar = 256 100 + 2 = 15810TEMPORIZADOR TMR0

    Prof. Nelson An

  • PICProf. Nelson An*STARTINICIALIZACIOND 158............TMR00.................TOIFTOIF = 1ENDSINOTEMPORIZADOR TMR0

    Prof. Nelson An

  • Listp=16F628ATMR0EQU0x01INTCONEQU0x0BOPTION_REGEQU0x81STATUSEQU0x03RESETORG0x00bsfStatus,5; selecciono Banco 1bcfOption,5; selecciona clock interno TOCS=0bcfSTATUS,5; selecciono Banco0movlwD158; cargar valor decimal 158movwf TMR0; cargo TMR0 para 100 usbcfINTCON,2; pongo a 0 TOIFESPERAbtfssINTCON,2; flag de overflow Toif=1gotoESPERAnop; NOend; SITEMPORIZADOR TMR0

  • PICProf. Nelson An*Ejemplo: Utilizando un PIC 16F628A con un reloj de 1 MHz, realizar un oscilador que entregue una seal de onda cuadrada en RB0, con un frecuencia de 1 KHz.Datos:1 ciclo instruccin = 4TT= 1/1000 = 1 msT= 4/1 MHz = 4 us ciclo de instruccin1 msTEMPORIZADOR TMR0500 usRB0N pulsos = 500 us / 4us = 125Valor a cargar = 256 125 + 2 = 133 pulsos

    Prof. Nelson An

  • PICProf. Nelson An*TEMPORIZADORESSTARTINICIALIZACIOND 133............TMR00.................TOIFTOIF = 1ENDSINO

    Prof. Nelson An

  • Listp=16F628ATMR0EQU0x01INTCONEQU0x0BOPTION_REGEQU0x81STATUSEQU0x03CMCONEQU0X1FTRISAEQU0X85TRISBEQU0X86PORTAEQU0X05PORTBEQU0X06RESETORG0x00iniciomovlw0x07 gotoiniciomovwfCMCONbsfStatus,5; selecciono Banco 1bcfStatus,6TEMPORIZADORES

  • movlwb11111110movwfTrisBbcfOption,5; selecciona clock interno TOCS=0bcfStatus,5goto TIMERINVERSIONmovlw0x01xorwfPortB,1TIMERmovlwD133movwfTMR0bcfINTCON,2ESPERAbtfssINTCON,2gotoESPERAgotoINVERSIONendTEMPORIZADORES

  • PICProf. Nelson An*Es un timer de perodo fijo 18 miliseg aproximadamente, funciona en base a un oscilador RC interno del PIC totalmente independiente del clock. Durante la operacin manual el watchdog genera Device Reset al dar time out (terminar el tiempo del timer).El WDT tiene un perodo nominal de 18 miliseg, el cual vara con la temperatura, la tensin de alimentacin VDD y de un chip a otro.La instruccin CLRWDT pone a cero el WDT y a 1 los bits To y PD del STATUS. WATCHDOG

    Prof. Nelson An

  • PICProf. Nelson An*El bit To del STATUS es puesto a cero cuando el WDT da un time out.El WDT puede ser habilitado slo en la programacin del PIC. WATCHDOG

    Prof. Nelson An

  • PICProf. Nelson An*Ejemplo: Se est utilizando un PIC con un oscilador de 4 MHz. Programar una subrutina que al ser invocada, produzca una demora de aproximadamente 1 seg.Datos:1 ciclo instruccin = 4T4 MHz = 4 x 10 6 HzT = 4 / 4 MHz = 1 usciclo de instruccinTMR0 cuenta mximo 0xff 256 us256 x 256 = 65,54 ms, aqu aplicamos el prescaler mximo que es 256si tomo 50 ms 20 veces llego a 1 seg de demora256 pulsos65 ms195 pulsos50 ms aproximadamenteTEMPORIZADOR TMR0

    Prof. Nelson An

  • PICProf. Nelson An*START0 .............CONTADORTIMERCONTADOR+1...CONTADORCONTADFINALVOLVERSINOTEMPORIZADOR TMR0

    Prof. Nelson An

  • PICProf. Nelson An*Ejemplo: Se est utilizando un PIC con un oscilador de 4 MHz. Programar una subrutina que al ser invocada, produzca una demora de aproximadamente 1 seg.4 MHz 1 us sin prescaler Tmxima = 256 uscon prescaler T mxima = 256 us x 256 us = 65,536 usUtilizo 50 ms 20 vecesEl perodo de TMR0 = tiempo / prescaler = 50 / 256 = 195 usValor a cargar en TMR0 = 256 195 + 2 = 63Factor divisor = 256Valor del TMR0 = 63TEMPORIZADOR TMR0

    Prof. Nelson An

  • Listp=16F628ATMR0EQU0x01INTCONEQU0x0BOPTION_REGEQU0x81STATUSEQU0x03CONTEQU0x020RESETORG0x00GOTOINICIOINICIOCLRWDT;CLEAR WDTBSFSTATUS, 5; SELECCIONO BANCO 1BCFSTATUS, 6; SELECCIONO BANCO 1MOVLWb10000111; PROG TMR0 Y PRESCALERMOVWFOPTIONBCFSTATUS, 5; SELECT BANCO 0TEMPORIZADOR TMR0

  • DEMORAMOVLWD20MOVWFCONT; 20.......... CONTADORTIMERMOVLWD63MOVWFTMRO; CARGO TMR0BCFINTCON, 2; 0.......TOIFPOLLINGBTFSSINTCON, 2; TOIF=1?GOTOPOLLING; NODECFCONT; SIGOTOTIMER; NORETURN; SIENDTEMPORIZADOR TMR0

  • PICProf. Nelson An*Hemos visto que el mtodo de POLLING interrupcin nos permite saber qu est pasando en una puerta (I/0). Para ello debemos interrogar peridicamente a una puerta de estados asociada a la puerta de datos.Existen algunos procesos que no pueden esperar a que el programa lo interrogue, la propia puerta I/0 debe tomar la iniciativa y llamar la atencin a la CPU, a esto le llamamos interrupcin.La CPU suspender el programa que est ejecutando y saltar a una subrutina, de tratamiento de interrupciones.INTERRUPCIONES

    Prof. Nelson An

  • PICProf. Nelson An*Los llamados a subrutina mediante la instruccin CALL son desviaciones del flujo de control del programa asignado por instruccin, se los considera sincrnicos.Las interrupciones son desviaciones del flujo de control del programa originadas asincrnicamente por diversos sucesos que no se hallan bajo la supervisin de las instrucciones. Dichos sucesos pueden ser externos al sistema, como la generacin de un flanco nivel activo en una patita del microcontrolador, bien internos, como el desbordamiento de un contador.INTERRUPCIONES

    Prof. Nelson An

  • PICProf. Nelson An*El comportamiento del microcontrolador ante la interrupcin es similar al de la instruccin CALL de llamada a subrutina. En ambos casos se detiene la ejecucin del programa en curso, se salva la direccin actual del PC en la pila y se carga el PC con una direccin, que en el caso de CALL viene acompaando a la propia instruccin, y en el caso de una interrupcin es una direccin reservada de la memoria de programa, llamada vector de interrupcin. En el PIC 16F628A el vector de interrupcin se halla situado en la direccin 0004h, en donde comienza la rutina de servicio a la interrupcin (RSI).INTERRUPCIONES

    Prof. Nelson An

  • PICProf. Nelson An*En general, en dicho vector se suele colocar una instruccin de salto incondicional (GOTO), que traslada el flujo de control a la zona de la memoria de programa ( cdigo) destinada a contener la rutina de atencin a la interrupcin.La RSI suele comenzar guardando en la memoria de datos algunos registros especficos del procesador (CPU). Concretamente aquellos que la RSI va a emplear y va a alterar su contenido. Antes del retorno al programa principal se recuperan los valores guardados y se restaura completamente el estado del procesador. Algunos procesadores salvan estos registros en la Pila, pero el PIC 16F628A como toda su familia no disponen de instrucciones para meter (push) y sacar (pop) informacin de la Pila, utilizando para este fin registros de propsito general de la memoria de datos.INTERRUPCIONES

    Prof. Nelson An

  • PICProf. Nelson An*La familia de los PIC 16F628A pueden ser interrumpidos por 10 causas diferentes, pero todas desvan el flujo de control a la direccin 0004h, por lo que otra de las operaciones iniciales de la RSI es averiguar cual de las posibles causas ha sido la responsable de la interrupcin en curso.Para ello se exploran los sealizadores (banderines) de las fuentes de interrupcin.Otro detalle importante en la RSI de los PIC es que estos microcontroladores poseen un bit GIE (Global Interrupt Enable) que cuando vale 0 prohbe todas las interrupciones. INTERRUPCIONES

    Prof. Nelson An

  • PICProf. Nelson An*Pues bien, al comenzar la RSI dicho bit GIE se pone automticamente a 0, con objeto de no atender nuevas interrupciones hasta que se termine la que ha comenzado. En el retorno final de la interrupcin, GIE pasa a valer automticamente 1 para volver a tener en cuenta las interrupciones. Dicho retorno de interrupcin se realiza mediante la instruccin RETFIE.Antes del retorno conviene borrar el sealizador bandera de la causa de interrupcin que ha atendido, porque si bien los sealizadores se ponen a 1 automticamente en cuanto se produce la causa que indican, la puesta a 0 se hace por programa.INTERRUPCIONES

    Prof. Nelson An

  • PICProf. Nelson An*Causas de Interrupcin:EXTERNOS: un pulso de una lnea I/0 RB0/INT, cambio de estado de los pines RB4 a RB7.INTERNO: desborde de un contador TMR0.INTERRUPCIONES

    Prof. Nelson An

  • PICProf. Nelson An*Antes de este evento el PIC:Deshabilita las instrucciones 0GIEGuarda el Program Counter en el STACK0004h pasa al Program Counter La direccin de memoria 0004h es entonces el puntodonde comienza la rutina que atiende las interrupciones.Esa direccin llamada vector de interrupcin de la rutinade interrupcin se retorna con la instruccin RTFIE.INTERRUPCIONES

    Prof. Nelson An

  • PICProf. Nelson An*Externa interrupcin RBO/INTDesborde TMR0Cambia algunas de las lneas RB4 a RB7 (cambio de estados) Las interrupciones se utilizan a partir de la posicin dePrograma.INTERRUPCIONES

    Prof. Nelson An

  • PICProf. Nelson An*Modelo de ProgramaReset ORG 0000 goto inicioORG 0004 goto interrup Inicio 0005 ----------------------- Programa ----------------------- Principal ----------------------- INTERRUPCIONES

    Prof. Nelson An

  • PICProf. Nelson An*Interrupcin1) Identificar la causa de la interrupcin2) Atenderla3) Finaliza con la instruccin RETFIE INTERRUPCIONES

    Prof. Nelson An

  • PICProf. Nelson An*Ejercicio: Hacer un oscilador de 1 KHz con un PIC 16F628A en la salida RB0, simultneamente, leer la puerta B y copiarla a la posicin a M (0x20) INTERRUPCIONES

    Prof. Nelson An

  • PICProf. Nelson An*INTERRUPCIONESInicioInicializarLeer PORTBW----M(0x20)GOTORUTINAInterrupcinINVERTIR RB0PROGRAMAR TIMER PARA 500 USVolver

    Prof. Nelson An

  • Listp=16F628ATMR0EQU0x01INTCONEQU0x0BOPTION_REGEQU0x81STATUSEQU0x03PORTBEQU0x06TRISBEQU0x86ORG0x000GOTOINICIOORG0x0004GOTOINTERINICIOBSFSTATUS, 5; SELECCIONO BANCO 1BCFSTATUS, 6; SELECT BANCO 1TEMPORIZADOR TMR0

  • MOVLW0XFEBCFOPTION, 5; 0..... TOCS (habilita clock interno)BCFSTATUS, 5; SELECCIONO BANCO 0MOVLWD133MOVWFTMR0; CARGO TMR0MOVLW0xA0; 1=GIE1=TOIE0....TOIFMOVWFINTCONRUTINAMOVFPORTB, 0MOVWF0x20GOTORUTINAINTERMOVWF0x21; SALVO WMOVLW0x01XORWFPORTB, 1; INVIERTO RB0MOVLWD133MOVWFTMR0; CARGO TM0BCFINTCON, 2; 0.....TOIFMOVF0x21, 0; RECUPERO WRETFIE; REGRESA A LA RUTINA

  • PICProf. Nelson An*Interrupciones

    Prof. Nelson An

  • PICProf. Nelson An*Interrupciones

    Prof. Nelson An

  • PICProf. Nelson An*

    Prof. Nelson An

  • PICProf. Nelson An*REGISTRO TMR1:El TMR1 es un temporizador/contador ascendente de 16 bits, por lo que est implementado mediante dos registros especficos TMR1H y TMR1L, que contienen el valor del conteo en cada momento. Estos registros pueden leerse y escribirse. El valor del registro (TMR1H:TMR1L) evoluciona desde 0000h hasta FFFFh, en cuyo instante activa la bandera TMR1IF (PIR1) y vuelve a 0000h. Se puede provocar una peticin de interrupcin mediante la programacin del bit TMR1IE (PIE1).ORGANIZACIN DE LA MEMORIA

    Prof. Nelson An

  • PICProf. Nelson An*REGISTRO TMR1:El funcionamiento de TMR1 depende de la programacin del registro T1CON (10h). TMR1 puede funcionar como temporizador y como contador sncrono asncrono. El modo de funcionamiento viene determinado por el bit 1, TMR1CS (T1CON). En modo temporizador, TMR1 se incrementa con cada ciclo de instruccin (Fosc/4), mientras en modo contador, se incrementa con cada flanco de subida de la seal del reloj externa, que se aplica a los pines RB6 y RB7, por impulsos aplicados al pin RB6.ORGANIZACIN DE LA MEMORIA

    Prof. Nelson An

  • PICProf. Nelson An*REGISTRO TMR1:Como fuente de los impulsos de reloj existen tres alternativas:Generacin interna (Fosc/4).Generacin mediante un oscilador externo controlado por cristal que se conecta a los pines RB6/T1OSO/T1CKI y RB7/T1OSI/CCP2. El oscilador se activa poniendo a 1 el bit T1OSCEN del registro T1CON. El bit TMR1CS del registro T1CON selecciona entre reloj interno externo. En los PIC16F62X los pines son RB6 y RB7.ORGANIZACIN DE LA MEMORIA

    Prof. Nelson An

  • PICProf. Nelson An*REGISTRO TMR1:Trabaja en modo contador de eventos cuando los impulsos externos a contar se aplican a la patita RB6/T1OSO/T1CKI. En los PIC16F62X el pin es RB6. ORGANIZACIN DE LA MEMORIA

    Prof. Nelson An

  • PICProf. Nelson An*REGISTRO TMR1:El funcionamiento de TMR1 depende de la programacin del registro T1CON (10h), Registro 7-1. El bit 0 TMR1ON gobierna su funcionamiento, desactivando TMR1 cuando vale 0. El bit 1 TMR1CS elige la fuente de pulsos; cuando su valor es 1, stos proceden de una seal externa. En este caso, si el bit 3 T1OSCEN vale 1, actan los pines RB6 y RB7 como entradas del reloj externo. Es posible colocar entre estos pines un cristal de cuarzo de hasta 200 KHz que permite que el oscilador siga en funcionamiento incluso en modo de bajo consumo SLEEP. Si el bit T1OSCEN vale 0, los pulsos se introducirn por el pin RB6.ORGANIZACIN DE LA MEMORIA

    Prof. Nelson An

  • PICProf. Nelson An*

    Prof. Nelson An

  • PICProf. Nelson An*

    Prof. Nelson An

  • PICProf. Nelson An*

    Prof. Nelson An

  • PICProf. Nelson An*

    Prof. Nelson An

  • PICProf. Nelson An*

    Prof. Nelson An

  • PICProf. Nelson An*

    Prof. Nelson An

  • PICProf. Nelson An*

    Prof. Nelson An

  • PICProf. Nelson An*

    Prof. Nelson An

  • PICProf. Nelson An*

    Prof. Nelson An

  • PICProf. Nelson An*

    Prof. Nelson An

  • PICProf. Nelson An*

    Prof. Nelson An

  • PICProf. Nelson An*

    Prof. Nelson An

  • PICProf. Nelson An*

    Prof. Nelson An

  • PICProf. Nelson An*

    Prof. Nelson An

  • TITULO: Timer de 10 segundos con TMR1 PIC16F628A - 4MHz intRC - MCLRMODIFICACIONESCONT_POSTSC_SEGEQU0X20; DEFINE DIRECCIN DE MEMORIA RAMCONT_TIME_01EQU0X21; DEFINE DIRECCIN DE MEMORIA RAMW_TEMPEQU0X30STATUS_TEMPEQU0X31#DEFINEPA0PORTA,2; DEFINE ENTRADA DEL PULSADOR#DEFINEPA1PORTA,3; DEFINE ENTRADA DEL PULSADOR#DEFINEPB0PORTB,7; DEFINE SALIDA DEL LED A ENCENDER#DEFINEPB1PORTB,6; DEFINE SALIDA DEL LED A ENCENDERLIST p=16F628A ; PROCESADOR UTILIZADOINCLUDE"P16F628A.INC; LIBRERIA DE DIRECCIONES CORRESPONDIENTES AL PICORG0x0000;VECTOR RESET (DIR. DE LA MEMORIA FLASH)GOTOINICIALIZA_MC; SALTA A LA ETIQUETA "INICIALIZA_MC"ORG0x0004; VECTOR INTERRUPCION (DIR. DE LA MEMORIA FLASH)GOTOPUSH; SALTA A LA ETIQUETA "PUSH" (INTERRUPCIN)INICIALIZA_MCMOVLW B'00000111'; CONFIGURA PINES DEL COMP. ANLOGO COMO I/O DIG.MOVWF CMCON; EN EL REGISTRO CMCONBSFSTATUS,RP0; CAMBIO AL BANCO 1MOVLWB'11111111'; ESCRIBE ESTE VALOR EN EL ACUMULADORMOVWFTRISA; MUEVE ESTE VALOR AL REGISTRO TRISA (ENT 1 - SAL 0)MOVLWB'00111111'; ESCRIBE ESTE VALOR EN EL ACUMULADORMOVWFTRISB; MUEVE ESTE VALOR AL REGISTRO TRISB (ENT 1 - SAL 0)BCFSTATUS,RP0; CAMBIO AL BANCO 0CLRF PORTB; LIMPIA EL REGITRO PORTB

  • PROGRAMA PRINCIPALPROG_PRINCIPALBTFSCPA0BSFPB0GOTOPROG_PRINCIPAL; SALTA A LA ETIQUETA "LOOP_SINFIN"RUTINA DE SERVICIO DE INTERRUPCIN;PUSHMOVWFW_TEMP; GUARDA EL VALOR DE W EN W_TEMPSWAPFSTATUS,W; (RUTINA DE SERVICIO DE INTERRUPCIN)MOVWFSTATUS_TEMP; GUARDA EL VALOR DE STATUS EN STATUS_TEMPRSIDECFSZCONT_POSTSC_SEG ,F; RESTA 1 AL REGISTRO Y SALTA CUANDO ES CEROGOTOFIN_RSIMOVLWD'20'; VALOR INICIAL DEL REGISTRO "CONT_POSTSCALA"MOVWFCONT_POSTSC_SEG; DECFSZCONT_TIME_01,F; RESTA 1 AL REGISTRO Y SALTA CUANDO ES CEROGOTOFIN_RSIMOVLWD'10'; VALOR INICIAL DEL REGISTRO "CONT_POSTSCALA"MOVWFCONT_TIME_01; BCFPB0FIN_RSIMOVLWH'B0'; VALOR INICIAL DEL REGISTRO "TMR1L"MOVWFTMR1L;MOVLWH'3C'; VALOR INICIAL DEL REGISTRO "TMR1H"MOVWFTMR1H;BCFPIR1,TMR1IF; COLOCA EN 0 EL FLAG DE LA INTERRUPCION CORRESP.POPSWAPFSTATUS_TEMP,W; RECUPERA VALORES DE STATUSMOVWFSTATUS; MUEVE EL VALOR DE W AL REGISTRO "STATUS"MOVFW_TEMP,W; RECUPERA VALORES DE WRETFIE; RETORNA DE LA INTERRUPCION HABILITANDO EL BIT GIE"ORG 0x2007; DIR. DE MEM. ROM DE LA PALABRA DE CONFIGURACIONDATAH'3F30'; VALOR PARA LA PALABRA DE CONFIGURACIONEND; FIN DEL PROGRAMA

    *LOS DISPOSITIVOS NECESARIOS PARA APLICAR ESTE METODO :SON*