pic16f877 y adquisicion
Publicado por HELEN (3 intervenciones) el 07/11/2006 20:03:50
Hola amigos!!! ya me funciona me pic con el lcd, era bastante fácil pero se me atascó.Ahora necesito saber otra cosa: si yo coloco un lm335, sensor de temperatura para que mi pic recoja la temperatura existente en el ambiente mediante el módulo de adquisicion y luego la convierto a ascii con la siguiente rutina para mostrar la temperatura, (la cual convierte de binario a decimal y cada dígito decimal a ascii), ¿cómo sabe mi pic que lo que debe sacar son grados centígrados y no kelvin?Ejemplo: si el pic coge 2'5v,cómo sabe el pic si son grados centigrads, o kelvin?gracias
01100000=96= 9 y 6=(pasado a ascii)=0xXX, 0xXX
HEXADECIMAL_ASCII ;cargar en W el dato hex.
MOVWF HEXADECIMAL
clrf ASCII_H ;Para BCD D'0'
clrf ASCII_M ;Para BCD D'0'
clrf ASCII_L ;Para BCD D'0'
Centenas
movlw D'100' ;D'100' --> W
subwf HEXADECIMAL,W ;HEXADECIMAL - D'100' --> W
btfss STATUS,C ;¿ HEXADECIMAL es menor que D'100' ?
goto Decenas ;Si
movwf HEXADECIMAL ;Salva el resto
incf ASCII_H,F ;Incrementa el contador de centenas BCD
goto Centenas ;Vuelve por otros D'100'
Decenas
movlw D'10' ;D'10' --> W
subwf HEXADECIMAL,W ;HEXADECIMAL - D'10' --> W
btfss STATUS,C ;¿ HEXADECIMAL es menor que D'10' ?
goto Unidades ;Si
movwf HEXADECIMAL ;Salva el resto
incf ASCII_M,F ;Incrementa el contador de decenas BCD
goto Decenas ;Vuelve por otros D'10'
Unidades
movf HEXADECIMAL,W ;El resto pertenece
movwf ASCII_L ;a las unidades BCD
clrf HEXADECIMAL ;Pone a cero el registro HEXADECIMAL
BCD_A_ASCII
movlw H'30' ;H'30' --> W
ADDWF ASCII_L,F ;Convierte de BCD a ASCII
ADDWF ASCII_M,F ;Convierte de BCD a ASCII
movf ASCII_H,F ;ASCII_H --> F
btfsc STATUS,Z ;? ASCII_H es D'00' ?
goto ESPACIO ;Si
movlw H'30' ;H'30' --> W
ADDWF ASCII_H,F ;Convierte de BCD a ASCII
return ;Retorna
ESPACIO
movlw '0' ;A' ' --> W
movwf ASCII_H ;A' ' --> ASCII_H
; movwf ASCII_M ;A' ' --> ASCII_H
; movwf ASCII_L ;A' ' --> ASCII_H
return ;Retorna
01100000=96= 9 y 6=(pasado a ascii)=0xXX, 0xXX
HEXADECIMAL_ASCII ;cargar en W el dato hex.
MOVWF HEXADECIMAL
clrf ASCII_H ;Para BCD D'0'
clrf ASCII_M ;Para BCD D'0'
clrf ASCII_L ;Para BCD D'0'
Centenas
movlw D'100' ;D'100' --> W
subwf HEXADECIMAL,W ;HEXADECIMAL - D'100' --> W
btfss STATUS,C ;¿ HEXADECIMAL es menor que D'100' ?
goto Decenas ;Si
movwf HEXADECIMAL ;Salva el resto
incf ASCII_H,F ;Incrementa el contador de centenas BCD
goto Centenas ;Vuelve por otros D'100'
Decenas
movlw D'10' ;D'10' --> W
subwf HEXADECIMAL,W ;HEXADECIMAL - D'10' --> W
btfss STATUS,C ;¿ HEXADECIMAL es menor que D'10' ?
goto Unidades ;Si
movwf HEXADECIMAL ;Salva el resto
incf ASCII_M,F ;Incrementa el contador de decenas BCD
goto Decenas ;Vuelve por otros D'10'
Unidades
movf HEXADECIMAL,W ;El resto pertenece
movwf ASCII_L ;a las unidades BCD
clrf HEXADECIMAL ;Pone a cero el registro HEXADECIMAL
BCD_A_ASCII
movlw H'30' ;H'30' --> W
ADDWF ASCII_L,F ;Convierte de BCD a ASCII
ADDWF ASCII_M,F ;Convierte de BCD a ASCII
movf ASCII_H,F ;ASCII_H --> F
btfsc STATUS,Z ;? ASCII_H es D'00' ?
goto ESPACIO ;Si
movlw H'30' ;H'30' --> W
ADDWF ASCII_H,F ;Convierte de BCD a ASCII
return ;Retorna
ESPACIO
movlw '0' ;A' ' --> W
movwf ASCII_H ;A' ' --> ASCII_H
; movwf ASCII_M ;A' ' --> ASCII_H
; movwf ASCII_L ;A' ' --> ASCII_H
return ;Retorna
Valora esta pregunta


0