Con este programa aprenderemos a escribir datos en la memoria EEPRON y respectivamente leerlos Los datos que se escriben en esta memoria estn en la direccin 0. Al comienzo del programa definimos tipo de dispositivo y etiquetas de registros que sern usados en el programa. Colocamos en el vector 0 una instruccin de salto al comienzo del programa Con ORG 5 saltamos el vector de interrupcin, situado en la posicin 4, comenzando el programa en la posicin 5. El programa comienza con un bucle de funcin. Si RA4 esta en 0 se realizara una operacin de lectura y si esta en la posicin 1 se har la operacin de lectura. Si la operacin elegida en de escritura se colocara en la posicin 0 de la memoria EEPRON los datos presentes en la puerta A, previamente una mascara para eliminar los bit de mayor peso. El valor se obtendr con los interruptores de la puerta A. Para ello configuramos la puerta A como entradas y llamamos a la rutina DATO, que coge el dato de la puerta A, y la rutina ESCRIBEE_EEPROM que lo escribe en la memoria EEPROM. La rutina de escritura coloca el dato ledo en la direccin 0. Luego del proceso de escritura se colocado que se nos indique el fin de la escritura poniendo en alto todas las salidas de la puerta B, seguidamente se entra en un bucle infinito esperando que Reset para poder leer lo escrito o volver a escribir. Si se ha elegido la funcin de lectura es llamada la rutina de LEE_EEPROM en la direccin 0 de la memoria. Una ves ledo el dato de coloca el valor en la puerta B y se entra en un bucle infinito para esperar Reset y poder leer o escribir nuevamente.
R9
10k
R10
10k
R11
10k
R12 R13
10k 10k
D1 D2 LED-RED D3 LED-GREEN U2
OSC1/CLKIN OSC2/CLKOUT MCLR RA0 RA1 RA2 RA3 RA4/T 0CKI RB0/INT RB1 RB2 RB3 RB4 RB5 RB6 RB7 PIC16F84A 17 18 1 2 3 6 7 8 9 10 11 12 13
SW6
SW7
1 ESCRITURA 0 LECTURA
SW2
SW-SPST
; Zona de etiquetas STATUS PORTA PORTB RP0 INTCON EQU EQU EQU EQU EQU 0X03 0X05 0X06 0X05 0X0B 88h 89h 08h 09h 5 6 2 1 0 ; Registro de estado ;Puerta A ;Puerta B
EECON1 EQU EECON2 EQU EEDATA EQU EEADR EQU RP0 EEIE WREN WR RD EQU EQU EQU EQU EQU
; Registros de propsito general ADRL DATO EQU EQU 0X0D 0X0E ; Registro de propsito general ; Registro de propsito general ; Vector de Reset ; Saltamos el vector interrupcin.
0 INICIO 5
; Comienzo del programa INICIO: bsf movlw movwf clrf bcf STATUS, RP0 ; Paso al BANCO 01 b'00011111' PORTA PORTB ;Declarando Salidas PORTB STATUS, RP0 ;Paso al BANCO 00 PORTA,4 ESCRITURA LECTURA ; 1 escritura ;0 lectura
ESCRITURA LEE_PUERTA_A bcf STATUS, RP0 movlw b'00000000' movwf EEADR movf PORTA, W movwf EEDATA ESCRIBEE_EEPROM bcf STATUS,RP0 bsf bsf movlw movwf movlw movwf bsf STATUS,RP0 EECON1,WREN h'55' EECON2 h'AA' EECON2 EECON1,WR
;SE va escribir en la dileccin ; 00000000 de la MEMORIA EEPROM ; LEENDO TODA LA PUERTA A ;REGISTRO DE DATOS A ESCRIBIR ; Banco 0 ; iniciamos la secuencia de escritura ; Banco 1 ;NEGANDO LAS INTERUPCIONES
; ordenamos la escritura ;Si regresa a cero a ACAVANDO LA ESCRITURA ;TERMINO EL PRECESO ; Banco 1
movlw b'11111111' ; indica la terminacin de escritura movwf PORTB goto FIN ;___________________________________________________________________________ LECTURA movlw movwf call movf movwf goto LEE_EEPROM bcf b'00000000' ADRL LEE_EEPROM DATO, W PORTB FIN ;direccin PARA SER LEIDA ;Se va leer la direccin 00000000 ;llamada a rutina de lectura ;trae el dato ledo ;muestra lo ledo en PORTB
STATUS,RP0
; Banco 0 ;direccin para ser leda ; iniciamos la secuencia de escritura ; Banco 1 ; Banco 0 ; aqu se encuentra el dato ledo
movFW ADRL movwf EEADR bsf STATUS,RP0 bsf EECON1,RD bcf STATUS,RP0 MOVFW EEDATA movwf DATO RETURN FIN: