Define CONF_WORD = 0x2f10
Define CONF_WORD_2 = 0x3ffc
''********************************** PIC Entrenadora BASIC (PicEBasic)**********
'NOMBRE: 16F88_Pic_EBasic_Ejemplo_17
'MICRO: PIC16F88
'FECHA/AUTOR: 06/07 - By COS
'Practicando Read/Write (EEPROM interna del micro)
'Se envia por el puerto serie las cinco primeras posiciones de memoria EEPROM
'las tres primeras como control para saber si es la primera vez que se ejecuta el programa
'y la 4 y 5 son dos contadores que indican el numero de veces que se ejecuto el programa
'ya sea por reset o por puesta en marcha de la alimentacion
'la posicion cinco indica las veces que la posicion 4 desbordo (255).
'puerto serie a 1200 baudios, por emulacion.
'-----------------------------Declaracion y Asignacion de valores---------------
Dim n As Byte 'variable auxiliar
Dim dato_eeprom(5) As Byte 'variables por los que pasaran los valores de la eeprom
'-----------------------------Configuracion del Clock, Puertos I/O--------------
AllDigital 'todos los puertos como I/O
CMCON = 0x07 'comparador a off
osccon = 0x7e 'set intrc To 8mhz, se usara reloj interno a 8Mhz
TRISA = 0xff 'Puerto A como Entradas
TRISB = 0xff 'puerto B como Entradas
'TRISA.4 = 1 'como entrada (RA4, adc)
'TRISA.6 = 1 'como entrada (RA6, tecla S1)
'TRISA.5 = 1 'como entrada (RA5, tecla S2)
TRISB.3 = 0 'como salida, iluminacion lcd
TRISA.7 = 0 'como salida, led amarillo
TRISB.0 = 0 'como salida, led verde
TRISB.4 = 0 'como salida, control servo
PORTB.3 = 1 'luz lcd a on (RB3)
PORTA.7 = 1 'led amarillo a off (RA7), negado
PORTB.0 = 1 'led verde a off (RB0), negado
'************* Rutina del programa ***************************************
Gosub actualiza_eeprom 'actualiza la eeprom, salto con retorno
RA7 = 0 'salida led amarillo
RB0 = 0 'salida led verde
WaitMs 5000 'espera 5 Seg.
main: 'comienza la rutina principal
RA7 = 1 'salida led amarillo
RB0 = 1 'salida led verde
WaitMs 500 'espera 0,5 Seg.
RB0 = 0 'salida led verde
WaitMs 500 'espera 0,5 Seg.
RA7 = 0 'salida led amarillo
WaitMs 500 'espera 0,5 Seg.
Goto main 'impide que termine la rutina main
End
actualiza_eeprom: 'comprueba si la eeprom fue escrita, si no la inicializa y comienza el contaje
For n = 0 To 4 'bucle para recorrer las primeras posiciones de memoria
Read n, dato_eeprom(n) 'se asigna de la direccion "n" el dato a la variable dato_eeprom(n)
Next n 'acota el bucle For
If dato_eeprom(0) <> 0 Or dato_eeprom(1) <> 1 Or dato_eeprom(2) <> 2 Then 'comprueba si la eeprom
'fue inicializada y si no fue asi la inicializa
For n = 0 To 2 '____Escribe los tres primeros caracteres de control
Write n, n 'escribe en la eeprom
Next n '_____________
Write 3, 1 'inicializa el primer contador
Write 4, 0 'inicializa el segundo contador que nos indica las veces que reboso el primer contador
Else 'si lo anterior no es cierto entonces esto otro
dato_eeprom(3) = dato_eeprom(3) + 1 'incrementa el primer contador
Write 3, dato_eeprom(3) 'escribe el nuevo valor para el primer contador
If dato_eeprom(3) = 255 Then 'si reboso el primer contador
dato_eeprom(4) = dato_eeprom(4) + 1 'se incrementa el segundo contador
Write 4, dato_eeprom(4) 'se escribe el valor del segundo contador
Endif
Endif
Serout PORTB.5, 1200, #dato_eeprom(0), #dato_eeprom(1), #dato_eeprom(2) 'envia las tres
'primeras posiciones al puerto serie
Serout PORTB.5, 1200, " ", #dato_eeprom(3), "-", #dato_eeprom(4), CrLf 'envia las 2 ultimas
'posiciones al puerto serie
Return
End