Programación Específica > Microcontroladores
¿como Hacer Una Comparacion?
Pegasux:
Muy buenas. Me gustaria hacer un programa que moviese un motor PAP a una determinada posicion en funcion del valor de la entrada analogica que controlo con un potenciómetro. Lo realizo con un 16F876. El asunto es que realizo la conversión de la entrada analogica y necesito ver si el valor es mayor al que habia antes o menor para saber si he de mover el motor en un sentido o en sentido contrario hasta llegar a la posicion indicada por el valor de la entrada analogica. ¿Alguien tiene alguna idea?
Un saludo.
pic-man:
si programas en ensamblador puedes utilizar la instruccion subwf para realizar la comparacion, esta operacion resta el contenido de W a algun registro f, si el resultado es mayor a 0 (es decir f es mayor que W) la bandera de carry se pone a 1 y la de zero a 0, si el resultado es igual a 0 ambas banderas (carry y zero) se ponen a 1 (f es igual a W) y por ultimo si el resultado es menor que 0 (W es mayor que f) las banderas de carry y zero se ponen a 0, asi que realizando la comparacion y despues checando banderas con btfss o btfsc puedes saber si el valor es mayor o menor al que ya tenias antes
© Jonathan ©:
--- Código: Text --- ADC_COMP bsf ADCON0,GO_DONE; Inicia la conversion;ADC_ESP btfsc ADCON0,GO_DONE ; Finalizo la conversion??? goto $ - 1 ; No, Esperar a que finalice Banco_1 ; Banco 1 movf ADRESL,0 ; Guardo Adresl en W Banco_0 ; Banco 0 movwf DATOL ; Almaceno resultado del ADC en registros para trabajos movf ADRESH,0 ; Guardo Adresl en W movwf DATOH ; Almaceno resultado del ADC en registros para trabajos movf DATOL,0 ; Paso a W, el valor del Set Elegido subwf DATO_L,0 ; Resto Valor (W = DATOL - W) btfss STATUS,C ; Miro Carry de STATUS call SUPERIOR ; El valor aumento .. ... ; De lo contrario es menor
Esto es un pedazo de codigo de un programa que hice una ves, se puede mejorar para saber si el valor sigue siendo igual, osea si no vario, pero no necesitaba mas que esto en su momento, lo que hace es leerme el ADC y saltar a superior si el valor es superior al valor anterior almacenado, te lo dejo para que le des forma a la idea que te dio pic-man. De hecho esta hecho tal como el dijo. Saludos :)
Pegasux:
Muchas gracias a los dos, no habia reparado en esa instruccion. Voy a examinarlo detenidamente para adaptarlo.
Otra cosilla, pensaba que el bit go_done se escribia en ensamblador solo como "go", viene asi en un ejemplo de un libro que tengo. ¿funciona de las dos formas?
Un saludo.
© Jonathan ©:
Eso es indiferente, se usa como este definido en el include del micro a utilizar, yo reforme esa palabra y puse go_done para mantener la claridad del codigo fuente. Sobre gustos.. :whistling: . Saludos
Navegación
[#] Página Siguiente
Ir a la versión completa