Sei sulla pagina 1di 6

Universidad de Guanajuato DICIS

Microprocesadores

Prctica 5:

Acceso a la memoria EEPROM


Microprocesadores

Universidad de Guanajuato Divisin de Ingenieras Campus Irapuato Salamanca. Alumno: ICE. Gerardo Antonio Garca Cano Profr. Dr. Gustavo Cerda Villafaa gerardoagcfimee@gmail.com 02 Julio 2012

Objetivo: Programar el microcontrolador para cargar un contador y, utilizando la memoria EEPROM este sea capaz de almacenar la cuenta actual, para que al cortar la alimentacin, el conteo sea guardado.

1. INTRODUCCIN Los microcontroladores, debido a las necesidades, y de acuerdo a su arquitectura, poseen bancos de memoria, que aunque de pequea capacidad, son tiles para aplicaciones de mediana y bajas demandas. En esta prctica se programara el PIC para que acceda a la memoria de datos EEPROM. Ya que esta memoria no se borra si se desconecta la alimentacin al microcontrolador, permite guardar datos que no se quieran perder. La memoria EEPROM es una memoria no voltil, permitiendo almacenar datos que no se quieran perder si se corta la alimentacin al microcontrolador. Para el PIC18F4550 el tamao de la memoria EEPROM es de 256 bytes cuyas direcciones son de 00h a FFh. El acceso a esta memoria es indirecto y se lleva a cabo mediante los siguientes registros EEDCON1, EECON2 EEDATA y EEADR. .

Fig. 1. Distribucin de pines del Display de Ctodo Comn.

La tabla 1 muestra la relacin establecida para la asignacin de pines a cada uno de las terminales a, b, c, d, e, f, g. As por ejemplo para mostrar un 2, ser necesario encender los segmentos a, b, g, e, d enviando un 0x6D por PORTB.
Tabla 1. Valores de salida por el Puerto B segn el uso de un display de Ctodo Comn.
DECIMAL 0 1 2 3 4 5 6 7 8 9

PINES PUERTO B Y DISPLAY B7 -0 0 0 0 0 0 0 0 0 0 B6 a 1 0 1 1 0 1 1 1 1 1 B5 b 1 1 1 1 1 0 0 1 1 1 B4 c 1 1 0 1 1 1 1 1 1 1 B3 d 1 0 1 1 0 1 1 0 1 0 B2 e 1 0 1 0 0 0 1 0 1 0 B1 f 1 0 0 0 1 1 1 0 1 1 B0 g 0 0 1 1 1 1 1 1 1 1

HEX PORTB Display 7E 30 6D 79 33 5B 5F 71 7F 73

Manejo de Temporizador y exhibidor de 7 Segmentos Prctica 4

Universidad de Guanajuato DICIS

Microprocesadores

Para ir presentando estos valores en el exhibidor de 7 segmentos conectado al puerto B, se realiza una tabla de conversin con las instrucciones ADDWF PCL, f y RELW valorhex donde valorhex es el mostrado en la ltima columna de la Tabla 1. La instruccin ADDWF PCL, f agrega el contenido del registro W al registro contador del programa, esto har que la siguiente lnea que se lea ser la correspondiente a la suma del valor del registro W y el valor que llevaba el contador. La instruccin RETLW valorhex regresa de la subrutina agregando el valor literal segn la tabla al registro W. Este ltimo ser el que se enve por el puerto B.

2. DESARROLLO Como primer paso, se requiere adaptar el cdigo para el PIC18F4550, en este caso es necesario modificar algunas secuencias de paso de acuerdo a caractersticas muy especificas del microcontrolador. Se tiene que considerar que los registros para manipular/verificar el conteo del Temporizador son TMR0H, TMR0L, al trabajar con 8 bits, TMR0L el registro en cuestin. La seccin de configuracin del codigo completo mostrado en el ANEXO1. Se muestra enseguida:
clrf TRISD ; las lneas de Puerto D salidas setf TRISA ; las lneas de Puerto A entradas movlw b'11000010' ; Se asigna el div de freq ; al Timer0 movwf T0CON ; y la razn se pone a 1:16 movlw b'10100000' ; Habilita la interrupcin ; del Timer0 movwf INTCON

Fig. 2. Esquemtico simulado en ISIS. La figura exhibe un 9 correspondiente al valor 73h, extrado de la tabla de valores en el cdigo ensamblador.

3. EJERCICIOS Ej. 1 Si se quiere utilizar el TMR0 como contador de eventos externos a travs del pin 6 T0CKI (pin 4 del puerto a) con una razn del divisor de frecuencia 1:64, que registros son necesarios y que valor debe cargarse en ellos.

Para el armado y la simulacin, la Fig. 2 muestra el esquemtico realizado y simulado en ISIS. La Fig. 3 muestra el circuito armado en la plantilla protoboard y probado en el laboratorio.

En el caso del PIC18F4550 el registro T0CON es el que permite modificar los parmetros para la configuracin solicitada en este ejercicio.

Fig. 3. Bits del Registro T0CON

De acuerdo a esto, la Fig. 3 muestra los bits del registro T0CON. El bit 5 T0CS permite configurar la fuente del reloj, interna o externa, para este caso, T0CS = 1. Para un divisor de frecuencia de 1:64, deben fijarse los bits 2-0 T0PS2 T0PS0 con el valor 101.

Manejo de Temporizador y exhibidor de 7 Segmentos Prctica 4

Universidad de Guanajuato DICIS

Microprocesadores
ejecucin de la subrutina de interrupcin al momento de que esta ocurriese.

De esta forma el valor que deber enviarse al registro T0CON se muestra en una pequea seccin de cdigo enseguida.
clrf TRISD ; las lneas de Puerto D salidas setf TRISA ; las lneas de Puerto A entradas movlw b'11100101' ; Se asigna el div de freq ; al Timer0 movwf T0CON ; y la razn se pone a 1:16 movlw b'10100000' ; Habilita la interrupcin ; del Timer0 movwf INTCON

4. CONCLUSIONES Y OBSERVACIONES

Ej. 2 Si se quiere utilizar el temporizador TIMER1 (de 16 bits) en lugar del TIMER0 utilizado en esta primera prctica, escriba que registros se deben utilizar y con qu valores se deben cargar. Recuerde que el TIMER0 se configur en esta prctica para que gener una interrupcin cada 256 us x 16 = 4096 us

Muchos eventos que suceden repetidamente requieren de registros y/o conteo de los mismos. Existen variadas aplicaciones en las que el uso de los Temporizadores con lo que cuenta el microcontrolador solucionaran perfectamente el problema. Hblando de manera general, se podran mencionar aplicaciones como: conteo de personas, conteo de productor en produccin, conteo de pasos, medidores de revolucin, etc. De igual forma es posible auxiliarse de estos tambin en los casos que se requiera. BIBLIOGRAFIA

Ej. 3 Traduzca el cdigo de forma que realice las mismas funciones pero escrito en Lenguaje C y compilado en C18.

[1] Angulo Aristegui J. M. , Romero Yesa S. , Angulo Martnez I. , Microcontroladores PIC. Diseo practico de aplicaciones 2 parte, Ed.Mc Graw Hill [2] Hoja de datos del PIC18F4550

Para la codificacin se hizo uso del manual de C18 que est en la pgina oficial de Microchip. El cdigo se encuentra en el Anexo 2. Las mayores complicaciones surgieron al momento de tratar las interrupciones, ya que se requera la combinacin de lenguaje C y lenguaje ensamblador para conectar correctamente la

[3] Hoja de datos del PIC16F88X [4] Manual de programacin C18

Anexo 1. Cdigo para exhibicin del conteo por TMR0L, exhibido en 7 Seg.
; Practica 4 - Control del Temporizador 0 y ; exhibicion en un display de 7 segmentos LIST P = 18f4550 #include <P18f4550.inc> CONFIG CONFIG CONFIG CONFIG CONFIG WDT = OFF MCLRE = ON DEBUG = OFF LVP = OFF FOSC = INTOSC_EC

Manejo de Temporizador y exhibidor de 7 Segmentos Prctica 4

Universidad de Guanajuato DICIS

Microprocesadores

RADIX HEX ; Los valores se representan en hexadecimal AUX1 EQU 0x00 AUX2 EQU 0x01 AUX3 EQU 0x02 ORG 0x00 ; Comando que indica direccin de la siguiente instruccin goto inicio ORG 0x08 goto inter

inicio MOVLW b'01100001' MOVWF OSCCON MOVLW 0x0F MOVWF ADCON1 clrf TRISD movlw 0xFF movwf TRISA movlw b'11000010' movwf T0CON movlw b'10100000' movwf INTCON clrf AUX1 clrf AUX2 clrf TMR0L loop

; ; ; ; ; ;

W => TRISB (las lneas de PB salidas) W <= ff (hex) W => TRISA (las lneas de PA como entradas) Se asigna el div de freq al Timer0 y la razn se pone a 1:16 Habilita la interrupcin del Timer0

; Se limpia el contador AUX1 ; Se limpia el contador AUX2 ; Se limpia el temporizador

movf AUX1,W ; W <- AUX1 call display movwf PORTD goto loop ; ******* TABLA DE CONVERSIN ********* display addwf PCL,F retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw 0x7E 0x30 0x6D 0x79 0x33 0x5B 0x5F 0x71 0x7F 0x73

; ; ; ; ; ; ; ; ; ; ; ;

El PCL se incrementa con el valor de W proporcionando un salto de W lneas Retorna con el cdigo del 0 Retorna con el cdigo del 1 Retorna con el cdigo del 2 Retorna con el cdigo del 3 Retorna con el cdigo del 4 Retorna con el cdigo del 5 Retorna con el cdigo del 6 Retorna con el cdigo del 7 Retorna con el cdigo del 8 Retorna con el cdigo del 9

; ******* RUTINA DE INTERRUPCIN ********* inter movwf AUX3 ; Guarda el valor de W en AUX3 decfsz AUX2,F ; AUX2 va de FFh a 00h goto nocount ; Hasta que no llegue a 0 va a nocount incf AUX1,F ; Se incrementa AUX1 en 1 incf AUX1,F movlw 0x14 ; Se sustrae 14h del registro AUX1 subwf AUX1,W ; y el resultado se pone en W btfsc STATUS,2 ; Se revisa si la operacin anterior dio 0 Manejo de Temporizador y exhibidor de 7 Segmentos Prctica 4

Universidad de Guanajuato DICIS


clrf AUX1 nocount movf AUX3,W bcf INTCON,T0IF retfie END

Microprocesadores

; Se regresa el valor anterior a W ; Se limpia el bit 2 para habilitar ; interrrupcin nuevamente ; Directiva que indica el final del programa

Anexo 2. Cdigo para uso del TIMER0 compilado en C18


// Programa para usar generar un conteo con el Temporizador 0 // y exhibido en un Display de 7 segmentos // MIE Primavera 2012 - Microprocesadores #include<p18f4550.h> #pragma config PWRT = OFF #pragma config BOR = OFF #pragma config MCLRE = OFF #pragma config PBADEN = OFF #pragma config ICPRT = OFF #pragma config LVP = OFF #pragma config WDT = OFF #pragma config DEBUG = OFF #include <delays.h> #include <timers.h> int indice = 0; void low_isr(void); void high_isr(void); /*Seccion para las interrupciones de baja prioridad*/ #pragma code low_vector=0x18 void interrupt_at_low(void) { _asm GOTO low_isr _endasm } #pragma code #pragma interrupt low_isr void low_isr(void) { } /*Seccion para las interrupciones de alta prioridad*/ #pragma code high_vector=0x08 void interrupt_at_high(void) { _asm GOTO high_isr _endasm } #pragma code #pragma interrupt high_isr void high_isr(void) { if(indice>9) indice = 0; Manejo de Temporizador y exhibidor de 7 Segmentos Prctica 4

Universidad de Guanajuato DICIS


switch(indice) { case 0: PORTD case 1: PORTD case 2: PORTD case 3: PORTD case 4: PORTD case 5: PORTD case 6: PORTD case 7: PORTD case 8: PORTD case 9: PORTD } indice++;

Microprocesadores

= = = = = = = = = =

0x7E; 0x30; 0x6D; 0x79; 0x33; 0x5B; 0x5F; 0x71; 0x7F; 0x73;

break; break; break; break; break; break; break; break; break; break;

// // // // // // // // // //

Retorna Retorna Retorna Retorna Retorna Retorna Retorna Retorna Retorna Retorna

con con con con con con con con con con

el el el el el el el el el el

cdigo cdigo cdigo cdigo cdigo cdigo cdigo cdigo cdigo cdigo

del del del del del del del del del del

0 1 2 3 4 5 6 7 8 9

} void main(void) { TRISD = 0; OSCCON = 0b01100001; OpenTimer0 (TIMER_INT_ON & T0_8BIT & T0_SOURCE_INT & T0_EDGE_FALL & T0_PS_1_16); INTCONbits.TMR0IF = 1; INTCONbits.GIE = 1; while(1) { } }

Manejo de Temporizador y exhibidor de 7 Segmentos Prctica 4

Potrebbero piacerti anche