Codificador decimal
binario
- Justificación
- Descripción del
problema - Organización de la
memoria del pic16c(f)84 - Memoria de
programa - Memoria de datos del
pic16c(f)84 - Descripción de la
solución - Diagrama de flujo del
algoritmo - Conclusiones
Los microcontroladores son circuitos
integrados que poseen todas las características de un computador
completo. Puede ser programado para que cumpla una tarea
determinada a muy bajo costo. Un ejemplo
de ellos es el famoso PIC16F84 de la familia
PIC16F8X.
El PIC16F8X es un grupo en la
familia
PIC16CXX de bajo costo, alto rendimiento, CMOS de 8 bit entre
otras cosas. Este grupo de PIC consta de los siguientes
dispositivos: PIC16F83, PIC16F84, PIC16CR83 y el PIC16CR84. Todos
los microcontroladores emplean una avanzada arquitectura
RISC.
Las extensas áreas de aplicación de estos
microcontroladores exigen un gigantesco trabajo de diseño
y fabricación. Aprender a manejar y aplicar
microcontroladores sólo se consigue desarrollando
tácticamente diseños reales, tal como es nuestro
caso un codificador decimal binario.
Este laboratorio
nos permite desarrollar la programación del pic 16f84 bajo lenguaje
assembler con sus respectivas instrucciones, lo cual es de gran
importancia en el mundo de la programación debido a su
aplicabilidad en distintos campos y sobre todo en el
industrial.
OBJETIVOS
Aplicar los conceptos fundamentales aprendidos en la
asignatura microprocesadores.
Diseñar el algoritmo que
permita convertir un número decimal a binario utilizando
el pic 16f84.
Comprender el funcionamiento de los simuladores
SIMUPIC y MPLAB.
Con el desarrollo de
la tecnología, se introduce en la
programación la aplicación de los pic, los cuales
funcionan como un computador, que se programa para que
cumpla una función
específica.
El microcontrolador PIC16C(F)84, Es un microcontrolador
de 18 pines, de 8 bits con tecnología CMOS. La
razón porque se ha elegido este tipo de microcontrolador
se debe al tipo de memoria de
programa que posee. En el caso del PIC 16F84 se trata de una
memoria EEPROM de 1K palabras de 14 bits cada una. El PIC 16F84
tiene la misma capacidad de memoria de instrucciones, pero de
tipo flash. Ambos
disponen de 64 bytes de EEPROM como memoria de datos auxiliar y
opcional.
La memoria
EEPROM y la Flash son eléctricamente gravables, lo que
permite escribir y borrar el programa bajo prueba manteniendo el
microcontrolador en el mismo zócalo y usando el mismo
dispositivo para grabar y borrar. Esta característica
supone una gran ventaja con la mayoría de los
microcontroladores, que tienen como memoria de programa
reescribible una tipo EPROM. Estas se graban
eléctricamente, pero para borrarlas hay que someterlas
durante cierto tiempo a rayos
ultravioleta, lo que implica sacar del zócalo el circuito
integrado y colocarlo en un borrador de EPROM. El hecho de
utilizar una memoria flash es porque tiene mayores posibilidades
de aumentar su capacidad con relación a la EEPROM.
También por su mayor velocidad y
menor consumo. La
memoria EEPROM es capaz de soportar 1.000.000 de ciclos de
escritura /
borrado, frente a los 1.000 de la Flash.
HOJA CARACTERÍSTICA DE LOS
PIC16C(F)84:
MEMORIA DE PROGRAMA: 1K x 14, EEPROM (16C84) Y Flash
(16F84)
MEMORIA DE DATOS RAM: 36 Byte
(16C84) y 68 Byte (16F84)
MEMORIA DE DATOS EEPROM: 64 Byte para ambos modelos
PILA (STACK): De 8 niveles
INTERRUPCIONES: 4 tipos diferentes
SET DE INSTRUCCIONES: 35
ENCAPSULADO: 18 PINES
FRECUENCIA DE TRABAJO: 10 Mhz máxima
TEMPORIZADORES: TMR0 y WDT
LINEAS DE E/S DIGITALES: 13 (5 Puerto A y 8 Puerto B)
CORRIENTE MÁXIMA ABSORBIDA: 80 mA Puerto A y 150 mA Puerto
B
CORRIENTE MÁXIMA SUMINISTRADA: 50 mA Puerto A y 100 mA
Puerto B
CORRIENTE MÁXIMA ABSORBIDA POR LINEA: 25 mA
CORRIENTE MÁXIMA SUMINISTRADA POR LINEA: 20 mA
VOLTAJE DE ALIMENTACIÓN (Vdd): De 2 a 6V DC
VOLTAJE DE GRABACIÓN (Vpp): De 12 a 14V DC
DIAGRAMA DE PINES DEL PIC16C(F)84:
Vdd: Pin por el cual se aplica la tensión
positiva de Alimentación
Vss: Pin utilizado para la conexión de tierra
OSC1 / CLKIN: Pin por el cual se aplica la entrada del circuito
oscilador externo que proporciona la frecuencia de trabajo al
Microcontrolador
OSC2 / CLKOUT: Pin auxiliar o de salida del circuito
oscilador.
MCLR# / Vpp: Este pin se activa con un cero (0) lógico,
cada vez que se necesite reinicializar o Resetear al
Microcontrolador.
Este Pin también se usa durante la grabación de la
memoria de programa para introducir por ella la tensión,
Vpp (voltaje pico a pico de grabación), que esta
comprendida entre 12 y 14V DC.
RA0 – RA4: Son los 5 Pines de E/S digitales correspondientes al
Puerto A.
El Pin RA4 es de colector abierto lo que significa que cuando es
utilizado como salida hay que colocarle una resistencia a Vcc
(5V DC).
El pin 3 además de ser el bit mas significativo
del Puerto A, Multiplexa otra función expresada por TOCKI.
En este caso sirve para recibir una frecuencia externa para
alimentar al temporizador interno TMR0.
RB0 – RB7: Estos 8 pines corresponden a los 8 bits de E/S
digitales del Puerto B.
El Bit RB0 Multiplexa otra función, que es la de servir
como entrada a una petición externa de
interrupción, por eso se le denomina RB0/INT.
ORGANIZACIÓN DE LA MEMORIA DEL
PIC16C(F)84
En este Microcontrolador hay dos bloques de Memorias,
estos son la memoria de Programa y la Memoria de Datos. Cada
bloque tiene su propio bus, por lo cual el acceso
para cada bloque puede ocurrir durante el mismo ciclo del
oscilador. La Memoria de datos (RAM) se divide en registros de
propósito general (GPR) y registros de Funciones
especiales (SFR). Los registros SFR tienen como operación
principal controlar el núcleo del microcontrolador y
módulos periféricos y los de Propósito
General (GPR) son registros que el programador declara a su
conveniencia para utilizarlos en alguna parte de un programa.
La Memoria de Programa es de 1K x 14 bits de tipo EEPROM para el
PIC16C84 y de tipo Flash para el PIC16F84. Además el
PIC16C84 tiene 36 Bytes disponibles en la memoria de datos RAM en
la zona de los registros de propósito general y el
PIC16F84 tiene 68 Bytes.
Los microcontroladores PIC16C84 y PIC16F84, admiten un
mapa de memoria de programa capaz de contener 8.192 instrucciones
de 14 bits cada una. Este mapa se divide en páginas de
2.048 posiciones. Para direccionar 8 K posiciones se necesitan 13
bits, que es la longitud del Contador de Programa de estos dos
microcontroladores (PC). Sin embargo, el PIC16C84 sólo
tiene implementadas 1K posiciones, por lo que ignora los 3 bits
de más peso del PC. Esto es debido a: 1K=1024 Byte= 2 .
Por lo tanto solo se tienen 10 líneas de dirección para accesar a una palabra de
memoria.
La dirección 0000H esta reservada para el vector
de Reset y la 0004H para el vector de interrupción.
Además posee una pila de 8 niveles que permiten el
anidamiento de subrutinas.
Es importante destacar que cada Microcontrolador posee una
memoria de Programa especifica.
MEMORIA DE DATOS
DEL PIC16C(F)84
Esta memoria dispone de dos zonas diferentes las cuales
son:
Area de RAM estática o
SRAM: Es aquella donde residen los registros de funciones
especificas (SFR) y los registros de propósito general
(GPR). El primero tiene 24 posiciones de 1 byte cada una, aunque
dos de ellas no son operativas, y el segundo 36 en el caso del
PIC16C84 y 68 en el PIC16F84.
Area EEPROM de 64 bytes: Esta se utiliza opcionalmente cuando se
necesitan almacenar datos que deben mantenerse cuando la
alimentación se desconecte.
La Memoria SRAM se divide en dos bancos (banco 0 y banco
1) en el caso de los microcontroladores PIC16C(F)84 de 128 bytes
cada uno. En el PIC16C84 sólo se hallan implementadas
físicamente las 48 primeras posiciones de cada banco, de
las cuales las 12 primeras están reservadas para los
registros SFR, que son los encargados del control del
procesador y sus
recursos. Algunos
de dichos registros se hallan repetidos en la misma
dirección de los dos bancos, para simplificar su acceso
(INDF, ESTADO(STATUS), FSR, PCLATH E INTCON). Los 36
registros restantes en el caso del PIC16C84 y los 68 en el
PIC16F84 de cada banco están destinados a los registros
GPR y en general solo son operativos los 36 o 68 del banco 0
porque los del banco 1 se mapean sobre el banco 0, es decir,
cuando se apunta a un registro general
del banco 1, se accede al mismo del banco 0.
Conociendo ya un poco el pic 16f84 se plantea el
siguiente interrogante.
¿ Cómo convertir un número decimal
a binario utilizando el pic 16f84?
Para convertir un número de decimal a binario
empleando el pic 16f84 se siguieron los siguientes
pasos:
Se realizó el diagrama de flujo
que visualizara la solución del problema.
Se realizó el algoritmo y se codificó en
lenguaje assembler utilizando las instrucciones para el pic
16f84:
Movf f,d: mueve el registro f al registro de
trabajo
Movwf f,d: mueve el contenido del registro de
trabajo al registro destino.
Call k: llamar subrutina.
Btfsc f,b: probar bit b del registro f, saltar si
es cero.
Bsf f,b: activar bit b de f
Bcf f,b: limpiar bit b de f.
Movlw k: carga el registro de trabajo w con el
literal k.
Return: retorna al programa principal
después de ejecutarse una rutina.
Goto k: salta a la dirección k.
Se simuló el programa el simulador SIMUPIC, para
verificar posibles errores.
Se hizo el quemado del pic 16f84 a través del
simulador MPLAB.
Se comprobó el funcionamiento del pic 16f84 en el
protoboart.
Se diseñó el circuito y se monto en la
plaqueta, utilizando los siguientes elementos:
pic 16f84.
cristal de 4000 hz.
Resistencias.
bateria de 9 voltios.
convertidor de corriente.
Leds.
Cables.
Switches.
DIAGRAMA DE FLUJO
DEL ALGORITMO
Para ver el gráfico seleccione la
opción "Descargar" del menú
superior
CÓDIGO FUENTE
LIST p=16F84 ;designación del PIC
RADIX HEX ;se selecciona el sistema
hexadecimal
;se declaran las etiquetas
PORTA EQU 0X05 ;porta queda identificada con la
dirección 05
PORTB EQU 0X06 ;portb queda identificada con la
dirección 06
STATUS EQU 0X03 ;status queda identificado con la
dirección 03
W EQU 0 ;W se identifica con el valor
0
;PROGRAMA PRINCIPAL
ORG 0 ;el programa inicia en la dirección
0
goto INICIO ;salta a la dirección 5 para
sobrepasar el vector de interrupción
ORG 5 ;vector de interrupción
INICIO bsf STATUS,5 ;selección
del banco 1
movlw b'11111111' ;se carga w
movwf 0x06 ;se configura portb como entrada
movlw b'00000' ;se carga w
movwf 0x05 ;se configura porta como salida
bcf STATUS,5 ;selección del banco 0
clrf PORTA ;se inicializa con 0 porta
clrf PORTB ;se inicializa con 0 portb
NÚMEROS
movf PORTB,0 ;se lee portb y se guarda en w
btfsc PORTB,0 ;salta una instrucción si rb0
contiene un 0
call UNO ;llamado de la rutina UNO
btfsc PORTB,1 ;salta una instrucción si rb1
contiene un 0
call DOS ;llamado de la rutina DOS
btfsc PORTB,2 ;salta una instrucción si rb2
contiene un 0
call TRES ;llamado de la rutina TRES
btfsc PORTB,3 ;salta una instrucción si rb3
contiene un 0
call CUATRO ;llamado de la rutina CUATRO
btfsc PORTB,4 ;salta una instrucción si rb4
contiene un 0
call CINCO ;llamado de la rutina CINCO
btfsc PORTB,5 ;salta una instrucción si rb5
contiene un 0
call SEIS ;llamado de la rutina SEIS
btfsc PORTB,6 ;salta una instrucción si rb6
contiene un 0
call SIETE ;llamado de la rutina SIETE
goto NÚMEROS ;salto incondicional
;RUTINAS PARA VISUALIZAR
UNO movlw b'00001' ;se carga w con el binario
movwf PORTA ;se visualiza en porta el valor
binario
return ;se retorna a donde se hizo el llamado
DOS movlw b'00010' ;se carga w con binario
movwf PORTA ;se visualiza en porta el valor
binario
return ;se retorna a donde se hizo el llamado
TRES movlw b'00011' ;se carga w con binario
movwf PORTA ;se visualiza en porta el valor
binario
return ;se retorna a donde se hizo el llamado
CUATRO movlw b'00100' ;se carga w con binario
movwf PORTA ;se visualiza en porta el valor
binario
return ;se retorna a donde se hizo el llamado
CINCO movlw b'00101' ;se carga w con binario
movwf PORTA ;se visualiza en porta el valor
binario
return ;se retorna a donde se hizo el llamado
SEIS movlw b'00110' ;se carga w con binario
movwf PORTA ;se visualiza en porta el valor
binario
return ;se retorna a donde se hizo el llamado
SIETE movlw b'00111' ;se carga w con binario
movwf PORTA ;se visualiza en porta el valor
binario
return ;se retorna a donde se hizo el llamado
END ;fin del programa
Para
ver el gráfico seleccione la opción
"Descargar"
CONCLUSIONES
La educación es un
proceso
interminable, puesto que cada día se aprende cosas nuevas
o se actualizan las ya conocidas o aprendidas, es decir, que
la
educación es un proceso permanente, por eso debemos
estar in con las tecnologías del momento y preparado para
recibir las nuevas.
Por lo expresado anteriormente la elaboración de
este proyecto nos
sirve para comprender un poco más la teoría
de los microcontroladores y su aplicación ; de ahí
la importancia del mismo, pues a través de él se
puede apreciar lo interesante que es la programación en
nuestra vida cotidiana.
CARLOS GARCÍA SEÑA
JOSÉ CANCHILA MEDINA
JORGE MORENO MERCADO