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
Encore un soucis avec MPASM
Bonjour à tous,
Je fais certainement une grosse bêtise. Voici les premières lignes d'un programme écrit pour un PIC16F887 :
et quelques lignes à la fin de p16f887.inc
et voici ce que dit MPASM :
Je ne trouve pas le défaut . Si quelqu'un peut me souffler
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 . Si quelqu'un peut me souffler
Encore un soucis avec MPASM
Encore un soucis avec MPASM
- Claudius
Passioné- Messages : 260
- Âge : 69
- Enregistré en : septembre 2015
- Localisation : ELANCOURT (78 - YVELINES)
- Contact :
Bonjour,
Je confirme qu'il faut 2 '_' dans la directive __CONFIG; pour preuve:
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 )
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 )
Enregistreur de traces GPS & Boussole GPS parlante (PIC & Arduino)
Encore un soucis avec MPASM
Bonsoir JJE, paulfjujo, Claudius, et tout le forum,
Début avec un Pic16F887
A++
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 :1
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++
Encore un soucis avec MPASM
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 :
puisqu'on fait un & de ces valeurs, opérateur qui est commutatif, je ne vois pas l'importance
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
Encore un soucis avec MPASM
Bonsoir JJE, paulfjujo, Claudius, et tout le forum,
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
A++
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
A++
Retourner vers « Langage ASM »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 41 invités