Programación Específica > Microcontroladores
Pic 16f87x
ramirojuan:
Sabes tengo una rutina que convierte un byte en decimal, la idea de esto es :
Comparar si en el byte mas significativo tengo valores entonces lo comparo o resto con el valor 0 si es cero paso a la rutina que me entrega en tres registros distintos el valor del byte menos significativo, se entiende? y luego envio un 30h por el valor del primer byte y luego a los valores que tenga cada contador le sumo 30h y lo envio te parece? claro que esta solucion es solo para resultados recibidos del ADC hasta 255 no es nuevo lo que digo, pero si lo hago hasta 1023 que es el valor maximo de los 10 bits que entrega el conversor no me sirve.... pero podria salir de ahi la solucion o es muy larga piensas?
por ejemplo, en el segundo byte solo existen 4 posibles resultados que son 0,1,2,3 los que corresponden a un resultado 0,256,512 y 768 si sumo cada digito a su contador correspondiente del byte menos significatico??
puede ser o no? que piensas?
berretta:
Si no resolviste tu problema, aca te mando esto
Esta rutina sirve para ese fin
esta en formato libreria pero puedes incluirla
como codigo de programa
Tambien la podes usar para presentar los datos
en una pantalla LCD
Saludos
;-------------------------------------------------------------------
;
; Libreria para convertir un numero binario de 16 bit a 5 BCD.
; y salida ASCII
;
; El numero binario se guarda en NumH los 8 bits de mayor peso y
;en NumL los de menor peso
; La salida en BCD estan en :
;TenK = 10000
;Thou = 1000
;Hund = 100
;Tens = 10
;Ones = 1
;
Conv_BCD
clrf Ones
clrf Tens
clrf Hund
clrf Thou
clrf Tenk
;Rutina de conversion de 16 bits a bcd - Conv. p.ej.FFFF en 65535
;Las varaibles de entrada son:
;NumH para el byte alto
;NumL para el byte bajo
;El resultado esta en cuatro digitos
;Las unidades en Ones
;Las decenas en Tens
;Las centenas en Hund
;Las unidades de mil en Thou
;
swapf NumH,w
andlw h'0F' ;
addlw h'F0' ;
movwf Thou
addwf Thou,f
addlw h'E2'
movwf Hund
addlw h'32'
movwf Ones
movf NumH,w
andlw h'0F'
addwf Hund,f
addwf Hund,f
addwf Ones,f
addlw h'E9'
movwf Tens
addwf Tens,f
addwf Tens,f
swapf NumL,w
andlw h'0F'
addwf Tens,f
addwf Ones,f
rlf Tens,f
rlf Ones,f
comf Ones,f
rlf Ones,f
movf NumL,w
andlw h'0F'
addwf Ones,f
rlf Thou,f
movlw h'07'
movwf Tenk
movlw h'0A' ; Ten
Lb1:
addwf Ones,f
decf Tens,f
btfss 3,0
goto Lb1
Lb2:
addwf Tens,f
decf Hund,f
btfss 3,0
goto Lb2
Lb3:
addwf Hund,f
decf Thou,f
btfss 3,0
goto Lb3
Lb4:
addwf Thou,f
decf Tenk,f
btfss 3,0
goto Lb4
;Conversion bcd a ASCII
movlw 0x30
addwf Tenk,1
movlw 0x30
addwf Thou,1
movlw 0x30
addwf Hund,1
movlw 0x30
addwf Tens,1
movlw 0x30
addwf Ones,1
RETURN
© Jonathan ©:
Hola, pues no se si funcionaria, es cuestion de probar, es bastante dificil lograr que un micro que de fabrica suma solo numeros de 8 bits cada uno, pueda sumar numeros de 10 bits. No se si habria manera de realizar dicha suma, talvez exista una manera y esa podria ser como dices, es solo cuestion de que pruebes. La libreria que aporto berretta, esta muy buena, aparte es mas compacta que la que yo hiba a postear, asi que no la posteare, si tu la quieres te la envio, pero esa es mejor que la que tengo. Bueno, ante cualquier duda, aqui estare. Saludos y suerte :hola:
ramirojuan:
Saludos amigos, finalmente termine la solucion a mi problema, convierto 10 bits en ascii desde 0000 hasta 1023, se los envio???
Ahora tengo otro problema y queria molestarlos, tengo una rutina para el ADC donde se incluye la rutina del conversor bin a ascii y el envio de la conversion a un pc para ser visualizado por Hyperterminal, estas etapas las probe y estan ok, lo que ocurre es que el ADC no esta convirtiendo bien ya que solo hace una conversion y la envia, tengo conectado un potenciometro en el canal 0 donde vario de 0 a 5 volt pero la salida siempre es la misma, me da la impresion de que tengo algun problema con los tiempos o palabras de control del ADC, me podrian enviar alguna rutina pequeña donde se aplique el ADC para salir de mis dudas??....
Saludos. :hola:
© Jonathan ©:
Hola amigo, pues me pone super contento saber que has logrado hacer lo que querias hacer... Ni lo dudes en postear el archivo aqui, eso si no es molestia para ti, con respecto a tu problema, todo es configuracion del conversor, aqui no tengo unas rutinas, pero tengo este link, que es el que uso para guiarme en la configuracion del CAD en el PIC16F873, talvez te sirva, buscare algun coodigo que te sea de utilidad.
FELICITACIONES!!! :smartass: :D B) y Muchos Saludos :hola:
CAD PIC16F873/877
Navegación
[#] Página Siguiente
[*] Página Anterior
Ir a la versión completa