TODOPIC
Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: shini en 09 de Octubre de 2011, 00:16:50
-
holas, el problema que tengo con el codigo es que no hace lo que se supone que debe hacer. Lo simule en proteus y debugeando vi que cuando llegaba a la parte del salto indexado se devolvia al inicio y nose que podria ser. Soy nuevo en esto del assembler, ocupe el buscador y revise los otros hilos y todabia no e podido solucionar el problema.
quizas tiene que ver con el registro del pcl, ocupando el debugger del maplab y sin poner ningun estimulo me salta donde no deberia. Creo que es algo que ver con el PCL ya que viendo los ejemplos del libro "microcontrolador PIC 16f84" de Palacios salia que cuando pasaba eso era culpa de esto, pero no entendi que era lo malo del codigo. saludos pd, ocupe la libreria de tiempos que trae el libro
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
INCLUDE<P16F84.INC>
LIST P=16F84A
CBLOCK 0x0c
ti
ENDC
org 0x0
inicio
bsf STATUS,RP0
clrf TRISB
movf b'00011111',TRISA
bcf STATUS,RP0
principal
movf b'00000001',PORTB
p2
tiempo
movf PORTA,ti
movlw PORTA
andlw b'00011100'
bcf STATUS,C
rrf W
rrf W
addwf PCL,F
goto a1 ;000 0 seg
goto a2 ;001 1 seg
goto a3 ;010 2 seg
goto a4 ;011 3 seg
goto a4 ;100 3 seg
goto a5 ;101 4 seg
goto a6 ;110 5 seg
goto a7 ;111 6 seg
a1
movf b'00000000',PORTB
goto p2
a2
call Retardo_1s
goto direccion
a3
call Retardo_2s
goto direccion
a4
call Retardo_1s
call Retardo_2s
goto direccion
a5
call Retardo_2s
call Retardo_2s
goto direccion
a6
call Retardo_5s
goto direccion
a7
call Retardo_1s
call Retardo_5s
goto direccion
direccion
bcf STATUS,C
movlw ti
andwf b'00000011',0
addwf PCL,F
goto d1 ;0
goto d2 ;derecha
goto d3 ;izquierda
goto d1 ;0
d1
movwf b'00000000'
goto p2
d2
rrf PORTB
goto p2
d3
rlf PORTB
goto p2
include<RETARDOS.inc>
end
-
Hola!
Fijate en el set de instrucciones, estas utilizando a W de manera incorrecta al hacer:
rrf W
rrf W
Ya que W NO es un registro mapeado fisicamente en los PIC16F.
Tenes que trabajar sobre un registro FISICO las rotaciones...Saludos.
-
o gracias.
cree una variable nueva, y paso del w a la variable nueva para hacerle la rotacion y despues regresando de nuevo a w. quedando haci
movwf t2
rrf t2,1
rrf t2,1
movlw t2
sigue sin funcionar el salto =(. Saludos
-
que es lo que quieres hacer???
-
jajaja buena pregunta no lo habia puesto.
tengo 5 entradas y 8 salidas, en la salida estan conectados 8 leds la idea es que se prenda 1 y este se mueva a la derecha o izquierda dependiendo de la entrada
ocupar Ra0 y Ra1 para el movimiento de derecha e izquierda
y ocupar Ra2, Ra3 y Ra4 para los tiempos. con la siguiente tabla de verdad
Ra0 Ra1 salida
0 0 todo apagado
0 1 derecha
1 0 izquierda
1 1 todo apagado
Ra2 ra3 ra4 tiempo
0 0 0 todo apagado
0 0 1 1 seg
0 1 0 2 seg
0 1 1 3 seg
1 0 0 3seg
1 0 1 4 seg
1 1 0 5 seg
1 1 1 6 seg
-
Hola. Estás haciendolo mal:
tiempo
rrf PORTA,W
movwf t2
rrf t2,W
andlw b'00000111'
addwf PCL,F
Por favor, revisa el set de instrucciones. Veo MUCHOS errores en el uso de las instrucciones. Revisá el Instruction Set Summary en el datasheet:
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
INCLUDE<P16F84.INC>
LIST P=16F84A
CBLOCK 0x0c
ti
ENDC
org 0x0
inicio
bsf STATUS,RP0
clrf TRISB
movf b'00011111',TRISA
bcf STATUS,RP0
principal
movf b'00000001',PORTB
p2
tiempo
movf PORTA,ti
movlw PORTA
andlw b'00011100'
bcf STATUS,C
rrf W
rrf W
addwf PCL,F
goto a1 ;000 0 seg
goto a2 ;001 1 seg
goto a3 ;010 2 seg
goto a4 ;011 3 seg
goto a4 ;100 3 seg
goto a5 ;101 4 seg
goto a6 ;110 5 seg
goto a7 ;111 6 seg
a1
movf b'00000000',PORTB
goto p2
a2
call Retardo_1s
goto direccion
a3
call Retardo_2s
goto direccion
a4
call Retardo_1s
call Retardo_2s
goto direccion
a5
call Retardo_2s
call Retardo_2s
goto direccion
a6
call Retardo_5s
goto direccion
a7
call Retardo_1s
call Retardo_5s
goto direccion
direccion
bcf STATUS,C
movlw ti
andwf b'00000011',0
addwf PCL,F
goto d1 ;0
goto d2 ;derecha
goto d3 ;izquierda
goto d1 ;0
d1
movwf b'00000000'
goto p2
d2
rrf PORTB
goto p2
d3
rlf PORTB
goto p2
include<RETARDOS.inc>
end
Saludos.
-
gracias, lo vere bien. ahunque realmente no te entiendo mucho, es mi primer programa que empese solo desde 0.
y en el set de instrucciones, si aparece el movf, quizas lo estoy utilizando mal. lo vere.
saludos