Bonjour à tous,
Je viens demander votre aide car je sèche sur mon problème !
Je réalise un programme assez lourd sur un pic16f877 et en assembleur qui gère entre autre un afficheur LCD 128x64. Oui je sais, je suis démodé mais je me mettrai au goût du jour plus tard !
Ce programme utilise pas mal de macros et sous programme...
Mon problème est que lorsque j'ajoute un appel de sous-programme en plus à partir d'un certain nombre déjà appelés et fermés, la pile pointe n'importe où. En effet ca part sur des instructions qui ne sont pas la suite logique du programme. Je rentre même dans des sous programmes jamais appelés !
Par contre si j'ajoute des instructions classiques, aucun problème.
(Il n'y a jamais plus de 4 imbrications de sous-programmes. Donc ce n'est pas dû à ça.)
Je précise que d'après MBlab (visible dans le Dashboard), j'utilise que la moitié de ma mémoire programme du pic.
Ce n'est pas lié à mon sous-programme supplémentaire non plus, car lorsque j'essaie d'en appeler un ancien à la place, ça plante aussi.
Voilà ci-joint un bout de mon code au cas où...
Dans le programme principale, j'affiche tous les caractères par le biais d'une macro pour chaque caractère qui apelle un sous-programme pour chaque caractère.Code:CarA macro octetaff,adrcarH,adrcarB call LectCarA movf AdrCarxH,w movwf adrcarH ; copier adresse haute de la ligne n°1 caractère à afficher dans AdrCarHx movf AdrCarxB,w movwf adrcarB ; copier adresse basse de la ligne n°1 caractère à afficher dans AdrCarHx movf OctCarx,w movwf octetaff ; copier octet de la ligne n°1 du caractère dans octet à afficher BANK0 endm LectCarA BANK3 movlw 0x00 movwf eepaH ; adresse haute de la ligne n°1 caractère movwf AdrCarxH ; copier adresse haute dans AdrCarxH movlw 0x00 movwf eepaB ; adresse basse de la ligne n°1 du caractère movwf AdrCarxB ; copier adresse basse dans AdrCarxB call LectEep ; lire ligne n°1 du caractère movwf OctCarx ; octet de la ligne n°1 du caractère dans octet à afficher return ;***************************************************************************** ; PROGRAMME PRINCIPAL * ;***************************************************************************** start nop ; AdrPixel 0x80,0x80 ; écran 1 ; call VAPOSSIMO ; AdrPixel 0x90,0x80 ; call Modemanuel ; AdrPixel 0x98,0x80 ; call Recettes ; AdrPixel 0x80,0x88 ; call Outils ; AdrPixel 0x90,0x88 ; call Maintenance AdrPixel 0x80,0x80 CarA OctCar1,AdrCar1H,AdrCar1B ; Octet de la ligne 1 du caractère dans OctCar1 et adresse caratère dans haute et basse AdrCar CarB OctCar2,AdrCar2H,AdrCar2B CarC OctCar3,AdrCar3H,AdrCar3B CarD OctCar4,AdrCar4H,AdrCar4B CarE OctCar5,AdrCar5H,AdrCar5B CarF OctCar6,AdrCar6H,AdrCar6B CarG OctCar7,AdrCar7H,AdrCar7B CarH OctCar8,AdrCar8H,AdrCar8B call AffCar AdrPixel 0x80,0x83 CarI OctCar1,AdrCar1H,AdrCar1B ; Octet de la ligne 1 du caractère dans OctCar1 et adresse caratère dans haute et basse AdrCar CarJ OctCar2,AdrCar2H,AdrCar2B CarK OctCar3,AdrCar3H,AdrCar3B CarL OctCar4,AdrCar4H,AdrCar4B CarM OctCar5,AdrCar5H,AdrCar5B CarN OctCar6,AdrCar6H,AdrCar6B CarO OctCar7,AdrCar7H,AdrCar7B CarP OctCar8,AdrCar8H,AdrCar8B call AffCar AdrPixel 0x80,0x86 CarQ OctCar1,AdrCar1H,AdrCar1B ; Octet de la ligne 1 du caractère dans OctCar1 et adresse caratère dans haute et basse AdrCar CarR OctCar2,AdrCar2H,AdrCar2B CarS OctCar3,AdrCar3H,AdrCar3B CarT OctCar4,AdrCar4H,AdrCar4B CarU OctCar5,AdrCar5H,AdrCar5B call AffCar AdrPixel 0x88,0x80 CarV OctCar1,AdrCar1H,AdrCar1B ; Octet de la ligne 1 du caractère dans OctCar1 et adresse caratère dans haute et basse AdrCar CarW OctCar2,AdrCar2H,AdrCar2B CarX OctCar3,AdrCar3H,AdrCar3B CarY OctCar4,AdrCar4H,AdrCar4B CarZ OctCar5,AdrCar5H,AdrCar5B CarESP OctCar6,AdrCar6H,AdrCar6B CarESP OctCar7,AdrCar7H,AdrCar7B CarESP OctCar8,AdrCar8H,AdrCar8B call AffCar AdrPixel 0x88,0x83 CarESP OctCar1,AdrCar1H,AdrCar1B ; Octet de la ligne 1 du caractère dans OctCar1 et adresse caratère dans haute et basse AdrCar CarESP OctCar2,AdrCar2H,AdrCar2B CarESP OctCar3,AdrCar3H,AdrCar3B CarESP OctCar4,AdrCar4H,AdrCar4B CarESP OctCar5,AdrCar5H,AdrCar5B CarESP OctCar6,AdrCar6H,AdrCar6B CarESP OctCar7,AdrCar7H,AdrCar7B CarESP OctCar8,AdrCar8H,AdrCar8B call AffCar AdrPixel 0x88,0x86 CarESP OctCar1,AdrCar1H,AdrCar1B ; Octet de la ligne 1 du caractère dans OctCar1 et adresse caratère dans haute et basse AdrCar CarESP OctCar2,AdrCar2H,AdrCar2B CarESP OctCar3,AdrCar3H,AdrCar3B CarESP OctCar4,AdrCar4H,AdrCar4B CarESP OctCar5,AdrCar5H,AdrCar5B call AffCar AdrPixel 0x90,0x80 Cara OctCar1,AdrCar1H,AdrCar1B ; Octet de la ligne 1 du caractère dans OctCar1 et adresse caratère dans haute et basse AdrCar Carb OctCar2,AdrCar2H,AdrCar2B Carc OctCar3,AdrCar3H,AdrCar3B Card OctCar4,AdrCar4H,AdrCar4B Care OctCar5,AdrCar5H,AdrCar5B Carf OctCar6,AdrCar6H,AdrCar6B Carg OctCar7,AdrCar7H,AdrCar7B Carh OctCar8,AdrCar8H,AdrCar8B call AffCar AdrPixel 0x90,0x83 Cari OctCar1,AdrCar1H,AdrCar1B ; Octet de la ligne 1 du caractère dans OctCar1 et adresse caratère dans haute et basse AdrCar Carj OctCar2,AdrCar2H,AdrCar2B Cark OctCar3,AdrCar3H,AdrCar3B Carl OctCar4,AdrCar4H,AdrCar4B Carm OctCar5,AdrCar5H,AdrCar5B Carn OctCar6,AdrCar6H,AdrCar6B Caro OctCar7,AdrCar7H,AdrCar7B Carp OctCar8,AdrCar8H,AdrCar8B call AffCar AdrPixel 0x90,0x86 Carq OctCar1,AdrCar1H,AdrCar1B ; Octet de la ligne 1 du caractère dans OctCar1 et adresse caratère dans haute et basse AdrCar Carr OctCar2,AdrCar2H,AdrCar2B Cars OctCar3,AdrCar3H,AdrCar3B Cart OctCar4,AdrCar4H,AdrCar4B CarA OctCar5,AdrCar5H,AdrCar5B call AffCar AdrPixel 0x98,0x80 CarA OctCar1,AdrCar1H,AdrCar1B ; Octet de la ligne 1 du caractère dans OctCar1 et adresse caratère dans haute et basse AdrCar CarA OctCar2,AdrCar2H,AdrCar2B CarA OctCar3,AdrCar3H,AdrCar3B CarA OctCar4,AdrCar4H,AdrCar4B CarA OctCar5,AdrCar5H,AdrCar5B CarESP OctCar6,AdrCar6H,AdrCar6B CarESP OctCar7,AdrCar7H,AdrCar7B CarESP OctCar8,AdrCar8H,AdrCar8B call AffCar AdrPixel 0x98,0x83 CarESP OctCar1,AdrCar1H,AdrCar1B ; Octet de la ligne 1 du caractère dans OctCar1 et adresse caratère dans haute et basse AdrCar CarESP OctCar2,AdrCar2H,AdrCar2B CarESP OctCar3,AdrCar3H,AdrCar3B CarESP OctCar4,AdrCar4H,AdrCar4B CarESP OctCar5,AdrCar5H,AdrCar5B CarESP OctCar6,AdrCar6H,AdrCar6B CarESP OctCar7,AdrCar7H,AdrCar7B CarESP OctCar8,AdrCar8H,AdrCar8B call AffCar AdrPixel 0x98,0x86 CarESP OctCar1,AdrCar1H,AdrCar1B ; Octet de la ligne 1 du caractère dans OctCar1 et adresse caratère dans haute et basse AdrCar CarESP OctCar2,AdrCar2H,AdrCar2B CarESP OctCar3,AdrCar3H,AdrCar3B CarESP OctCar4,AdrCar4H,AdrCar4B CarESP OctCar5,AdrCar5H,AdrCar5B call AffCar AdrPixel 0x80,0x88 CarA OctCar1,AdrCar1H,AdrCar1B ; Octet de la ligne 1 du caractère dans OctCar1 et adresse caratère dans haute et basse AdrCar CarA OctCar2,AdrCar2H,AdrCar2B CarA OctCar3,AdrCar3H,AdrCar3B CarA OctCar4,AdrCar4H,AdrCar4B CarA OctCar5,AdrCar5H,AdrCar5B CarA OctCar6,AdrCar6H,AdrCar6B CarA OctCar7,AdrCar7H,AdrCar7B CarA OctCar8,AdrCar8H,AdrCar8B call AffCar AdrPixel 0x80,0x8B CarA OctCar1,AdrCar1H,AdrCar1B ; Octet de la ligne 1 du caractère dans OctCar1 et adresse caratère dans haute et basse AdrCar CarA OctCar2,AdrCar2H,AdrCar2B CarESP OctCar3,AdrCar3H,AdrCar3B CarESP OctCar4,AdrCar4H,AdrCar4B CarESP OctCar5,AdrCar5H,AdrCar5B CarESP OctCar6,AdrCar6H,AdrCar6B CarESP OctCar7,AdrCar7H,AdrCar7B CarESP OctCar8,AdrCar8H,AdrCar8B call AffCar AdrPixel 0x80,0x8E CarESP OctCar1,AdrCar1H,AdrCar1B ; Octet de la ligne 1 du caractère dans OctCar1 et adresse caratère dans haute et basse AdrCar CarESP OctCar2,AdrCar2H,AdrCar2B CarESP OctCar3,AdrCar3H,AdrCar3B CarESP OctCar4,AdrCar4H,AdrCar4B CarESP OctCar5,AdrCar5H,AdrCar5B call AffCar AdrPixel 0x88,0x88 CarA OctCar1,AdrCar1H,AdrCar1B ; Octet de la ligne 1 du caractère dans OctCar1 et adresse caratère dans haute et basse AdrCar CarA OctCar2,AdrCar2H,AdrCar2B CarA OctCar3,AdrCar3H,AdrCar3B CarA OctCar4,AdrCar4H,AdrCar4B CarA OctCar5,AdrCar5H,AdrCar5B CarA OctCar6,AdrCar6H,AdrCar6B CarA OctCar7,AdrCar7H,AdrCar7B CarA OctCar8,AdrCar8H,AdrCar8B call AffCar AdrPixel 0x88,0x8B CarA OctCar1,AdrCar1H,AdrCar1B ; Octet de la ligne 1 du caractère dans OctCar1 et adresse caratère dans haute et basse AdrCar CarA OctCar2,AdrCar2H,AdrCar2B CarA OctCar3,AdrCar3H,AdrCar3B CarA OctCar4,AdrCar4H,AdrCar4B CarA OctCar5,AdrCar5H,AdrCar5B CarA OctCar6,AdrCar6H,AdrCar6B CarA OctCar7,AdrCar7H,AdrCar7B CarA OctCar8,AdrCar8H,AdrCar8B call AffCar AdrPixel 0x88,0x8E CarA OctCar1,AdrCar1H,AdrCar1B ; Octet de la ligne 1 du caractère dans OctCar1 et adresse caratère dans haute et basse AdrCar CarA OctCar2,AdrCar2H,AdrCar2B CarA OctCar3,AdrCar3H,AdrCar3B CarA OctCar4,AdrCar4H,AdrCar4B CarA OctCar5,AdrCar5H,AdrCar5B call AffCar AdrPixel 0x90,0x88 CarA OctCar1,AdrCar1H,AdrCar1B ; Octet de la ligne 1 du caractère dans OctCar1 et adresse caratère dans haute et basse AdrCar CarA OctCar2,AdrCar2H,AdrCar2B CarA OctCar3,AdrCar3H,AdrCar3B CarA OctCar4,AdrCar4H,AdrCar4B CarA OctCar5,AdrCar5H,AdrCar5B CarESP OctCar6,AdrCar6H,AdrCar6B CarESP OctCar7,AdrCar7H,AdrCar7B CarESP OctCar8,AdrCar8H,AdrCar8B call AffCar goto start
Mais arrivé à la lettre t, ça plante. C'est pour ça que j'affiche que des A par la suite. Et si j'enlève mon sous-programme qui va lire le caractère t dans l'eeprom, là ça refonctionne.
Il ne veut plus d'un sous programme supplémentaire... Je précise que même si il se touve dans le code mais jamais appelé, ça plante aussi. Il faut que je l'efface carrémént.
Voilà, c'est dur à expliquer et de ce fait, dur à comprendre, mais merci de votre aide ou au moins des pistes de recherche...
-----