Autor
|
Tema: Ensamblador en Microcontrolaores (Leído 9,319 veces)
|
Riki_89D
Desconectado
Mensajes: 851
BCN CITY
|
Hola que tal,veran,recien empezemos en clase con Ensamblador para Micros (concretamente el PIC16f84),por ahora aprendimos bastantes cosas,como pasra del banco 0 al 1 poniendo el bit 5 el registro STATUS a 1,configurar los puertos como entrada/salida,prender leds etc etc,pero ami me surge una pequeña duda qe aun no cabao de entender,es una tonteria pero necesito alguin que me asesore bien con esto,el caso es que en los bancos de la memoria que son dos el 0 y el 1) inicialmente el PIC se inica en el Banco 0,entonces en el banco 0 esta PORTA y PORTB,lo que no entiendo lo e TRISA y TRISB,que significa eso exactamente,lo digo por que en visto codigos del profesor para configurar puetos del tipo asin: TRISB equ 0x06 ;Direccion de todos los puertosb ?¿?¿?¿ PORT_B equ 0x06 ;Direccion de puertos B d enuevo ?¿ :S Estado equ 0x03 ;Direccion del registro Estatus ... bsf Estado,5 .. movwl b'00000000' movfw TRISB bcf Estado,5 .. bsf PORT_B,0 ;Pone 1 a RB0
ami lo que me confunde es lo e TRISB,TRISB se refiere a todos los registros del puerto b?¿para enviar datos al PIN RB0 (por ejemplo) hay que cambiar al banco 1 obligatoriamente ?¿ Y LO MA SIMPORTANTE,SI PORTB Y PORTA ESTAN EN EL BANCO 0 (Segun el PDF que nos DIO)POR QUE HAY QE CAMBIAR AL BANCO 1 PARA HACER TODO ESO ?¿ Esa e smi gran duda principal gracias
|
|
« Última modificación: 14 Abril 2011, 13:19 pm por Riki_89D »
|
En línea
|
|
|
|
skapunky
Electronik Engineer &
Colaborador
Desconectado
Mensajes: 3.667
www.killtrojan.net
|
TrisX se utiliza para configurar el puerto X como entrada o como salida según si le das el valor 00000000 o 11111111.
En los microcontroladores de Atmel por ejemplo, la instrucción TRIS no existe ni tiene una equivalente, simplemente declaras los puertos al inicio como entradas o salidas dándoles el valor 0 o 1 como los PIC.
De hecho, en la universidad yo aprendí Atmel, posteriormente he programado PIC's y siempre he utilizado TRIS, y esa es mi conclusión, quizá la razón sea otra pero segun el fragmento de código que has puesto tanto TRISB como PORT_B apúntan a la misma dirección de memória.
|
|
|
En línea
|
Killtrojan Syslog v1.44: ENTRAR
|
|
|
Riki_89D
Desconectado
Mensajes: 851
BCN CITY
|
Hola amigo,pues eso es,por que la misma direccion?¿ por que hay que cambiar de banco para configurar los puertos?¿ :S no pueo hacer directamente: movlw b'00000000' movwf PORT_B
y ya esta?¿,por que PORTB esta en el banco 0 que es en el que inicia el PIC o en vez de PORT_B poner TRISB ?¿ pero sin tner que ir al banco 1 ?¿ saludos
|
|
|
En línea
|
|
|
|
skapunky
Electronik Engineer &
Colaborador
Desconectado
Mensajes: 3.667
www.killtrojan.net
|
Con los Atmel, para configurar los puertos como entradas o salidas puedes hacerlo de forma directa:
Ej.
EQU P1 {la que sea} EQU P2 {la que sea}
MOV P1,#00H ; salida MOV P2,#FFH ; entrada
|
|
|
En línea
|
Killtrojan Syslog v1.44: ENTRAR
|
|
|
Riki_89D
Desconectado
Mensajes: 851
BCN CITY
|
Vale,y no sabes si con el PIC16F84 se puede hacer de forma directa tambien?¿
saludos y gracias
|
|
|
En línea
|
|
|
|
skapunky
Electronik Engineer &
Colaborador
Desconectado
Mensajes: 3.667
www.killtrojan.net
|
Ni idea, yo siempre he utilizado lo de TrisX (sin saber porqué), todo es probarlo. Si tu codigo donde las direcciónes de memória coinciden funcionan las entradas o salidas, entonces TrisX no sirve para nada.
Espera, voy a ver un libro de PIC's que tengopor aquí i si saco algo en claro lo pongo.
nada, se debe utilizar TRISx, imagino que debe ser cosas de diseó del IC, atmel no lo requiere, MicroChip se vé que si.
Por cierto dos cosas:
1º En el libro que tengo pone que TRIS solo se usa en pics de gama baja, no es cierto del todo ya que yo usé de gama alta (18F) y utilizé TRIS. Otra cosa es que no haga falta hacerlo, ya lo comprobaré.
2º El trozo de código es erróneo, PORTB y TRISB no pueden contener la misma dirección.
La del puerto B si debe ser 0x06 ya que tiene sentido pero la de TRISB debería ser mucho mayor (según el pic que utilizes).
|
|
« Última modificación: 14 Abril 2011, 18:14 pm por skapunky »
|
En línea
|
Killtrojan Syslog v1.44: ENTRAR
|
|
|
Riki_89D
Desconectado
Mensajes: 851
BCN CITY
|
Hola,acabo e hacer una prueba i efectivamente,hay que pasar al otro banco,no s epuede hacer dierctamene,uso el 16F84,ya decia yo,es imposible ocmo TRISB va a tener la misma direccion que PORTB,lo que PORTB esta en el banco 0 y trisb esta en el BANCO1,Segun el DataSheet TRISB se enceuntra en la ireccion 86h del banco 1,i PORTB se encuentra en 6h del banco 0,entonces,en el codigo debo cambiar el TRISB equ 0x06 por TRISB equ 0x86 no?¿
saludos
|
|
|
En línea
|
|
|
|
skapunky
Electronik Engineer &
Colaborador
Desconectado
Mensajes: 3.667
www.killtrojan.net
|
Si exacto, debe quedarte:
PORTB equ 0x06 ( O como quieras llamarle al puerto B) TRISB equ 0x86
|
|
|
En línea
|
Killtrojan Syslog v1.44: ENTRAR
|
|
|
Riki_89D
Desconectado
Mensajes: 851
BCN CITY
|
Okey,lo acabo de probra y funciona perfectamene,mil gracias por tu ayuda,me ha sayuado mucho,ojala tuviera a gente asin en mi messenger... saludos y gracias de nuevo amigo ^^
|
|
|
En línea
|
|
|
|
Riki_89D
Desconectado
Mensajes: 851
BCN CITY
|
Me a surjido otra duda,necesito usar el registro TMR0 para crear un timer,necesito que cada 1 segundo se prenda un led e mirado como configurar dicho registor pero no lo entiendo muy bien,podrias darme un pequeñop ejemplo explicativo porfavor?¿
racias
|
|
|
En línea
|
|
|
|
|
|