TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: Mr.pic en 20 de Agosto de 2005, 12:35:00
-
el problema es el siguiente
resulta que estoy haciendo un programa que es para un menu con lcd y teclado matricial y lo que pasa es que solo logro sacar dos pantallasos porque cada vez que voy incrementando el programa para que sea mas estenso el menu, ya se que me queda en el primero y no me pasa de ahi, pero si elimino lineas del programa me corre bien
entonces la duda es si el pìc tiene un limite de lineas de programa y si es asi entonces que puedo hacer y sino entonces ????????
-
El pic tiene 8k de rom para el programa y 364bytes de RAM (creo recordar), ¿en que lenguaje programas? Por ejemplo con CCS al compilar te dice lo ocupado y libre ... y si de verdad te quedaste sín (que lo dudo, ya tiene que ser burro el menu), un pic mas grande compatible con el 877 "pin a pin", como puede ser el 18F4520.
Espero que te sirva esto para algo
-
Con el tema del menu te refieres a sacar información pregrabada en la memoria del micro... me explico, estas guardando información de texto en la memoria del micro y despues eliges los textos con el menu para ir leyéndolos según te interese (una especie de pantalla de informacion) es que si es esto es normal lo que te pasa, si es este el caso tienes que colocar una memoria por i2c por ejemplo de 512k o algo asi... ya que no encuentro otra explicacion a lo que te pasa...
-
Tienes en cuenta que el 16f877 tiene la memoria segmentada en 4 páginas??
Al pic hay que decirle en la página en la que estamos (por defecto en la 1ª
. Si empiezas a meter funciones en la 2ª página... al no ser que se lo digas al pic, no se enterará.
Hay posobilidades de que tengas una parte del menú al final de la primera página y la otra parte del menú al principio de la segunda. Por eso la parte del menú que está en la 1ª se ve perfectamente y la parte del menú de la 2ª no se representa.
La 1ª página llega hasta la dirección 7FF. Si escribiendo código te pasas... tendras que montarte un sistema de paginación.
Pégale un vistazo al asunto a ver si es eso.
Un saludo desde Alicante.
-
Conocia eso, pero como trabajo con CCS, creo que eso es transparente para el programador de un lenguaje de nivel alto. En ASM es otro cantar.
-
Hola te voy a dar otra posibilidad:
Si estas ultilizando llamadas (CALL) a TABLAS( de tipo ADDWF PCL,F RETLW...)
El problema seguramente surge por el PC. Tene en cuenta, que la funcion ADDWF solo suma los 8 bits menos significativos del PCL, por lo que fijate que la tabla no cruce pasos de 256 posiciones de longitud.
Te doy un ejemplo..:
org 0x04 ;el PC aqui es 0x0004
movlw 0x01
CALL tabla
;mas codigo....
;mas codigo....
;mas codigo....
;mas codigo....
tabla addwf PCL,F ;supongamos que esta es la linea 0x0200 del PC
retlw 0x0F
reltw 0xFA
retlw 0x0A
;mas retlw...
En este caso cuando llama a la funcion tabla, el PC se carga con el valor 0x0200 pero debemos tener en cuenta, que el PC tiene un tamaño de 14 bits: la disposicion es asi:
Bit 14 = STATUS,RP1
Bit 13 = STATUS,RP0
Bit 12 = PCLATH,3
Bit 11 = PCLATH,2
Bit 10 = PCLATH,1
Bit 9 = PCLATH,0
Bit 8 = PCL,7
Bit 7 = PCL,6
Bit 6 = PCL,5
Bit 5 = PCL,4
Bit 4 = PCL,3
Bit 3 = PCL,2
Bit 2 = PCL,1
Bit 1 = PCL,0
por lo que al hacer la instruccion ADDWF PCL,F el programa va a saltar a la posicion 0x0002 en lugar de ir a "retlw 0xFA( o sea la posicion 0x0202). Por lo tanto, para corregir esto debes hacer:
org 0x04 ;el PC aqui es 0x0004
movlw 0x01
CALL tabla
;mas codigo....
;mas codigo....
;mas codigo....
;mas codigo....
tabla BSF PCLATH,1 ;supongamos que esta es la linea 0x0200 del ADDWF PCL,F ;al poner en 1 el bit 1 del PCLATH PC= 0x0200
addwf PCL,F
retlw 0x0F
reltw 0xFA
retlw 0x0A
;mas retlw...
aqui el programa si saltara a la posicion correcta. Espero que me haya entendido...Sino en la pagina 30 del datasheet del 16F877 vas a encontrar que dice refeer to "Aplicattion Notes 556". Bajate esa Aplication note y ahi te explica los saltos del PCL.
Saludos y cualquier cosa pregunte.