Académique Documents
Professionnel Documents
Culture Documents
Manual Básico
Datos Técnicos
Conexión de RC:
Conexión de Reset:
Arquitectura interna:
PC: registro que almacena la posición del último salto realizado por el
programa.
La parte del PIC que vamos a estar ocupando para grabar nuestros programas
se le conoce como “Bank0”, (Ver dibujo anterior). A esa sección que vamos a
estar ocupando es una memoria no volátil, comprendida entre la sección de
memoria: 50h y 7Fh.
La parte del PIC conocida como “Bank1” se usa por lo general para configurar
si las patillas del PIC van a aceptar datos del mundo exterior o bien funcionar
como salida de datos, el temporizador, modificar opciones avanzadas, etc.
Registros importantes:
TRISA: configuración de PORTA = RA0, RA1, RA2, RA3, RA4 (pines del PIC)
TRISB: configuración de PORTB =RB0, RB1, RB2, RB3, RB4, RB5, RB6, RB7
(pines del PIC).
Instrucciones de carga
Ejemplo:
Antes: w=01010101
Instrucción: clrw
Después: w=00000000
Ejemplo:
Ejemplo:
Antes: w=0x08
Instrucción: movlw 0xFF
Después: w= FF.
Antes: PORTA=0x05
w=0xFA
Ejecutar instrucción: movf PORTA,0
Después: PORTA = 0x05
w=0x05
Instrucciones de bit
Ejemplo:
Antes:11111111
Instrucción: bcf PORTA,5 (quinta posición de derecha a izquierda)
Después: PORTA=11101111
Ejemplo:
Antes:00000000
Después: PORTA=00010000
Instrucciones de salto
Ejemplo:
Ejemplo1:
Michael EQU 0x0C
Ejemplo2:
pAlAbRa EQU 0x1A
Ejemplo1:
org 0
Ejemplo2:
org 1023
Instrucciones de suma
Ejemplo:
Antes: w=0x50
Instrucción: addlw 0x01
Después: w=0x51
Ejemplo1:
Ejemplo2:
Instrucciones de resta:
sublw <dato>: esta instrucción efectúa una resta aritmética. Al dato escrito se
le resta el valor del registro w y el resultado se guarda en el registro w.
Ejemplo:
Antes: w=0x03
Instrucción: sublw 0x01
Después: w=0x02
Ejemplo1:
Antes: Contar=0x04
W=0x01
Instrucción: subwf Contar,0
Después: Contar=0x04
W=0x03
Ejemplo2:
Antes: Contar=0x04
W=0x01
Instrucción: subwf Contar,1
Después: Contar=0x03
W=0x01
decf f,d : esta instrucción resta una unidad al registro “ f ”. Si el valor de d=0 el
resultado se guarda en el registro w. Si el valor de d=1 entonces el resultado se
guarda en el mismo registro “ f ”.
Ejemplos:
incf f,d : esta instrucción incrementa el valor del registro “ f “ en uno. Si d=0 el
resultado se guarda en el registro w; si d=1 se guarda en el mismo registro “ f “.
Ejemplos:
Antes: PORTB=0x01
Instrucción: incf PORTB,0
Después: PORTB=0x01 ; w=0x02
Antes: PORTB=0x01
Instrucción: incf PORTB,1
Después: PORTB=0x02
Instrucciones lógicas:
Antes: w=b‟10100111‟
AND
Instrucción: andlw b‟01011111‟
Después: w=b‟00000111‟
w=b‟10100111‟
AND
PORTA=b‟01011111
Después: w=b‟00000111‟
comf f,d : realiza un complemento bit a bit de un registro “ f “. Si d=0 el
resultado se guarda en el registro w; si d=1 se guarda en el mismo registro “ f “.
Ejemplo:
Antes: PORTA=b‟01010101‟
Instrucción: comf PORTA,1
Después: PORTA=b‟10101010‟
iorlw k : realiza una operación “OR” del registro w con el dato “k” y el resultado
se guarda en el registro w. Ejemplo:
Antes: w=b‟01010101‟
Instrucción: iorlw b‟00001111‟
Después: w=b‟01011111‟
iorwf f,d: esta instrucción realiza una operación “OR” del registro w con otro
registro “ f ”. Si d=0 el resultado se guarda en el registro w; si d=1 se guarda en
el mismo registro “ f “. Ejemplo:
Antes: PORTA=5A
Instrucción: swapf PORTA,1
Después: PORTA=A5
Antes: w=b‟00101011‟
XOR
Instrucción: andlw b‟01010101‟
Después: w=b‟01111110‟
xorwf f,d: esta instrucción realiza una operación “XOR” del registro w con otro
registro “ f ”. Si d=0 el resultado se guarda en el registro w; si d=1 se guarda en
el mismo registro “ f “. Ejemplos:
a: btfsc reg1,3 Cuando el pic llega a la posición “a:” evalúa el valor del “reg1”, en
b: proceso x su tercer bit; si éste es cero salta a una posición y realiza el
c: proceso y “proceso y”, sino sigue con el “proceso x”.
proceso z
a: btfss reg1,3 Cuando el pic llega a la posición “a:” evalúa el valor del “reg1”, en
b: proceso x su tercer bit; si éste es uno salta a una posición y realiza el
c: proceso y “proceso y”, sino sigue con el “proceso x”.
proceso z
decfsz f,d: esta instrucción realiza un decremento en uno del registro “ f”. Si
d=0 el resultado se guarda en el registro w; si d=1 se guarda en el mismo
registro “ f “. Ejemplo:
incfsz f,d: esta instrucción realiza un incremento en uno del registro “ f”. Si d=0
el resultado se guarda en el registro w; si d=1 se guarda en el mismo registro
“f“. Ejemplo:
nop (no operation): esta instrucción no hace nada y no afecta el estado de las
banderas. Tarda un ciclo de máquina en ser ejecutada. Ejemplo:
nop
nop
call: se usa esta instrucción para realizar llamadas a etiquetas que se ubican
dentro del código. Ejemplo:
La secuencia es:
call etiqueta1 Primera línea.
… Tercera línea.
etiqueta1: nop Cuarta línea.
nop El resto del código.
….
return: esta instrucción es utilizada para regresar a la última línea de donde se
realizó la instrucción call. Ejemplo:
La secuencia es:
call etiqueta1 Primera línea.
Tercera línea.
….. Cuarta línea.
etiqueta1: nop Quinta línea.
….. Segunda línea.
return El resto del código
a: sleep
Empezando a programar.
Lo primero a tomar en cuenta es:
tener instalado un depurador. Ejemplo: mplab 7.0
cumplir con los requisitos mínimos de instalación y operación.
Iniciativa de aprender.
Vocabulario:
Compilar: operación que se realiza para crear el archivo hexadecimal (*.hex)
que se va a grabar en el PIC con otro programa como por ejemplo winpic 800.
AX EQU 0x0C
BX EQU 0x0D
CX EQU 0x0E
DX EQU 0x0F
Escribir el programa.
Programa 1:
Haga un programa que muestre el número 14.
bsf STATUS,RP0
clrf TRISA Acá se establece el Puerto A
bcf STATUS,RP0 como salida de Datos
end FIN
Programa 2:
Por el puerto B se obtiene el dato del puerto A multiplicado por dos.
List p=16f84a
include <p16f84a.inc>
org 0
;este es un comentario
;acceso a banco 0
bsf STATUS,RP0
clrf TRISB ;si es cero = salida de datos
movlw 0xFF
movwf TRISA ; si son uno =entrada de datos
bcf STATUS,RP0
end
Programa 3:
Por el Puerto B se obtiene el dato introducido por el puerto A, pero los bits
pares de la salida se fijan siempre a “1”. El orden de los bits es B0, B1, B2…
B5, B6, B7; siendo los pares: B0, B2, B4, B6. Por ejemplo si se introduce por el
puerto A el dato „- - - 01100‟. En el puerto b se obtiene „- - - 11101‟
List p=16f84a
include <p16f84a.inc>
org 0
bsf STATUS,RP0
clrf TRISB
movlw 0xFF
movwf TRISA
bcf STATUS,RP0
inicio:
movf PORTA,0
iorlw b‟01010101‟
movf PORTB
goto inicio
end
Programa 4:
Por el puerto B se obtiene el contenido del puerto A pero los bits impares de la
salida de fijan a “0”.
List p=16f84a
include <p16f84a.inc>
org 0
bsf STATUS,RP0
clrf TRISB
movlw 0xFF
movwf TRISA
bcf STATUS,RP0
inicio:
movf PORTA,0
andlw b‟01010101
movf PORTB
goto inicio
end
Circuito quemador de PIC por puerto serie
R1 10 kOhm
R2 1,5 kOhm
C2 100 uF/16 V
C3 22 uF/16 V
D2 Diodo zener 5,1 V (1N4733a)
D6 Diodo zener 8,2 V (1N4738a)
D3, D4, D5, D7 1N4148
Q1, Q2 BC547B
Porta IC de 18 pines
Conector DB9 hembra.
Tableta de cobre, FeCL3, metro de cable utp,
Caja rectangular con tapadera.
Enlaces:
www.microchip.com
www.victoryvictor.net/pic.htm
www.microchip.com/downloads/en/DeviceDoc/35007b.pdf
http://perso.wanadoo.es/chyryes/tutoriales/pic0.htm
maicol_ut192@hotmail.com
www.ecacssc.blogspot.com