ADC 0808 con PIC

Hola soy nueva en esto, la intención es controlar la temperatura de 6 o mas termocuplas, se que la salida de estas termocuplas es análoga, debo pasarla a salidas digital, para ello tengo el ADC 0808 y debo usar un pic, pero no se cual podría usar, cual me recomiendan?; pues lo que debo hacer es controlar las señales por puerto usb si es posible, de no ser posible usaría el serie he visto varios proyectos donde usan el pic 16f84A y el adc 0804 pero el adc 0804 puede controlar solo 2 entradas análogas y yo necesito 6 o mas entradas, ademas ya tengo el adc 0808 y para la programacion no soy muy agil, gracias por la ayuda
saludos
diana
 
Que tal te recomiendo el 16f877a que tiene 8 canales analógicos y con ello evitaras utlizar el adc.... Tengo un pequeño programa en asm que tiene dos canales y los manda por el puerto serie si gustas te lo paso!!!

Saludos
 
si estaria buenisimo me ayudaria mucho, pero ya tengo el adc en manos y debo adquirir entre 6 y 10 señales analogas, pero adicional a eso me piden la comunicacion con puerto usb
saludos
diana
 
Mira para eso tienes dos opciones yo actualmente manejo estos dos http://www.ingenieriaenserie.com/index.php/entrenador-pyc este es un entrenador de microcontroladores que trae el pic18f4520 con todas sus conexiones listas y tiene 13 entradas analógicas y para la comunicación con la computadora utilizo este: http://www.ingenieriaenserie.com/index.php/pyc-ftdi y con esto no hay problema si gustas con este pic tengo un ejemplo de 8 canales analógicos, las opciones son esas o comprar un cable usb-serial con su max232 logras la comunicación con la computadora.
 
También puedes usar un conversor y un multiplexor analógico de N entradas.
De hecho es lo que suele haber dentro de los microcontroladores, no conozco uno que tenga N conversores, sin embargo circuitos externos de conversión simultanea de 8 entradas a 8 conversores si que conozco.
 
list p=18F4520
#include <p18f4520.inc>
CONFIG OSC = INTIO67
CONFIG BOREN = OFF
; CONFIG BORV = 3
CONFIG WDT = OFF
; CONFIG WDTPS = 1
CONFIG MCLRE = ON
CONFIG LPT1OSC =OFF
CONFIG PBADEN =OFF
CONFIG CCP2MX =PORTC
CONFIG STVREN =OFF
CONFIG LVP = OFF
CONFIG XINST =OFF
CONFIG DEBUG =OFF
CONFIG CP0 = OFF
CONFIG CP1 = OFF
CONFIG CPB = OFF
CONFIG CPD = OFF
CONFIG WRT0 = OFF
CONFIG WRT1 = OFF
CONFIG WRTB = OFF
CONFIG WRTD = OFF
CONFIG EBTR0 = OFF
CONFIG EBTR1 = OFF
CONFIG EBTRB = OFF
;
CBLOCK 0x000
BAUDIOS
AUX1
AUX2
AUX3
DIVISOR
I0
I1
I2
D0
D1
D2
KD
_ERROR
TOTAL_ERROR
MOTOR_DER;1
MOTOR_IZQ;2
FRECUENCIA
NO_SENSORES;PARA SABER NUMERO DE SENSORES
ENDC
;
ORG 0x00
GOTO INICIO
ORG 0x008
GOTO ALTA_PRIORIDAD
ORG 0x018
BAJA_PRIORIDAD
BTFSC PIR1,RCIF
GOTO INTER_COMUNICACION
RETFIE
ALTA_PRIORIDAD
;
INICIO

BSF OSCCON,IRCF2 ;CONFIGURO EL OSCILADOR INTERNO
BSF OSCCON,IRCF1 ;A 8MHZ
BSF OSCCON,IRCF0
BSF OSCTUNE,PLLEN
MOVLW B'00000111'
MOVWF CMCON
;CONFIGURACION PUERTOS
CLRF PORTA
CLRF PORTB
CLRF PORTC
CLRF PORTD
CLRF PORTE
;
SETF TRISA
CLRF TRISB
CLRF TRISC
CLRF TRISD
CLRF TRISE
BSF TRISE,0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;CONFIGURANDO REGISTROS
MOVLW '4'
MOVWF FRECUENCIA
MOVLW .25
MOVWF MOTOR_DER
MOVLW .25
MOVWF MOTOR_IZQ
MOVLW .5
MOVWF KD
MOVLW .51
MOVWF BAUDIOS
CLRF NO_SENSORES
CLRF I0
CLRF I1
CLRF I2
CLRF D0
CLRF D1
CLRF D2
CLRF AUX1
CLRF AUX2
CLRF AUX3
CLRF DIVISOR
CLRF _ERROR
CLRF TOTAL_ERROR
CALL INI_RS232
CALL CONF_FQ
CALL CONF_FULL_SPEED
; CALL PRUEBA_MOTORES
; CALL CONF_BAUD_FAST
; CALL INI_RS232
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
PRINCIPAL
CALL CONVERSION_SENSORES
CALL ENTREGA_ERROR
CALL PRUEBA_MOTORES
GOTO PRINCIPAL
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ENTREGA ERROR
ENTREGA_ERROR
MOVFF D0,AUX1
MOVF D1,W
ADDWF AUX1,1
MOVF D2,0
ADDWF AUX1,1

MOVFF I0,AUX2
MOVF I1,W
ADDWF AUX2,1
MOVF I2,0
ADDWF AUX2,1

MOVF AUX2,0
SUBWF AUX1,0
MOVWF _ERROR
BTFSS STATUS,C; PRENDE SI ES POSITITVO ó = 0
GOTO NEGATIVE
BCF PORTD,0
MOVF _ERROR,0
BTFSS STATUS,Z
GOTO DIFERENTE_CERO
BSF PORTB,7
CLRF TOTAL_ERROR
MOVFF TOTAL_ERROR,PORTC
RETURN
DIFERENTE_CERO
BCF PORTB,7
MOVLW .48
MOVWF MOTOR_IZQ
MOVLW .0
MOVWF MOTOR_DER
CLRF TOTAL_ERROR
MAKE_DIV3
MOVF DIVISOR,W
SUBLW .3
BTFSS STATUS,Z
GOTO MAKE_DIV2
MENOS_TRES
INCF TOTAL_ERROR,1
MOVF DIVISOR,W
SUBWF _ERROR,1
BTFSS STATUS,Z
GOTO MENOS_TRES
MOVFF TOTAL_ERROR,PORTC
RETURN
MAKE_DIV2
MOVF DIVISOR,W
SUBLW .2
BTFSS STATUS,Z
GOTO MAKE_DIV1
MENOS_DOS
INCF TOTAL_ERROR,1
MOVF DIVISOR,W
SUBWF _ERROR,1
BTFSS STATUS,Z
GOTO MENOS_DOS
MOVFF TOTAL_ERROR,PORTC
RETURN
MAKE_DIV1
MOVF DIVISOR,W
SUBLW .1
BTFSS STATUS,Z
RETURN
MENOS_UNO
INCF TOTAL_ERROR,1
MOVF DIVISOR,W
SUBWF _ERROR,1
BTFSS STATUS,Z
GOTO MENOS_UNO
MOVFF TOTAL_ERROR,PORTC
RETURN
NEGATIVE
BCF PORTB,7
MOVLW .48
MOVWF MOTOR_DER
MOVLW .0
MOVWF MOTOR_IZQ
BSF PORTD,0
COMF _ERROR,1
INCF _ERROR,1
MOVFF NO_SENSORES,DIVISOR
CLRF TOTAL_ERROR
MAKE_DIV_3
MOVF DIVISOR,W
SUBLW .3
BTFSS STATUS,Z
GOTO MAKE_DIV_2
MENOS_TRES_1
INCF TOTAL_ERROR,1
MOVF DIVISOR,W
SUBWF _ERROR,1
BTFSS STATUS,Z
GOTO MENOS_TRES_1
MOVFF TOTAL_ERROR,PORTC
RETURN
MAKE_DIV_2
MOVF DIVISOR,W
SUBLW .2
BTFSS STATUS,Z
GOTO MAKE_DIV_1
MENOS_DOS_1
INCF TOTAL_ERROR,1
MOVF DIVISOR,W
SUBWF _ERROR,1
BTFSS STATUS,Z
GOTO MENOS_DOS_1
MOVFF TOTAL_ERROR,PORTC
RETURN
MAKE_DIV_1
MOVF DIVISOR,W
SUBLW .1
BTFSS STATUS,Z
RETURN
MENOS_UNO_1
INCF TOTAL_ERROR,1
MOVF DIVISOR,W
SUBWF _ERROR,1
BTFSS STATUS,Z
GOTO MENOS_UNO_1
MOVFF TOTAL_ERROR,PORTC
RETURN

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; PRUEBA DE MOTORES
PRUEBA_MOTORES
MOVF NO_SENSORES,0
BTFSS STATUS,Z
GOTO CONTINUA_PRUEBA
movlw .50
movwf MOTOR_IZQ
movlw .50
movwf MOTOR_DER
CONTINUA_PRUEBA
MOVLW 0X04;PLACA CERO DE MOTORES
CALL TX_DATO
MOVF MOTOR_IZQ,0 ;B'00110010';50 % BIT 7 IZQ
CALL TX_DATO
MOVF MOTOR_DER,0
CALL TX_DATO
RETURN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; CONVERSION DE SENSORES
CONVERSION_SENSORES
CLRF NO_SENSORES
CALL CONFIGURA_ADC
CALL CONVERTIDOR_AD
MOVLW B'00000101'
MOVWF ADCON0
MOVF ADRESH,W
SUBLW .108
BTFSS STATUS,0
GOTO ALTO_1
CALL BAJO_1
SEGUNDA_CONVERSION
CALL CONVERTIDOR_AD
MOVLW B'00001001'
MOVWF ADCON0
MOVF ADRESH,W
SUBLW .120
BTFSS STATUS,0
GOTO ALTO_2
CALL BAJO_2
TERCERA_CONVERSION
CALL CONVERTIDOR_AD
MOVLW B'00001101'
MOVWF ADCON0
MOVF ADRESH,W
SUBLW .120
BTFSS STATUS,0
GOTO ALTO_3
CALL BAJO_3
CUARTA_CONVERSION
CALL CONVERTIDOR_AD
MOVLW B'00010001'
MOVWF ADCON0
MOVF ADRESH,W
SUBLW .44
BTFSS STATUS,0
GOTO ALTO_4
CALL BAJO_4
QUINTA_CONVERSION
CALL CONVERTIDOR_AD
MOVLW B'00010101'
MOVWF ADCON0
MOVF ADRESH,W
SUBLW .44
BTFSS STATUS,0
GOTO ALTO_5
CALL BAJO_5
SEXTA_CONVERSION
CALL CONVERTIDOR_AD
MOVLW B'00000001'
MOVWF ADCON0
MOVF ADRESH,W
SUBLW .44
BTFSS STATUS,0
GOTO ALTO_6
CALL BAJO_6
RETURN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BAJO_1
BCF PORTD,2
BCF PORTD,3
CLRF I2
RETURN
ALTO_1
BSF PORTD,2
BSF PORTD,3
MOVLW .5
MOVWF I2
INCF NO_SENSORES,1
GOTO SEGUNDA_CONVERSION
BAJO_2
BCF PORTD,4
BCF PORTD,5
CLRF I1
RETURN
ALTO_2
BSF LATD,4
BSF LATD,5
MOVLW .3
MOVWF I1
INCF NO_SENSORES,1
GOTO TERCERA_CONVERSION
BAJO_3
BCF PORTD,6
BCF PORTD,7
CLRF I0
RETURN
ALTO_3
BSF PORTD,6
BSF PORTD,7
MOVLW .1
MOVWF I0
INCF NO_SENSORES,1
GOTO CUARTA_CONVERSION
BAJO_4
BCF PORTB,0
BCF PORTB,1
CLRF D0
RETURN
ALTO_4
BSF PORTB,0
BSF PORTB,1
MOVLW .1
MOVWF D0
INCF NO_SENSORES,1
GOTO QUINTA_CONVERSION
BAJO_5
BCF PORTB,2
BCF PORTB,3
CLRF D1
RETURN
ALTO_5
BSF PORTB,2
BSF PORTB,3
MOVLW .3
MOVWF D1
INCF NO_SENSORES,1
GOTO SEXTA_CONVERSION
BAJO_6
BCF PORTB,4
BCF PORTB,5
CLRF D2
RETURN
ALTO_6
BSF PORTB,4
BSF PORTB,5
MOVLW .5
MOVWF D2
INCF NO_SENSORES,1
RETURN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CONVERTIDOR_AD
BCF PIR1,ADIF ;LIMPIA EL BIT QUE INDICA LA CONVERSION
NOP
BSF ADCON0,GO ;PUESTA EN MARCHA DE LA CONVERSION
ADC_ESPERA
BTFSS PIR1,ADIF ;CHECA SI LA CONVERSION FINALIZA
GOTO ADC_ESPERA ;REGRESA A LA ESPERA
RETURN ;REGRESA AL PROGRAMA PRINCIPAL
CONFIGURA_ADC
MOVLW B'00001001'
MOVWF ADCON1
MOVLW B'00101101'
MOVWF ADCON2
MOVLW B'00000001'
MOVWF ADCON0
BCF PIR1,ADIF
RETURN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CONF_BAUD_FAST
MOVLW 'B'
CALL TX_DATO
MOVLW 'C'
CALL TX_DATO
MOVLW '2'
CALL TX_DATO
CALL FIN_MENSAJE
MOVLW .47
MOVWF BAUDIOS
RETURN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CONF_FQ
MOVLW 'M'
CALL TX_DATO
MOVLW 'O'
CALL TX_DATO
MOVLW 'T'
CALL TX_DATO
MOVLW '0'
CALL TX_DATO
MOVLW 'C'
CALL TX_DATO
MOVLW 'F'
CALL TX_DATO
MOVLW 'Q'
CALL TX_DATO
MOVF FRECUENCIA,W
CALL TX_DATO
CALL FIN_MENSAJE
RETURN

#include <PINO.INC>
END

Y aca la libreria



CBLOCK
TMR0H_AUX
TMR0L_AUX
CONTADOR_RETARDO
AUXILIAR_PyC_H
AUXILIAR_PyC
NUMERO_L_AUX
NUMERO_H_AUX
TEMPORAL1
ENDC

CONF_FULL_SPEED
MOVLW 'F'
CALL TX_DATO
MOVLW 'S'
CALL TX_DATO
CALL FIN_MENSAJE
RETURN
FIN_MENSAJE
MOVLW 0x0D
CALL TX_DATO
MOVLW 0x0A
CALL TX_DATO
RETURN
INI_RS232
;EN ESTA SECCION SE CONFIGURA LA COMUNICACION RS232 PARA EL
;MICRO 4520, SI SE OCUPA OTRO MICROCONTROLADOR ESTA LA PARTE
;QUE SE NECESITA MODIFICAR
MOVLW B'00000101'
MOVWF FSR2H
CLRF FSR2L
;CONFIGURACION DEL TIMER PARA RETARDOS EN ms
MOVLW B'00000000'
MOVWF T0CON
;CONFIGURACION DE LACOMUNICACION SERIE ASINCRONA
BSF TRISC,7
BSF TRISC,6
CLRF SPBRGH
MOVLW .51
MOVWF SPBRG
MOVLW B'00100000' ;BRGH=0
MOVWF TXSTA
MOVLW B'10010000'
MOVWF RCSTA
MOVLW B'00000000'
MOVWF BAUDCON ;VELOCIDAD DEL PUERTO 9600
;CONFIGURACION INTERRUPCION RECEPCION
BSF INTCON,7
BSF INTCON,6
CLRF PIR1
BSF PIE1,5
BCF IPR1,5 ;SE ACTIVA COMO BAJA PRIORIDAD
BSF RCON,IPEN
MOVLW .1
CALL RET_Xms
RETURN
;********************************************************
TX_DATO
MOVWF TXREG
TX_DAT
BTFSS TXSTA,TRMT
GOTO TX_DAT
BCF PIR1,TXIF
RETURN
;*******************************************************
INTER_COMUNICACION
BCF PIR1,RCIF
MOVF RCREG,W
; CALL TX_DATO
MOVWF TEMPORAL1
RETFIE
RX_DATO
BCF PIR1,RCIF
BTFSC RCSTA,FERR
GOTO RX_DATO
MOVF RCREG,0
RETURN
;*******************************************************
RET_X1s
MOVWF CONTADOR_RETARDO
BSF T0CON,T0PS2
BSF T0CON,T0PS1
BCF T0CON,T0PS0
MOVLW 0xF4
MOVWF TMR0H_AUX
MOVLW 0x24
MOVWF TMR0L_AUX
GOTO RETARDOS
RET_X100ms
MOVWF CONTADOR_RETARDO
BCF T0CON,T0PS2
BSF T0CON,T0PS1
BSF T0CON,T0PS0
MOVLW 0xC3
MOVWF TMR0H_AUX
MOVLW 0x50
MOVWF TMR0L_AUX
GOTO RETARDOS
RET_X10ms
MOVWF CONTADOR_RETARDO
BCF T0CON,T0PS2
BCF T0CON,T0PS1
BCF T0CON,T0PS0
MOVLW 0x9C
MOVWF TMR0H_AUX
MOVLW 0x40
MOVWF TMR0L_AUX
GOTO RETARDOS
RET_Xms
MOVWF CONTADOR_RETARDO
BCF T0CON,T0PS2
BCF T0CON,T0PS1
BCF T0CON,T0PS0
MOVLW 0x0F
MOVWF TMR0H_AUX
MOVLW 0xA0
MOVWF TMR0L_AUX
RETARDOS
COMF TMR0H_AUX,W
MOVWF TMR0H
COMF TMR0L_AUX,W
MOVWF TMR0L
BSF T0CON,TMR0ON
CICLO_RETARDO
BTFSS INTCON,TMR0IF
GOTO CICLO_RETARDO
BCF INTCON,TMR0IF
DECFSZ CONTADOR_RETARDO
GOTO RETARDOS
RETURN

y para el 877::::


LIST P=16F877A, F=INHX32
INCLUDE <P16F877A.INC>
__CONFIG _BODEN_OFF & _CP_OFF & _WRT_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC & _DEBUG_OFF & _CPD_OFF & _LVP_OFF

ERRORLEVEL 1;-302 ;Eliminate bank warning

CBLOCK 0X20
ENDC
ORG 0000H ;Dirección inicial del Código de Programa
CALL CONFIGURA_RS232
bsf STATUS,5 ;NOS MOVEMOS AL BANCO 1 PARA LA CONFIGURACION DE LOS PUERTOS
CLRF PORTB
CLRF PORTC
CLRF PORTD
CLRF PORTE
BSF PORTA,0
BSF PORTA,1
BSF PORTA,3
bcf STATUS,5 ;REGRESAMOS AL BANCO 0
CLRF PORTD
GOTO INICIO
CONVERTIDOR_AD
BCF PIR1,ADIF ;LIMPIA EL BIT QUE INDICA LA CONVERSION
NOP
BSF ADCON0,GO ;PUESTA EN MARCHA DE LA CONVERSION
ADC_ESPERA
BTFSS PIR1,ADIF ;CHECA SI LA CONVERSION FINALIZA
GOTO ADC_ESPERA ;REGRESA A LA ESPERA
RETURN ;REGRESA AL PROGRAMA PRINCIPAL

INICIO
BSF STATUS,5
MOVLW B'00000100'
MOVWF ADCON1
BCF STATUS,5
INIC
MOVLW B'00000001'
MOVWF ADCON0
BCF PIR1,ADIF ;LIMPIO LA BANDERA DEL A/D
CLRF PORTB
PRINCIPAL
CALL CONVERTIDOR_AD
MOVF ADRESH,W
MOVWF PORTB
MOVLW 'X'
CALL TX_DATO
CALL Retardo_2ms
MOVF ADRESH,W
CALL TX_DATO
NOP
CALL Retardo_1ms
INI
BCF PIR1,ADIF
MOVLW B'01001001'
MOVWF ADCON0
CLRF PORTD
CONV_2
CALL CONVERTIDOR_AD
MOVF ADRESH,W
MOVWF PORTD
MOVLW 'Y'
CALL TX_DATO
CALL Retardo_2ms
MOVF ADRESH,W
CALL TX_DATO
CALL Retardo_2ms
GOTO INIC



INCLUDE<RS232.INC>
INCLUDE<RETARDOS.INC>

END

Libreria de retardos:



;**************************** Librería "RETARDOS.INC" *********************************
;
; ===================================================================
; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
; E. Palacios, F. Remiro y L. López. www.pic16f84a.com
; Editorial Ra-Ma. www.ra-ma.es
; ===================================================================
;
; Librería con múltiples subrutinas de retardos, desde 4 microsegundos hasta 20 segundos.
; Además se pueden implementar otras subrutinas muy fácilmente.
;
; Se han calculado para un sistema microcontrolador con un PIC trabajando con un cristal
; de cuarzo a 4 MHz. Como cada ciclo máquina son 4 ciclos de reloj, resulta que cada
; ciclo máquina tarda 4 x 1/4MHz = 1 µs.
;
; En los comentarios, "cm" significa "ciclos máquina".
;
; ZONA DE DATOS *********************************************************************

CBLOCK
R_ContA ; Contadores para los retardos.
R_ContB
R_ContC
ENDC
;
; RETARDOS de 4 hasta 10 microsegundos ---------------------------------------------------
;
; A continuación retardos pequeños teniendo en cuenta que para una frecuencia de 4 MHZ,
; la llamada a subrutina "call" tarda 2 ciclos máquina, el retorno de subrutina
; "return" toma otros 2 ciclos máquina y cada instrucción "nop" tarda 1 ciclo máquina.
;
Retardo_10micros ; La llamada "call" aporta 2 ciclos máquina.
nop ; Aporta 1 ciclo máquina.
nop ; Aporta 1 ciclo máquina.
nop ; Aporta 1 ciclo máquina.
nop ; Aporta 1 ciclo máquina.
nop ; Aporta 1 ciclo máquina.
Retardo_5micros ; La llamada "call" aporta 2 ciclos máquina.
nop ; Aporta 1 ciclo máquina.
Retardo_4micros ; La llamada "call" aporta 2 ciclos máquina.
return ; El salto del retorno aporta 2 ciclos máquina.
;
; RETARDOS de 20 hasta 500 microsegundos ------------------------------------------------
;
Retardo_500micros ; La llamada "call" aporta 2 ciclos máquina.
nop ; Aporta 1 ciclo máquina.
movlw d'164' ; Aporta 1 ciclo máquina. Este es el valor de "K".
goto RetardoMicros ; Aporta 2 ciclos máquina.
Retardo_200micros ; La llamada "call" aporta 2 ciclos máquina.
nop ; Aporta 1 ciclo máquina.
movlw d'64' ; Aporta 1 ciclo máquina. Este es el valor de "K".
goto RetardoMicros ; Aporta 2 ciclos máquina.
Retardo_100micros ; La llamada "call" aporta 2 ciclos máquina.
movlw d'31' ; Aporta 1 ciclo máquina. Este es el valor de "K".
goto RetardoMicros ; Aporta 2 ciclos máquina.
Retardo_50micros ; La llamada "call" aporta 2 ciclos máquina.
nop ; Aporta 1 ciclo máquina.
movlw d'14' ; Aporta 1 ciclo máquina. Este es el valor de "K".
goto RetardoMicros ; Aporta 2 ciclos máquina.
Retardo_20micros ; La llamada "call" aporta 2 ciclos máquina.
movlw d'5' ; Aporta 1 ciclo máquina. Este es el valor de "K".
;
; El próximo bloque "RetardoMicros" tarda:
; 1 + (K-1) + 2 + (K-1)x2 + 2 = (2 + 3K) ciclos máquina.
;
RetardoMicros
movwf R_ContA ; Aporta 1 ciclo máquina.
Rmicros_Bucle
decfsz R_ContA,F ; (K-1)x1 cm (cuando no salta) + 2 cm (al saltar).
goto Rmicros_Bucle ; Aporta (K-1)x2 ciclos máquina.
return ; El salto del retorno aporta 2 ciclos máquina.
;
;En total estas subrutinas tardan:
; - Retardo_500micros: 2 + 1 + 1 + 2 + (2 + 3K) = 500 cm = 500 µs. (para K=164 y 4 MHz).
; - Retardo_200micros: 2 + 1 + 1 + 2 + (2 + 3K) = 200 cm = 200 µs. (para K= 64 y 4 MHz).
; - Retardo_100micros: 2 + 1 + 2 + (2 + 3K) = 100 cm = 100 µs. (para K= 31 y 4 MHz).
; - Retardo_50micros : 2 + 1 + 1 + 2 + (2 + 3K) = 50 cm = 50 µs. (para K= 14 y 4 MHz).
; - Retardo_20micros : 2 + 1 + (2 + 3K) = 20 cm = 20 µs. (para K= 5 y 4 MHz).
;
; RETARDOS de 1 ms hasta 200 ms. --------------------------------------------------------
;
Retardo_200ms ; La llamada "call" aporta 2 ciclos máquina.
movlw d'200' ; Aporta 1 ciclo máquina. Este es el valor de "M".
goto Retardos_ms ; Aporta 2 ciclos máquina.
Retardo_100ms ; La llamada "call" aporta 2 ciclos máquina.
movlw d'100' ; Aporta 1 ciclo máquina. Este es el valor de "M".
goto Retardos_ms ; Aporta 2 ciclos máquina.
Retardo_50ms ; La llamada "call" aporta 2 ciclos máquina.
movlw d'50' ; Aporta 1 ciclo máquina. Este es el valor de "M".
goto Retardos_ms ; Aporta 2 ciclos máquina.
Retardo_20ms ; La llamada "call" aporta 2 ciclos máquina.
movlw d'20' ; Aporta 1 ciclo máquina. Este es el valor de "M".
goto Retardos_ms ; Aporta 2 ciclos máquina.
Retardo_10ms ; La llamada "call" aporta 2 ciclos máquina.
movlw d'10' ; Aporta 1 ciclo máquina. Este es el valor de "M".
goto Retardos_ms ; Aporta 2 ciclos máquina.
Retardo_5ms ; La llamada "call" aporta 2 ciclos máquina.
movlw d'5' ; Aporta 1 ciclo máquina. Este es el valor de "M".
goto Retardos_ms ; Aporta 2 ciclos máquina.
Retardo_2ms ; La llamada "call" aporta 2 ciclos máquina.
movlw d'2' ; Aporta 1 ciclo máquina. Este es el valor de "M".
goto Retardos_ms ; Aporta 2 ciclos máquina.
Retardo_1ms ; La llamada "call" aporta 2 ciclos máquina.
movlw d'1' ; Aporta 1 ciclo máquina. Este es el valor de "M".
;
; El próximo bloque "Retardos_ms" tarda:
; 1 + M + M + KxM + (K-1)xM + Mx2 + (K-1)Mx2 + (M-1) + 2 + (M-1)x2 + 2 =
; = (2 + 4M + 4KM) ciclos máquina. Para K=249 y M=1 supone 1002 ciclos máquina
; que a 4 MHz son 1002 µs = 1 ms.
;
Retardos_ms
movwf R_ContB ; Aporta 1 ciclo máquina.
R1ms_BucleExterno
movlw d'249' ; Aporta Mx1 ciclos máquina. Este es el valor de "K".
movwf R_ContA ; Aporta Mx1 ciclos máquina.
R1ms_BucleInterno
nop ; Aporta KxMx1 ciclos máquina.
decfsz R_ContA,F ; (K-1)xMx1 cm (cuando no salta) + Mx2 cm (al saltar).
goto R1ms_BucleInterno ; Aporta (K-1)xMx2 ciclos máquina.
decfsz R_ContB,F ; (M-1)x1 cm (cuando no salta) + 2 cm (al saltar).
goto R1ms_BucleExterno ; Aporta (M-1)x2 ciclos máquina.
return ; El salto del retorno aporta 2 ciclos máquina.
;
;En total estas subrutinas tardan:
; - Retardo_200ms: 2 + 1 + 2 + (2 + 4M + 4KM) = 200007 cm = 200 ms. (M=200 y K=249).
; - Retardo_100ms: 2 + 1 + 2 + (2 + 4M + 4KM) = 100007 cm = 100 ms. (M=100 y K=249).
; - Retardo_50ms : 2 + 1 + 2 + (2 + 4M + 4KM) = 50007 cm = 50 ms. (M= 50 y K=249).
; - Retardo_20ms : 2 + 1 + 2 + (2 + 4M + 4KM) = 20007 cm = 20 ms. (M= 20 y K=249).
; - Retardo_10ms : 2 + 1 + 2 + (2 + 4M + 4KM) = 10007 cm = 10 ms. (M= 10 y K=249).
; - Retardo_5ms : 2 + 1 + 2 + (2 + 4M + 4KM) = 5007 cm = 5 ms. (M= 5 y K=249).
; - Retardo_2ms : 2 + 1 + 2 + (2 + 4M + 4KM) = 2007 cm = 2 ms. (M= 2 y K=249).
; - Retardo_1ms : 2 + 1 + (2 + 4M + 4KM) = 1005 cm = 1 ms. (M= 1 y K=249).
;
; RETARDOS de 0.5 hasta 20 segundos ---------------------------------------------------
;
Retardo_20s ; La llamada "call" aporta 2 ciclos máquina.
movlw d'200' ; Aporta 1 ciclo máquina. Este es el valor de "N".
goto Retardo_1Decima ; Aporta 2 ciclos máquina.
Retardo_10s ; La llamada "call" aporta 2 ciclos máquina.
movlw d'100' ; Aporta 1 ciclo máquina. Este es el valor de "N".
goto Retardo_1Decima ; Aporta 2 ciclos máquina.
Retardo_5s ; La llamada "call" aporta 2 ciclos máquina.
movlw d'50' ; Aporta 1 ciclo máquina. Este es el valor de "N".
goto Retardo_1Decima ; Aporta 2 ciclos máquina.
Retardo_2s ; La llamada "call" aporta 2 ciclos máquina.
movlw d'20' ; Aporta 1 ciclo máquina. Este es el valor de "N".
goto Retardo_1Decima ; Aporta 2 ciclos máquina.
Retardo_1s ; La llamada "call" aporta 2 ciclos máquina.
movlw d'10' ; Aporta 1 ciclo máquina. Este es el valor de "N".
goto Retardo_1Decima ; Aporta 2 ciclos máquina.
Retardo_500ms ; La llamada "call" aporta 2 ciclos máquina.
movlw d'5' ; Aporta 1 ciclo máquina. Este es el valor de "N".
;
; El próximo bloque "Retardo_1Decima" tarda:
; 1 + N + N + MxN + MxN + KxMxN + (K-1)xMxN + MxNx2 + (K-1)xMxNx2 +
; + (M-1)xN + Nx2 + (M-1)xNx2 + (N-1) + 2 + (N-1)x2 + 2 =
; = (2 + 4M + 4MN + 4KM) ciclos máquina. Para K=249, M=100 y N=1 supone 100011
; ciclos máquina que a 4 MHz son 100011 µs = 100 ms = 0,1 s = 1 décima de segundo.
;
Retardo_1Decima
movwf R_ContC ; Aporta 1 ciclo máquina.
R1Decima_BucleExterno2
movlw d'100' ; Aporta Nx1 ciclos máquina. Este es el valor de "M".
movwf R_ContB ; Aporta Nx1 ciclos máquina.
R1Decima_BucleExterno
movlw d'249' ; Aporta MxNx1 ciclos máquina. Este es el valor de "K".
movwf R_ContA ; Aporta MxNx1 ciclos máquina.
R1Decima_BucleInterno
nop ; Aporta KxMxNx1 ciclos máquina.
decfsz R_ContA,F ; (K-1)xMxNx1 cm (si no salta) + MxNx2 cm (al saltar).
goto R1Decima_BucleInterno ; Aporta (K-1)xMxNx2 ciclos máquina.
decfsz R_ContB,F ; (M-1)xNx1 cm (cuando no salta) + Nx2 cm (al saltar).
goto R1Decima_BucleExterno ; Aporta (M-1)xNx2 ciclos máquina.
decfsz R_ContC,F ; (N-1)x1 cm (cuando no salta) + 2 cm (al saltar).
goto R1Decima_BucleExterno2 ; Aporta (N-1)x2 ciclos máquina.
return ; El salto del retorno aporta 2 ciclos máquina.
;
;En total estas subrutinas tardan:
; - Retardo_20s: 2 + 1 + 2 + (2 + 4N + 4MN + 4KMN) = 20000807 cm = 20 s.
; (N=200, M=100 y K=249).
; - Retardo_10s: 2 + 1 + 2 + (2 + 4N + 4MN + 4KMN) = 10000407 cm = 10 s.
; (N=100, M=100 y K=249).
; - Retardo_5s: 2 + 1 + 2 + (2 + 4N + 4MN + 4KMN) = 5000207 cm = 5 s.
; (N= 50, M=100 y K=249).
; - Retardo_2s: 2 + 1 + 2 + (2 + 4N + 4MN + 4KMN) = 2000087 cm = 2 s.
; (N= 20, M=100 y K=249).
; - Retardo_1s: 2 + 1 + 2 + (2 + 4N + 4MN + 4KMN) = 1000047 cm = 1 s.
; (N= 10, M=100 y K=249).
; - Retardo_500ms: 2 + 1 + (2 + 4N + 4MN + 4KMN) = 500025 cm = 0,5 s.
; (N= 5, M=100 y K=249).

; ===================================================================
; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
; E. Palacios, F. Remiro y L. López. www.pic16f84a.com
; Editorial Ra-Ma. www.ra-ma.es
; ===================================================================

Libreria de rs232:



;ESTA LIBRERIA ESTA DISEÑADA PARA TRABAJAR A 9600 BAUDIOS
;CON UN CRISTAL DE 4MHZ
CONFIGURA_RS232
BSF STATUS,RP0
BSF TRISC,7
BCF TRISC,6
MOVLW 0XFF
MOVWF TRISB
MOVLW .25
MOVWF SPBRG
MOVLW B'00100100'
MOVWF TXSTA
BCF STATUS,RP0
MOVLW B'10010000'
MOVWF RCSTA
RETURN
TX_DATO
BCF PIR1,TXIF
MOVWF TXREG
BSF STATUS,RP0
TX_DATO_ESP
BTFSS TXSTA,TRMT
GOTO TX_DATO_ESP
BCF STATUS,RP0
RETURN
RX_DATO
BCF PIR1,RCIF
BTFSC RCSTA,FERR
GOTO RX_DATO
MOVF RCREG,0
RETURN



Espero te sirva de algo... Saludos
 
Última edición:
Hola, Diana.

Te vendría de perlas el PIC que yo estoy utilizando para el proyecto que tengo entre manos: Es un PIC18F26J50, aunque hay varios modelos más con características buenas para tu proyecto.
Conversor analógico/digital con 10 entradas, y puerto USB. Con esto te evitas mucha circuitería.
Si de todas formas necesitas utilizar el ADC 0808, en cualquier caso tendrás que implementar en el PIC la comunicación con él.

Hasta luego
 
Atrás
Arriba