elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  ayuda con programa asm
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ayuda con programa asm  (Leído 2,789 veces)
luxerymc

Desconectado Desconectado

Mensajes: 1


Ver Perfil
ayuda con programa asm
« en: 12 Octubre 2012, 00:08 am »

hola soy nueva en esto de la programación y quisiera un poco de orientación

tengo que resolver la siguiente problemática tengo que detectar el movimiento de una polea para saber cuando una bomba esta encendida, lo haré por medio de un sensor réflex cuando  este encendida estará conmutando y así me indicara que esta encendida y cuando se detenga aun que quede en la banda que refleja el haz de luz quiero que me indique que esta apagada si después de cierto tiempo no hay una conmutación.

quiero saber si por medio de comparación de registro puedo hacerlo el problema es que no se como hacer esa parte y creo que estoy total mente perdida tengo el pic 16f877a

no tengo ni la mitad del programa pero no se si asi voy bien

quisiera un poco de asesoria

tengo una sola  señal de entrada y esa me indicara si esta encendida o apagado
como comparo si cambio o no despues de cierto tiempo.


__CONFIG   _CP_ON &  _DEBUG_OFF & _WRT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC

List P=16f877A
include <P16F877A.INC>

CBLOCK 0X20
registro_1
registro_2
   ENDC
#DEFINE PORTA,4 trasmisor
#DEFINE PORTB,4 rele

ORG 0X00

inicio

bsf STATUS,RP0
bcf STATUS,RP1
clrf TRISB
movlw b'00000110'
movwf ADCON1
movlw b'00010000'
movwf TRISA
bcf STATUS,RP0

principal

movlw

movwf registro_1 ;mueve w ael registro 1   
movwf registro_2 ;mueve w al registro 2

  (no se si tnego que cargar la señal dos veces o solo una y luego volverla a cambiar)

movf registro_1,w  ; w = registro 1
subwf registro_2,w    ; w = registro 2- w
btfss STATUS, C    ; (aqui no se si tengo que comparar el C o el Z o bit que corresponda del puerto)



En línea

Firos
Ex-Staff
*
Desconectado Desconectado

Mensajes: 1.410


Enseña lo que sepas... y oculta lo peor...


Ver Perfil
Re: ayuda con programa asm
« Respuesta #1 en: 31 Octubre 2012, 15:54 pm »

Buenas.

De primeras te recomiendo que para programar te crees una biblioteca propia de subrutinas para, por ejemplo, cambiarte de banco sin tener que mirar el datasheet y ver si era de una forma o de otra. A parte de que te simplificaría mucho el codigo a la hora de mirarlo.

No es lo mismo poner:
Código:
bsf STATUS,RP0
bcf STATUS,RP1

Que:
Código:
Banco1

Verdad?


Bueno, yo el único que he usado ha sido el pic16F876 pero seran muy similares.

CREO que lo que quieres hacer es:

1. Sensor en polea.
2. Señal de entrada al PIC para detectar movimiento ya sea por 1 o por 0.
3. Señal de salida del PIC a un led para indicar que se mueve la polea o no.

La verdad es que no me he enterado de nada de tu mensaje, esto lo acabo de deducir. Repite el enunciado paso por paso y mejor.

Lo que tendrías que hacer es meter esa señal en el PIC por una de sus patillas y actuar en consecuencia para, por ejemplo, encender un LED.


Para comprobar la variación vas bien encaminada, puedes hacerlo con unos bucles con BTFSS y BTFSC. ¿para que quieres echar mano de los FLAGS?

¿Sabes lo que hacen esas dos instrucciones?
  • BTFSC: Chequea un bit del registro indicado y salta la siguiente instrucción si es un cero.
  • BTFSS: Chequea un bit del registro indicado y salta la siguiente instrucción si es un uno.

Por lo tanto, si tienes un receptor en la patilla RB0, mismamente, lee directamente el puerto con el comando.

Código:
bucle:   btfsc          PORTB,0     ; Si es cero salta a Bucle, si es 1 va a ACTIVAR
         goto             ACTIVAR
         goto bucle

ACTIVAR:   LO QUE QUIERAS QUE HAGA

Después de eso tendrías que irte a otro bucle que detectara cuándo para la maquina para apagar el LED o transmisor, que sería con el mismo metodo.



Ese es el método que estabas utilizando peeeeeeeero, que siempre hay peros, de ese modo el PIC consume mucha mas energía que usando INTERRUPCIONES y poniéndolo en modo SLEEP.

De todas maneras eso ya es meterse en otro "fregao". No es difícil pero habría que explicar unas pocas cosas. Si con eso te vale, adelante.


Otra cosa que deberías ponerle es un verificador de REBOTES. En el caso de los interruptores y periféricos siempre puede haber riesgo de ruidos, me explico. En un conmutador o interruptor al conexionarlo siempre hay un pequeño rebote de milisegundos que oscila entre 0 y 1 varias veces por lo que podria apagarse y encenderse el led repetidamente, parpadear y no saber muy bien que hacer.

Por ello te recomiendo que lo compruebes. Carga en W un 01 y hazle la funcion OR con PORTB (iorlw PORTB). Creo que era asi, con ello, uno de los FLAGS te alertara de que son iguales y le preguntas al flag con BTFSS si esta a uno. Haces un retardo de 20 milisegundos y vuelves a preguntar. Despues de eso ya puedes encender o apagar el led que te indique encendido o apagado.


Te hago un indice:

1- Configura puertos
2- Leer entrada de señal.
3- Comprobar 2 veces que esta a 1 con un retardo de 20MS entre medias.
4- Actuar para activar.
3- Leer entrada de señal.
5- Comprobar 2 veces que esta a 1 con un retardo de 20MS entre medias.
6- Actuar para desactivar.
7- Goto al punto 2.


Un saludo.


En línea

El final del camino no está determinado, lo determinamos nosotros mismos paso a paso, día a día, y se puede cambiar.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
AYUDA CON PROGRAMA
Diseño Gráfico
Luisango 1 2,658 Último mensaje 17 Abril 2005, 13:25 pm
por Sub_Cero
ayuda con mi programa
Programación Visual Basic
nitrox 2 2,517 Último mensaje 31 Julio 2005, 00:48 am
por Slasher-K
ayuda programa!!
Programación C/C++
rodrigo_103 4 3,745 Último mensaje 16 Septiembre 2012, 21:58 pm
por rodrigo_103
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines