TODOPIC
Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: pet897 en 05 de Junio de 2016, 23:55:17
-
Necesito ayuda con mi codigo de mi giroled al parecer no puede mostrar mensajes tan extensos como yo quiero. Mensajes cortos o enunciados los visualiza casi sin problemas "Hola" "taxi" "the flash" sin embargo al tratar de ingresar oraciones no las visualiza ni si quiera encienden los led al pasarlos por blancos.
Este es el codigo , quiero poder poder hacer que se visualicen textos mas largos sin ningun problema. En este codigo solo logra visualizar hasta la "D". Agradecería su ayuda.
__CONFIG _CONFIG1, _LVP_OFF & _FCMEN_ON & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT
__CONFIG _CONFIG2, _WRT_OFF & _BOR21V
nop
goto start ; go to beginning of program
start
MOVLW 0X60
MOVWF STATUS
CLRF ANSELH
CLRF ANSEL
BCF STATUS,RP1
CLRF TRISC
CLRF TRISB
CLRF TRISA
BSF TRISB,0
BCF STATUS,RP0
CLRF PORTA
CLRF PORTB
CLRF PORTC
CLRF 0X30
CLRF 0X31
CLRF 0X21
MOVLW .48
MOVWF 0X24
OTRO
MOVLW .5
MOVWF 0X20
PROGRAMA
BTFSS PORTB,0
GOTO $-1
MOVFW 0X21
MOVWF 0X23
AQUI
CALL DATO
MOVWF PORTC
CALL TIEMPO
INCF 0X23
MOVFW 0X23
SUBWF 0X24,W
BTFSS STATUS,Z
GOTO AQUI
CLRF PORTC
DECFSZ 0X20
GOTO PROGRAMA
MOVLW .6
ADDWF 0X21
ADDWF 0X24
GOTO OTRO
LIMPIAR
CLRF 0X30
PROGRAMA2
BTFSS PORTA,6
GOTO $-1
ACA
CALL TABLA
MOVWF PORTC
CALL TIEMPO
INCF 0X30
GOTO ACA
TABLA
MOVFW 0X30
ADDWF PCL
DT B'01111001', B'01001001', B'01001001', B'01001001',B'01001111',0X00 ; S
DT B'01111111', B'00000001', B'00000111', B'00000001',B'01111111',0X00 ; W
DT B'01111111', B'01001001', B'01001001', B'01000001',B'01000001',0X00 ; E
DT B'01111111', B'01001001', B'01001001', B'01000001',B'01000001',0X00 ; E
DT B'01000000', B'01000000', B'01111111', B'01000000',B'01000000',0X00 ; T
DT 0X00 ;ESPACIO
DT B'01111111', B'01000001', B'01000001', B'00111110',B'00000000',0X00 ; D
DT B'01111111', B'01001000', B'01001100', B'01001010',B'00110001',0X00 ; R
DT B'01111111', B'01001001', B'01001001', B'01000001',B'01000001',0X00 ; E
DT B'00111111', B'01001000', B'01001000', B'01001000',B'00111111',0X00 ; A
DT B'01111111', B'01000000', B'01110000', B'01000000',B'01111111',0X00 ; M
DT B'01111001', B'01001001', B'01001001', B'01001001',B'01001111',0X00 ; S
DT 0X00 ;ESPACIO
DT B'00111111', B'01001000', B'01001000', B'01001000',B'00111111',0X00 ; A
DT B'01111111', B'01001000', B'01001100', B'01001010',B'00110001',0X00 ; R
DT B'01111111', B'01001001', B'01001001', B'01000001',B'01000001',0X00 ; E
DT 0X00 ;ESPACIO
DT B'01111111', B'01000000', B'01110000', B'01000000',B'01111111',0X00 ; M
DT B'00111111', B'01001000', B'01001000', B'01001000',B'00111111',0X00 ; A
DT B'01111111', B'01000001', B'01000001', B'00111110',B'00000000',0X00 ; D
DT B'01111111', B'01001001', B'01001001', B'01000001',B'01000001',0X00 ; E
DT 0X00 ;ESPACIO
DT B'0111111', B'01000001', B'01000001', B'01000001',B'01111111',0X00 ; O
DT B'0111111', B'01001000', B'01001000', B'01000000',B'01000000',0X00 ; F
DT 0X00 ;ESPACIO
DT B'01000000', B'01000000', B'01111111', B'01000000',B'01000000',0X00 ; T
DT B'01111111', B'00001000', B'00001000', B'00001000',B'01111111',0X00 ; H
DT B'01000001', B'01000001', B'01111111', B'01000001',B'01000001',0X00 ; I
DT B'01111001', B'01001001', B'01001001', B'01001001',B'01001111',0X00 ; S
DATO
MOVFW 0X23
ADDWF PCL
DT 0X00, 0X00, 0X00, 0X00, 0X00, 0X00 ;ESPACIO
DT 0X00, 0X00, 0X00, 0X00, 0X00, 0X00 ;ESPACIO
DT 0X00, 0X00, 0X00, 0X00, 0X00, 0X00 ;ESPACIO
DT B'01111001', B'01001001', B'01001001', B'01001001',B'01001111',0X00 ; S
DT B'01111111', B'00000001', B'00000111', B'00000001',B'01111111',0X00 ; W
DT B'01111111', B'01001001', B'01001001', B'01000001',B'01000001',0X00 ; E
DT B'01111111', B'01001001', B'01001001', B'01000001',B'01000001',0X00 ; E
DT B'01000000', B'01000000', B'01111111', B'01000000',B'01000000',0X00 ; T
DT 0X00 ;ESPACIO
DT B'01111111', B'01000001', B'01000001', B'00111110',B'00000000',0X00 ; D
DT B'01111111', B'01001000', B'01001100', B'01001010',B'00110001',0X00 ; R
DT B'01111111', B'01001001', B'01001001', B'01000001',B'01000001',0X00 ; E
DT B'00111111', B'01001000', B'01001000', B'01001000',B'00111111',0X00 ; A
DT B'01111111', B'01000000', B'01110000', B'01000000',B'01111111',0X00 ; M
DT B'01111001', B'01001001', B'01001001', B'01001001',B'01001111',0X00 ; S
DT 0X00 ;ESPACIO
DT B'00111111', B'01001000', B'01001000', B'01001000',B'00111111',0X00 ; A
DT B'01111111', B'01001000', B'01001100', B'01001010',B'00110001',0X00 ; R
DT B'01111111', B'01001001', B'01001001', B'01000001',B'01000001',0X00 ; E
DT 0X00 ;ESPACIO
DT B'01111111', B'01000000', B'01110000', B'01000000',B'01111111',0X00 ; M
DT B'00111111', B'01001000', B'01001000', B'01001000',B'00111111',0X00 ; A
DT B'01111111', B'01000001', B'01000001', B'00111110',B'00000000',0X00 ; D
DT B'01111111', B'01001001', B'01001001', B'01000001',B'01000001',0X00 ; E
DT 0X00 ;ESPACIO
DT B'0111111', B'01000001', B'01000001', B'01000001',B'01111111',0X00 ; O
DT B'0111111', B'01001000', B'01001000', B'01000000',B'01000000',0X00 ; F
DT 0X00 ;ESPACIO
DT B'01000000', B'01000000', B'01111111', B'01000000',B'01000000',0X00 ; T
DT B'01111111', B'00001000', B'00001000', B'00001000',B'01111111',0X00 ; H
DT B'01000001', B'01000001', B'01111111', B'01000001',B'01000001',0X00 ; I
DT B'01111001', B'01001001', B'01001001', B'01001001',B'01001111',0X00 ; S
DT 0X00, 0X00, 0X00, 0X00, 0X00, 0X00 ;ESPACIO
DT 0X00, 0X00, 0X00, 0X00, 0X00, 0X00 ;ESPACIO
DT 0X00, 0X00, 0X00, 0X00, 0X00, 0X00 ;ESPACIO
TIEMPO
MOVLW .120
MOVWF 0X50
UNO
NOP
DECFSZ 0X50
GOTO UNO
RETURN
END ; directive 'end of program'
-
Hola Pet.
Lo primero es que das muy poca información.
Que PIC estas usando?, como es el circuito?, El texto tiene dos letras "D", ¿hasta cual de las dos se visualiza?.
Sin tener más información es difícil ayudarte, pero intuyo que el problema es el manejo de tablas.
Es bien conocido que un PIC puede manejar tablas relativamente pequeñas, si quieres manejar tablas de datos más grandes, debes implementar una forma un poco más compleja para hacerlo que usar un simple "ADDWF PCL".
Te aconsejo que busques información de manejo de tablas en assembler (en este foro ese tema se ha tratado muchas veces)
Si tienes opción de cambiarte de lenguaje, en lugar de usar assembler, podrías intentar hacer el programa en algún lenguaje de más alto nivel, como "C" o "Basic", donde el tema de las tablas de gran tamaño lo resuelve el compilador de forma automática....
salud 8)
-
Opino lo mismo que SavageChiken, lo mas seguro que el problema venga por el cruce de pagina de la tabla.
Otra cosa que me parece algo molesta incluso para el mismo programador es:
MOVFW 0X21
MOVWF 0X23
ADDWF 0X21
ADDWF 0X24
INCF 0X30
Es decir tener que recordar que es cada uno de los registros. mejor ponele nombres al menos.
-
Hola Pet.
Lo primero es que das muy poca información.
Que PIC estas usando?, como es el circuito?, El texto tiene dos letras "D", ¿hasta cual de las dos se visualiza?.
Sin tener más información es difícil ayudarte, pero intuyo que el problema es el manejo de tablas.
Es bien conocido que un PIC puede manejar tablas relativamente pequeñas, si quieres manejar tablas de datos más grandes, debes implementar una forma un poco más compleja para hacerlo que usar un simple "ADDWF PCL".
Te aconsejo que busques información de manejo de tablas en assembler (en este foro ese tema se ha tratado muchas veces)
Si tienes opción de cambiarte de lenguaje, en lugar de usar assembler, podrías intentar hacer el programa en algún lenguaje de más alto nivel, como "C" o "Basic", donde el tema de las tablas de gran tamaño lo resuelve el compilador de forma automática....
salud 8)
Hola el pic es un 16f886, lo que el programa trata de hacer es cargar el dato que tiene en 0x23 a la tabla ya que es el registro que controla la linea de la tabla que se saca y por eso primero muestro espacios para que se vea de derecha a izquierda. Borre el codigo que tenia en tabla y ya me logra visualizar completo el mensaje si embargo este no se queda estatico no hace el efecto pov . Me gustaria poder cambiar de lenguaje a C solo que es estrictamente por ensamblador ya que este trabajo es para mi proyecto final de titulacion de prepa y requiere total uso de assembler solo ya manejo el codigo que tengo en el 0x23 en "Dato". Me serviria mucha ayuda saber mas acerca del manejo de tablas de datos del microcontrolador ya que quiero visualizar un mensaje mas grande manteniendolo estatico dando un efecto pov ya que solo me va recorriendo los bits de dercha a izquierda
-
Respecto a las tablas y por que no te funciona, la respuesta esta en el datasheet.
Los DT en realidad crean RETLW. Si buscas en el datasheet acerca de los GOTO vas a notar que no pueden saltar a cualquier parte de la memoria y que suele necesitarse modificar el PCLATH si es que supera una cierta cantidad de datos.