TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: minchomania en 15 de Febrero de 2005, 21:32:00
-
UTILIZO A ORDEN BANKSEL Y AL COMPILAR NO SALA NUNCA DE BANCO 0
QUE CONFIGURCION HAY QUE UTILIZAR EJ:
ESTE EJEMPLO LA SAQUE DE UN LIBRO
;LEER Y ESCRIBIR LA EEPROM
LIST P=16F676
#INCLUDE "P16F676.INC"
CBLOCK 0X20
CONTA, TECLA, LOOPS, LOOPS1, LOOPS2, LOOPS3
UNIDAD,DECENAS, PRIMERO, SEGUNDO, DATO
ENDC
;-------------------------------------
ORG 00
CALL 3FFH
BANKSEL OSCCAL
MOVWF OSCCAL
GOTO INICIO
ORG 05
;------------------------------------
; SECCION PARA LAS SUBRUTINAS
;------------------------------------
VER CALL MOSTRAR
RETARDO MOVLW D"250"
MOVWF LOOPS
TOP1 MOVLW D"10"
MOVWF LOOPS1
TOP NOP
NOP
NOP
NOP
NOP
NOP
DECFSZ LOOPS1
GOTO TOP
DECFSZ LOOPS
GOTO TOP1
DECFSZ CONTA,1
GOTO VER
RETLW 00
RET1 MOVLW D"1" ;RETARDO DE UN SEGUNDO PARA LA
MOVWF LOOPS2 ;MULTIPEXACION DE LA VISUALIZACION
TOP3 MOVLW D"110"
MOVWF LOOPS3
TOP2 NOP
NOP
NOP
NOP
NOP
NOP
DECFSZ LOOPS3
GOTO TOP2
DECFSZ LOOPS2
GOTO TOP3
RETLW 00
MOSTRAR MOVF SEGUNDO,W ;RUTINA PARA MOSTRAR EL
MOVWF PORTC ;SEGUNDO NUMEROS
BSF PORTC,4
CALL RET1
BCF PORTC,4
MOVF PRIMERO,W ;RUTINA PARA MOSTRAR EL
MOVWF PORTC ;PRIMER NUMERO
BSF PORTC,5
CALL RET1
BCF PORTC,5
RETURN
BINBCD CLRF DECENAS ;RUTINA PARA PASAR DE
CLRF UNIDAD ;BINARIO A BCD
MOVLW .10
REPITE SUBWF DATO,1
BTFSS STATUS,0
GOTO SUM
INCF DECENAS
GOTO REPITE
SUM ADDWF DATO,0
MOVWF UNIDAD
RETURN
LEER BSF EECON1,0 ;RUTINA DE LEER EN LA MEMORIA
MOVF EEDATA,W ;EEPROM DE DATOS
BANKSEL PORTA
RETURN
ESCRIBIR BSF EECON1,2 ;RUTINA DE ESCRIBIR EN LA MEMORIA
BANKSEL PIR1 ;EEPROM DE DATOS
BSF PIR1,EEIF
BANKSEL EECON2
MOVLW 055
MOVWF EECON2
MOVLW 0AAH
MOVWF EECON2
BSF EECON1,2
ESPERA
BANKSEL PIR1
BTFSS PIR1,EEIF
GOTO ESPERA
BCF PIR1,EEIF
BANKSEL EECON1
BCF EECON1,2
BANKSEL PORTA
RETLW 00
INICIO ;INICIO DEL PROGRAMA PRINCIPAL
BANKSEL PORTA
MOVLW D"7" ;DESABILITO LOS COMPARADORES Y DEJO
MOVWF CMCON ;LOS PINES DEL PUERTO A COMO I/O
BANKSEL TRISA ;DIGITALES
CLRF ANSEL ;DESTIVO LOS CONVERSORES
MOVLW B"111111" ;CONFIGURO EL PUERTO A COMO ENTRADA
MOVWF TRISA
CLRF TRISC ;CONFIGURO PUERTO C COMO SALIDA
BANKSEL PORTA
START MOVF PORTA,W ;LEO EL PUERTO A
MOVWF DATO ;LLEVO LO LEIDO EN A AL REGISTRO DATO
CALL BINBCD ;CONVIERTO DE BINARIO A BCD EN
MOVF UNIDAD,W ;LOS REGISTROS UNIDAD Y DECENAS
BANKSEL EEDATA ;CAMBIO A BANCO DE EEDATA
MOVWF EEDATA ;CARGO W EN EEDATA, ESTE ES EL
MOVLW D"8" ;DATO QUE SE ESCRIBIRA EN LA POCISION
MOVWF EEADR ;8 DE LA MEMORIA DE DATOS
CALL ESCRIBIR
MOVF DECENAS,W ;ESCRIBO TAMBIEN EL CONTENIDO DE RE-
BANKSEL EEDATA ;GISTRO DECENAS EN LA POCISION 09
MOVWF EEDATA ;DE LA MEMORIA DE DATOS CARGANDOLO
MOVLW D"9" ;PREVIAMENTE EN E REGISTRO EEDATA
MOVWF EEADR
CALL ESCRIBIR
MOVLW D"8" ;LEO LOS DATOS QUE ESCRIBI EN LAS
BANKSEL EEADR ;POSICIONES 8 Y 9 DE LA MEMORIA
MOVWF EEADR ;DE DATOS PARA MOSTRAROS
CALL LEER
MOVWF PRIMERO
BANKSEL EEADR
MOVLW D"9"
MOVWF EEADR
CALL LEER
MOVWF SEGUNDO
CALL MOSTRAR
BANKSEL PORTA
MOVLW D"40"
MOVWF CONTA
CALL RETARDO
GOTO START
END
-
Mira el registro STATUS, verás q ahí hay bits cuya función es la selección de banco.
Por ejemplo:
bsf STATUS,5 pone a 1 el bit 5 del registro status del pic... es decir: selecciona el banco 1.
con bcf STATUS,5 vuelves al banco 0
¿te aclaras?
-
gracias por contestar quisiera saber que otros compiladores de asm hay fuera del del microchip
que configuraciones hay que tener
por favor ensaya con el codigo de arriba a ver si te pasa lo mismo
Eso hago pero al compilarlo me sale esto.....
Clean: Deleting intermediary and output files.
Clean: Done.
Executing: "C:Archivos de programaMPLAB IDEMCHIP_Toolsmpasmwin.exe" /q /p16F819 "LEER Y ESCRIBIR EEPROM.asm" /l"LEER Y ESCRIBIR EEPROM.lst" /e"LEER Y ESCRIBIR EEPROM.err"
Warning[215] C:MPASMWIN370PROYECTOSLEER Y ESCRIBIR EEPROM.ASM 4 : Processor superseded by command line. Verify processor symbol.
Message[301] C:ARCHIVOS DE PROGRAMAMPLAB IDEMCHIP_TOOLSP16F676.INC 32 : MESSAGE: (Processor-header file mismatch. Verify selected processor.)
Message[302] C:MPASMWIN370PROYECTOSLEER Y ESCRIBIR EEPROM.ASM 18 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[305] C:MPASMWIN370PROYECTOSLEER Y ESCRIBIR EEPROM.ASM 35 : Using default destination of 1 (file).
Message[305] C:MPASMWIN370PROYECTOSLEER Y ESCRIBIR EEPROM.ASM 37 : Using default destination of 1 (file).
Message[305] C:MPASMWIN370PROYECTOSLEER Y ESCRIBIR EEPROM.ASM 52 : Using default destination of 1 (file).
Message[305] C:MPASMWIN370PROYECTOSLEER Y ESCRIBIR EEPROM.ASM 54 : Using default destination of 1 (file).
Message[305] C:MPASMWIN370PROYECTOSLEER Y ESCRIBIR EEPROM.ASM 74 : Using default destination of 1 (file).
Message[302] C:MPASMWIN370PROYECTOSLEER Y ESCRIBIR EEPROM.ASM 79 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] C:MPASMWIN370PROYECTOSLEER Y ESCRIBIR EEPROM.ASM 80 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] C:MPASMWIN370PROYECTOSLEER Y ESCRIBIR EEPROM.ASM 83 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] C:MPASMWIN370PROYECTOSLEER Y ESCRIBIR EEPROM.ASM 88 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] C:MPASMWIN370PROYECTOSLEER Y ESCRIBIR EEPROM.ASM 90 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] C:MPASMWIN370PROYECTOSLEER Y ESCRIBIR EEPROM.ASM 91 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] C:MPASMWIN370PROYECTOSLEER Y ESCRIBIR EEPROM.ASM 98 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] C:MPASMWIN370PROYECTOSLEER Y ESCRIBIR EEPROM.ASM 106 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] C:MPASMWIN370PROYECTOSLEER Y ESCRIBIR EEPROM.ASM 108 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] C:MPASMWIN370PROYECTOSLEER Y ESCRIBIR EEPROM.ASM 109 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] C:MPASMWIN370PROYECTOSLEER Y ESCRIBIR EEPROM.ASM 116 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] C:MPASMWIN370PROYECTOSLEER Y ESCRIBIR EEPROM.ASM 118 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] C:MPASMWIN370PROYECTOSLEER Y ESCRIBIR EEPROM.ASM 122 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] C:MPASMWIN370PROYECTOSLEER Y ESCRIBIR EEPROM.ASM 124 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] C:MPASMWIN370PROYECTOSLEER Y ESCRIBIR EEPROM.ASM 128 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] C:MPASMWIN370PROYECTOSLEER Y ESCRIBIR EEPROM.ASM 133 : Register in operand not in bank 0. Ensure that bank bits are correct.
Loaded C:MPASMWIN370ProyectosLEER Y ESCRIBIR EEPROM.COD
BUILD SUCCEEDED: Wed Feb 16 22:27:33 2005
-
Ok, lo q estas leyendo es una serie de advertencias del MPLAB, kieren decir que tu proyecto funciona (esta bien escrito) pero q faltan algunas declaraciones q podrian afectar el funcionamiento.
En primer lugar tienes el mensaje 215, este error refiere a que estas usando un encabezado (include file) distinto al procesador que tienes especificado en el proyecto, si t fijas encontraras que el mpasmwin esta compilando codigo para el 16F819 mientras el encabezado que usas es el de 16F676. La solucion es declarar bien el procesador en el mpasmwin, esto lo haces en opciones de proyecto.
El mensaje 305 refiere a un error tipico de cuando escribes en asm, no es realmente algo de alta importancia pero si un detalle q debes tener en cuenta, refiere a que debes escribir un destino al resultado de la operacion, por ejemplo:
decfsz reg ; este codigo generara un mensaje 305 porq no has definido a dond va el resultado, la forma correcta es
decfsz reg, 1 ;este guardara el resultado de la operacion en el mismo registro reg
o
decfsz reg, 0; este guarda el resultado en W
El compilador usa de forma predeterminada el registro mismo (el primer ejemplo), pero revisa tu codigo, no vaya a ser q necesites q los resultados tengan q ir a w...
Finalmente el mensaje 302, solo t indica q estas trabajando (leyendo y escribiendo) con los registros de la pagina 1 y no con la pagina 0, solo es un recordatorio, pero debes tenrlo en cuenta en caso de q hayas olvidado setear el bit 5 de status en 0, si todos tus registros de trabajo estan en la pagina 0. Si trabajas con la pagina 1 entonces revisa bien la forma en q funciona tu programa a fin de evitar q tengas un problema con tu proyecto.
-
Mu bien explicado fenix



