PDF de programación - Programación en XC8

Imágen de pdf Programación en XC8

Programación en XC8gráfica de visualizaciones

Actualizado el 21 de Marzo del 2018 (Publicado el 27 de Septiembre del 2017)
7.950 visualizaciones desde el 27 de Septiembre del 2017
2,9 MB
31 paginas
Creado hace 9a (08/11/2014)
MODULO II

Memoria EEPROM interna del PIC.
La EEPROM es una matriz de memoria permanente, separada de la RAM de datos y de la FLASH,
se utiliza para almacenar variables que se desean conservar cuando el controlador se desconecte o
quede sin energía. No está mapeada directamente dentro de los registros o en la memoria de
programa, sino que se trata indirectamente a través de registros especiales.
La EEPROM se puede leer y escribir durante la ejecución del programa.

Cuatro registros se utilizan para leer y para escribir los datos en la EEPROM.

• EECON1
• EECON2
• EEDATA
• EEADR

En la EEPROM se permite la lectura y escritura de bytes. El registro EEDATA es el encargado de
manejar los datos ya sea tanto cuando se leer o se escribe y el registro EEADR lleva a cabo el
direccionamiento de la localización en la EEPROM.
La EEPROM es muy resistente a los ciclos de escritura/borrado. Cuando se escribe un byte
automáticamente se sobreescribe el byte anterior. El tiempo de escritura se controla con un
temporizador integrado en el chip, variará con la tensión y la temperatura así como de chip a chip.
Como se comentó el acceso a los datos se controla con dos registros: EECON1 y EECON2.
Éstos son iguales que los del acceso de control a la memoria del programa (FLASH) y se utilizan de
una manera similar para los datos en la EEPROM.

El registro EECON1 es el registro de control para el acceso a memoria de datos y de programa.
Controlando el bit, EEPGD, se determina si el acceso es a la memoria de programa o a la memoria
de datos EEPROM. Cuando está borrado, las operaciones se hacen a la memoria EERPOM. Cuando
está activado, se dirige a la memoria FLASH.

Controlando el bit, CFGS se determina si el acceso es a los registros de configuración o a la
memoria del FLASH/EEPROM. Cuando está activado, las operaciones siguientes tienen acceso a
los registros de configuración. Cuando CFGS está borrado, el bit EEPGD selecciona la FLASH o
la memoria EEPROM.

El bit WREN, cuando está activado, permitirá una operación de escritura.
Por defecto este bit esta en cero.

El bit WRERR se activa por hardware y el bit WREN se borra cuando finaliza el timer interno y se
completa la operación de escritura.

Durante la operación normal, el WRERR se lee como ‘1’. Esto puede indicar que ha
finalizado una operación de escritura prematuramente cerca de un reset o una
operación de escritura finaliza incorrectamente!!!!!.

El bit de control WR inicia operaciones de escritura. Este bit no se puede borrar, sólo está activar
por software y se borra por hardware al terminar la operación de escritura.

Programación en XC8



Pagina 55 de 174

Se activa el flag de la interrupción EEIF (PIR2<4>) cuando la escritura se completa.
Debe desactivarse por software!!!.
Controlando los bits, RD y WR, comienzan las operaciones lectura y escritura,
respectivamente. Estos bits se activa por software y se desactiva por hardware al
terminar la operación.

El bit RD no se puede activar al tener acceso a la memoria de programa (EEPGD=1).
El registro EECON2 no es un registro físico. Se utiliza exclusivamente en las secuencias de escribir
y borrar en la memoria. La lectura EECON2 leerá todo ceros.

Un ejemplo de manejo de la EEPROM interna.
/* *****************************************************************************
** Nombre : main.c
** Descripcion : Uso de la memoria EEPROM interna del PIC
** Autor : Firtec - www.firtec.com.ar
** IDE : Microchip MPLAB-X
** Compilador : XC8
** XTAL : 20MHZ
** ****************************************************************************/
#include <xc.h>
#define _XTAL_FREQ 20000000UL
#pragma config OSC=HS,PWRT=ON,MCLRE=ON,LVP=OFF,WDT=OFF
#include <plib/eep.h>
#include <stdio.h>
#include <stdlib.h>

#include "C:\ELECTRÓNICA\EJERCICIOS_XC8\lcd_xc8.c"
#include "C:\ELECTRONICA\EJERCICIOS_XC8\lcd_xc8.h"
unsigned int direccion; // 1024 Vectores disponibles
unsigned char dato;
char str_int[16];
__EEPROM_DATA(1,2,3,4,5,6,7,8); // Macro para colocar valores por defecto si
void main(void){
lcd_init();
lcd_gotoxy(4,1);
lcd_putrs("EEPROM PIC\n");
direccion = 12;
dato = 12; // El dato a guardar 25

// fuera necesario. (No es este el caso)



// La dirección sera cero (0)

Programación en XC8



Pagina 56 de 174

eeprom_write (direccion, dato); // Escribe el dato en la dirección indicada
Busy_eep (); // Espera que termine de escribir
dato=0;
sprintf(str_int,"Dato memoria:%03d ",eeprom_read(direccion));
lcd_puts(str_int); // Lee la dirección indicada
while(1); // Bucle infinito
}
XC8 tiene dos funciones para el manejo de la EEPROM interna.

eeprom_write (unsigned char, unsigned int) Escribe un byte en una posición de memoria.
eeprom_read(unsigned int) Lee un byte desde una posición de memoria.




Trabajo practico

Se pide que realice un programa para el control de acceso de una puerta que
cumpla con las siguientes consignas:









La apertura de la puerta se hará efectiva cuando se ingrese una clave
numérica de cuatro cifras que será comparada con un número almacenado en
EEPROM.
Los números de la clave serán generados con un potenciómetro colocado en
un canal A/D que irán desfilando en una pantalla de uno en uno mientras el
usuario mueve el potenciómetro, los números mostrados solo pueden ir de 1
a 9.
Cada vez que un número que forma la clave de cuatro cifras se hace visible
en la pantalla se lo valida con el botón de usuario que oficiará como botón de
“Enter”.
Para indicar que la acción ha sido válida utilizar un LED.

Programación en XC8



Pagina 57 de 174

Funcionamiento de la USART
En la actualidad y ante la ausencia de puertos
RS232 en las computadoras, acostumbramos a
trabajar con puentes USB-RS232 que solucionan
muchos o todos los problemas a la hora de
vincularnos con computadoras a través del viejo
protocolo 232.
Es interesante comentar que debido a la
desaparición de estos puertos en arquitecturas de computadoras uno tiende a pensar que el puerto
RS-232 está extinguido, nada mas alejado de la realidad ya que arquitecturas en 16 y 32 bits no solo
incorporan uno de estos puestos sino varios.

El controlador no resuelve la capa física, es decir que para
implementar las comunicaciones deberemos utilizar ya sea el
clásico MAX232 o los modernos puentes USB-232.
Esto es particularmente interesante porque con esta
tecnología podemos reutilizar los viejos programas en
puertos COM que por cuestiones de licencias o complejidad
son mas simples de implementar que las aplicaciones USB
nativas.

El ejemplo que vamos a ver recibe los datos enviados desde el teclado de una PC y los re-transmite
como un eco por el mismo puerto serial.
/* *****************************************************************************
** Nombre : main.c
** Descripcion : Uso de la memoria EEPROM interna del PIC
** Autor : Firtec - www.firtec.com.ar
** IDE : Microchip MPLAB-X
** Compilador : XC8
** XTAL : 20MHZ
** ****************************************************************************/
#include <xc.h>
#include <stdio.h>
#include <stdlib.h>
#include <plib/usart.h>
#pragma config OSC=HS,PWRT=ON,MCLRE=OFF,LVP=OFF,WDT=OFF
#define _XTAL_FREQ 20000000
#include "C:\ELECTRÓNICA\EJERCICIOS_XC8\USART.X\lcd_xc8.c"
#include "C:\ELECTRONICA\EJERCICIOS_XC8\USART .X\lcd_xc8.h"
volatile char Data, Kbhit=0;

Se discrimina el origen de la interrupción

void interrupt high_isr (void)
{
if (PIR1bits.RCIF==1){ // Discrimina la interrupción
Data=getcUSART();
Kbhit=1;
// Indica que se ha recibido un dato
PIR1bits.RCIF=0; // Borra bandera de interrupción
}
}

// Se lee dato recibido

Programación en XC8



Pagina 58 de 174

Función Principal

void main(void){
unsigned char base =1;
// Inicializa el USART y lo configura a 8N1, 9600 baud
OpenUSART (USART_TX_INT_OFF &
USART_RX_INT_ON &
USART_ASYNCH_MODE &
USART_EIGHT_BIT &
USART_CONT_RX &
USART_BRGH_HIGH,129);

// TX sin interrupción
// RX con interrupciónes
// Modo asincrónico
// Modo alta velocidad
// Recepción continua
// 9600 baudios a 20Mhz

Para configurar los baudios podemos usar la herramienta Pic Baud Rate

// Borra la marca de ISR

RCONbits.IPEN = 0; // Deshabilitamos prioridades
INTCONbits.PEIE=1; // Habilitamos la interrupcion de perifericos
lcd_init();
//Delay1KTCYx(25);
lcd_putrs("USART PIC18F4620"); // Cartel inicial
INTCONbits.GIE=1; //Habilita interrupción global
while(1){
if(Kbhit !=0){ // Indica que hay nueos datos recibidos
Kbhit = 0;
if(Data!=0x00){ // El dato es distinto de 0?
if(Data==0x08 & base > 0){ // Backspace & base son verdaderos?
base--;
lcd_gotoxy(base,2);
lcd_putc(" ");
}
else{
lcd_gotoxy(base,2);
lcd_putc(Data);// Muestra el dato en pantalla
putcUSART (Data);
base++;
}
}
}
}
}

Programación en XC8



Pagina 59 de 174

Para visualizar los datos recibidos vamos a usar la aplicación terminal.exe que se encuentra entre
las herramientas del curso.

Se recibe el mismo dato enviado por la USART.

Programación en XC8



Pagina 60 de 174

Trabajo practico

Se pide que escriba un programa que envíe por el puerto serial RS-232 los datos
obtenidos de un canal analógico donde se ha conectado un potenciómetro.
El resultado deberá ser como el que se observa en la i
  • Links de descarga
http://lwp-l.com/pdf7059

Comentarios de: Programación en XC8 (1)

HUGO IVAN P. S.
2 de Octubre del 2018
estrellaestrellaestrellaestrellaestrella
MUY BUENO, ME SERVIRA PARA APRENDER A PROGRAMAR,
Responder

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