Es un programa que por medio de los pines A/D (análogo digital)
se pueda leer señales analógicas y poder mostrarlas en forma digital (por medio
de los displays).
Todo esto mediante el uso del módulo conversor de analógico a
digital (A/D), el cual tiene 13 entradas en los PIC de 40/44 pines. Este módulo
permite la conversión de una señal de entrada analógica a un número digital de
10 bits.
- Código:
#define Dir_C 0xF94
#define Dir_D 0xF95
#define Puerto_C 0xF82
#define Puerto_D 0xF83
#define T0CON 0xFD5 //REGISTRO DE CONTROL DEL TIMER
#define TMR0 0xFD6 //REGISTRO DE CONTROL DEL TMR0
#define PRODL 0xFF3 //REGISTRO DEL MULTIPLICADOR
#define PCL 0xFF9 //REGISTRO BAJO DEL CONTADOR DE PROGRAMA
#define ADCON2 0xFC0
#define ADCON1 0xFC1 //REGISTROS del ADC
#define ADCON0 0xFC2
#define ADRESH 0xFC4
int temp;
void main()
{
#asm
inicio:
movlw 0x00
movwf Dir_C //configurado como salida
movlw 0x00
movwf Dir_D //configurado como salida
movlw 0x01
movwf ADCON0 //ADCON0 <- 01 se activa el ADC
movlw 0x0E
movwf ADCON1 //ADCON1 <- 01 se configura AN0 como analogica
movlw 0x07
movwf ADCON2 //justificación (izquierda o derecha) y reloj
ciclo:
ADC:
bsf ADCON0, 1 //GO=1
btfsc ADCON0, 1 //hace la pregunta de si ADCON0 es un 1, si es uno se brinca la linea
bra ADC
bsf Puerto_C, 1
movf ADRESH, 0
andlw 0x0F
call display
movwf Puerto_D
bcf Puerto_C, 0
call tiempo
swapf ADRESH, 0
andlw 0x0F
call display
bsf Puerto_C,0
movwf Puerto_D
bcf Puerto_C, 1
call tiempo
bra ciclo
display:
mullw 0x02
movf PRODL,0
addwf PCL
retlw 0x40 //CERO
retlw 0x79 //UNO
retlw 0x24 //DOS
retlw 0x30 //TRES
retlw 0x19 //CUATRO
retlw 0x12 //CINCO
retlw 0x02 //SEIS
retlw 0x78 //SIETE
retlw 0x00 //OCHO
retlw 0x18 //NUEVE
retlw 0x08 // A
retlw 0x03 // B
retlw 0x46 // C
retlw 0x21 // D
retlw 0x06 // E
retlw 0x0E // F
tiempo:
decfsz temp
bra tiempo
retlw 0
#endasm
}
- Simulación en Proteus:
- Armado y ejecución:
No hay comentarios:
Publicar un comentario