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