Autor Tema: capacidad del pic 16f877  (Leído 3139 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Mr.pic

  • PIC10
  • *
  • Mensajes: 8
capacidad del pic 16f877
« 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 ????????

Desconectado RaDoN

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1498
RE: capacidad del pic 16f877
« Respuesta #1 en: 20 de Agosto de 2005, 12:53:00 »
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 Rebotado
Si juegas contra el mejor, pierdes como los demás.

Desconectado dogflu66

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3549
RE: capacidad del pic 16f877
« Respuesta #2 en: 20 de Agosto de 2005, 17:05:00 »
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...
Saludos desde Granada, España.

Desconectado Azicuetano

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1020
    • Aplicaciones Electrónicas en Alicante.
RE: capacidad del pic 16f877
« Respuesta #3 en: 22 de Agosto de 2005, 12:21:00 »
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ªGiño. 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.


Desconectado RaDoN

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1498
RE: capacidad del pic 16f877
« Respuesta #4 en: 22 de Agosto de 2005, 13:31:00 »
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.
Si juegas contra el mejor, pierdes como los demás.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
RE: capacidad del pic 16f877
« Respuesta #5 en: 27 de Agosto de 2005, 13:09:00 »
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.
Sonrisa Gigante
"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.


 

anything