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 ---
Forum général sur l'Assembleur !

Modérateur : mazertoc

Encore un soucis avec MPASM
JJE
Passioné
Passioné
Messages : 399
Âge : 83
Enregistré en : novembre 2017
Localisation : Picardie

#1 Message par JJE » mer. 27 févr. 2019 12:19

Bonjour à tous,
Je fais certainement une grosse bêtise. Voici les premières lignes d'un programme écrit pour un PIC16F887 :

Code : Tout sélectionner


    LIST          p
=PIC16f887         ; Définition du processeur
    include     p16f887
.inc
    
    _CONFIG1 _XT_OSC 
& _WDTE_OFF & _PWRTE_OFF & _BOREN_OFF & _LVP_OFF & _DEBUG_OFF & _CP_OFF & _CPD_OFF
    _CONFIG2 _WRT_OFF
    


et quelques lignes à la fin de p16f887.inc

Code : Tout sélectionner

;==========================================================================
;
;
       Configuration Bits
;
;
   NAME            Address
;   CONFIG1           2007h
;   CONFIG2           2008h
;
;==========================================================================

;
 The following is an assignment of address values for all of the
; configuration registers for the purpose of table reads
_CONFIG1         EQU  H
'2007'
_CONFIG2         EQU  H'2008'

;----- CONFIG1 Options --------------------------------------------------
_FOSC_LP             EQU  H'3FF8'    ; LP oscillator: Low-power crystal on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN
_LP_OSC              EQU  H
'3FF8'    ; LP oscillator: Low-power crystal on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN
_FOSC_XT             EQU  H
'3FF9'    ; XT oscillator: Crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN
_XT_OSC              EQU  H
'3FF9'    ; XT oscillator: Crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN
_FOSC_HS             EQU  H
'3FFA'    ; HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN
_HS_OSC              EQU  H
'3FFA'    ; HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN


et voici ce que dit MPASM :
Executing: "C:\Program Files\Microchip\MPASM Suite\MPASMWIN.exe" /q /p16F887 "I2S_Master.asm" /l"I2S_Master.lst" /e"I2S_Master.err" /d__DEBUG=1
Warning[207] E:\DOCUMENTS DE JJ\MES PROJETS MPLAB\I2S\MASTER\I2S_MASTER.ASM 9 : Found label after column 1. (_CONFIG1)
Error[122] E:\DOCUMENTS DE JJ\MES PROJETS MPLAB\I2S\MASTER\I2S_MASTER.ASM 9 : Illegal opcode (_XT_OSC)
Warning[207] E:\DOCUMENTS DE JJ\MES PROJETS MPLAB\I2S\MASTER\I2S_MASTER.ASM 20 : Found label after column 1. (_CONFIG2)
Error[122] E:\DOCUMENTS DE JJ\MES PROJETS MPLAB\I2S\MASTER\I2S_MASTER.ASM 20 : Illegal opcode (_WRT_OFF)


Je ne trouve pas le défaut :mur: . Si quelqu'un peut me souffler Merci !
Cordialement

JJE

C'est pas parcequ'on n'a rien à dire qu'il faut fermer sa G....e

Encore un soucis avec MPASM
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#2 Message par paulfjujo » mer. 27 févr. 2019 16:47

bonjour,



à une epoque, il fallait 2 underscore devant CONFIG
ex pour 16F877
LIST
list p=PIC16F877,c=132,n=60,st=ON,mm=ON,t=ON,x=ON,r=hex


__CONFIG _CP_OFF & _DEBUG_OFF & _WRT_ENABLE_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _PWRTE_ON &_WDT_OFF & _HS_OSC
Aide toi, le ciel ou FantasPic t'aidera

Encore un soucis avec MPASM
Claudius
Avatar de l’utilisateur
Passioné
Passioné
Messages : 260
Âge : 69
Enregistré en : septembre 2015
Localisation : ELANCOURT (78 - YVELINES)
Contact :

#3 Message par Claudius » mer. 27 févr. 2019 18:00

Bonjour,

Je confirme qu'il faut 2 '_' dans la directive __CONFIG; pour preuve:

Code : Tout sélectionner

;--------------------------------------------------------
; Config word
;--------------------------------------------------------
; 1 - _WDT_OFF    Timer chien de garde inactif
; 2 - _PWRTE_ON   Timer de reset la mise sous tension actif
; 3 - _XT_OSC     Crystal/Resonator
; 4 - _LVP_ON     Programmation en mode basse tension (valeur par defaut)
;     => _LVP_OFF High Voltage Programmation (tjs dispo.) et qui evite de perdre RB3
;                 => ... mais evite de "balader" du +12V ;-) 
; 5 - _CP_OFF     Code de la memoire EEPROM de donnees non protege
; 6 - _BODEN_OFF  "Brown out reset" inactif
;--------------------------------------------------------
        _CONFIG _WDT_OFF & _PWRTE_OFF & _XT_OSC & _MCLRE_ON & _BOREN_OFF & _LVP_OFF & _DATA_CP_OFF & _CP_OFF

GPASM uM-FPU-V3.1 for 16f628a ...
uM-FPU-V3.1.asm:96:Error [174] Unknown opcode "_CONFIG"
Error

NB: J'utilise GPASM sous Linux qui est écrit de telle sorte à être compatible avec MPASM de MICROCHIP, logiciel qui tourne sous Windows. Celà signifie à contrario que MPASM est compatible avec gpasm! (dixit La Programmation des microcontrôleurs PIC16F84 sur une Linuxette )

Encore un soucis avec MPASM
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2595
Enregistré en : juillet 2016
Localisation : Terre

#4 Message par Temps-x » jeu. 28 févr. 2019 01:09

Bonsoir JJE, paulfjujo, Claudius, et tout le forum,

Début avec un Pic16F887

Code : Tout sélectionner



    Errorlevel
-302 ; Supprime le message "Ensure that bank bits are correct" 


    list        p
=16F887                  ; processeur utilisé 
    
#include    <p16F887.inc>              ; Définitions des constantes

 __CONFIG _CONFIG1, _DEBUG_OFF & _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_OFF & _PWRTE_OFF & _WDT_OFF & _INTRC_OSC_NOCLKOUT 
 __CONFIG _CONFIG2
, _WRT_OFF & _BOR21V                                                                                                   

;******************************** déclaration des variables ***********************************  

    CBLOCK H
'20'
      loop1        :1
      loop2        
:1
      loop3        
:1
      loop4        
:1
      loop5        
:1                    
      loop6        
:1                      
    ENDC  


    CBLOCK 0x70        
      temps_p      
:
      status_temp  
:1  
      w_temp       
:1  
      pclath_temp  
:1  
      fsr_temp     
:1  
    ENDC                

;************************** Macro pour écrit dans l'eeprom  ***********************************
        
ecriture_eeprom MACRO adresse,donner      ; prévoir 23 intructions suplémentaires

      BANKSEL EEADR                       ; on passe en bank 2                     

      movlw adresse                       ; adresse d'
écriture dans l'eeprom               
      movwf EEADR                         ;

;      movf donner,W                       ; valeur à écrit dans l'
éeprom fonctionnent seulement pour les variables
;      movlw donner                        ; valeur à écrit dans l'éeprom fonctionnent seulement pour les chiffres          

      movf donner,W                       ;
      movwf EEDAT                         ; 

      BANKSEL EECON1                      ; on passe en bank 3

      clrf    EECON1                        ; remise a zero des eventuelles erreurs

      bcf EECON1,EEPGD                    ; préparation à l'
autorisation
      bsf EECON1
,WREN                     ; autoriser accès en écriture

      bcf INTCON
,GIE                      ; on coupe les interruptions 

      btfsc INTCON
,GIE                    ; contrôl si les interruptions sont bien coupés
      goto 
$-D'1'                         ; remonte à la ligne 2 jusqu'a coupures des interruptions 

      movlw 0x55                          ; séquence spécifique (c'
est comme ça, il faut le savoir)
      movwf EECON2                        ; séquence spécifique
      movlw 0xAA                          
; séquence spécifique
      movwf EECON2                        
; séquence spécifique
      bsf EECON1
,WR                       ; lance une opération d'écriture

      btfsc    EECON1,WR                      ; on attend que l'
operation d'ecriture soit finie (de l'ordre de la ms
      goto    
$-D'1'                        ; remonte à la ligne 2 jusqu'a fin d'écriture

      bcf EECON1
,WREN                     ; interdiction de l'écriture      

      BANKSEL PORTA                       ; on passe en bank 0

    ENDM


;*************************** Macro pour lire dans l'
eeprom  ***********************************

lecture_eeprom MACRO adresse              ; prévoir 13 intructions suplémentaires

      BANKSEL EEADR                       
; on passe en bank 2

;     movf adresse,W                      ; adresse de lecture fonctionnent seulement pour les variables
;     movlw adresse                       ; adresse de lecture fonctionnent seulement pour les chiffres             

      movlw adresse                       
      movwf EEADR                         
;  
      
      BANKSEL EECON1                      
; on passe en bank 3

      bcf EECON1
,EEPGD                    ; préparation à la lecture
      bsf EECON1
,RD                       ; lecture de l'EEPROM

      BANKSEL EEDAT                       ; on passe en bank 2

      movf EEDAT,W                        ; la valeur lue dans l'
éeprom est placée dans W  

      movwf chiffre

      movwf temps_p

      BANKSEL PORTA                       
; on passe en bank 0   

    ENDM

;****************************** adresse de depart après reset **********************************

    ORG H'00'
      goto debut      

;********************************* lieu des interruptions **************************************

    ORG  H'04'           
      movwf  w_temp     
      swapf    STATUS
,W   
      movwf    status_temp
      movf    FSR
,W        
      movwf fsr_temp     
      movf    PCLATH
,W    
      movwf    pclath_temp

      clrf PCLATH                                                                     

;****************************** traitement des interruptions ***********************************




;*************************************
 restauration *******************************************
 
      movf pclath_temp
,W
      movwf    PCLATH            
      movf fsr_temp
,W
      movwf    FSR        
      swapf status_temp
,W
      movwf    STATUS            
      swapf w_temp
,F     
      swapf w_temp
,W          

      retfie      

;*********************************************************************************************** 
debut

;***********************************************************************************************       

      BANKSEL ANSEL                       
; on passe en bank 3

;************************* configuration du registre ANSEL en bank 3 *************************** 

      movlw B
'01100011'                   ; sans mode numérique B'00000000' 
      movwf ANSEL                         
; en mode E/S 2(RA0), 3(RA1), 4(RA2), 5(RA3), 7(RA5), 8(RE0), 9(RE1), 10(RE2) 

;************************ configuration du registre ANSELH en bank 3 *************************** 

      movlw B
'00000000'                   ; sans mode numérique B'00000000' 
      movwf ANSELH                        
; en mode E/S 33(RB0), 34(RB1), 35(RB2), 36(RB3), 37(RB4), 38(RB5) 

;***********************************************************************************************       

      BANKSEL OSCTUNE                     
; on passe en bank 1 

;************************ configuration du registre OSCTUNE en bank 1 ************************** 

                                          
; rélage de la précision de l'oscillateur

      movlw B'
00000000'                   ; 00000000 valeur par défaut
      movwf OSCTUNE                       ; 00001111 fréquence maximale
                                          ; 00010000 fréquence minimale 
                                          
;************************ configuration du registre OSCCON en bank 1 ***************************

                                          ; rélage de l'
oscillateur interne

                                          
; 01111000 oscillateur 8 Mhz  
      movlw    B
'01101000'                   ; 01101000 oscillateur 4 Mhz      <--- choix sur 4 Mhz    
      movwf    OSCCON                        
; 01011000 oscillateur 2 Mhz
                                          
; 01001000 oscillateur 1 Mhz
                                          
; 00111000 oscillateur 500 Khz
                                          
; 00101000 oscillateur 250 Khz
                                          
; 00011000 oscillateur 125 Khz
                                          
; 00001000 oscillateur 31 kHz                                                   

;************************ configuration du registre OPTION_REG en bank 1 *********************** 

      movlw B
'00000000'                   ; résistances en service, sur le  PORTB
      movwf OPTION_REG                    
; 

;************ configuration des registres TRISA & TRISB & TRISC & TRISE en bank 1 *************                                                   

      movlw B
'00000000'                   ; configurer les pattes dans TRISA
      movwf TRISA                         
; 2(RA0), 3(RA1), 4(RA2), 5(RA3), 6(RA4), 7(RA5), 14(RA6), 13(RA7)

      movlw B'11111111'                   ; configurer les pattes dans TRISB
      movwf TRISB                         
; 33(RB0), 34(RB1), 35(RB2), 36(RB3), 37(RB4), 38(RB5), 39(RB6), 40(RB7)

      movlw B'00000000'                   ; configurer les pattes dans TRISC 
      movwf TRISC                         
; 15(RC0), 16(RC1), 17(RC2), 18(RC3), 23(RC4), 24(RC5), 25(RC6), 26(RC7)                                                                                                                      

      movlw B
'00000000'                   ; configurer les pattes dans TRISD 
      movwf TRISD                         
; 19(RD0), 20(RD1), 21(RD2), 22(RD3), 27(RD4), 28(RD5), 29(RD6), 30(RD7)                                                                                     

      movlw B
'00000001'                   ; configurer dans TRISE 
      movwf TRISE                         
; 8(RE0), 9(RE1), 10(RE2), 1(RE3) MCLR en entrée seulement, ne peux être 
                                          
; configuré en sortie.                                          

                                          
; alimmentation sous 5 volts patte 12 ou 31 mettre au moins 
                                          
; patte 11 ou 32 mettre au plus 

;************************ configuration du registre ADCON1 en bank 1 **************************
         
      clrf ADCON1                         
;

;************************
 configuration du registre PIE1 en bank 1 ****************************

      clrf PIE1          
                                
;************************ configuration du registre PR2 en bank 1 *****************************

      movlw    D'252'                           ; réglage du PWM
      movwf    PR2                              
; PR2 D'252' donc fréquence à 3950 Hz pour PWM

;**********************************************************************************************       

      BANKSEL ADCON0                      
; on passe en bank 0

;************************ configuration du registre ADCON0 en bank 0 **************************

      bsf ADCON0,ADCS1                    ; b7 = ADCS1 choisir la fréquence de fonctionnement du 
      bsf ADCON0
,ADCS0                    ; b6 = ADCS0 convertisseur en fonction de la fréquence d'horloge du PIC

      bcf ADCON0,GO                       ; b1 = GO/DONE indique la fin de la conversion analogique, et permet de lancer la conversion
      bcf ADCON0,ADON                     ; b0 = ADON mise en service du convertiseur 0 = arrêt : 1 = marche  

;************************* configuration du registre PIR1 en bank 0 ****************************

      clrf PIR1 
 
;************************ configuration du registre T1CON en bank 0 ****************************

      clrf T1CON
        
;********************* configuration du registre INTCON en bank 0,1,2,3 ************************

      movlw B'
00000000'                   ; interruption général hors service
      movwf INTCON                        ; 

;************************************ réglage du PWM *******************************************
                                          
      movlw B'
00000100'                      ; réglage du PWM
      movwf    T2CON                         ; 
                                          ; 
                                     
      movlw B'
00001100'                   ; 
      movwf CCP1CON                       ; 
      movwf CCP2CON                       ; 


;******************************* début du programme principal  ********************************

      clrf CCPR1L                        ; PWM sur RC2 à zéro
      clrf CCPR2L                        ; PWM sur RC1 à zéro

      clrf PORTA    
      clrf PORTB    
      clrf PORTC   
      clrf PORTD   
      clrf PORTE   


boucle
      nop
      nop
      goto bougle   

      End



==> A++
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

Encore un soucis avec MPASM
JJE
Passioné
Passioné
Messages : 399
Âge : 83
Enregistré en : novembre 2017
Localisation : Picardie

#5 Message par JJE » jeu. 28 févr. 2019 06:18

Merci à tous, en fait, chacun a raison, j'aurais du lire la doc de la directive __CONFIG dans l'aide de MPASM :?
par contre, je ne comprends pas la note :

MCUs with multiple configuration registers

For the address of a valid configuration byte specified by addr, sets the configuration bits to the value described by expr.

Note: Configuration bits must be listed in ascending order.



puisqu'on fait un & de ces valeurs, opérateur qui est commutatif, je ne vois pas l'importance :?:
Cordialement

JJE

C'est pas parcequ'on n'a rien à dire qu'il faut fermer sa G....e

Encore un soucis avec MPASM
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2595
Enregistré en : juillet 2016
Localisation : Terre

#6 Message par Temps-x » ven. 1 mars 2019 01:21

Bonsoir JJE, paulfjujo, Claudius, et tout le forum,

JJE a écrit :Source du message je ne vois pas l'importance :?:


Il ne faut pas chercher à comprendre, il faut juste appliquer ce qui est préconisé par Microchip, même si tu as raison sur ce que tu dis :wink:

==> A++
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:


Retourner vers « Langage ASM »

Qui est en ligne

Utilisateurs parcourant ce forum : Bing [Bot] et 40 invités