Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Microcontrolador PIC.
Programación
Programación PIC
1. Introducción
2. CPU y juego de instrucciones
3. Memoria de datos
4. Módulos adicionales
5. Programación en ensamblador
6. Interrupciones
7. Timer0
CPU y juego de instrucciones
La CPU obtiene y ejecuta las instrucciones
La ALU realiza las operaciones aritmético-lógicas y
controla el registro STATUS
Nivel de bit
Dos operandos: f registro, b número de bit
Literales
Un operando: k constante de 8 bits
De Salto
Un operando: dirección de 11 bits
Duración
Todas duran 1 ciclo, excepto cuando hay salto
En ese caso duran 2 ciclos, y en el segundo se ejecuta NOP
Juego de instrucciones
Operaciones a nivel de byte
Mnemónico Ops. Descripción Ciclos Bits afect
ADDWF f,d Suma w y f 1 C,DC,Z
ANDWF f,d w AND f 1 Z
CLRF f Limpia f 1 Z
CLRW - Limpia w 1 Z
COMF f,d Complementa f 1 Z
DECF f,d Decrementa f 1 Z
DECFSZ f,d Decrem., salta si 0 1 (2) -
INCF f,d Incrementa f 1 Z
INCFSZ f,d Increm., salta si 0 1 (2) Z
IORWF f,d w OR f 1 Z
MOVF f,d Mueve f 1 Z
MOVWF f Mueve w a f 1 -
NOP - No opera 1 -
Juego de instrucciones
Operaciones a nivel de byte (cont.)
Mnemónico Ops. Descripción Ciclos Bits afect
RLF f,d Rotar izda, usa carry 1 C
RRF f,d Rotar dcha, usa carry 1 C
SUBWF f,d Resta w de f 1 C,DC,Z
SWAPF f,d Cambia nibbles de f 1 -
XORWF f,d w XOR f 1 Z
Bit C
Se usa en ADDWF, ADDLW, SUBLW, SUBWF
1 si hay acarreo en el bit más significativo
0 si no lo hay
La polaridad es la contraria para las restas
Modificación de STATUS
El registro STATUS puede ser el destino de cualquier operación.
Por ejemplo,
clrf STATUS
pone a 0 IRP, RP1 y RP0, a 1 Z y no cambia los demás.
Se recomienda que para escribir en STATUS solo se usen
BCF, BSF, SWAPF y MOVWF
que son las únicas que no cambian Z, C ni DC.
Memoria de datos
Registro w
Bancos de memoria
Cada instrucción contiene 7 bits para la dirección (128
bytes accesibles)
Se complementan con RP1:RP0 en STATUS.
SFRs y GPRs
Algunos SFR están
mapeados en todos los
bancos
Temporizador
Timer0 en todos los PICs
8 bits, lectura/escritura, prescaler de 8 bits, reloj interno o
externo, interrupción en el desbordamiento, selección de
flanco
Periféricos disponibles
USART (Universal Serial Asynchronous Receiver
Transmitter)
Comunicación serie asíncrona y síncrona
RS-232, SPI, I2C y otros
Full-duplex o half-duplex
Convertidor A/D
Resolución de 8 o 10 bits
De 2 a 16 canales
Condensador de muestreo y retención
Aproximaciones sucesivas
Entradas de tensiones de referencia
Puede funcionar en modo SLEEP
Interrupciones
Interrupción: señal digital
asíncrona que reclama la
atención del procesador
Registro de control de
interrupciones INTCON
Bits INTCON E e INTCON F
Periféricos
Cada uno tiene su propia fuente de interrupción y se configura en sus registros
propios
Interrupción en RB4-RB7
movwf old_w
swapf status,w
movwf old_status
...
swapf old_status,w
movwf status
swapf old_w,f
swapf old_w,w
retfie
Timer0
Registro de 8 bits que se incrementa con cada ciclo de
instrucción. Se desborda al llegar a 0xff
org 0x000
start clrwdt ; clear watchdog timer
movlw b'11010111' ; assign prescaler, internal clock
; and divide by 256
option
movlw 0x00 ; set w = 0
tris portB ; port B is output
clrf portB ; port B all low
go bsf portB, 0 ; RB0 = 1, thus LED on
call delay
bcf portB, 0 ; RB0 = 0, thus LED off
call delay
goto go ; repeat forever
end
Ejemplo: recepción serie asíncrona
tmr0 equ 0x01 ; Timer/counter register
status equ 0x03 ; Status word register.
portA equ 0x05 ; Port A register
portB equ 0x06 ; Port B register
intCon equ 0x0b ; Interrupt control register
rcvReg equ 0x0c ; General purpose register
count equ 0x0d ; General purpose register
temp equ 0x0e ; General purpose register
optReg equ 0x81 ; File register in Bank 1
trisA equ 0x85 ; File register in Bank 1
trisB equ 0x86 ; File register in Bank 1
Ejemplo: recepción serie asíncrona
org 0x000