Bsr à tous, svp je travaille sur la realisation d'une carte d’acquisition 2 voies analogiques.
je travaille avec un microcontroleur de type PIC16f88
Communication via RS232 Emission seule (liaison unidirectionnelle)
Utilisation de l'USART avec interruption
9600 bauds/s 8 bits de données Pas de bit de parité
1 bit de STOP Pas de contrôle de flux
Utilisation du module ADC 10 bits
voici le programme:
Code:Errorlevel-302 ; Supprime le message "Ensure that bank bits are correct" List p=16F88 ; processeur utilisé #include <p16F88.inc> ;Program Configuration Register 1 __CONFIG _CONFIG1, _CP_OFF & _CCP1_RB0 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_ON & _MCLR_ON & _PWRTE_ON & _WDT_OFF & _HS_OSC ;bits de configuration : ; Code protection OFF ; CCP1 function on RB0 ; In-Circuit Debugger OFF ; FLASH Program Memory Write protection OFF ; Data EE Memory Code Protection OFF ; Low Voltage Programming OFF ; Brown-out Reset ON ; RA5/MCLR pin function is MCLR ; Power-up Timer ON ; Watchdog Timer OFF ; HS oscillator (quartz 20 MHz) ;Program Configuration Register 2 __CONFIG _CONFIG2, _IESO_OFF & _FCMEN_OFF ;bits de configuration : ;Internal External Switch Over mode OFF ;Fail-Safe Clock Monitor OFF ;xxxxxx ; macro ;xxxxxx bank1 macro ; passage en banque 1 bsf STATUS,RP0 bcf STATUS,RP1 endm bank0 macro ; passage en banque 0 bcf STATUS,RP0 bcf STATUS,RP1 endm ;xxxxxxxxxxxxxxxxxxxxxxxxxx ; Déclaration des variables ;xxxxxxxxxxxxxxxxxxxxxxxxxx CBLOCK 0x070 ; début de la zone des registres d'usage général du 16F88 ; (banque quelconque : 0,1,2 ou 3) ; 0x070 - 0x07F : 16 variables STATUS_TEMP : 1 ; sauvegarde du registre STATUS (routine d'interruption) W_TEMP : 1 ; sauvegarde du registre W (routine d'interruption) octet1_tx : 1 ; 1er octet à transmettre : octet2_tx : 1 ; 2ème octet à transmettre : nb_octet_transmis : 1 ; compteur du nombre d'octets transmis (0, 1, 2 ) ENDC ;xxxxxxxxxxxxxxxxxxxx ; Démarrage sur reset ;xxxxxxxxxxxxxxxxxxxx org 0x0000 goto initialisation ; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ; Routine d'interruption ; - interruption émission (UART) ; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx org 0x0004 ; vecteur d'interruption movwf W_TEMP swapf STATUS,W movwf STATUS_TEMP ; sauvegarde du registre W puis du registre STATUS int1 bank1 btfss PIE1, TXIE goto int2 bank0 btfsc PIR1, TXIF goto emission int2 goto restauration ; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ; Traitement de l'interruption d'émission de l'USART ; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx emission incf nb_octet_transmis , f ; on incrémente (nb_octet_transmis) movlw D'1' subwf nb_octet_transmis , W btfss STATUS , Z goto emm2 ; émission du 1er octet movf octet1_tx , W ;bank0 movwf TXREG ; transmission ; N.B. le flag TXIF est remis à 0 par une écriture dans le registre TXREG emm2 ; émission du 2ème octet movf octet2_tx , W ;bank0 movwf TXREG ; transmission ; N.B. le flag TXIF est remis à 0 par une écriture dans le registre TXREG bank1 bcf PIE1 , TXIE ; interdiction de l'interruption d'émission de l'USART bank0 clrf nb_octet_transmis clrf octet1_tx clrf octet2_tx goto restauration ;xxxxxxxxxxx restauration swapf STATUS_TEMP,W ; restauration des registres STATUS puis W movwf STATUS swapf W_TEMP,f swapf W_TEMP,W retfie ;xxxxxxxxxxxxxxx ; Initialisation ;xxxxxxxxxxxxxxx initialisation bank0 clrf PORTA ; mise à 0 des sorties du port A clrf PORTB ; mise à 0 des sorties du port B bank1 movlw B'11011000' movwf OPTION_REG ; bit 7 (/RBPU) = 1 : valeur par défaut (option non utilisée) ; bit 6 (INTEDG) = 1 : valeur par défaut (option non utilisée) ; bit 5 (T0CS) = 0 : l'horloge interne est l'horloge du timer0 ; bit 4 (T0SE) = 1 : valeur par défaut (option non utilisée) ; bit 3 (PSA) = 1 ; bit 2 (PS2) = 0 ; bit 1 (PS1) = 0 ; bit 0 (PS0) = 0 ; Prescaler du Timer0 = 1:1 ; Watchdog sans prescaler (1:1) ; le timer0 déborde toutes les 256*0,2 µs = 51,2 µs movlw B'11111111' movwf TRISA ; bit 0 du port A (RA0) = 1 : configuration en entrée (canal 0 du module ADC) ; bit 1 du port A (RA1) = 1 : configuration en entrée (canal 1 du module ADC) ; bit 2 du port A (RA2) = 1 : configuration en entrée, par exemple ; bit 3 du port A (RA3) = 1 : configuration en entrée, par exemple ; bit 4 du port A (RA4) = 1 : configuration en entrée, par exemple ; bit 5 du port A (RA5) = X : configuration en entrée, par exemple ; bit 6 du port A (RA6) = X : configuration en entrée, par exemple ; bit 7 du port A (RA7) = X : configuration en entrée, par exemple movlw B'11111111' movwf TRISB ; bit 0 du port B (RB0) = X : configuration en entrée, par exemple ; bit 1 du port B (RB1) = X : configuration en entrée, par exemple ; bit 2 du port B (RB2) = 1 : configuration en entrée (RX : USART) ; bit 3 du port B (RB3) = X : configuration en entrée, par exemple ; bit 4 du port B (RB4) = X : configuration en entrée, par exemple ; bit 5 du port B (RB5) = 1 : configuration en entrée (TX : USART) ; bit 6 du port B (RB6) = 1 : configuration en entrée ; bit 7 du port B (RB7) = 1 : configuration en entrée movlw B'01111111' movwf ANSEL ; bit 1 du registre ANSEL = 1 : configuration de la broche RA1/AN1 comme entrée analogique (canal 1) ; bit 0 du registre ANSEL = 1 : configuration de la broche RA0/AN0 comme entrée analogique (canal 0) ; Configuration du module ADC ; tension de référence basse : VSS (0 V) bcf ADCON1 , VCFG0 ; VCFG0 = 0 ; tension de référence haute : VDD (5 V) bcf ADCON1 , VCFG1 ; VCFG1 = 0 ; Choix du format du résultat de la conversion bsf ADCON1 , ADFM ; ADRESH = (0 0 0 0 0 0 b9 b8) ; ADRESL = (b7 b6 b5 b4 b3 b2 b1 b0) ; Choix de la fréquence d'horloge du convertisseur ADC ; F AD = F OSC / 32 = 625 kHz ; T AD = 1,6 µs bcf ADCON1 , ADCS2 ; ADCS2 = 0 bank0 bsf ADCON0 , ADCS1 ; ADCS1 = 1 bcf ADCON0 , ADCS0 ; ADCS0 = 0 bank1 ; configuration de la liaison RS232 movlw D'129' movwf SPBRG ; (SPBRG) = D'129' movlw B'00100100' movwf TXSTA ; bit 7 (CSRC) = 0 (non utilisé : 0 par exemple) ; bit 6 (TX9) = 0 : 8 bits de transmission ; bit 5 (TXEN) = 1 : autorise la réception ; bit 4 (SYNC) = 0 : mode asynchrone ; bit 3 = 0 (non implémenté) ; bit 2 (BRGH) = 1 : mode asynchrone haute vitesse ; bit 1 (TRMT) = 0 (en lecture seule) ; bit 0 (TX9D) = 0 (non utilisé : 0 par exemple) bank0 movlw B'10000000' movwf RCSTA ; bit 7 (SPEN) = 1 : utilisation du port série ; bit 6 (RX9) = 0 : (non utilisé : 0 par exemple) ; bit 5 (SREN) = 0 (non utilisé : 0 par exemple) ; bit 4 (CREN) =0 :(non utilisé : 0 par exemple) ; bit 3 (ADDEN) = 0 (non utilisé : 0 par exemple) ; bit 2 (FERR) = 0 (non utilisé : 0 par exemple) ; bit 1 (OERR) = 0 (non utilisé : 0 par exemple) ; bit 0 (RX9D) = 0 (non utilisé : 0 par exemple) clrf PORTA ; mise à 0 des sorties du port A clrf PORTB ; mise à 0 des sorties du port B clrf nb_octet_transmis bank1 bcf PIE1 , TXIE ; interdiction de l'interruption d'émission de l'USART bsf INTCON , PEIE ; autorisation des interruptions des périphériques bsf INTCON, GIE ; autorisation globale des interruptions bank0 ; Mise en service du convertisseur ADC bsf ADCON0 , ADON ; ADON = 1 goto debut_programme ;xxxxxxxxxxxxxxxxxxxxx ; Programme principal ;xxxxxxxxxxxxxxxxxxxxx debut_programme ; Sélection du canal 0 bcf ADCON0 , CHS2 ; CHS2 = 0 bcf ADCON0 , CHS1 ; CHS1 = 0 bcf ADCON0 , CHS0 ; CHS0 = 0 ; Attente pendant la phase d'acquisition (environ 19,7 µs) ; 19,7 µs = 98 cycles (avec un quartz 20 MHz) movlw .158 ; 256 - 98 movwf TMR0 ; (TMR0) = .158 bcf INTCON , TMR0IF ; on efface le drapeau du timer0 attente btfss INTCON , TMR0IF goto attente ; Lancement de la phase de conversion de l'ADC bsf ADCON0 , GO ; GO = 1 waitadc btfsc GO goto waitadc movf ADRESH , W ; W = (ADRESH) movwf octet1_tx ; bank1 movf ADRESL , W ; W = (ADRESL) movwf octet2_tx ; bank1 bsf PIE1 , TXIE ; autorisation de l'interruption d'émission de l'USART goto restauration ; Sélection du canal 1 bcf ADCON0 , CHS2 ; CHS2 = 0 bcf ADCON0 , CHS1 ; CHS1 = 0 bsf ADCON0 , CHS0 ; CHS0 = 1 ; Attente pendant la phase d'acquisition (environ 19,7 µs) ; 19,7 µs = 98 cycles (avec un quartz 20 MHz) movlw .158 ; 256 - 98 movwf TMR0 ; (TMR0) = .158 bcf INTCON , TMR0IF ; on efface le drapeau du timer0 attent btfss INTCON , TMR0IF goto attent ; Lancement de la phase de conversion de l'ADC bsf ADCON0 , GO ; GO = 1 wait btfsc GO goto wait movf ADRESH , W ; W = (ADRESH) movwf octet1_tx ; bank1 movf ADRESL , W ; W = (ADRESL) movwf octet2_tx ; bank1 bsf PIE1 , TXIE ; autorisation de l'interruption d'émission de l'USART goto debut_programme END
mais quand je compile:
Error[128] C:\NOUVEAU DOSSIER\PROJETFE.ASM 284 : Missing argument(s)
Error[128] C:\NOUVEAU DOSSIER\PROJETFE.ASM 315 : Missing argument(s)
Halting build on first failure as requested.
BUILD FAILED:
-----