Define CONF_WORD = 0x2f10
Define CONF_WORD_2 = 0x3ffc
Define CLOCK_FREQUENCY = 8
'******************* Probado solo en Simulacion ***************************************************
'********************************** PIC Entrenadora BASIC (PicEBasic)******************************
'NOMBRE: 16F88_Pic_EBasic_Ejemplo_27.1
'MICRO: PIC16f88A
'FECHA/AUTOR: 08/07 - By COS
'Version: 1.0
'Estudio del modulo ADC
'*****************************************************************************************************
'-------------------------------------Puertos del LCD---------------------------------------------
Define LCD_BITS = 4 'indicamos que el bus de datos del lcd sera de 4bit
Define LCD_DREG = PORTA 'el bus de datos sera el puerto A
Define LCD_DBIT = 0 'el bus de datos seran los 4 bit menos significativos del puerto A
Define LCD_RSREG = PORTB 'el bit de control RS sera del puerto B
Define LCD_RSBIT = 7 'se usara el RB7 como RS
Define LCD_EREG = PORTB 'el bit de control E sera del puerto B
Define LCD_EBIT = 6 'se usara el RB6 como E
Define LCD_COMMANDUS = 500 '2000 Tiempo de espera despues de ejecutar un comand del lcd en uSeg.
Define LCD_DATAUS = 50 'Tiempo de espera despues de enviar un dato al LCD en uSeg.
Define LCD_INITMS = 5 '(50) 'Tiempo de espera despues de inicializar el Display, solo se ejecuta una vez en mSeg., trucado para simulacion
'------------------------------------------------------------------------------------------------------
Define SIMULATION_WAITMS_VALUE = 1 'suprime los tiempos de espera Waitms, solo activar esta linea en simulacion
'******************************************************************************************************
'_____Variables
Dim adc_4 As Byte 'contendra el valor de la entrada del ADC
'_____ASIGNACION DE I/O y valores de inicio de las salidas, configracion ADC
ANSEL = %00010000 'los pin I/O digitales y RA4 analogico
CMCON = 0x07 'comparador a off
OSCCON = 0x7e 'set intrc To 8mhz, se usara reloj interno a 8Mhz
TRISA = 0x00 'Puerto A como salidas
TRISB = 0x00 'puerto B como salidas
TRISA.4 = 1 'como entrada (RA4, adc)
TRISA.6 = 1 'como entrada (RA6, tecla S1)
TRISA.5 = 1 'como entrada (RA5, tecla S2)
PORTB.3 = 1 'luz lcd a on (RB3)
PORTA.7 = 1 'led amarillo a off
PORTB.0 = 1 'led verde a off
'Configura modo de trabajo del adc
ADCON0 = %01100001 'Fosc/16 a 8Mhz (ADCON1.ADCS2=1) =2uSeg (minimo 1.5uSeg), channel RA4, Power on ADC (ADON)
ADCON1 = %01000000 'V. Ref. (AVdd/AVss) y seleccion escala division clock/2 ADCON1.ADCS2=1 y 8Bit ADC (ADFM)
PIR1.ADIF = 0 'Borrado bit de salto adc
PIE1.ADIE = 1 'Activa interrupciones adc
'Activa las interrupciones
INTCON.PEIE = 1 'bit de habilitacion de interrupciones de perifericos
Enable 'INTCON.GIE habilita todas las interrupciones globales
'_____ Inicio
Lcdinit 'inicializa el lcd sin cursor
WaitMs 500 'espera para que inicialice el lcd
main: 'Rutina principal ------------------------------------------
ADCON0.GO = 1 'A/D conversion en progreso
WaitMs 100 'hace una pausa
Lcdcmdout LcdLine1Home 'cursor del lcd alprincipio de linea 1
Lcdout "ADC ", #adc_4, " " 'muestra los valores en el lcd
Goto main
End
'Rutina de interrupciones
On Interrupt 'Comienzan las rutinas de las interrupciones, desactiva las interrupciones
Save System 'Guarda valores intermedios del sistema
adc_4 = ADRESH 'valor mas significativo de la lectura del ADC (8 bit)
PIR1.ADIF = 0 'Borrado bit de salto adc
Resume 'retorna despues de la interrupcion, activa las interrupciones
'FIN