Você está na página 1de 51

Programación del

microcontrolador en
un lenguaje de alto
nivel.
ALUMNOS:
SANDRA GÓMEZ JIMÉNEZ
LIZET PÉREZ SANTIAGO
JOSÉ ARMANDO CRUZ VILLA
JONATAN JIMÉNEZ GUTIÉRREZ
Introducción a la programación en
lenguaje
de valto nivel en

microcontroladores.
 Como el proceso de escribir un código ejecutable era
considerablemente arduo, en consecuencia fue creado el primer
lenguaje de programación denominado ensamblador (ASM).
Siguiendo la sintaxis básica del ensamblador, era más fácil escribir y
comprender el código. Las instrucciones en ensamblador consisten
en las abreviaturas con significado y a cada instrucción
corresponde una localidad de memoria. Un programa
denominado ensamblador compila (traduce) las instrucciones del
lenguaje ensamblador a código máquina (código binario).
Ventajas de lenguajes de
programación de alto nivel
 A pesar de todos los lados buenos, el lenguaje ensamblador tiene
algunas desventajas:
 Incluso una sola operación en el programa escrito en ensamblador
consiste en muchas instrucciones, haciéndolo muy largo y difícil de
manejar.
 Cada tipo de microcontrolador tiene su propio conjunto de
instrucciones que un programador tiene que conocer para escribir
un programa
 Un programador tiene que conocer el hardware del
microcontrolador para escribir un programa
Estructura del programa
 1 La Unidad Aritmética Lógica (ALU), que ejecuta todas las
operaciones solicitadas.
 2 Una serie de registros, donde se almacenan temporalmente los
datos. De aquí, la ALU extrae las instrucciones sobre las operaciones
específicas a realizar y sobre el segmento de la memoria RAM donde
vaciará sus resultados una vez ejecutadas las instrucciones.
 3 Una serie de bloques de control (direcciones, datos, memoria), para
comunicarse con el exterior. Estos bloques controlan el flujo de
información y el orden de ejecución del programa.
 4 El circuito de reloj o Timer, sincroniza perfectamente la ejecución de
todas las operaciones señaladas en los tres puntos anteriores.
 El microprocesador determina si una afirmación es cierta o falsa
mediante las reglas del álgebra de Boole. En la actualidad este
componente electrónico está compuesto por millones de transistores,
integrados en una misma placa de silicio.
Puertos de Entrada/Salida
Con el propósito de sincronizar el funcionamiento de los puertos de E/S
con la organización interna del microcontrolador de 8 bits, ellos se
agrupan, de manera similar a los registros, en cinco puertos denotados
con A, B, C, D y E. Todos ellos tienen las siguientes características en
común:
 Por las razones prácticas, muchos pines de E/S son multifuncionales.
Si un pin re aliza una de estas funciones, puede ser utilizado como
pin de E/S de propósito general.
 Cada puerto tiene su propio registro de control de flujo, o sea el
registro TRIS correspondiente: TRISA, TRISB, TRISC etc. lo que
determina el comportamiento de bits del puerto, pero no
determina su contenido.
 Al poner a cero un bit del registro TRIS (pin=0), el pin
correspondiente del puerto se configurará como una salida. De
manera similar, al poner a uno un bit del registro TRIS (bit=1), el pin
correspondiente del puerto se configurará como una entrada. Esta
regla es fácil de recordar: 0 = Entrada 1 = Salida.
Interrupciones
Interrumpen la ejecución de un programa y pasan a la rutina de servicio del evento que provoca
la interrupción.El vector de interrupción se encuentra en la dirección 04H de la memoria de
programa.Al terminar la rutina de servicio (RETFIE) se retoma el programa en el ‘punto de ruptura’.
Fuentes de interrupción:
 • Pin INT, cambio en los terminales del puerto B (RB7:RB4).
 • Overflow en los temporizadores.
 • Cambio en el comparador.
 • Fin de escritura en la memoria EEPROM de datos.
 • Relacionadas con el Puerto Paralelo Esclavo, con la USART, con el fin de conversión A/D y en
general con los módulos periféricos con que puede contar una MCU.
Gestión de interrupciones mediante registros:
 • INTCON: registro general de control y estado.
En función de los periféricos disponibles por una MCU:
 •PIE1, PIE2 (Peripheal Interrupt Enable) habilitan las interrupciones de cada periférico.
 • PIR1 y PIR2 (Peripheal Interrupt Flag Registers) identifican el periférico que interrumpe.
Adquisición de datos de interfaz
externa
 El siguiente apartado describe el proceso mediante el cual se
convierten los dos valores analógicos provenientes de la interfaz del
usuario (entradas del controlador difuso) en sus equivalentes
números digitales. El voltaje de referencia es el voltaje de la fuente
VDD (5V). Dichos valores se encuentran en el pin AN0 Y AN1 del
microcontrolador. Los valores de salida se entregan en los registros:
VALOR_PRIMER_POT y VALOR_SEGUNDO_POT.
La secuencia de la rutina es la
siguiente:
 1. El programa recibe una interrupción de cambio. En la ISR cambia el canal de
adquisición del convertidor A/D al primer canal (AN0). Como se mencionó,
tiene 72 que esperar un tiempo de adquisición. Para ello se programa el Timer0
con el tiempo de adquisición mínimo cuyos cálculos se muestran al final de este
apartado (fórmula 4). Regresa al programa principal.
 2. Recibe la interrupción del Timer0 que indica que ya terminó el tiempo de
adquisición. En la ISR activa la conversión y regresa al programa principal.
 3. Recibe la interrupción de que la conversión esta lista. En la ISR lee el valor de
la primera conversión y lo guarda en el registro VALOR_PRIMER_POT. Seguido a
esto, cambia el canal de adquisición al segundo canal (AN1) y configura
nuevamente el Timer0 para dar el tiempo necesario de adquisición. Regresa al
programa principal.
 4. Se repiten los pasos 2 y 3, salvo que el resultado es guardado en el registro
 VALOR_SEGUNDO_POT
Adquisición de datos externos
Programación de la inferencia

 La subrutina de la inferencia se hace en base a comparaciones, lo


que equivale a ver que reglas se están cumpliendo. La inferencia
del controlador de altura es más simple que la de fuerza, dado que
sólo hay cinco reglas y sólo dependen de un antecedente (un
espacio de 76 entrada) se tienen únicamente cinco
comparaciones directas posibles. Para el caso de la segunda
inferencia se tienen más comparaciones y éstas se encuentran
anidadas debido a que son reglas compuestas (dependen de más
de un antecedente) por lo cual se sigue el siguiente procedimiento.
 1. Cuando las reglas formadas tienen dos condiciones, se juzga la
primera de ellas (correspondiente a un espacio de entrada) y se toma
el valor de membresía que corresponde al cluster de este espacio,
como el que se hereda al cluster de salida correspondiente.
 2. Se compara cual de las segundas condiciones (correspondiente al
otro espacio de entrada) dependientes de la primera se cumple.
 3. Se juzga si la membresía obtenida en el paso 2 es menor a la del
paso 1 mediante una subrutina. Es decir, después de esta subrutina el
valor heredado al cluster de salida en esta regla es el mínimo.
 4. Para cumplir con que el valor final debe ser el máximo de estos
mínimos, se lleva a cabo una subrutina que juzga si este valor de
membresía es mayor que cualquier otro del mismo cluster hasta el
momento. De ser así este valor se deja como el mayor actual; así se
asegura que el valor con el que terminará el cluster siempre será el
mayor.
Convertidor análogo/digital (A/D)
 El convertidor A/D es un módulo que permite la conversión de una
señal analógica de entrada, al número digital de 8 bits equivalente.
Cuenta con 8 entradas analógicas o canales, que son seleccionadas
por software. La salida de un capacitor de muestreo y retención es la
entrada al convertidor, que obtiene el resultado por aproximaciones
sucesivas. El voltaje de referencia se selecciona por software entre un
valor externo (pin VREF) y el voltaje de alimentación (VDD). Realmente
la resolución del convertidor es de 10 bits, pero el resultado se muestra
en un registro de 8 bits, por lo que tiene que elegirse si se justifica a la
derecha o a la izquierda. Es importante permitir que el capacitor de
muestreo y retención se cargue, para que la conversión resulte en el
valor que está en el pin y no en uno 68 erróneo, para ello hay que
dejar transcurrir un pequeño tiempo de carga. Para empezar la
conversión se activa por software; al terminar ésta, el módulo produce
una interrupción.
Arquitectura interna
 Puerto de entrada/salida típico:
Puerto A:
 • Tiene 6 bits.
 • RA4 Tiene entrada Trigger Schmitt y salida drenador abierto.
 • El resto admiten niveles de entrada TTL y salida CMOS.
Diagrama de bloques para RA3:RA0 y RA5.
 Pin RA4:
 Ejemplo de inicialización del puerto A

Puerto B:
• Puerto de 8 bits bidireccionales
Diagrama de bloques
para RB3:RB0.
Configuración y programación del
PIC
 Existen muchos tipos de conversores, pero resulta interesante
destacar tres elementos primordiales que pueden ser muy
importantes a la hora de definir con cual trabajar:
 Error o precisión con respecto a un calculo teórico o constante de
proporcionalidad.
 Frecuencia máxima de trabajo y de la señal de entrada (en caso
de trabajar con señal no-continua).
 Resolución (del registro en bits que representa la tensión).
 Introduciendonós al PIC16f877, la idea es tratar de explicar como
utilizar el modulo conversor que este contiene.
 Este PIC al trabajar con la característica de conversor A/D permite
representar un valor de tensión contenido en un rango predefinido,
a través de una palabra de 10 bits. Esto brinda una gran resolución
lo que permite tener una precisión aceptable.
 Si las tensiones de referencia son Vref+ y Vref-, tensiones continuas
situadas en un rango permisible del PIC (ver datasheet) entonces la
resolucion es de:
Resolucion = (Vref+ - Vref- )/1024
Suponiendo que ya tienen una idea de cuales son las direcciones de
un PIC16f877 y la arquitectura de este microcontrolador, les comento
como trabajar sencillamente para configurar el A/D.
¿En que elementos se constituye el
módulo de conversión A/D del
PIC?
 Un registro de resultado de la conversión que consiste en dos bytes:
Un byte alto o ADRESH (Bank0 0x1E)
Un byte bajo o ADRESL (Bank1 0x9E)
 -Dos registros de control y configuración del modulo A/D:
Registro ADCON0 (Bank0 0x1F)
Registro ADCON1 (Bank1 0x9F)

 -Dos niveles de tensión de referencia que pueden configurarse entre los bits:
RA2, RA3
RA2, VSS
RA3, VSS
VDD, VSS
¿Cómo configuro y utilizo el
conversor en el PIC?
 Necesitamos configurar el puerto que recibirá la llamada tensión
de referencia, la velocidad de "lectura de los valores de tensión, las
lineas que estarán pudiendo recibir niveles de tensión a leer y otros
elementos más.
 El registro ADCON0 que se ubica en el primer banco (necesitamos
acceder a este banco antes de configurarlo), más precisamente
en la dirección 1F está compuesto de los siguientes bits:
 El bit menos significativo ADON deberá estar en 1 para activar el
modulo.
 El bit de control GO/DONE estará en 1 cada vez que el modulador esté
trabajando: este bit lo podemos utilizar como flag para encender un
led o evitar que se produzca una interrupción durante el proceso.
 Como podemos trabajar leyendo niveles de tensión desde cualquiera
de los canales del puerto A del PIC entonces los bits CHS2, CHS1 y CHS0
permiten escoger el puerto que el conversor "leerá". Por ej:
CH2,CH1,CH0= 101 utiliza el puerto RA5 para leer niveles de tensión.
 Por otra parte, el registro ADCON1 situado en el banco 0 más
precisamente en la dirección 9F, se encarga más que todo de la
configuración de las tensiones de referencia y la velocidad de
actualización. Así:
 Como los bits del registro del conversor son 10, los 2 bits del byte
alto pueden ser justificados a la izquierda o a la derecha. El
hardware completa con 0's los demás 6 bits. El bit ADFM permite la
justificación: si es 1 se justifica a la derecha, si es 0 lo hace a la
izquierda.

 Los bits PCFG3, PCFG2, PCFG1 y PCFG0 permiten configurar las


lineas de entrada al conversor y las tensiones de referencia. Las
líneas pueden ser analógicas o digitales. Si son analógicas pueden
recibir niveles de tensión que estén situados entre los dos valores de
referencia. Si son digitales serán puertos comunes del PIC (no
participan del módulo A/D).
Existen 16 combinaciones para configurar las
lineas,las cuales pueden mostrarse en la
siguiente tabla:
 Por ej : Si los bits PCFG3, PCFG2, PCFG1 y PCFG0 se configuran
como 011x todos los puertos son digitales, pero si se configuran
como 1110, el bit RA0 será la linea de entrada al conversor y las
lineas de referencia (Vref+ y Vref-) serán respectivamente las
tensiones VDD y VSS.
 Los bits ADCS2, ADCS1 y ADCS0 (repartidos entre los dos registros)
permiten definir la frecuencia con la que el modulo trabajará. La
tabla muestra algunas de las posibilidades:

 Donde Fosc es la frecuencia del oscilador externo con el que está


trabajando el microcontrolador.
 De esta manera tenemos las primeras herramientas para usar un
poderoso modulo que contiene nuestro micro.
APLICACIONES EN EL CONTROL DE
SEÑALES ANALÓGICAS
 La mayoría de las señales de audio modernas se almacenan de forma
digital (por ejemplo, MP3s y CDs) y para poder ser escuchadas a través
de altavoces deben ser convertidas en analógicas. Lectores de CD,
reproductores digitales de la música, y tarjetas de sonido de los PC
montan por ello un dispositivo de este tipo de forma interna.

 El uso de un DAC independiente (en este número de CEC analizamos


uno de ellos), también se puede encontrar como un chasis separado
en sistemas de alta fidelidad. Estos DAC separados toman la salida
digital de un lector de CD (o del transporte dedicado) y convierten la
señal para enviársela al amplificador. Algunos de ellos pueden
conectarse a ordenadores personales usando un interfaz del USB. De
hecho, el análisis de Josep Armengol sobre el DAC Moon 300D nos
explica cómo hacerlo.
ESPECIFICACIONES DE UN DAC

 Existe una amplia variedad de DAC como circuitos integrados o


bien como paquetes encapsulados. Hay que conocer las
especificaciones más importantes de los fabricantes a fin de
evaluar un DAC en una determinada aplicación.
 - Resolución: La resolución porcentual de un DAC depende única y
exclusivamente del número de bits. Por esta razón, en las fichas
técnicas se detalla de esta manera. Un DAC de 10 bits tiene una
resolución más sensible (mayor exactitud) que uno de 8 bits. Este
dato es extrapolable a las especificaciones de lectores de CD o
equipos integrados.
 - Precisión: Los fabricantes de DAC tienen varias maneras de
establecer la precisión o exactitud. A las dos más comunes se las llama
Error de Escala Completa y Error de Linealidad (o en ocasiones,
directamente linealidad), que normalmente se expresan como un
porcentaje de la salida de escala completa del convertidor (%FS).

 El error de escala completa es la máxima desviación de la salida del


DAC de su valor estimado (teórico).

 El error de linealidad es la desviación máxima en el tamaño de etapa


del teórico. Algunos de los DAC menos económicos tienen errores de
escala completa y de linealidad en el intervalo 0.01% - 0.1%.
 - Tiempo de respuesta: La velocidad de operación de un DAC se
explica como tiempo de respuesta, que es el periodo que se
requiere para que la salida pase de cero a escala completa
cuando la entrada binaria cambia de todos los ceros a todos los
unos.
 - Voltaje de balance: En teoría, la salida de un DAC será cero
voltios cuando en la entrada binaria son todo ceros. En la práctica,
habrá un voltaje de salida pequeño producido por el error de
balance del amplificador del DAC. Este desplazamiento es
comúnmente 0.05% FS.
Los DAC se utilizan siempre que la salida de un circuito digital tiene que
ofrecer un voltaje o corriente analógicos para impulsar o activar un
dispositivo analógico. Algunas de las aplicaciones más comunes se
describen a continuación:
 - Control: La salida digital de una computadora puede convertirse en
una señal de control analógica para ajustar la velocidad de un motor
o para controlar casi cualquier variable física.
 - Análisis automático: Los ordenadores personales pueden ser
programados para generar las señales analógicas (a través de un
DAC) que se necesitan para analizar circuitos analógicos. La respuesta
de salida analógica del circuito de prueba normalmente se convertirá
en valor digital por un ADC.
 - Control de amplitud digital: Un DAC multiplicativo se puede utilizar
para ajustar digitalmente la amplitud de una señal analógica.
 - Convertidores A/D: Varios tipos de convertidores A/D utilizan unos
DAC que son parte de sus circuitos.
Temporizador contador PIC

 Un temporizador contador PIC es un registro que aumenta su valor


en una unidad con cada 4 ciclos de reloj al cual se encuentre
funcionando el microcontrolador PIC, si por ejemplo la frecuencia
del oscilador es de 4MHz, entonces el ciclo de trabajo del
microcontrolador PIC será de 1us, por lo que el temporizador
contador PIC aumentará su valor de uno en uno en cada
microsegundo; por ejemplo cuando el temporizador aumenta su
valor en 10 unidades habrán transcurrido 10us.
Generador de señales
 Un generador de señales es una
herramienta muy eficaz si se utiliza
correctamente, la función especifica de
un generador es crear un tipo de onda
especifica como pueden ser: ondas
senoidales, triangulares, cuadradas y
diente de sierra. Lo que caracteriza al
generador es que se pueden configurar
cada señal para que la frecuencia de las
mismas varíen desde menos de un hertz
hasta varios kilo hertz.
 Otro pro de los Generadores de Señales
es que se pueden utilizar diferentes salidas
del generador para producir señal es
distintas, por ejemplo si se necesita de
una onda cuadrada para determinar la
linealidad de un sistema de audio, esto se
puede realizar y aparte se puede usar
una salida diferente para otro tipo de
señal para probar otra parte del sistema.
Temporizador

 El Timer0 es un dispositivo puede funcionar conceptualmente de


dos formas: como contador de pulsos externos o como
temporizador para calcular intervalos de tiempo.
 En el caso que dicha señal provenga del reloj interno de
instrucciones (Fint), el Timer0 se utiliza para generar interrupciones
periódicas a través de una cuenta programada.
 Ya que conocemos la frecuencia de funcionamiento y en base a
un valor cargado en el contador del timer (lo veremos mas
adelante) podemos temporizar eventos.
 En el caso que dicha señal sea de una fuente externa al
microcontrolador (Fext), es especialmente útil para contar el
número de pulsos que dicha señal genera en el tiempo ya que
cada pulso de dicha señal incrementa el TMR0.
 Usando el timer como temporizador, podemos contar –por
ejemplo- periodos de 1 ms, acumulándolos en un registro auxiliar.
Cada vez que ocurra un pulso del electrocardiograma, podemos
consultar el registro auxiliar y ver cuantos incrementos han sucedido
desde el último 2 pulso y sabiendo que el temporizador cuenta
periodos de 1ms, calcular el tiempo transcurrido. Una vez conocido
el tiempo, iniciamos la cuenta de los incrementos desde 0 para el
siguiente pulso.
decodificador de
pulsos de cuadratura (QEP) y PWM.
 En la actualidad, los fabricantes de motores de corriente directa ya
integran circuitos que generan señales electrónicas mediante las
cuales es posible calcular tanto la velocidad como el sentido de giro
del eje del motor.

 Los conocidos como 'encoders cuadratura', funcionan mediante el


principio del efecto Hall y generan 2 señales de onda cuadrada con
un defasamiento de 90°. Es por ésto que se conocen como encoders
en 'cuadratura', ya que ocupan un cuadrante del círculo de 360°.

 Estas 2 señales son leídas por un sistema microcontrolador, el cual


puede calcular tanto la velocidad en revoluciones por minuto (RPM), la
posición del eje y el sentido de giro.
 Los sensores de efecto Hall son transductores que generan un
voltaje de salida en respuesta a la presencia de un campo
magnético variable. Las aplicaciones típicas son en sensores de
proximidad, medición de corriente y medición de velocidad en
motores de corriente directa.

 Para aplicaciones de cálculo de velocidad y posición, los sensores


son colocados con una separación de 90°, con respecto al círculo
completo de giro del eje del motor. Un imán de ferrita induce en
los sensores las señales A y B mostradas (ver figura 1). Ambas
señales están defasadas 90°, debido a la posición de los sensores
con respecto al circulo de giro.
Lectura y escritura en la memoria
interna.
 EEPROM PIC en la memoria interna EEPROM del microcontrolador
PIC se pueden guardar datos que no se quiere que se borren en
caso se corte la alimentación del PIC, en esta sección se
comentará para el caso de la memoria EEPROM PIC para el
PIC16F877A, lo que aquí se comente es muy similar en caso de
utilizar otro microcontrolador PIC, siempre tener a mano la hoja de
datos del PIC utilizado, en la memoria EEPROM PIC del PIC16F877A
se pueden almacenar hasta 256 bytes, esto es 256 datos de 8 bits,
la capacidad de la memoria EEPROM PIC puede variar de un PIC a
otro.

 Para la escritura y la lectura de datos en la EEPROM PIC se tienen


que seguir una serie de pasos, en el orden que viene indicado en la
hoja de datos del PIC.
EEPROM PIC REGISTROS

 Los registros utilizados para el manejo de la EEPROM PIC del


PIC16F877A son el registro EECON1, el registro EECON2, el registro
EEDATA, el registro EEDATH, el registro EEADR y el registro EEADRH, en
el caso de utilizar las interrupciones por finalización de escritura de
la EEPROM PIC también se utilizarán los registros PIE2 y PIR2.

 El registro EECON1 este es el registro de control de la memoria


EEPROM PIC
 El bit3 WRERR este bit se pondrá automáticamente a 1 si ocurre algún
reset mientras se esta escribiendo en la EEPROM PIC, al ocurrir el reset el
dato no se escribirá correctamente, por lo que este bit indicará un error
de escritura.

 El bit2 WREN al poner a 1 este bit se habilita la escritura en la EEPROM


PIC, al ponerlo a 0 la escritura en la EEPROM estará inhabilitada.

 El registro EECON2 este registro no es accesible, es un registro auxiliar


para la escritura en la EEPROM PIC.

 Los registros EEDATA y EEDATH juntos hacen un solo registro donde se


cargará el dato que se quiere escribir en la EEPROM PIC, será el registro
desde el programa colocará el dato que se quiera leer desde la
EEPROM PIC.

 Los registros EEADR y EEADRH juntos hacen un solo registro donde se


cargará la dirección de la EEPROM PIC desde donde se quiere leer el
dato, o donde se quiere escribir el dato.
EEPROM PIC Pasos a seguir en su
programación en el XC8
Se comenta lo que se hará para escribir o leer en la EEPROM PIC, los
pasos a seguir son los indicados en la hoja de datos del PIC16F877A.
Escritura en la EEPROM PIC para la secuencia a seguir sl escribir un byte en
la EEPROM PIC con el XC8 se seguirá lo que indica la hoja de datos:
1.Comprobar si hay alguna escritura en curso, esto se puede hacer
leyendo el bit WR del registro EECON1, si está a 1 es porque hay una
escritura en curso. Si hay alguna escritura en curso se tendrá que esperar
que esta termine.
2.En el registro EEADR cargar la dirección de la EEPROM PIC donde se
quiera escribir, para el PIC16F877A estas direcciones están entre 0 y 256.
3.En el registro EEDATA se carga el dato que se quiere escribir en la
EEPROM PIC.
4.El bit7 EEPGD del registro EECON1 se pone a 0 para que programar en la
EEPROM PIC.
 El bit2 WREN del registro EECON1 se pone a 1 para habilitar la
escritura en la EEPROM PIC.
 Deshabilitar las interrupciones poniendo el bit7 GIE del registro
INTCON a 0.
 Cargar el registro EECON2 con 0x55.
 Cargar el registro EECON2 con 0xaa.
 El bit7 WR del registro EECON1 se pone a 1 para que inicie la
escritura en la EEPROM PIC.
 Habilitar las interrupciones poniendo el bit7 GIE del registro INTCON
a 1.
 El bit2 WREN del registro EECON1 se pone a 0 para deshabilitar el
uso de la EEPROM PIC.
Lectura de la EEPROM PIC la secuencia a
seguir para leer un byte desde la EEPROM PIC
según indica la hoja de datos es la siguiente:
 En el registro EEADR cargar la dirección de la EEPROM PIC donde se
quiera escribir, para el PIC16F877A estas direcciones están entre 0 y
256.
 El bit7 EEPGD del registro EECON1 se pone a 0 para que programar
en la EEPROM PIC.
 El bit7 RD del registro EECON1 se pone a 1 para que inicie la lectura
en la EEPROM PIC.
 Leer el dato de la dirección indicada, este dato se puede leer
desde el registro EEDATA.
EEPROM PIC EN EL XC8
 Se crearán dos funciones para ser utilizadas en la escritura u la
lectura de la EEPROM PIC, las funciones están realizadas
siguiendo los pasos indicados por la hoja de datos.
 Escritura en la EEPROM PIC, para la escritura se utilizará una
función a la que se llamará escribir_eeprom(dirección,dato),
se le puede llamar como se desee, se le darán dos parámetros, el
primero será la dirección de la EEPROM PIC donde se quiera
escribir el dato, y el segundo el dato que se quiera escribir en la
dirección indicada, la función realizada en el XC8 es la siguiente:
 Lectura de la EEPROM PIC, para la lectura se utilizará una función a
la que se llamará leer_eeprom(dirección), se le puede llamar como
se desee, se le dará un parámetro que será la dirección de la
EEPROM PIC de donde se quiera leer el dato, la función realizada
en el XC8 es la siguiente:
EEPROM PIC EN EL XC8 EJEMPLO

 En el ejemplo a realizar se escribirá en la memoria EEPROM PIC del


microcontrolador PIC16F877A, desde la dirección de memoria
EEPROM 0 hasta la dirección 255 las mismas posiciones de memoria
que tengan, luego se leerán estos valores de las posiciones de
memoria, estos valores serán vistos en forma binaria en unos leds
conectados al puerto D.
 El circuito utilizado es el siguiente:
El programa realizado en el XC8 para la escritura y lectura de la memoria
interna EEPROM PIC es el siguiente:
 Finalmente después de grabar el programa, la EEPROM interna del
PIC se encontrará en blanco, por lo que no se mostrará el mensaje
inicial que informa que se encontraron datos. Mientras el led
conectado en RA4 parpadea, oprimiremos el botón conectado en
RA0 para iniciar la secuencia de grabación de EEPROM. El
programa mostrará lo que esta grabando a través del puerto serie.
Al reiniciar el PIC o retirarle la alimentación, debemos ver el
mensaje al arrancar de que se han encontrado datos en la
memoria EEPROM.

Você também pode gostar