TODOPIC
Microcontroladores PIC => Primeros pasos - Iniciación a los microcontroladores => Mensaje iniciado por: aikrana en 04 de Junio de 2011, 06:55:03
-
Buenas estoy empezando a trabajar con el 16f84 en ensamblador
Y me gustaría saber como podría hacer esta condicional:
declarar la variable color=0
(..... hago unos procesos....)
y preguntamos si color >=2,
si es así dejamos la variable color=0,
si no incrementamos color=color+1 y continuamos
Saludos ;-)
-
declarar la variable color=0
movlw 0x00 //carga a w el valor de 0
movwf color // pasa el valor de w a la variable color
y preguntamos si color >=2,
si es así dejamos la variable color=0,
si no incrementamos color=color+1 y continuamos
cmp color, 02
jae notequal
// a >= 02, viene aqui, que en este casodejamos la variable igua, no hacemos nada ¿no?
jmp done
// Sino (else) aquí, que sumamos 1 a color
notequal:
add 1,color
done:
// Continua programa
Espero que te sirva.
Salu2
-
declarar la variable color=0
movlw 0x00 //carga a w el valor de 0
movwf color // pasa el valor de w a la variable color
y preguntamos si color >=2,
si es así dejamos la variable color=0,
si no incrementamos color=color+1 y continuamos
cmp color, 02
jae notequal
// a >= 02, viene aqui, que en este casodejamos la variable igua, no hacemos nada ¿no?
jmp done
// Sino (else) aquí, que sumamos 1 a color
notequal:
add 1,color
done:
// Continua programa
Nota para los saltos:
* jbe = Salta si es menor o igual.
* jae = Si es mayor o igual
* je = Si es igual.
* ja = Si es mayor.
* jb = Si es menor
Espero que te sirva.
Salu2
Hola de nuevo lo estoy intentando integrar, por supuesto que me sirve de ayuda, muchas gracias....
Si ya me lo revisas me harías un gran favor
; processor 16f84
list p=16f84, f=inhx8m
#include <p16f84.inc>
__config _XT_OSC & _WDT_OFF & _PWRTE_ON
TopCount: equ 0x0C
BotCount: equ 0x0D
LCount0: equ 0x10
LCount1: equ 0x11
LCount2: equ 0x12
LCount3: equ 0x13
LCount4: equ 0x14
LCount5: equ 0x15
LCount6: equ 0x16
color: equ 0x09
movlw 0x00 // carga a w el valor 0
movwf color // pasa el valor de w a la variable color
blank: macro
bcf PORTB, color
cmp color, 02
jae notequal
movlw 0x00 // carga a w el valor 0
movwf color // pasa el valor de w a la variable color
jmp done
notequal: // sino es así
add 1,color // le sumamos 1
done:
endm
point: macro
bsf PORTB, color
cmp color, 02
jae notequal
movlw 0x00 // carga a w el valor 0
movwf color // pasa el valor de w a la variable color
jmp done
notequal: // sino es así
add 1,color // le sumamos 1
done:
endm
HSync: macro
bcf PORTB, 3 ; horiz sync
nop
bsf PORTB, 3 ; horiz sync
endm
VSync: macro
bcf PORTB, 4 ; vert sync
nop
nop
nop
nop
nop
bsf PORTB, 4 ; vert sync
endm
org 0
goto Start
org 0x20 ; start address 0
Start: clrf PORTB
bsf STATUS, RP0 ; select bank 1
clrf TRISB
bcf STATUS, RP0 ; select bank 0
bsf PORTB, 4 ; vert sync
LoopV: VSync ; 1-6
blank ; 1
movlw D'208'
movwf TopCount
movwf BotCount
movlw D'15'
movwf LCount0
movwf LCount1
movwf LCount2
movwf LCount3
movwf LCount4
movwf LCount5
movwf LCount6
BlankLoopTop: ; now, the blank area at the top
blank ; 1
nop ; 2
nop ; 3
call Delay10mkS ; 4-13
call Delay10mkS ; 14-23
nop ; 24
nop ; 25
nop ; 26
HSync ; 27-29
decfsz TopCount ; 30
goto BlankLoopTop ; 31
nop ; 32 (207*32=6624)
#include <text.inc> ; 7*15*32=3360
BlankLoopBot: ;now, the blank area at the bottom
blank ; 1
nop ; 2
nop ; 3
call Delay10mkS ; 4-13
call Delay10mkS ; 14-23
nop ; 24
nop ; 25
nop ; 26
HSync ; 27-29
decfsz BotCount ; 30
goto BlankLoopBot ; 31
goto LoopV ; 32 (207*32=6624)
Delay10mkS:
nop
nop
nop
nop
nop
nop
return
end
-
Espero no equivocarme pero me parece que en el set de instrucciones del pic 16f84 no estan las instrucciones jne, jn y cmp.
Para este pic hay 35 instrucciones que las puedes encontrar en: http://perso.wanadoo.es/pictob/instrucciones.htm (http://perso.wanadoo.es/pictob/instrucciones.htm)
Para comparar datos hay una respuesta en el foro, te dejo el link: http://www.todopic.com.ar/foros/index.php?topic=11922.0 (http://www.todopic.com.ar/foros/index.php?topic=11922.0)
Saludos !
-
Espero no equivocarme pero me parece que en el set de instrucciones del pic 16f84 no estan las instrucciones jne, jn y cmp.
Me parece que esas no son instrucciones propiamente dichas sino que son abreviaciones del compilador, que luego son reemplazadas por el código adecuado..
-
Uppss, jeje, perdona aikrana, tienes razón jim_17, no te equivocas, no me di cuenta.
¿Pq no usas un 16f628 que es lo mismo pero mejor y más barato?
Bueno, siento haberte confunduido, creo que este esterá mejor.
clrf color //pasa 0 a color
blank: macro
bcf PORTB, color
movlw 0x02 //cargo a w el valor a comparar
subwf color,w //resto color - w, si da positivo o cero es valido, si da menos es que era menos de 2. (color se me queda con el resultado, mirar luego)
btfsc STATUS,C //Salto si C es 0, osea el resultado es negativo y NO se da la condición
clrf color //pongo a color = 0, ya que si C no es 0 es que fue 1 y quiere decir que se cumplia condición (si es así dejamos la variable color=0)
incf color,1 //si no incrementamos color=color+1 y continuamos.
done:
endm
Espero que esta vez si que te sirva, jeje.
Salu2
-
Uppss, jeje, perdona aikrana, tienes razón jim_17, no te equivocas, no me di cuenta.
¿Pq no usas un 16f628 que es lo mismo pero mejor y más barato?
Bueno, siento haberte confunduido, creo que este esterá mejor.
movlw 0x00 //carga 0 a w
movwf color //pasa 0 a color
blank: macro
bcf PORTB, color
movlw 0x02 //cargo a w el valor a comparar
subwf color,w //resto color - w, si da positivo o cero es valido, si da menos es que era menos de 2. (color se me queda con el resultado, mirar luego)
movlw 0x00 // cargo 0 a w
btfsc STATUS,C //Salto si C es 0, osea el resultado es negativo y NO se da la condición
movwf color //pongo a color = 0, ya que si C no es 0 es que fue 1 y quiere decir que se cumplia condición (si es así dejamos la variable color=0)
addlw 0x01 //si no incrementamos color=color+1 y continuamos. Pongo 1 a w
addwf color,w //sumo 1 a color
done:
endm
Espero que esta vez si que te sirva, jeje.
Salu2
Gracias Dayes y AngelGris, por la ayuda, es cierto es un Pic muy básico, pero como dispongo de algunos los voy a aprovechar, cuando los utilice ya me pasaré al que me decis....
estoy empezando un poco en este mundo de los pic, de momento intentado hacer modificaciones sobre programas/proyectos ya realizados, ya que no tengo demasiado tiempo para realizarlos en casa...
Saludos :)
-
Ah! aquí lo tienes con pequeñas reftificaciones:
clrf color //pasa 0 a color
blank: macro
bcf PORTB, color
movlw 0x02 //cargo a w el valor a comparar
subwf color,w //resto color - w, si da positivo o cero es valido, si da menos es que era menos de 2. (color se me queda con el resultado, mirar luego)
btfsc STATUS,C //Salto si C es 0, osea el resultado es negativo y NO se da la condición
clrf color //pongo a color = 0, ya que si C no es 0 es que fue 1 y quiere decir que se cumplia condición (si es así dejamos la variable color=0)
incf color,f //si no incrementamos color=color+1 y continuamos.
done:
endm
Que estaba muy largo, ejje.
Gracias Dayes y AngelGris, por la ayuda, es cierto es un Pic muy básico, pero como dispongo de algunos los voy a aprovechar, cuando los utilice ya me pasaré al que me decis....
estoy empezando un poco en este mundo de los pic, de momento intentado hacer modificaciones sobre programas/proyectos ya realizados, ya que no tengo demasiado tiempo para realizarlos en casa...
Saludos :)
Umm, pues si estas empezando yo te aconsejo que empieces programandolos en C, y mucho más sino dispones de mucho tiempo. De esta manera te dara tiempo a hacerlo completo.
Creo que vas a aprender más rápido, y si quieres luego puedes echar un vistazo al código asm que te saca el compilador. Ah, y el hitech lite es gratis.
Salu2