Autor Tema: Condicional ????  (Leído 3339 veces)

0 Usuarios y 3 Visitantes están viendo este tema.

Desconectado aikrana

  • PIC10
  • *
  • Mensajes: 7
Condicional ????
« 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 ;-)

Desconectado DaYeS

  • PIC16
  • ***
  • Mensajes: 119
Re: Condicional ????
« Respuesta #1 en: 04 de Junio de 2011, 08:03:33 »
declarar la variable color=0

Código: [Seleccionar]
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

Código: [Seleccionar]
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
« Última modificación: 04 de Junio de 2011, 15:07:06 por DaYeS »
Si buscas resultados distintos, no hagas siempre lo mismo. Albert Einstein.

Desconectado aikrana

  • PIC10
  • *
  • Mensajes: 7
Re: Condicional ????
« Respuesta #2 en: 04 de Junio de 2011, 10:23:07 »
declarar la variable color=0

Código: [Seleccionar]
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

Código: [Seleccionar]
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

Desconectado jim_17

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 309
    • Blog personal
Re: Condicional ????
« Respuesta #3 en: 04 de Junio de 2011, 13:17:58 »
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

Para comparar datos hay una respuesta en el foro, te dejo el link: http://www.todopic.com.ar/foros/index.php?topic=11922.0


Saludos !
Share the world !

Blog's

http://www.area0x33.com

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Condicional ????
« Respuesta #4 en: 04 de Junio de 2011, 14:49:42 »
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..
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado DaYeS

  • PIC16
  • ***
  • Mensajes: 119
Re: Condicional ????
« Respuesta #5 en: 04 de Junio de 2011, 15:03:10 »
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.

Código: [Seleccionar]
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
« Última modificación: 04 de Junio de 2011, 20:38:06 por DaYeS »
Si buscas resultados distintos, no hagas siempre lo mismo. Albert Einstein.

Desconectado aikrana

  • PIC10
  • *
  • Mensajes: 7
Re: Condicional ????
« Respuesta #6 en: 04 de Junio de 2011, 16:08:01 »
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.

Código: [Seleccionar]
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  :)

Desconectado DaYeS

  • PIC16
  • ***
  • Mensajes: 119
Re: Condicional ????
« Respuesta #7 en: 04 de Junio de 2011, 17:00:22 »
Ah! aquí lo tienes con pequeñas reftificaciones:
Código: [Seleccionar]
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
« Última modificación: 05 de Junio de 2011, 13:05:48 por DaYeS »
Si buscas resultados distintos, no hagas siempre lo mismo. Albert Einstein.


 

anything