Microcontroladores Pic 16F84A. Los PIC son una extensa familia microcontroladores divididos en tres gamas, la gama baja con memoria programa 12 bits, la gama media y la gama alta con memoria programa 14 bits. En la tabla 1 se presentan algunos miembros cada una estas gamas con resumen sus principales características. Nosotros utilizaremos el PIC 16f84 por sus especiales características. Los microcontroladores PIC 16f84 com memoria tipo FLASH y PIC 16c84 con memoria EEPROM, son potentes, flexibles y fáciles emplear bido entre otras carcterísticas a que este tipo memoria permite su grabación y su borrado miles veces forma casi instantánea al realizarse eléctricamente a diferencia los microcontroladores basados en memoria EPROM que necesita un borrador ultravioleta. Puen utilizarse tanto en el sarrollo como en la producción. Su coste se reduce frente a otros molos ya que no necesitan encapsulados cerámicos con ventana programación como los chips EPRPOMs. Disponen amas una EEPROM 64 bytes para datos, lo que elimina la necesidad una memoria EEPROM externa, y aun mas importante, puen ser programados "en circuito" sin necesidad ser retirados, lo que permite su grabación spués l ensamblado y que los programas puen ser actualizados o modificados para eliminar errores tectados con posterioridad o para introducir versiones mas actualizadas l programa. El PIC 16f84 pertenece a la gama media l fabricante, poseyendo unas características óptimas para su empleo en el aprendizaje. Este microntrolador con memoria FLASH ésta fabricado con tecnología CMOS. Su consumo es muy reducido siendo el circuito completamente estático por lo que su reloj pue tenerse completamente sin pérdida los contenidos los registros. Un consumo típico es 2 ma a 4 Mhz y unos 40 microamperios en modo Sleep. Al ser un circuito CMOS, todas las entradas no usadas ben ser llevadas a +5V. El encapsulado 18 pines así como la scripción l patillaje pue verse en la figura 1. Set instrucciones Microcontrolador PIC. Estas son las todas las instrucciones que hay para por programar el Pic 16c5x, 16c64, 16c76c74, 16c84, 16f84, 16f873. Las encontraremos en orn alfabetico. En total son 37 y haciendo un clic sobre una ellas pomos accer a su respectiva scripción: NOTA: Las instrucciones OPTION y TRIS incluidas en este listado, no forman parte l set instrucciones los PIC 16f84 y 16f873.
ADDLW ADDWF ANDLW ANDWF BCF BSF BTFSC BTFSS CALL CLRF CLRW CLRWDT COMF DECF DECFS GOTO SLEEP SUBLW SUBWF SWAPF TRIS XORLW XORWF ADDLW ADD Literal to W ADDLW k 11 111x kkkk kkkk W + k -> W C, DC, Aña el contenido W al contenido k, y almacena el resultado en W Atención: Esta instrucción no existe en los Pic 16c5X ADDWF ADD W to F ADDWF f, d 0001 11df ffff 00 0111 dfff ffff W + f -> f si d=1 W + f -> W si d=0 C, DC, Aña el contenido W al contenido f, y almacena el resultado en W si d=0, y en f si d=1 ANDLW AND Literal and W ANDLW k ANDWF AND W with F ANDWF f, d 1110 kkkk kkkk 11 1001 kkkk Kkkk W AND k -> W Efectúa un AND lógico entre el contenido W y el literal k, y lo almacena en W 0001 01df ffff 00 0101 dfff ffff W AND f -> f si d=1 W AND f -> W si d=0 Efectúa un AND lógico entre el contenido W y el contenido f, y almacena el resultado en W si d=0, y en f si d=1
BCF Clear F BCF f, b BSF Set F BSF f, b 0100 bbbf ffff 01 00bb bfff ffff 0 -> b(f) Pone a cero el bit numero b f 0101 bbbf ffff 01 01bb bfff ffff 1 -> b(f) Pone a uno el bit numero b f BTFSC Test, Skip If Clear BTFSC f, b BTFSS Test, Skip If Set BTFSS f, b 0110 bbbf ffff 01 10bb bfff ffff o 2 Salta si b(f)=0 Si el bit numero b f es nulo, la instrucción que sigue a esta se ignora y se trata como un NOP. En este caso, y solo en este caso, la instrucción BTFSC precisa dos ciclos para ejecutarse. 0111 bbbf ffff 01 11bb bfff ffff o 2 Salta si b(f)=1 Si el bit numero b f esta en uno, la instrucción que sigue a esta se ignora y se trata como un NOP. En este caso, y solo en este caso, la instrucción BTFSC precisa dos ciclos para ejecutarse. CALL Subrutina Call CALL k CLRF Clear F with F CLRF f 1001 kkkk kkkk 10 0kkk kkkk kkkk 1, 2 En el caso los 16c64, 71, 74, 84: PC + 1 -> Pila, k -> PC(0-10), PCLATH(3,4) -> PC(11,12) Guarda la dirección 0000 011f ffff 00 0001 1fff ffff 00 -> f Pone el contenido f a cero y activa el bit.
vuelta en la pila y spués llama a la subrutina situada en la dirección cargada en el PC. Atención: En el modo cálculo la dirección hay que posicionar bien el registro PCLATH antes ejecutar la instrucción CALL CLRW Clear W register CLRW CLRWDT Clear Watchdog Timer CLRWDT COMF 0000 0100 0000 00 0001 0xxx xxxx 00 -> W Pone el registro W a cero y activa el bit Complement F COMF f, d 0010 01df ffff 00 1001 dfff ffff ~f -> f su d=1 ~f -> W si d=0 Hace un complemento f bit a bit. El resultado lo almacena nuevo en f si d=1 (borra el anterior), o en W si d=0 (f no varía) DECF 0000 0000 0100 00 0000 0110 0100 00 -> WDT y 0 -> predivisor l temporizador 1 -> TO y 1 -> PD Pone a cero el registro contador l temporizador watchdog, asi como el predivisor Decrement F to F DECF f, d 0000 11df ffff 00 0011 dfff ffff f - 1 -> f si d=1 f - 1 -> W si d=0 Decrementa el contenido f en una unidad. El resultado se guarda en W si d=0 (f no varia), y en f si d=1 DECFS Decrement F, Skip If ero DECFS f, d GOTO Salto Incondicional with F
INCF 0010 11df ffff 00 1011 dfff ffff (2) f - 1 -> f si d=1 f - 1 -> W si d=0 Decrementa el contenido f en una unidad. El resultado se guarda en W si d=0 (f no varia), y en f si d=1 Si el reusltado es nulo, se ignora la siguiente instrucción y en este caso la instrucción dura dos ciclos. Increment F INCF f, d 0010 10df ffff 00 1010 dfff ffff f + 1 -> f si d=1 f + 1 -> W si d=0 Incrementa el contenido f en una unidad. El resultado se almacena nuevo en f si d=1 y en W si d=0(en este caso f no varía) INCFS GOTO k 101k kkkk kkkk 10 1kkk kkkk kkkk 1, 2 En el caso los 16c64,71,74 y 84: k -> PC(0-10), PCLATH(3,4) -> PC(11,12) LLama a la subrutina situada en la dirección cargada en el PC Atención: En el modo cálculo la dirección hay que posicionar correctamente el registro PCLATH antes ejecutar la instrucción GOTO Increment F, Skip if ero INCFS f, d 0011 11df ffff 00 1111 dfff ffff (2) f + 1 -> f si d=1 f + 1 -> W si d=0 En ambos casos: Salto si f + 1 = 0 Incrementa el contenido f en 1. El resultado se guarda en f si d=1 y en w si d=0 (en este caso f no varía). Si el resultado es nulo, se ignora la siguiente instrucción y esta instrucción dura dos ciclos IORLW Inclusive OR Literal With W IORLW k IORWF Inclusive OR W With f IORWF f, d
MOVF 1101 kkkk kkkk 11 1000 kkkk kkkk W OR k -> W Efectúa un OR lógico inclusivo entre el contenido W y el literal K, y almacena el resultado en W Move F MOVF f, d 0010 00df ffff 00 1000 dfff ffff f -> f si d=1 f -> W si d=0 Pone el contenido f en f si d=1 o f en W si d=0 MOVLW 0001 00df ffff 11 0100 dfff ffff W OR f -> f si d=1 W OR f -> W si d=0 Efectúa un OR lógico inclusivo entre el contenido W y el contenido f, y almacena el resultado en f si d=1 o en W si d=0 Move Literal to W with F MOVLW k 1100 kkkk kkkk 11 00xx kkkk kkkk k -> W Carga W con el literal k MOVWF Atención: El splazamiento f en f que parecería inútil, permite comprobar el contenido f con respecto a cero ya que esta instrucción actúa sobre el bit Move W to F MOVWF f 0000 001f ffff 00 0000 1fff ffff W -> f NOP No Operation NOP 0000 0000 0000 00 0xx0 0000 Ninguna
OPTION Carga f con el contenido W Load Option Register Option 0000 0000 0010 00 0000 0110 0010 W -> OPTION Carga el registro OPTION con el contenido W Atención: Esta instrucción es correctamente interpretada por los circuitos 16c64, 71, 74, 84 con el fin asegurar una compatibilidad ascennte RETFIE Ninguna Consume tiempo la maquina y ocupa un lugar en la memoria programa. Return From Interrupt RETFIE 00 0000 0000 1001 1, 2 Pila -> PC, 1 -> GIE Carga el PC con el valor que se encuentra en la parte superior la pila, asegurando así la vuelta la interrupción. Pone a 1 el bit GIE, con el fin autorizar nuevo que se tengan en cuenta las interrupciones Atención: Esta interrupción dura dos ciclos RETLW Return Literal to W RETLW k 1000 kkkk kkkk 11 01xx kkkk kkkk 1, 2 k -> W, Pila -> PC Carga W con el literal k, y spués carga el PC con el valor que se encuentra en la parte superior la pila, efectuando así un retorno subrutina. Atención: Esta instrucción dura dos ciclos RETURN Return from Subroutine with F RETURN 00 0000 0000 0000 1, 2 Pila -> PC Carga el PC con el valor que se encuentra en la parte superior la pila, efectuando así una vuelta a la subrutina. Se trata la instrucción RETLW simplificada. Atención: Esta instrucción dura dos ciclos
RLF Rotate Left F through Carry RLF f,d 0011 01df ffff 00 1101 dfff ffff ver scr. C Rotación un bit a la izquierda l contenido f, pasando por el bit acarreo C. Si d=1 el resultado se almacena en f si d=0 el resultado se almacena en W RRF Rotate Right F through Carry RRF f, d 0011 00df ffff 00 1100 dfff ffff Ver scr. C Rotación un bit a la recha l contenido f, pasando por el bit acarreo C. Si d=1 el resultado se introduce en f, si d=0 el resultado se amacena en W SLEEP Sleep SLEEP 0000 0000 0011 00 0000 0110 0011 0 -> PD, 1 -> TO, 00 -> WDT, 0 -> Predivisor l WDT PD, TO Pone el circuito a dormir con parada l oscilador. Su consumo es inferior. SUBLW 11 Substract W from Literal SUBLW k k - W -> W C, DC, 110x kkkk kkkk Sustrae el contenido W l literal k, y almacena el resultado en W. La sustracción se realiza en complemento a dos Atención: Use esta instrucción con mucho cuidado, pues pue provocar que el micro no spierte si no se ha seteado correctamente. SUBWF Substract W from F SUBWF f, d 0000 10df ffff 00 0010 dfff ffff SWAPF Swap F to F SWAPF f, d 0011 11df ffff 00 1110 dfff ffff
TRIS f - W -> f si d=1 f - W -> W si d=0 C, DC, Sustrae el contenido W l contenido f, y almacena el resultado en W si d=0 y en f si d=1. La sustracción se realiza en complemento a dos Load TRIS Register TRIS f 0000 0000 0fff 00 0000 0110 0fff W -> registro TRIS l puerto f Carga el contenido W en el registro TRIS l puerto f. Atención: Esta instrucción, es correctamente interpretada por los circuitos 16c64, 71, 74, 84, con el fin asegurar una compatibilidad ascennte XORLW f(0-3) -> f(4-7) y f(4-7) -> f(0-3) Resultado -> f si d=1 Resultado -> W si d=0 Intercambia los cuatro bit mayor peso por los cuatro menor peso f, y almacena el resultado en W si d=0, y en f si d=1 Exclusive OR Literal With W XORLW k 1111 kkkk kkkk 11 1010 kkkk kkkk W OR (Exclusivo) k -> W Efectúa un OR lógico exclusivo entre el contenido W y el contenido l Literal K y almacena el resultado en W XORWF Exclusive Or W with F XORWF f,d 0001 10df ffff 00 0110 dfff ffff W OR (Exclusivo) f -> f si d=1 W OR (Exclusivo) f -> W si d=0 Efectúa un Or lógico exclusivo entre el contenido W y el contenido f y almacena el resultado en f si d=1 o en W si d=0