Bienvenue aux nouveaux arrivants sur FantasPic !
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
Modérateur : mazertoc
pic-as
Code : Tout sélectionner
PSECT udata_shr
global byte1,byte2
byte1: ds 1
byte2: ds 1
PSECT udata_bits,space=1,class=COMMON,bit
global flag_ready,flag_busy,flag_error
flag_ready: ds 1
flag_busy: ds 1
flag_error: ds 1
D'après le simulateur, il place bien tout cela dans la zone ACCESS en 0x70 :
- les 3 bits d'abord en 0x70 (adresses 0x380 à 0x382 car 0x380 = 0x70*8)
- puis les 2 octets en 0x71 et 0x72
Par contre il ne veut pas de bcf flag_busy, jamais à cours de surprise
bcf flag_busy/8,flag_busy ça passe
Avec un define on simplifie un peu :
#define BIT(adr_bit) (adr_bit)/8,adr_bit
pic-as
Pour l'instant je garde la méthode mpasm, on verra ça plus tard quand j'aurai compris . . .
Une tentative d'analyse en attendant, premier bout pour commencer.
- nom du psect prédéfini pour désigner la bank commune
- les flag class et space sont implicites
- global . . . est là uniquement pour permettre l'affichage des valeurs dans le simulateur
- les adresses 070h et 071h sont affectées aux variables byte1 et byte2
J'ai bon ?
Les deux psect sont-ils indépendants l'un de l'autre ? -j'ai l'impression que non-
Une tentative d'analyse en attendant, premier bout pour commencer.
Code : Tout sélectionner
PSECT udata_shr
global byte1,byte2
byte1: ds 1
byte2: ds 1- nom du psect prédéfini pour désigner la bank commune
- les flag class et space sont implicites
- global . . . est là uniquement pour permettre l'affichage des valeurs dans le simulateur
- les adresses 070h et 071h sont affectées aux variables byte1 et byte2
J'ai bon ?
Les deux psect sont-ils indépendants l'un de l'autre ? -j'ai l'impression que non-
pic-as
Ils sont indépendants l'un de l'autre, et comme ils appartiennent à une même zone mémoire, la zone ACCESS (COMMON), ils sont placés l'un derrière l'autre.
Mon exemple montre qu'il met les variables bit en premier, bien après qu'elles apparaissent après les autres dans le programme, mais bon c'est un détail. On n'a pas à se préoccuper de l'emplacement des variables.
Mon exemple montre qu'il met les variables bit en premier, bien après qu'elles apparaissent après les autres dans le programme, mais bon c'est un détail. On n'a pas à se préoccuper de l'emplacement des variables.
pic-as
Ce n'est pas très important, mais j'aimerai bien savoir ce que ça veut dire en pratique.
Sortie du clean/builds :
/home/kamaz/MPLABXProjects/chargeur.S:178:: warning: (528) no start record; entry point defaults to zero
Non line specific message::: warning: (2092) relocatable list file is not available; fixup overflow list file messages cannot be generated
Sortie du clean/builds :
/home/kamaz/MPLABXProjects/chargeur.S:178:: warning: (528) no start record; entry point defaults to zero
Non line specific message::: warning: (2092) relocatable list file is not available; fixup overflow list file messages cannot be generated
pic-as
pic-as
Pour la 528, il faut mettre le nom de ton étiquette de reset à droite de la directive end de fin de programme.
Pour la 2092 envoie ton code, après avoir coché "Expand tabs to spaces" dans MpLabX.
Si c'est important, certains considèrent que les warnings ne le sont pas, ce n'est pas mon avis.
PS: Je n'avais pas vu que j'ai aussi le message 2092, et même en lisant la doc, je ne sais pas pourquoi, alors on va dire que c'est pas très important
Pour la 2092 envoie ton code, après avoir coché "Expand tabs to spaces" dans MpLabX.
Si c'est important, certains considèrent que les warnings ne le sont pas, ce n'est pas mon avis.
PS: Je n'avais pas vu que j'ai aussi le message 2092, et même en lisant la doc, je ne sais pas pourquoi, alors on va dire que c'est pas très important
pic-as
OK
C'était déjà le cas, j'ai remplacé "all languages" par "assembler".
C'est un peu brouillon . . .
C'était déjà le cas, j'ai remplacé "all languages" par "assembler".
C'est un peu brouillon . . .
Code : Tout sélectionner
/* en-tête pour les 16fxxxx En l'occurence 16f1719 */
PROCESSOR 16F1719
; CONFIG 1
CONFIG FOSC = INTOSC ; Oscillator Selection Bits (INTOSC oscillator: I/O function on CLKIN pin)
CONFIG WDTE = SWDTEN ; Watchdog Timer Enable (WDT controlled by the SWDTEN bit in the WDTCON register)
CONFIG PWRTE = ON ; Power-up Timer Enable (PWRT enabled)
CONFIG MCLRE = ON ; MCLR Pin Function Select (MCLR/VPP pin function is MCLR)
CONFIG CP = OFF ; Flash Program Memory Code Protection (Program memory code protection is disabled)
CONFIG BOREN = SBODEN ; Brown-out Reset Enable (Brown-out Reset controlled by the SBOREN bit in the BORCON register)
CONFIG CLKOUTEN = OFF ; Clock Out Enable (CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin)
CONFIG IESO = OFF ; Internal/External Switchover Mode (Internal/External Switchover Mode is disabled)
CONFIG FCMEN = ON ; Fail-Safe Clock Monitor Enable (Fail-Safe Clock Monitor is enabled)
; CONFIG 2
CONFIG WRT = OFF ; Flash Memory Self-Write Protection (Write protection off)
CONFIG PPS1WAY = ON ; Peripheral Pin Select one-way control (The PPSLOCK bit cannot be cleared once it is set by software)
CONFIG ZCDDIS = ON ; Zero-cross detect disable (ZCD disabled. ZCD can be enabled by setting the ZCDSEN bit of ZCDCON)
CONFIG PLLEN = ON ; Phase Lock Loop enable (4x PLL is enabled)
CONFIG STVREN = ON ; Stack Overflow/Underflow Reset Enable (Stack Overflow or Underflow will cause a Reset)
CONFIG BORV = HI ; Brown-out Reset Voltage Selection (Brown-out Reset Voltage (Vbor), high trip point selected.)
CONFIG LPBOR = ON ; Low-Power Brown Out Reset (Low-Power BOR is disabled)
CONFIG DEBUG = ON ; In-Circuit Debugger Mode (In-Circuit Debugger enabled, ICSPCLK and ICSPDAT are dedicated to the debugger)
CONFIG LVP = OFF ; Low-Voltage Programming Enable (High-voltage on MCLR/VPP must be used for programming)
#include <xc.inc>
; les define uniquement pour ce fichier (chargeur.S)
#define pmcon1 PMCON1 // *** CFGS LWLO FREE WRERR WREN WR RD
#define pmcon2 PMCON2
#define pmadrh PMADRH
#define pmadrl PMADRL
#define pmdath PMDATH
#define pmdatl PMDATL
#define pcon PCON // STKOVF STKUNF *** RWDT RMCLR RI POR BOR
; définition variables
PSECT udata_bank3,space=1,class=BANK3
global rst_h_0,rst_l_0,rst_h_pre,rst_l_pre,var_t_h,var_t_l
rst_h_0: ds 1 ; 1a0h contient STATUS actuel
rst_l_0: ds 1 ; contient PCON actuel
rst_h_pre: ds 1 ; contient STATUS précédent
rst_l_pre: ds 1 ; contient PCON précédent
var_t_h: ds 1 ; remplace STATUS pour test
var_t_l: ds 1 ; remplace PCON pour test
PSECT udata_shr,space=1,class=COMMON
global cmpt_divers
cmpt_divers: ds 1 // ici, le bit0 compte le nbre de passages dans la boucle - pmadrh pmadrl -
PSECT data,class=STRCODE,space=0,delta=2
PSECT code,abs,class=CODE,space=0,delta=2
ORG 0h
rst_0:
goto test_0
/*******************
**** test reset ****
********************/
; définition registres - la flashHE concerne uniquement les bit 7-0 de chaque mot mémoire
; les registres STATUS et PCON seront écrits aux adresses consécutives 3f80 et 3f81
; STATUS bkx - pcon bk1
; le reste bk3
ORG 0005h
;test_rst:
// -début- uniquement pour test ****************************************
// premier passage : pmadrx ne contient "rien" et
// STATUS-PCON = 00010000 - 000000
// deuxième pmadrx = valeurs ci-dessus et
// les valeurs de STATUS-PCON incrémentées de 1 à chaque cycle
test_0:
movlw 0001000B
movwf var_t_h
movlw 0000000B
movwf var_t_l
test_1:
// uniquement pour test -fin- ******************************************
; lecture flash adresse 3f80 puis 3f81 avec boucle par PMADRL
banksel PMADRH
movlw 3fh
movwf pmadrh
movlw 79h
movwf pmadrl ; écriture adresse premier mot de la flashHE terminée
lect_1:
incf pmadrl
bcf pmcon1, 6
bsf pmcon1, 0
nop
nop
movf pmdatl, w
btfsc pmadrl, 0
goto lect_2
movwf rst_h_pre
goto lect_1
lect_2:
movwf rst_l_pre
; lecture terminée
; LSB 3f80 (STATUS précédent) écrite dans rst_h_pre - LSB 3f81 (PCON précédent) dans rst_l_pre
; écriture STATUS et PCON actuels dans rst_h_0 et rst_l_0
/* movf STATUS, w
movwf rst_h_0
banksel PCON
movf PCON, w
movwf rst_l_0 */
; remplacé par
; début
movf var_t_h, w
movwf rst_h_0
movf var_t_l, w
movwf rst_l_0
; fin
; effacement mêmes adresses
banksel PMADRH
movlw 079h
movwf pmadrl
effac_1:
incf pmadrl
bcf pmcon1, 6
bsf pmcon1, 4
bsf pmcon1, 2
; unlock sequence - début
movlw 055h
movwf pmcon2
movlw 0aah
movwf pmcon2
nop
nop
; fin
bcf pmcon1, 2
nop
btfsc pmadrl, 0
goto effac_2
goto effac_1
effac_2:
;effacement terminé
;******************************************************************************
; tout ce qui suit est uniquement pour test
; écriture - début
banksel PMADRH
movlw 079h
movwf pmadrl
ecrit_1:
incf pmadrl
bcf pmcon1, 6
bsf pmcon1, 2
bsf pmcon1, 5
; unlock sequence - début
movlw 055h
movwf pmcon2
movlw 0aah
movwf pmcon2
nop
nop
; fin
bcf pmcon1, 5
; unlock sequence - début
movlw 055h
movwf pmcon2
movlw 0aah
movwf pmcon2
nop
nop
; fin
bcf pmcon1, 2
; écriture - fin
; incrémentation variable de test
incf var_t_h
incf var_t_l
goto test_1
/*
PSECT isrVec,class=CODE,delta=2
isr: */
END rst_0pic-as
Tu as dû taper le code avant de modifier l'option, c'est pourquoi c'est pas encore pas bon. Cela devait rentrer dans l'ordre pour les prochains programmes. Je me demande pourquoi cette option fait peur, le texte prend un peu plus de place sur le disque, les disquettes 360k c'est fini.
Pour la 2092, c'est le gros problème de pic-as. Il ne veut pas tronquer les adresses des variables, contrairement à MPASM. Quoique cela à l'air de fonctionner quand même, c'est juste un warning.
Si tu veux enlever ce warning, il faut utiliser systématiquement la macro BANKMASK(var_t_h) qui ne garde que la partie basse de l'adresse de la variable, son index dans la bank.
movwf BANKMASK(var_t_h)
Pour la 2092, c'est le gros problème de pic-as. Il ne veut pas tronquer les adresses des variables, contrairement à MPASM. Quoique cela à l'air de fonctionner quand même, c'est juste un warning.
Si tu veux enlever ce warning, il faut utiliser systématiquement la macro BANKMASK(var_t_h) qui ne garde que la partie basse de l'adresse de la variable, son index dans la bank.
movwf BANKMASK(var_t_h)
pic-as
movwf BANKMASK(var_t_h) -> encore un mécanisme à comprendre (je ne m'en suis jamais servi), pour l'instant ça reste comme ça.
Dans une prochaine version ce sera corrigé ?
La v6.20 est la dernière qui permet d'utiliser pickit3 sans patch. Et un patch c'est rajouter de l'incertitude . . .
Bonne soirée
Dans une prochaine version ce sera corrigé ?
La v6.20 est la dernière qui permet d'utiliser pickit3 sans patch. Et un patch c'est rajouter de l'incertitude . . .
Bonne soirée
pic-as
LP_2 a écrit :La v6.20 est la dernière qui permet d'utiliser pickit3 sans patch. Et un patch c'est rajouter de l'incertitude . . .
Voir l'excellent PicKitMinus qui lève cette limitation.
https://github.com/jaka-fi/PICkitminus
Retourner vers « Langage ASM »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 5 invités


