Programación Específica > Microcontroladores
Problema Con Variable En Mpasm
Pegasux:
Gracias Huguen, queda claro, voy a dejar el cambio de bancos como lo tenia:
CBLOCK 0x0C ; La zona de memoria
APOS ; dirección de memoria
FPOS ; Posición 0x0D de RAM.
ERRORR ; 0x0E
PASOA ; 0x0F posicion de paso de los motores
PASOF ; 0x10
DIRECCION ; 0x11
ENDC
#DEFINE ABAJO DIRECCION,0 ; abajo es el bit 0 del byte "direccion"
#DEFINE SENA PORTC,0 ; sena es el bit 0 del puerto C
#DEFINE SENB PORTC,1
y mas abajo...
bcf STATUS,RP0 ; portc esta en el banco 0
; movlw b'00000010' ; mira SENF (frenado) que
; andwf PORTC,0 ; nos quedamos el bit 1 en W
; movwf SENF ; guardamos en senF 1 o 0
; clrw ; W = 0
; subwf SENF,0 ; W = SENF - 0
btfsc SENF ; SENF = 1 -> esta abajo
goto FRENADO ; el pedal de freno esta pisado, va a frenar
Tienes razon con lo de ahorrar memoria, como hice un cortar y pegar ni me di cuenta, ya lo he cambiado.
Saludos.
Pegasux:
Algo esta fallando, en el siguiente codigo, tanto si senf esta a 0 como si esta a 1, se salta la linea del goto.
btfss SENF ; SENF = 1 -> esta abajo, evita goto
goto FRENADO ; el pedal de freno esta
Las lineas del puerto C cambian correctamente con los estimulos. ¿Hay que hacer algo para que la variable SENF se actualice al valor de su correspondiente bit del puerto C cuando cambio un estimulo?
Estoy pasando el antivirus por si acaso, a ver si encuentra algo.
Saludos.
Huguen_aus_Tirol:
Hola! en tu programa veo que declaras SENF como byte, y usas una instruccion de manejo de bits.
Deberia ser:
btfss SENF.x
donde x es el bit que quieres verificar
saludos
Pegasux:
--- Cita de: "Huguen_aus_Tirol" --- Hola! en tu programa veo que declaras SENF como byte, y usas una instruccion de manejo de bits.
Deberia ser:
btfss SENF.x
donde x es el bit que quieres verificar
saludos
--- Fin de la cita ---
Hola de nuevo. SENF al principio lo declaraba como byte, pero ahora esta como me ha dicho Jonathan: #DEFINE SENF PORTC,1 por eso utilizo btfss.
Me pasa otra cosa, con las siguientes instrucciones:
movlw b'01100000'
movwf PASOF
el valor de PASOF deberia ser 60 (96 en decimal), pero se me pone a 20!! (32'd)
El contenido del W es 60, y si cambio PASOF por PASOA funciona bien.
¿Alguien sabe el porque?
Saludos.
P.D: No habia virus!!
Huguen_aus_Tirol:
Hola!
Estás simulando con el MPLAB y usas estímulos? No se que aconsejarte, ya que nunca use estímulos en la simulación; pero recuerdo que una vez leí algo de que no era muy conveniente <_<
Qué versión usas? Quizá te convenga actualizar a la última...
Eso que pasa es muy extraño, la verdad que no se que podría ser. Tal vez podrías adjuntar el programa, así lo revisamos (aprovecha que tengo algo de tiempo, jeje!!)
La verdad que es extraño...
Saludos
Navegación
[#] Página Siguiente
[*] Página Anterior
Ir a la versión completa