PDF de programación - Introducción al PIC16F84

Imágen de pdf Introducción al PIC16F84

Introducción al PIC16F84gráfica de visualizaciones

Publicado el 2 de Mayo del 2019
765 visualizaciones desde el 2 de Mayo del 2019
339,9 KB
10 paginas
Creado hace 9a (18/03/2015)
1.- INTRODUCCIÓN AL PIC16F84
En esta sección se resumen brevemente las principales características y forma de uso de
las herramientas de desarrollo que serán utilizadas durante las prácticas. El contenido se
presenta en forma de tutorial, que ha de realizarse en el laboratorio.
El código
El repertorio de instrucciones tipo RISC del micro-controlador 16F84A carece de
instrucciones de comparación de dos variables. Debido a la utilidad de este tipo de
instrucciones para implementar sentencias if-else, desarrollaremos a continuación un
programa que ilustrar la forma en que pueden compararse dos números.
;Para realizar la comparación restamos los dos número (A-B). Si al realizar la resta los dos números son iguales el
;resultado será cero, activándose el bit Z del registro de Estado. Si al realizar la resta (suma del complemento a 2 de
;B) se produce un bit de acarreo el resultado es positivo (A> B), Ej.:3—2 = 0011 + 1110=1 0001).Si no se produce
;acarreo el resullado es negativo(A<B) Ej.: 2—3 = 0010 + 1101 = 0 1111).

NumA
NumB
Mayor

list
include
equ
equ
equ
org
goto
org
movf
subwf
btfsc
goto
btfsc
goto
A_menor_B mof

Inicio

A_mayor_B

A_Igual_B
Stop

movwf
goto
movf
movwf
goto
clrf
nop
end

p=16F84A
P16F84A.INC
0x0C
0x0D
0x0E
0x00
Inicio
0x05
NumB,W
NumA,W
STATUS,Z
A_igual_B
STATUS,C
A_menor_B
NumB,W
Mayor
Stop
NumA,W
Mayor
Fin
Mayor

;Variable del número A
;Variable del número B
;Variable que almacenará el mayor de los números
;VectordeReset
;Salto incondicional al principio del programa
;Vector de interrupción
;NumB->W (Acumulador)
;A-W->W
;Bit de cero del registro de Estado a 1
;Si
;Bit de acarreo del registro de Estado a 1
;Si
;No, A es menor que B
Suma A más B

0

;No, A es menor que B
;Suma A más B

;Pone a 0 el resultado
;Poner breakpoint de parada
;Fin del programa fuente

Código1

En primer lugar con un editor de textos cualquiera, (Notepad, Wordpad, edit, ...) crear
un fichero de nombre p0.asm (la extensión indica que es código ensamblador) y copiar
el código anterior.
Una vez editado y creado el archivo p0.asm debemos compilarlo. Después de la
compilación se habrán creado los siguientes ficheros:
Archivo

Descripción

Programación de PICs

1

Contiene los errores de compilación
Direcciones de memoria dónde se han ubicado instrucc. y tabla símbolos
Archivo con el código máquina

P0.err
P0.lst
P0.hex
Durante la compilación del programa anterior se producirán varios errores, para
solucionarlos debemos consultar el archivo P0.err. En este caso los errores son:
Make: The target "D:\PIC\Pruebas\p0.o" is out of date.
Executing: "D:\Archivos de programa\Microchip\MPASM Suite\MPAsmWin.exe" /q /p16F84A "p0.asm" /l"p0.lst"
/e"p0.err"
Message[301] D:\ARCHIVOS DE PROGRAMA\MICROCHIP\MPASM SUITE\P16F84.INC 37 : MESSAGE:
(Processor-header file mismatch. Verify selected processor.)
Error[113] D:\PIC\PRUEBAS\P0.ASM 19 : Symbol not previously defined (A_menor_B)
Error[122] D:\PIC\PRUEBAS\P0.ASM 20 : Illegal opcode (mof)
Error[113] D:\PIC\PRUEBAS\P0.ASM 25 : Symbol not previously defined (Fin)
Halting build on first failure as requested.
BUILD FAILED: Fri Feb 03 16:29:26 2006
En función de la lógica del programa solucionar los dos errores anteriores.
Depuración
La fase de depuración es una de las tareas de mayor importancia en el desarrollo de un
programa, porque permite verificar su correcto funcionamiento, así como la corrección
de errores. En el laboratorio usaremos el depurador/simulador MPLABSIM que simula
al PIC que tengamos configurado.
1. Consultar el contenido de todos los registros, incluidos los registros de estado, pila y

W: Wiew->4File Registers
Modificación de la memoria. El programa de prueba debe comparar dos números, y
almacenará en la posición de memoria Mayor el mayor de ellos, o cero si son
iguales. Resulta por lo tanto conveniente que podamos consultar y modificar el
contenido de estas posiciones de memoria de forma rápida. Antes de comenzar la
ejecución del programa debemos inicializar los valores de NumA y NumB con dos
números. Por ejemplo iniclalizar NumA a 2 y NumB a 3. Para modificar el contenido
hacer doble clic en el campo asociado e introducir el valor.

2. Ejecución del Programa (Puntos de Ruptura). Antes de ejecutar el programa es
necesario poner un punto de ruptura en la última instrucción del programa, para
poder así comprobar el resultado de la ejecución. Los puntos de ruptura se colocan
haciendo doble clic sobre el numero de linea. En este primer ejemplo pondremos un
punto de ruptura al final del programa.

3. Para ejecutar el programa desde la dirección 0, pulsar

Programación de PICs

2

4. Para carga en el contador de programa la dirección de memoria, y por tanto
ejecutarlo desde esa instrucción se utiliza el botón derecho del cursor y la opción Set
PC at Cursor.

Una vez finalizada la ejecución del programa podemos comprobar que el resultado
almacenado en Mayor es 3. Si embargo, si ejecutamos el programa con NurnA=3 y
NumB=2 el resultado obtenido no es el correcto.

1. Depuración. Hemos encontrado un caso en el que nuestro programa no produce el
resultado esperado (NumA=3, NumB=2 =>Mayor=2). Para ver que sucede vamos a
ejecutar el código paso a paso.

a. Punto de Ruptura en Inicio
b. Visualizar el registro de estado (AD STATUS,B)
c. Ejecutar el programa
d. Ejecución paso a paso

En función de lo observado en la ejecución paso a paso corregir el programa para
que funciones adecuadamente.

Programación de PICs

3

2.1.-PUERTOS DE ENTRADA/SALIDA DEL PIC 16F84
El micro-controlador PIC16F84 dispone de dos puertos de entrada/salida que
denominaremos PORTA y PORTB. Ambos puertos se configuran por medio de los
registros TRISA y TRISB, respectivamente. De forma que un 1 en un bit del registro
TRISx, configura el correspondiente bit del registro PORTx como entrada.
Consecuentemente, un 0 en un bit del registro TRISx configura correspondiente bit del
registro PORTx como salida.
En el siguiente ejemplo se muestra como programar el puerto B del micro-controlador.
Es importante recordar que los registros PORTB y TRISB se encuentran en dos páginas
de memoria diferentes, por lo que es necesario fijar correctamente el bit RP0 del
registro de estado.
PORTB
clrf
bsf
STATUS, RP0
0x00
movlw
movwf
TRISB
Escribir un programa que lea la entrada del puerto A y lo refleje en el puerto B. El
programa deberá dormirse cuando los interruptores de entrada tengan la
configuración ‘11111’.
2.2.- SUBRUTINAS
La programación de subrutinas es muy sencilla en el micro-controlador 16F84, ya que
dispone de una pila hardware. La estructura de una subrutina es la siguiente:
Subrutina1

;Inicializa los bits de salida
;Selecciona la página 1
;Valor para configurar los puertos (todos como salida)
;Fija RB<0:7> como salidas

instrucción

;primer instrucción de la subrutina, que se identifica


return

;mediante la etiqueta
;código de la subrutina
;fin de la subrutina

Para llamar a una subrutina se utilizará la instrucción call de la siguiente forma:
call Subrutina1
El paso de parámetros a la subrutina se realizará mediante variables, accesibles tanto por
el programa principal como por la subrutina.
Param1

equ

Sub1


Inicio

Param1,W

0x1C
….
movf

return

movlw 0xA2
movwf Param1
call Sub1


Programación de PICs

4

2.3- MULTIPLICACIÓN DE NÚMEROS DE 8 BITS
El repertorio de instrucciones del micro-controlador 16F84 carece de Instrucciones de
multiplicación. Implementar una subrutina que multiplique dos números de 8 bits
utilizando el algoritmode sumas parciales.
Inicialmente copiamos NumB en DL, para no modificar el operando original NumB. El
algoritmo va realizando sumas parciales de NumA en un acumulador [DH]. En lugar de
hacer desplazamientos hacia la izquierda (como multiplicamos nosotros), la parte menos
significativa la va desplazando e introduciéndola en la variable DL. Estos
desplazamiento se hacen utilizando el bit de Carry del registro de STATUS. El resultado
de la multiplicación queda de la siguiente forma: el Byte más significativo en DH, y el
menos significativo en DL.
Borrar DH
Copiar NumB en DL
for (i=0; i<8; i++)
if (DL[0]== 1)
else

Desplazar DH hacia la derecha inyectando Carry;
Desplazar DL hacia la derecha inyectando bit desplazado por la derecha del DH en el paso previo;
endfor
Instrucción
clrf f
btfsc f,b
rrf f,d
addwf f,d
decfsz f,d

Borra el contenido de f
Comprueba el bit b de f y salta una instrucción si es cero
Rota f a la derecha usando el bit de acarreo del registro STATUS
Suma el contenido de W y f
Decrementa 1 y salta una instrucción si es cero.

DH = DH + A;
borrar Carry;

Descripción

Ejercicio 1: Diseñar un programa que multiplique dos números de 4 bits leídos desde el
puerto A y muestre el resultado en el puerto B. De los cinco bits del puerto A, el más
significativo indicará qué número se está introduciendo, y los otros cuatro bits indicarán
el valor del número (debéis limpiar la parte alta, que se puede hacer con una AND con
0x0F).

 PORTA(4)=0=>PORTA(0..3)NumA
 PORTA(4)=1=>PORTA(0..3)NumB.

Configura puertos
Inicio

If PORTA(4)==0 PORTA(0..3)->NumA
else
PORTA(0..3)->NumB
Call MultiplicaA_B
DL->PORTB
goto Inicio

;DL(8b)=A(4b)*B(4b)

Programación de PICs

5

3. EL TEMPORIZADOR TMR0
El micro-controlador PIC 16F84 dispone de un temporizador (TMR0), que está
constituido por un contador ascendente de 8 bits conectado al reloj interno del
procesador o a un reloj externo (mediante el bit 4 del puerto A). Además es posible
aplicar a la señal de reloj del contador un divisor de frecuencias.
Para controlar el contador disponemos de los siguientes registros:

 Registro de Opciones (OPTION_REG): Los bits de este registro que afectan el

funcionamiento del temporizador TMR0 son:
 T0CS: 1, si los pulsos de reloj d
  • Links de descarga
http://lwp-l.com/pdf15819

Comentarios de: Introducción al PIC16F84 (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad