Ver Mensaje Individual
Antiguo 16/05/2013, 02:09   #3
ma_chavez
Usuario Registrado
 
Fecha de ingreso: 14/may/2013
Mensajes: 2
ma_chavez está en el buen camino
[QUOTE=wolwaiar;3683030]Hola, estoy progranando en emsamblador y necesito pasar de una señal anañogica a una digital para visualizarla por rs232, pero me salen rombos y cosas raras y donde la tendion de la bateria una d, si alguien puede echarle un vistazo a ver si tengo algo mal lo agradeceria, gracias.


LIST P=16F84A
INCLUDE
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC

CBLOCK 0x0C
ENDC

PCF8591_DIR_ESCRITURA EQU b'10011110'
PCF8591_DIR_LECTURA EQU b'10011111'
ENTER EQU .13
;
; ZONA DE CÓDIGOS ********************************************************************

ORG 0
Inicio
call RS232_Inicializa
Principal
call I2C_EnviaStart ; Va a configurar el PCF8591.
movlw PCF8591_DIR_ESCRITURA ; Apunta al dispositivo.
call I2C_EnviaByte
movlw b'00000000' ; Carga la palabra de control utilizando la
call I2C_EnviaByte ; entrada AIN0 en modo simple.
call I2C_EnviaStop ; Termina la configuración
;
call I2C_EnviaStart ; Comienza a leer.
movlw PCF8591_DIR_LECTURA ; Apunta al dispositivo.
call I2C_EnviaByte
call I2C_LeeByte

call I2C_LeeByte ; Lee la entrada analógica.
call Visualiza ; La visualiza.
call Retardo_10s
call RS232_LineasBlanco ; La primera lectura es incorrecta y por lo tanto

Principal1 ; la desecha.
call I2C_EnviaStart
movlw PCF8591_DIR_ESCRITURA
call I2C_EnviaByte
movlw b'00000001'
call I2C_EnviaByte
call I2C_EnviaStop
;
call I2C_EnviaStart
movlw PCF8591_DIR_LECTURA
call I2C_EnviaByte
call I2C_LeeByte

call I2C_LeeByte
call Visualiza1
call Retardo_10s
call RS232_LineasBlanco
goto Principal0

; Subrutinas "Visualiza" ----------------------------------------------------------------
;
; Visualiza el valor que se le introduce por el registro de trabajo W en formato de tensión.
; Hay que tener en cuenta que el PCF8591 del esquema trabaja con una resolución de
; LSB=10mV, el valor de entrada será 10 veces menor que la tensión real expresada en
; milivoltios. Así por ejemplo, si (W)=147 el valor de la tensión será igual a:
; VAIN = LSB x Digital = 10 x 147 = 1470 mV = 1,47 V, que es lo que se debe visualizar
; en la pantalla.
;
; En conclusión:
; - Las centenas del valor digital corresponden a las unidades de voltio.
; - Las decenas del valor digital corresponden a las décimas de voltio.
; - Las unidades del valor digital corresponden a las centésimas de voltios.

CBLOCK
Auxiliar
ENDC

Visualiza
call RS232_LineasBlanco
movwf Auxiliar ; Lo guarda.
movlw MensajeTension ; Visualiza la tensión deseada.
call RS232_Mensaje
movf Auxiliar,W ; Recupera el dato a visualizar y lo
call BIN_a_BCD
; call RS232_EnviaDato ; pasa a BCD.
movf BCD_Centenas,W ; Visualiza las centenas que corresponden a las unidades de voltios.
call RS232_EnviaDato
movf BCD_Decenas,W ; Visualiza las decenas que corresponden a las
call RS232_EnviaDato ; décimas de voltios.
movf BCD_Unidades,W ; Visualiza las unidades que corresponden a las
call RS232_EnviaDato ; centésimas de voltios.
retfie
;------------------------------
;Subrutina "Visualiza1"
;

CBLOCK
Auxiliar1
ENDC

Visualiza1
call RS232_LineasBlanco
movwf Auxiliar1
movlw MensajeTemperatura
call RS232_Mensaje
movf Auxiliar1,W
call BIN_a_BCD
movf BCD_Centenas,W
call RS232_EnviaDato
movf BCD_Decenas,W
call RS232_EnviaDato
movf BCD_Unidades,W
call RS232_EnviaDato
retfie

Mensajes
addwf PCL,F
MensajeTension
DT "Tension Bateria(V): ", 0x00
MensajeTemperatura
DT "Temperatura(Centigrados):",0x00

INCLUDE
INCLUDE
INCLUDE
INCLUDE
INCLUDE
END[/QUOTE]

Estas queriendo programar un PIC16F84 ???

No parece

el programa esta escrito para otro dispositivo eso de pasar una señal analogica a digital requiere el uso de convertidor A/D o utilizar referencia con comparadores
ma_chavez está desconectado
Respuesta rápida a este mensaje
Responder Citando Subir