Autor Tema: Ayuda inicio  (Leído 32957 veces)

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

Desconectado pibe

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 635
Re: Ayuda inicio
« Respuesta #15 en: 14 de Junio de 2006, 03:42:26 »
Mírate este mapa de memoria.




Es facil. Ves debajo de la tabla dice Bank 0, Bank 1 etc etc? Pues eso. Que si quieres usar uno de los registros debes mirar en que banco está.
El micro arranca con bank0 de default.
Por ejemplo: Que quieres usar el PIE1? pues antes debes pasar al banco 1 y eso se hace con bsf STATUS,RP0 y luego no olvidarse de volver a bank 0 con bcf STATUS,RP0.
Otro ejemplo: Quiero usar el INTCON pero veo que está en los 4 bancos. Pues nada usa cualquier banco.
Que quiero pasar a bank 2? en este caso (para el 16f877) es innecesario ya que como ves, casi todos los registros que estan en bank 2 y 3 también los tienes en bank 0 y 1.  Salvo quieras usar la eeprom en ese caso para pasar al Bank 2 es bsf STATUS,RP1 y para el Bank 3 es
bsf STATUS, RP0
bsf STATUS, RP1

En resumen:
Bank0 = bcf STATUS,RP0
             bcf STATUS, RP1

Bank1= bsf STATUS,RP0
             bcf STATUS, RP1

Bank2= bcf STATUS,RP0
             bsf STATUS, RP1

Bank3= bsf STATUS,RP0
             bsf STATUS, RP1

Yo tengo una fotocopia del mapa de memoria a mi lado siempre, luego ya los memorizas.

Saluten :)
« Última modificación: 14 de Junio de 2006, 04:04:19 por pibe »
Mi jefe mirando el prototipo que estoy creando: "Y eso va a funcionar?"

Desconectado picto

  • PIC16
  • ***
  • Mensajes: 106
Re: Ayuda inicio
« Respuesta #16 en: 14 de Junio de 2006, 06:18:51 »
Pibe una explicación genial! Por lo que véo es básico. Otra cosa que he aprendido, gracias.

Pero una cosa... a ver si lo he entendido bien.
Exactamente

Bank0 = bcf STATUS,RP0
             bcf STATUS, RP1

Bank1= bsf STATUS,RP0= Del 0 pasa
             bcf STATUS, RP1

Bank2= bcf STATUS,RP0
             bsf STATUS, RP1

Bank3= bsf STATUS,RP0
             bsf STATUS, RP1

RP0 que significa? A que equivale? Y RP1?
Y que diferencia de BSF a BCF?

Muchas gracias

Desconectado pibe

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 635
Re: Ayuda inicio
« Respuesta #17 en: 14 de Junio de 2006, 06:47:11 »
El registro STATUS te sirve , entre otras cosas, para indicarle al micro a que banco de memoria
te refieres. Si miras la hoja de datos del 877 verás que este registro (como todos) tiene 8 bits
de los cuales el bit 5 es el RP0 y el bit 6 es el RP1. Si limpias (BCF) ambos bits le indicas al micro
que trabaje en el banco 0, si pones a 1 (BSF) el bit 5 le indicas que se pase al banco 1 y así sucesivamente.

BCF = pon el bit a 0
BSF = pon el bit a 1

Ejemplo:
BSF PORTB,3 ; pon a 1 el bit 3 del puerto B
BCF prueba,4  ; pon a 0 el bit 4 de la variable "prueba"
« Última modificación: 14 de Junio de 2006, 06:54:13 por pibe »
Mi jefe mirando el prototipo que estoy creando: "Y eso va a funcionar?"

Desconectado picto

  • PIC16
  • ***
  • Mensajes: 106
Re: Ayuda inicio
« Respuesta #18 en: 14 de Junio de 2006, 06:57:24 »
Pibe, poco a poco voy entendiendo.

Ya entiedo Banco 0= 00000000.
Banco 1 = 00000100.
Banco 2 = 00001000.
Banco 3= 00001100.

no? Algo así?

Ya capto el significado de RPO. Supongo entonces que STATUS si en vez de poner los bits 5 y 6 por ejemplo el 1 o 2 significará otra cosa no?

Muchas garcias pibe

Desconectado pibe

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 635
Re: Ayuda inicio
« Respuesta #19 en: 14 de Junio de 2006, 07:15:17 »

Ya entiedo Banco 0= 00000000.
Banco 1 = 00000100.
Banco 2 = 00001000.
Banco 3= 00001100.

no? Algo así?


NO

En todo caso sería así:

Banco 0=  00000000.
Banco 1 = 00100000.
Banco 2 = 01000000.
Banco 3=  01100000.

El registro STATUS
******************

Contiene el estado aritmético de la ALU (unidad aritmético lógica)
, el estado del reset y los bits de selección del bacno de datos.

O sea:

STATUS register

bit 7 = IRP   ; se usa para direccionamento indirecto
bit 6 = RP1   ; bit de selección de banco
bit 5 = RP0 ; bit de seleccion de banco
bit 4 = TO   ; bit time out
bit 3 = PD  ; bit power down
bit 2 = Z   ; flag resultado de una operación aritmético lógica
         ;(si fue 0 la operación anterior este flag se pone a 1)
bit 1 = DC  ; acarreo (carry)
bit 0 = C   ; acarreo del bit mas significativo.

En nuestro caso nos interesan los bits 5 y 6 que son los de seleccion de banco, por lo
tanto no es necesario cargar 8 bits a este registro sino solamente "tocar" los bits
que te interesan.

bcf STATUS,5 o bien bcf STATUS,RP0

Una aclaración aquí:
En el encabezado de tu programa debes poner include   "P16F877a.INC", de esta manera
no es necesario que sepas cada bit de cada registro.

ejemplo: bcf STATUS,5 (el bit 5 que era????, ufff... a buscar por las hoja de datos...)

en cambio bcf STATUS,RP0 es mas entendible para nosotros y con el include   "P16F877a.INC"
que pusiste al principio el ensamblador MPLAB se encarga de traducir tu STATUS,RP0 a STATUS,5

Lo entiendes?
« Última modificación: 14 de Junio de 2006, 07:35:48 por pibe »
Mi jefe mirando el prototipo que estoy creando: "Y eso va a funcionar?"

Desconectado picto

  • PIC16
  • ***
  • Mensajes: 106
Re: Ayuda inicio
« Respuesta #20 en: 15 de Junio de 2006, 09:44:35 »
Si pibe, esto empieza a viciar. La verdad que uno solo es muy difícil empezar, pero con vuestros consejos se me hace más fácil.

Por ejemplo ahora quiero que cuando por RE0 tenga un 1, active todas las salidas a 1 de los puertos A, B y C.

Bien, pues no sé porque que en el proteus al pulsar el pulsador no cambian de estado...

Os pongo el código (por favor si veis algo mal corregidme)  :-/

Código: [Seleccionar]
LIST P=16F877, ; usar PIC 16F877
#include <p16f877a.inc>

__CONFIG _CP_OFF&_PWRTE_ON&_WDT_OFF&_XT_OSC ; code protec off
; power up timer on
; watchdog off
; osc XT

ORG 0

bsf STATUS,RP0 ; activamos banco 1, poniendo RP0 a 1 y RP1 a 0
bcf STATUS,RP1 ; activamos banco 1, poniendo RP0 a 1 y RP1 a 0

MOVLW 0X00 ; carga 00000 en W
MOVWF TRISA ; puerto A todos salidas
MOVLW 0X00 ; carga 00000 en W
MOVWF TRISB ; puerto B todos salidas
MOVLW 0X00   ; carga 00000 en W
MOVWF TRISC ; puerto C todos salidas
MOVLW 0XFF ; carga 1111 en W
MOVWF TRISE ; puerto E todo entradas

bcf STATUS,RP0 ; vovlemos al banco 0 poniendo RP0 a 0 y RP1 a 0
bcf STATUS,RP1 ; vovlemos al banco 0 poniendo RP0 a 0 y RP1 a 0


CLRF PORTA ;inicializamos a 0 el puerto A
CLRF PORTB ;inicializamos a 0 el puerto B
CLRF PORTC ;inicializamos a 0 el puerto C


ESPERAR ;etiqueta
btfss   PORTC,0      ;si RE0 es 1 saltara el goto, si es 0 pasará a GOTO ESPERAR
goto  ESPERAR ;salta a la etiqueta esperar
   
movlw 0xFF ;cargo todo a 1 en W
movwf PORTB ;pongo a 1 todo el puerto B
movwf PORTA ;pongo a 1 todo el puerto A.
movwf PORTC ;pongo a 1 todo el puerto C.

END

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Ayuda inicio
« Respuesta #21 en: 15 de Junio de 2006, 10:05:14 »
Hola, estas checkeando el PORTC,0 cuando en realidad deberia ser el PORTE,0
Cambia:

btfss   PORTC,0         ;si RE0 es 1 saltara el goto, si es 0 pasará a GOTO ESPERAR

Por
btfss   PORTE,0         ;si RE0 es 1 saltara el goto, si es 0 pasará a GOTO ESPERAR

Saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado picto

  • PIC16
  • ***
  • Mensajes: 106
Re: Ayuda inicio
« Respuesta #22 en: 15 de Junio de 2006, 10:44:11 »
Exactamente que es eso de cambair de banco? que hay 2 bancos? Para que sirven? Q pasa si no cambio de banco?

El PIC que estas utilizando actualmente(16F877) tiene cuatro banco.
Cada banco es una sub-division de la memoria total, tanto FLASH como RAM del PIC.
Si no cambias de banco, todos los registros que esten ubicados en bancos distintos al que estas no van a verse afectados por mas que te refieras a ellos(ejemplo: registros TRISA,TRISB) y en lugar de afectarlos, se veran afectados los registros de memoria ubicados a la misma "altura" de las mismas(ver Memory Organization en el datasheet del PIC que uses).

Ejemplo si no cambio de banco:

INICIO
bcf STATUS,RP0
bcf STATUS,RP1
clrf TRISA
clrf TRISB

Analizando: Fijate en la tabla(Memory Organization del datasheet del PIC) y vas a ver que TRISA = 0x85 y TRISB=0x86.
Estos registros estan ubicados en el banco 1 del PIC, sin embargo en el ejemplo que puse arriba, no pase al banco 1 antes de aplicarles alguna instruccion, entonces lo que sucede es que:
El ensamblador considera solo los 7 bits de menor peso de la direccion ingresada(¿por que? Mira en "Instruction Set Summary" y veras que el valor ingresado para trabajar con registros RAM deben ser / 0x00<=X<=0x7F), entonces:
En lugar de hacer: clrf  0x85, hara clrf 0x05 y en lugar de clrf  0x86 hara clrf 0x06.
Si te fijas en la tabla, veras que 0x05 es PORTA y 0x06 es PORTB. Y estan a la misma "altura" de los registros de configuracion de cada puerto(los TRIS).
Por lo tanto, debes ubicarte en el banco correcto antes de trabajar con registros que esten en un banco distinto al que estas.
Saludos.
Bruno una explicación maestra! No sé como agradeceros la ayuda.

Cada vez que quiera utilizar un registro PORTA o FSR tengo que cambiar de banco, perfecto.

Una cosa, por ejemplo los registros FSR, PCL, PIR1 por decir algunos, para que sirven?

Desconectado picto

  • PIC16
  • ***
  • Mensajes: 106
Re: Ayuda inicio
« Respuesta #23 en: 15 de Junio de 2006, 10:48:35 »
Hola, estas checkeando el PORTC,0 cuando en realidad deberia ser el PORTE,0
Cambia:

btfss   PORTC,0         ;si RE0 es 1 saltara el goto, si es 0 pasará a GOTO ESPERAR

Por
btfss   PORTE,0         ;si RE0 es 1 saltara el goto, si es 0 pasará a GOTO ESPERAR

Saludos.

Bruno, antes lo tenía en PORTE,0 pero no hacúia nada y he pegado el código de las pruebas´. PEro ya lo he solucionado!

Por cierto, es normal que con el MPlab al compilar me salgan todos estos errores?

Executing: "C:\Archivos de programa\Microchip\MPASM Suite\MPAsmWin.exe" /q /p16F877 "Probador_prueba.asm" /l"Probador_prueba.lst" /e"Probador_prueba.err"
Message[301] C:\ARCHIVOS DE PROGRAMA\MICROCHIP\MPASM SUITE\P16F877A.INC 36 : MESSAGE: (Processor-header file mismatch.  Verify selected processor.)
Warning[205] C:\I-O\PROBADOR_PRUEBA.ASM 12 : Found directive in column 1. (ORG)
Warning[203] C:\I-O\PROBADOR_PRUEBA.ASM 14 : Found opcode in column 1. (bsf)
Warning[203] C:\I-O\PROBADOR_PRUEBA.ASM 15 : Found opcode in column 1. (bcf)
Warning[203] C:\I-O\PROBADOR_PRUEBA.ASM 17 : Found opcode in column 1. (Movlw)
Warning[203] C:\I-O\PROBADOR_PRUEBA.ASM 18 : Found opcode in column 1. (movwf)
Message[302] C:\I-O\PROBADOR_PRUEBA.ASM 18 : Register in operand not in bank 0.  Ensure that bank bits are correct.
Warning[203] C:\I-O\PROBADOR_PRUEBA.ASM 20 : Found opcode in column 1. (MOVLW)
Warning[203] C:\I-O\PROBADOR_PRUEBA.ASM 21 : Found opcode in column 1. (MOVWF)
Message[302] C:\I-O\PROBADOR_PRUEBA.ASM 21 : Register in operand not in bank 0.  Ensure that bank bits are correct.
Warning[203] C:\I-O\PROBADOR_PRUEBA.ASM 22 : Found opcode in column 1. (MOVLW)
Warning[203] C:\I-O\PROBADOR_PRUEBA.ASM 23 : Found opcode in column 1. (MOVWF)
Message[302] C:\I-O\PROBADOR_PRUEBA.ASM 23 : Register in operand not in bank 0.  Ensure that bank bits are correct.
Warning[203] C:\I-O\PROBADOR_PRUEBA.ASM 24 : Found opcode in column 1. (MOVLW)
Warning[203] C:\I-O\PROBADOR_PRUEBA.ASM 25 : Found opcode in column 1. (MOVWF)
Message[302] C:\I-O\PROBADOR_PRUEBA.ASM 25 : Register in operand not in bank 0.  Ensure that bank bits are correct.
Warning[203] C:\I-O\PROBADOR_PRUEBA.ASM 26 : Found opcode in column 1. (MOVLW)
Warning[203] C:\I-O\PROBADOR_PRUEBA.ASM 27 : Found opcode in column 1. (MOVWF)
Message[302] C:\I-O\PROBADOR_PRUEBA.ASM 27 : Register in operand not in bank 0.  Ensure that bank bits are correct.
Warning[203] C:\I-O\PROBADOR_PRUEBA.ASM 29 : Found opcode in column 1. (bcf)
Warning[203] C:\I-O\PROBADOR_PRUEBA.ASM 30 : Found opcode in column 1. (bcf)
Warning[203] C:\I-O\PROBADOR_PRUEBA.ASM 33 : Found opcode in column 1. (CLRF)
Warning[203] C:\I-O\PROBADOR_PRUEBA.ASM 34 : Found opcode in column 1. (CLRF)
Warning[203] C:\I-O\PROBADOR_PRUEBA.ASM 35 : Found opcode in column 1. (CLRF)
Warning[203] C:\I-O\PROBADOR_PRUEBA.ASM 39 : Found opcode in column 1. (btfss)
Warning[203] C:\I-O\PROBADOR_PRUEBA.ASM 40 : Found opcode in column 1. (goto)
Warning[203] C:\I-O\PROBADOR_PRUEBA.ASM 42 : Found opcode in column 1. (movlw)
Warning[203] C:\I-O\PROBADOR_PRUEBA.ASM 43 : Found opcode in column 1. (movwf)
Warning[203] C:\I-O\PROBADOR_PRUEBA.ASM 44 : Found opcode in column 1. (movwf)
Warning[203] C:\I-O\PROBADOR_PRUEBA.ASM 45 : Found opcode in column 1. (movwf)
Warning[205] C:\I-O\PROBADOR_PRUEBA.ASM 47 : Found directive in column 1. (END)
Loaded C:\I-O\Probador_prueba.COD.
BUILD SUCCEEDED: Thu Jun 15 15:46:59 2006

Desconectado LabPIC

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 143
Re: Ayuda inicio
« Respuesta #24 en: 15 de Junio de 2006, 11:45:40 »
Minetras no te aparezca un mensaje de Error todo anda bien :mrgreen:.

Saludos LabPIC
¡¡¡Viva México cabrones!!!

Desconectado picto

  • PIC16
  • ***
  • Mensajes: 106
Re: Ayuda inicio
« Respuesta #25 en: 15 de Junio de 2006, 12:47:47 »
Minetras no te aparezca un mensaje de Error todo anda bien :mrgreen:.

Saludos LabPIC

Ya he montado el circuito para probar... pero ahora quiero hacer un antirrebotes y no sé si ahcerlo via software (creo que se puede) o vía hardwar.

Que me recomiendas?

Desconectado LabPIC

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 143
Re: Ayuda inicio
« Respuesta #26 en: 15 de Junio de 2006, 12:54:22 »
Lo mas comun es hacerlo vía software, generalmente el antirrebote no necesita un tiempo mayor a los 20 ms.

Saludos LabPIC
¡¡¡Viva México cabrones!!!

Desconectado picto

  • PIC16
  • ***
  • Mensajes: 106
Re: Ayuda inicio
« Respuesta #27 en: 15 de Junio de 2006, 12:56:49 »
Lo mas comun es hacerlo vía software, generalmente el antirrebote no necesita un tiempo mayor a los 20 ms.

Saludos LabPIC

Estoy buscando como hacerlo pero no lo encuentro...
Es complicado?

Desconectado LabPIC

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 143
Re: Ayuda inicio
« Respuesta #28 en: 15 de Junio de 2006, 12:58:21 »
¿A que frecuencia manejas el cristal oscilador del micro?. Enseguida te muestro un ejemplo.

Saludos LabPIC
¡¡¡Viva México cabrones!!!

Desconectado picto

  • PIC16
  • ***
  • Mensajes: 106
Re: Ayuda inicio
« Respuesta #29 en: 15 de Junio de 2006, 13:05:26 »
¿A que frecuencia manejas el cristal oscilador del micro?. Enseguida te muestro un ejemplo.

Saludos LabPIC

4Mhz...   :(


 

anything