usart pic
Répondre à la discussion
Affichage des résultats 1 à 3 sur 3

usart pic



  1. #1
    coeur noire
    Invité

    usart pic


    ------

    Bonjour

    Question sur la transmission en réception de l'usart d'un pic
    Lors de la réception d'une trame de 10 bits" sans parité et pas de 9bits,1bits stop" cette trame représente la valeur d'une touche du clavier
    Si cette trame est récupérée dans une variable et comparer dans la routine interruption
    Est-ce que la valeur "ou la trame"de la variable est effacé ?
    hors de la routine Faut-il faire un pointer sur cette variable ,pour garder la meme valeur jusqu’à une nouvelles comparaison d'interruption ?

    -----

  2. #2
    RISC

    Re : usart pic

    Salut,

    Difficile de répondre à une question aussi vague...
    Quel PIC utilises-tu (parmi les 600..) ?
    Quel type a ta variable ?
    Est-elle locale ou globale ?

    a+

  3. #3
    coeur noire
    Invité

    Re : usart pic

    salut RISC

    j'utilise le 16F88 + ma carte + max232 + hyperterminal en asm
    en asm il n'y pas de type défini pour les variables ?
    ma variable donnee est global CBLOCK H'070'
    j'ai récupéré un fichier pris sur le net qui me permet d'allumé une diode sur le PORTA1 si on appuie sur la touche majuscule B et A majuscule pour l'éteindre
    le problème c'est que la diode ne reste pas allumé et je ne peux pas l'étreindre avec la touche A
    il n'y a pas de pointer et la comparaison ce fais dans la routine d'intéruption

    Code:
    ; Utilisation de l'USART du 16F88 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
    
    
    ; version 1.0
    ; microcontrôleur PIC 16F88
    ; développé avec Microchip MPLAB IDE
     ERRORLEVEL -302 ;remove message about using proper bank ERRORLEVEL -302; 
     List p=16F88 ; processeur utilisé 
     #include <p16F88.inc>
    
     	__CONFIG  	_CONFIG1, _CP_OFF & _CCP1_RB3 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_ON & _PWRTE_ON & _WDT_ON & _HS_OSC
     __CONFIG _CONFIG2, _IESO_OFF & _FCMEN_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
    
    ;xxxxxxxxxxxxxxxxxxxxxxxxx
    ; déclaration de variables
    ;xxxxxxxxxxxxxxxxxxxxxxxxx
    
     CBLOCK H'070'  ; début de la zone des registres d'usage général du 16F88
        
    
     STATUS_TEMP : 1  ; sauvegarde du registre STATUS (routine d'interruption)
     W_TEMP : 1    ; sauvegarde du registre W  (routine d'interruption)
     donnee : 1    ; 8 bits de données 
    
     ENDC 
    
    ;xxxxxxxxxxxxxxxxxxxx
    ; démarrage sur reset
    ;xxxxxxxxxxxxxxxxxxxx
    
     org 0x0000
     goto initialisation
    
    ; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    ; Routine d'interruption 
    ; 1 source d'interruption : réception (USART)
    ; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    
     org 0x0004     ; vecteur d'interruption
    
     movwf W_TEMP 
     swapf STATUS,W
     movwf STATUS_TEMP  ; sauvegarde du registre W puis du registre STATUS
    
        bank1
        btfss PIE1, RCIE
        goto suite
        bank0
        btfsc PIR1, RCIF
        goto reception 
    suite
     goto restauration
    
    reception
        bank0
        movf RCREG , W ; le flag RCIF est remis à 0 par une lecture du registre RCREG
        movwf donnee ; les 8 bits de données sont transféres dans un registre d'usage général
    
     movlw B'01000001'     ; (code ASCII de a= B'0100 0001')
     subwf donnee,W  
     btfsc STATUS,Z  
     goto afficheA    ; donnee = 'a'
    
     movlw B'01000010'     ; (code ASCII de b= B'0100 0010')
     subwf donnee,W  
     btfsc STATUS,Z  
     goto afficheB    ; 
    
    afficheA
    bcf PORTA,1;RA1 est aux 0VDC si on appuis sur la touche a
    goto teste
    afficheB  
    bsf PORTA,1;RA1 est aux 5VDC si on appuis sur la touche b
      
      ; xxxxxxxxxxxxxxxxxxxxxxxxxxx
      ; test d'une erreur d'overrun
      ;xxxxxxxxxxxxxxxxxxxxxxxxxxxx
    teste
    
     btfss RCSTA , OERR
     goto restauration; traitement de l'erreur d'overrun
     bcf RCSTA , OERR ; on efface le bit OERR
     bsf RCSTA , CREN ; on relance la réception
     goto restauration
    
    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
     movlw 0x70   ; B'111 0000' on efface la memoire
     movwf FSR
    init
     clrf INDF
     incf FSR,f
     btfss FSR,3  ; B'111 1111'
     goto init
    
     
     
     bank1
     movlw B'11111101'
     movwf TRISA
    
     ; bit 1 du port A (RA1) = 0 : configuration en sortie (LED )
     
    
    
     movlw B'00100100'
     movwf TRISB
    
     ; bit 5 du port B  = 1 : configuration en entrée (TX : USART)
     ; bit 2 du port B  = 1 : configuration en entrée (RX : USART)
     
     
     movlw B'01100000';horloge 4MHZ quartz
     movwf OSCCON  
    
    
    movlw B'00000111'; RBPU      b7 : 0= Résistance rappel +5V en service
    movwf OPTION_REG  ; INTEDG    b6 : 1= Interrupt sur front montant de RB0
    			      ;                0= Interrupt sur front descendant de RB0
    			      ; TOCS      b5 : 1= source clock = transition sur RA4
    			      ;                0= horloge interne
    			      ; TOSE      b4 : 1= Sélection front descendant RA4(si B5=1)
    			      ;                0= Sélection front montant RA4
    			      ; PSA       b3 : 1= Assignation prédiviseur sur Watchdog
    			      ;                0= Assignation prédiviseur sur Tmr0
    			      ; PS2/PS0   b2/b0 valeur du prédiviseur
                      ;           000 =  1/1 (watchdog) ou 1/2 (tmr0)
    			      ;           001 =  1/2               1/4
    			      ;           010 =  1/4		     1/8
    			      ;           011 =  1/8		     1/16
    			      ;           100 =  1/16		     1/32
    			      ;           101 =  1/32		     1/64
    			      ;           110 =  1/64		     1/128
    			      ;           111 =  1/128	     1/256
         
    
     movlw B'00000111';configurer le mode 111 pour utiliser RA0 RA1 RA2 RA3 en I/Ovation des comparateurs analogiques
     movwf CMCON   
    			
    
     movlw B'01000000'; GIE       b7 : masque autorisation générale interrupt
      movwf INTCON    ;                ne pas mettre ce bit à 1 ici
                      ;                sera mis en temps utile
    			      ; PEIE      b6 : masque autorisation générale périphériques
    			      ; TMR0IE    b5 : masque interruption tmr0
    			      ; INTE      b4 : masque interuption RB0/Int
    			      ; RBIE      b3 : masque interruption RB4/RB7
    			      ; TMR0IF    b2 : flag tmr0
    			      ; INTF      b1 : flag RB0/Int
    			      ; RBIF      b0 : flag interruption RB4/RB7
     
       
     movlw B'00100000'; RESERVED  b7 : réservé, laisser à 0 
     movwf PIE1 	  ; ADIE      b6 : masque interrupt convertisseur A/D
    			      ; RCIE      b5 : masque interrupt réception USART
    			      ; TXIE      b4 : masque interrupt transmission USART
    			      ; SSPIE     b3 : masque interrupt port série synchrone
    			      ; CCP1IE    b2 : masque interrupt CCP1
    			      ; TMR2IE    b1 : masque interrupt TMR2 = PR2
    			      ; TMR1IE    b0 : masque interrupt débordement tmr1
    
    
     
        movlw D'25'
        movwf SPBRG ; (SPBRG) = D'25'
    
        movlw B'00000100'
        movwf TXSTA
        ; bit 7 (CSRC) = 0 (non utilisé : 0 par exemple)
        ; bit 6 (TX9) = 0 (non utilisé : 0 par exemple) 
        ; bit 5 (TXEN) = 0 (non utilisé : 0 par exemple)
        ; bit 4 (SYNC) = 0 : mode asynchrone
        ; bit 3 = 0 (non implémenté)
        ; bit 2 (BRGH) = 1 : mode asynchrone haute vitesse
        ; bit 1 (TRMT) = 0 (non utilisé : 0 par exemple)
        ; bit 0 (TX9D) = 0 (non utilisé : 0 par exemple)
    
    
    
    
    
    bank0 
     
     movlw B'10010000' 
     movwf RCSTA 
     ; bit 7 (SPEN) = 1 : utilisation du port série 
     ; bit 6 (RX9)  = 0 : 8 bits de réception
     ; bit 5 (SREN) = 0 (non utilisé : 0 par exemple) 
     ; bit 4 (CREN) = 1 : autorise la réception 
     ; bit 3 (ADEN) = 0 (non utilisé : 0 par exemple) 
     ; bit 2 (FERR) = 0 (en lecture seule) 
     ; bit 1 (OERR) = 0 (en lecture seule) 
     ; bit 0 (RX9D) = 0 (non utilisé : 0 par exemple)
    
     
    
     clrf donnee
    
        bank1
        bsf PIE1 , RCIE ; autorisation de l'interruption de réception de l'USART
        bsf INTCON , PEIE ; autorisation des interruptions des périphériques
        bsf INTCON, GIE ; autorisation globale des interruptions 
    
     bank0
    
     goto debut_programme  
      
    ;xxxxxxxxxxxxxxxxxxxxx
    ; programme principal
    ;xxxxxxxxxxxxxxxxxxxxx
    
     debut_programme
     
    goto debut_programme ; on attend l'interruption de réception(USART)
     END
    Dernière modification par coeur noire ; 21/07/2010 à 12h56.

Discussions similaires

  1. Usart<-----> pic
    Par invite03f050fe dans le forum Électronique
    Réponses: 0
    Dernier message: 26/07/2009, 13h46
  2. USART sur PIC 16F628
    Par marcel6566 dans le forum Électronique
    Réponses: 15
    Dernier message: 17/03/2009, 20h53
  3. USART pic
    Par invitecb49b6c0 dans le forum Électronique
    Réponses: 5
    Dernier message: 04/08/2008, 16h47
  4. usart + pic + signaux inversé
    Par KHEOPS1982 dans le forum Électronique
    Réponses: 2
    Dernier message: 08/05/2008, 09h58
  5. USART sur PIC
    Par noisyboxes dans le forum Électronique
    Réponses: 6
    Dernier message: 23/04/2007, 07h39
Découvrez nos comparatifs produits sur l'informatique et les technologies.