Foro de elhacker.net

Informática => Electrónica => Mensaje iniciado por: Riki_89D en 15 Abril 2011, 17:06



Título: Pasar 1 a PUERTO B Ensamblador
Publicado por: Riki_89D en 15 Abril 2011, 17:06
Hola que tal,veran asta ahora para enviar "1" al puerto RB0 usaba esto:

Código
  1. bsf PORTB,0
  2.  

eso va bn pero,e ehco una ejercicio que escribe en la EEPROM un 1,despues lo lee i lo guarda en un registro "R1" (0x0C)

y para comprobar si lo hace correctamente quiero pasar R1 al RB0,pero nose como hacerlo,alguein puede ayudarme?¿



saludos


Título: Re: Pasar 1 a PUERTO B Ensamblador
Publicado por: skapunky en 15 Abril 2011, 17:29
Te cuento, como siempre bajo Atmel que es lo que yo domino. Los Atmel puedes declarar o hay en las librerias registros con los que poder pasar valores, direccionamiento indirectos etc... Además casualmente se suelen llamar R1, R2...no se si será casualidad.

Lo que quieres hacer, en caso de atmel se podría hacer con un mov directamente, asi:

mov PortB, R1


o por ejemplo utilizando el registro auxiliar B.

mov B, 11111111b
mov PORTB, B


En tu caso, imagino que puedes aplicar diréctamente el registro R1 sobre PORTB, almenos podrías probarlo. De PIC todo lo que hago es en C, que es muchísimo mas fácil y corto programar.


Título: Re: Pasar 1 a PUERTO B Ensamblador
Publicado por: Riki_89D en 15 Abril 2011, 17:39
por lo que veo,cuano usas el registro auxiliar B,pones 1 en todos los puertos B,no?¿yo me referia solo poner uno (B0) con el valor de R1,pero sin usar bsf,me explico?



gracias de antemano amigo


Título: Re: Pasar 1 a PUERTO B Ensamblador
Publicado por: Riki_89D en 15 Abril 2011, 19:19
Oye,se me a ocurrido una cosa,la instruccion movf se usaria asin:
Código
  1. movf PORTB,R1
  2.  

mi pregunta es,el PORTB  tiene 8 bits que son los 8 pines B del PIC,cuando ejecuto esa instruccion el valor de R1 en que bit se pone? en el 1 (RB0) supongo no?¿ si es asin,como poria rotar ese bit a la posicion qu yo quiero,osea moverlo a la izquierda para ponerlo en el pin que yo quiera?¿

aun que creo que en Atmel que es el que usas tu,los MOV son diferentes xd,son como el ensamblador del PC,tu cuando haces esto:
Código
  1. MOV portb,b
  2.  

pasas el contenido de "b" a porb verad?¿


en el del 16f84 es al reves:
Código
  1. movf portb,b
  2.  

alli es viceversa,portb pasa a "b" xd

corrigeme si me equivoco pero es lo que me parece...xd



saludos



Título: Re: Pasar 1 a PUERTO B Ensamblador
Publicado por: skapunky en 15 Abril 2011, 21:36
Vale, un solo pin, pues sencillo, en atmel seria:

PORTB.0 equ {direccion que sea}
PORTB.0 = 1

o puedes hacer:

PORTB equ {dirección que sea}
PORTB = 00000001b

Las dos cosas són equivalentes. Si, en Atmel que es la arquitectura 8086, por eso el asm es diferente ligeramente los MOV son MOV, no se usa MOVW o MOVF...en ese sentido es mas sencillo aunque la programación de atmels luego se complica mas.

Por eso, cuando descubrí el C dije adiós al Assembler xd.

Tema rotación: Para atmel hay dos instrucciones de rotación de bits de un puerto, para PIC's se utiliza las instrucciónes:

rrf -> Rota a la derecha 1 bit.

ej: si el puerto valia 00000001 ahora vale 100000000

rlf --> Rota a la izquierda un bit.

ej: si puerto vale 00000001 ahora vale 00000010


En atmel:

mov PORTB, R1

El contenido de R1 pasa al puerto, no al revés, es igual que los PIC.


Título: Re: Pasar 1 a PUERTO B Ensamblador
Publicado por: Riki_89D en 15 Abril 2011, 22:46
Okey,es verdad y sabia la existencia de esas dos funciones :) que bobo soy,hablando de esto del ASM,yo tambien programe en C,pero me pase al ASM,me cae mejor,parece una tonteria pero nose,me gusta mas aparate que e slo que nos enseñan,es que el profesor dice que con ASM puedes controlar la mas minima parte del PIC,y que si fuera para PC no valdira la pena,pero para Microcontroladores va muy bien,ya que son programas mas rapidos,y pequeños,y en el caso de los PIC hya que tener en cuenta el tamaño del programa etc etc etc,unos rollazos que nos pega xd en fin
volvieno al tema,una ultima duda


cuando yo ago:

movf R1,PUERTOB


eso pasa R1 a PuertoB

el puertoB tiene 8 bits,el bit de R1 en que posicion de PORTB se pone? en el bit 1 o en el  2o en cual?¿


Título: Re: Pasar 1 a PUERTO B Ensamblador
Publicado por: skapunky en 16 Abril 2011, 00:29
Hay un pequeño error de concepto, en PIC el direccionamiento de valores a puertos hazlo así, a ver si funciona:

movlw b'00000001'
movwf PORTB


En teoria ese fragmento deberia sacar 00000001 por el puerto B, Atmel y Microchip sus ensambladores son distíntos y se usan de diferente forma. El ej que has puesto es una fusión entre atmel y microchip xd. Prueba como te puesto.

El equivalente de B de atmel en PIC seria W.


Título: Re: Pasar 1 a PUERTO B Ensamblador
Publicado por: Riki_89D en 16 Abril 2011, 02:24
Hola,lo probe y funciono perfetcamente gracias por todo :)


Título: Re: Pasar 1 a PUERTO B Ensamblador
Publicado por: pic16f84a en 29 Diciembre 2013, 23:00
una pregunta?? si yo quiero poner en cero un bit de salida del puerto b por ejemplo RB0 ocupo esto..........bcf portb,0   .........PONGO ENCERO LA SALIDA DEL BIT 0 DEL PUERTOB.......PERO AHORA QUIRO PONER EN CERO 2 PUERTOS COMO LA HAGO???????????