Autor Tema: Como comparo un numero con el 16F877?  (Leído 4271 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado j_montiel81

  • PIC10
  • *
  • Mensajes: 7
Como comparo un numero con el 16F877?
« 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.

Desconectado pocher

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2569
RE: Como comparo un numero con el 16F877?
« Respuesta #1 en: 25 de Junio de 2004, 00:13:00 »
Con una resta o con una OR-EXCLUSIVA (en ensamblador)

Desconectado j_montiel81

  • PIC10
  • *
  • Mensajes: 7
RE: Como comparo un numero con el 16F877?
« Respuesta #2 en: 25 de Junio de 2004, 00:19:00 »
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

Desconectado pocher

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2569
RE: Como comparo un numero con el 16F877?
« Respuesta #3 en: 25 de Junio de 2004, 00:26:00 »
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

Desconectado j_montiel81

  • PIC10
  • *
  • Mensajes: 7
RE: Como comparo un numero con el 16F877?
« Respuesta #4 en: 25 de Junio de 2004, 00:30:00 »
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?

Desconectado pocher

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2569
RE: Como comparo un numero con el 16F877?
« Respuesta #5 en: 25 de Junio de 2004, 00:45:00 »
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...

Desconectado j_montiel81

  • PIC10
  • *
  • Mensajes: 7
RE: Como comparo un numero con el 16F877?
« Respuesta #6 en: 25 de Junio de 2004, 00:51:00 »
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

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
RE: Como comparo un numero con el 16F877?
« Respuesta #7 en: 25 de Junio de 2004, 11:47:00 »
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
---

Desconectado j_montiel81

  • PIC10
  • *
  • Mensajes: 7
RE: Como comparo un numero con el 16F877?
« Respuesta #8 en: 28 de Junio de 2004, 23:05:00 »
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

Desconectado YF-21

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 185
RE: Como comparo un numero con el 16F877?
« Respuesta #9 en: 28 de Junio de 2004, 23:10:00 »
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 ...

Desconectado pocher

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2569
RE: Como comparo un numero con el 16F877?
« Respuesta #10 en: 29 de Junio de 2004, 00:14:00 »
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