Programación Específica > Microcontroladores

 ¿como Hacer Una Comparacion?

(1/2) > >>

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&#59; Inicia la conversion;ADC_ESP  btfsc  ADCON0,GO_DONE &#59; Finalizo la conversion???  goto  $ - 1         &#59; No, Esperar a que finalice  Banco_1        &#59; Banco 1  movf  ADRESL,0  &#59; Guardo Adresl en W  Banco_0        &#59; Banco 0  movwf  DATOL    &#59; Almaceno resultado del ADC en registros para trabajos  movf  ADRESH,0  &#59; Guardo Adresl en W  movwf  DATOH    &#59; Almaceno resultado del ADC en registros para trabajos  movf  DATOL,0    &#59; Paso a W, el valor del Set Elegido  subwf  DATO_L,0  &#59; Resto Valor (W = DATOL - W)  btfss  STATUS,C  &#59; Miro Carry de STATUS  call  SUPERIOR    &#59; El valor aumento  ..        ...                                    &#59; 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

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa