TODOPIC
Microcontroladores PIC => Primeros pasos - Iniciación a los microcontroladores => Mensaje iniciado por: j_montiel81 en 24 de Junio de 2004, 23:38:00
-
Que tal, estoy trabajando con el 16f877 para hacer entre otras cosas un contador de vueltas de un motor, ya tengo el programa que cuenta los pulsos que recibe el pic desde un encoder, ahora necesito comparar dicho conteo con una cifra especifica. Es decir por ejemplo pedirle al pic (jajajaja suena muy graciosa la petición
) que cuente las vueltas y al pasar las 100 vueltas mande una advertencia. ¿Cómo hago que el registro que guarda el conteo se compare con lña constante. Gracias de antemano.
-
Con una resta o con una OR-EXCLUSIVA (en ensamblador)
-
Gracias por la sugerencia, pero hecho esto que hago con el resultado. Pongamoslo en C jajajaja

conteo aqui esta todo lo demas
if resultado_resta == valor_correspondiente_a_100
goto advertencia
else
goto conteo
advertencia la otra parte del programa
Espero se haya entendido, otras sugerencias se agradecen
-
Si es en C, no hay que hacer ninguna resta.
Hay otro amiguete del FORO, que en el apartado de C, está haciendo esto mismo.
Pón tu programa en el apartado de C y lo revisamos.
Un saludo
-
En realidad lo estoy llevando a cabo en ensamblador, ya que es un proyecto que hace tres cosas, cuenta las vueltas de un motor, mide temperatura y mide nivel. Ya tengo el programa de temperatura y de nivel (a medias) pero me trabé en este y pues ando amolado. Voy a checar en C de todas formas ya que por las diferentes partes del proyecto si cambio a C tendría que hacer los otros programas en C, que me recomiendan?


-
Si todo lo demás lo tienes en ensamblador, sigue en ensamblador.
A ver como harías la resta en ensamblador?
Me voy al trabajo, seguiremos esta tarde...
-
TEngo todo mi programa en la escuela junto con mis apuntes, checo con mi simulador y mando el programa por la mañana (estoy en México y son las 11:50 PM

Gracias y pues seguimos luego
Si alguien más tiene sugerencias se agradecen
-
Hace poco hice este programa que hace la comparación de 2 números de 1 byte. Te dice si son iguales y si uno es menor o mayor que el otro. Lo tienes que adaptar para tu programa:
---
; Hace comparación de 2 números de 1 byte
; # referencia en datoref (0x10)
; # a comparar en dato1 (0x11)
; al finalizar el programa se carga en compar lo siguiente
; 0x00 si ambos # son iguales
; 0x01 si dato1 > datoref
; 0xff si dato1 < datoref
LIST P=16f84a
include "p16f84a.inc"
; Registros
datoref equ 0x10 ;# referencia
dato1 equ 0x11 ;# a comparar
compar equ 0x12 ;resultado comparación
status equ 0x03
; Bits
rp0 EQU 5 ; banco status
z EQU 2 ; Z en status
c EQU 0 ; C en status
dc EQU 1 ; DC en status
ORG 0
goto inicio
ORG 5
;Inicia programa
inicio movf datoref,0 ;número referencia
subwf dato1,0 ;dato a comparar con ref
btfsc status,z ;si z=1 dato1 es igual que w
goto iguales
btfsc status,c ;si c=1 dato1 es mayor que w
goto mayor
movlw 0xff ;dato1 es menor que w
movwf compar
goto final
iguales clrf compar
goto final
mayor movlw 0x01
movwf compar
goto final
final nop
end
---
-
Gracias por la sugerencia, lo tengo en cuenta. Este fin de semana no me pude conectar y no habia checado. En estos momentos tengo un prototipo y anda jalando, lo que hice fue decrementar un registro (que contiene el numero de vueltas) y cuando llega a cero realiza el despliegue del mensaje en el lcd. Use decssfs algo asi jajajajaja de la emoción se me olvidó. Bueno en estos momentos estoy peleando con la parte de medición de nivel, jajaja solo me dice "nivel bajo". Espero mañana poder poner el programa para sugerencias
-
Pues bueno, la opcion de la resta ya la colocó Don miguelsantiago pero la opcion de la XOR ¿? alguna sugerencia favor de escribirla acá abajo ...
-
Vale más un ejemplo que mil palabras. Ahí va:
Tenemos 2 sensores conectados en RA0 y RA1 y queremos saber cuando estan activos los dos a la vez.
Solución con resta:
Bucle1 MOVFW PORTA
SUBLW 0X03
BTFSS STATUS,Z
GOTO Bucle1
Solución con OR-EXCLUSIVA:
Bucle1 MOVFW PORTA
XORLW 0X03
BTFSS STATUS,Z
GOTO Bucle1
Un saludo