Jump to content

Programmation sur PIC


Recommended Posts

Posted

Salut.

Je suis en train de porter un programme sur un pic 16F876A, mais malheureusement mplab me sort qu'il bouffe trop de mémoire et que la bank 0 est trop "petite" (forcément j'utilise un tableau 9x9 (tableau de type char) :eeek2:). Alors j'ai voulu stocker des données dans les autres bank, mais j'y arrive pas; j'ai d'abord essayé de "stocker" mon prog dans la bank 0 puis mon tableau dans la bank 2, mais à la compilation, mplab me dit: Fixup overflow in expression (loc 0x850 (0x828+40), size 1, value 0x110)

Pareil si je mets le tableau dans la bank 3. Ensuite j'ai essayé de mettre mon tableau dans la bank 0 puis le reste du programme dans la bank 1 (la bank 1 ne fait que 80 octets, c'est trop petit pour mon tableau de 81 octets). Seulement je sais pas comment, en C, on se place dans telle ou telle banque (je déclare mes variables comme ça: static bankx type variable , ou x est le numéro de la bank - quoique si je mets 2 ou 3 ca couille, comme dit plus haut). Donc pour le moment, mon tableau est "stocké" dans la bank 0, mes variables dans la bank 1 et apparemment mon prog "tourne" dans la bank0 (oui je débute la dedans :p ).

Bon si vous avez rien compris, déjà de savoir comment se "mettre" dans une bank m'aiderait (j'ai comme l'impression que les bank 0 et 1 marchent ensemble et que les 2 et 3 aussi). Merci bien :craint:

Posted

je ne sais pas si quelqu'un ici saura répondre a ta question, essaie donc de la poser sur un forum du style www.lelectronique.com tu auras plus de chances de trouver ton bonheur je pense !

Posted

Désolé de ne pouvoir t'aider pour le C car j'ai programmé cette année sur un pic 16F847 mais seulement en Assembleur!

Comme tu l'as dis, les banques 0/1 et 2/3 sont liées. En fait, le passage d'une bank à l'autre nécessite 2bits (vu qu'il y a 4 possiibilités). Ce sont les bits nommés RP0 et RP1 du registre STATUS (RP0= N°5, RP1= N°6 si je me souviens bien)

RP1 RP0

0 0 Bank0

0 1 Bank1

1 0 Bank2

1 1 Bank3

Donc, le point commun entre Bank0 et Bank1 est que RP1 est à zéro

Pour Bank2 et Bank3, il est à 1

Je ne sais pas commun tu peux modifier ses bits via C, mais c'est le principe de fonctionnement: Pour passer d'une banque à l'autre, tu modifie les bits RP0 et/ou RP1.

Si tu veux + d'info, tu peux télécharger le cours de Bigonoff, c'est pour programmer en assembleur mais ca devrait quand même t'aider!

Cours Bigonoff

Ce cours traite du 16F84 mais le 16F87 à la même base donc no stress pour ton prob!

Posted

Merci pour vos réponses. En fait je sais pas comment modifier ces fameux bits RP0 et RP1 (et l'IRP il sert à quoi ?). Pour le cours de bigonoff, je les ai déjà récupéré, mais ca n'a pas résolu mon problème (d'ailleurs c'est un fou ce bigonoff :francais: , non mais vous avez vu les pavés qu'il a sorti ?? :cartonrouge: )

Posted

Je sais, j'ai du me taper la lecture des 2 en cours! :D

Mais faut avouer qu'il explique bien les différents concepts là-dedans! :D

Le bit IRP n'est pas utilisé dans la famille des 16F8XX donc ne cherche pas dans cette direction. :|

Posted

Essaye de déclarer un pointeur dans le bon bank memoire, puis, fais une allocation dynamique.

C'est la seule réponse que je vois pour l'instant.

Sinon, consulte la doc du compilateur, il doit y avoir une instruction spéciale qui marche pour toi.

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...