begin process at 2008 08 28 14:30:24
1 233 147 membres
251 nouveaux aujourd'hui
14 291 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Liaison RS232 Pic 18F2620 vers PC [ Archives / Les PIC ] (fun_olivier)

Liaison RS232 Pic 18F2620 vers PC le 25/02/2005 11:42:26

fun_olivier

Bonjour je dois faire un programme qui permet de relier un Pic 128F2620 avec un Pc via une liaison USART . Le Pic envoi un caractere, puis reçoit une valeur du Pc. Voici le code que j'ai réalisé:

---------------------------------------------------------------------------------------------

 list p=18f2620   ; Définition de processeur
#include <p18F2620.inc> ; Fichier include

 ;__CONFIG _CP_OFF _HS_OSC_1H

; ------------Direction des ports I/O--------------

val_baud equ 25

DIRPORTA EQU B'11010100' ; RA6 & RA7 en entrées pour quartz
DIRPORTB EQU B'11111111'
DIRPORTC EQU B'10111111' ; RC7 en entrée & RC6 en sortie

 org 0     ; le reset vector est placé en 0x00h
 goto start

;***********************************************************************;
;                                                                       ;
;                          PROGRAMME PRINCIPAL                          ;
;                                                                       ;
;***********************************************************************;
 org 0x20
start
 call init

;***********************************************************************;
;                             TRANSMISSION                              ;
;***********************************************************************;
loop_1
 btfss TXSTA,1,0
 goto loop_1
 movlw 0x15
 movwf TXREG,0
; goto loop_1

;***********************************************************************;
;                            RECEPTION                                  ;
;***********************************************************************;
loop_2
 bsf  RCSTA,CREN,0 ; On établi la reception permanente
 btfss PIR1,RCIF,0  ; Test du flag dans PIR1 pour savoir si l'octet
 goto loop_2   ; a été reçuet que le buffer est plein.Si le bit
 movf RCREG,0,0  ; est à 1 on va récuperer l'octet dans RCREG

;***********************************************************************;
;                                                                       ;
;                            INITIALISATIONS                            ;
;                                                                       ;
;***********************************************************************;

init

;----Initialisation des ports

 movlw 0x07
 movwf ADCON1

 clrf PORTA,0
 clrf PORTB,0
 clrf PORTC,0

 movlw DIRPORTA
 movwf TRISA,0

 movlw DIRPORTB
 movwf TRISB,0

 movlw DIRPORTB
 movwf TRISC,0

;--------Initialisation de la liaison serie--------

 movlw b'10100110' ; Initialisation de la transmission
 movwf TXSTA,0

 movlw b'10010000' ; Initialisation de la reception
 movwf RCSTA,0

 movlw val_baud
 movwf SPBRG,0    ; choix de la vitesse de transmission  à 19200bauds

 bsf  BAUDCON,BRG16,0 ; Generateur de bauds sur 16bits

 RETURN

 END

---------------------------------------------------------------------------------------------

Pour ceux qui connaissent ce Pic, pensez - vous que ce code est correct?

De plus, je dois utilisé l'horlaoge interne du Pic et non un quartz externe, mais je ne sais pas comment le configurer! C'est avec "INTIO1", mais j'en sais pas plus...

Merci


Re : Liaison RS232 Pic 18F2620 vers PC le 01/03/2005 07:23:31

phenojeff
Allo la reponse est non ca ne marchera pas, pour la question horloge interne sans quartz il doit etre comme celui ci pas sur mais verifie
un 1320 vire a  8 Mhz comme ca,  ca doit pas faire longtemps que tu programme les 18F jai pas faite de test en mplab, ton bout de code va peu etre envoyer et recevoire mais regarde apres la reception
movf RCREG,0,0  ; est à 1 on va récuperer l'octet dans RCREG
il va repasser dans le init et la faire un return ca sera pas jolie il va faire un beau reset
il y aurait encore un peu d ouvrage a lui faire
autre chose que je viend de voire
DIRPORTA EQU B'11010100' ; RA6 & RA7 en entrées pour quartz
si tu mais un quartz oublie RA6 et RA7 des que tu mais _HS_OSC_1H tu perd le control des deux pin.
si tu est vraiment mal pris fait moi un signe et je vais te faire une code maquette du 18F2620

list p=18f1320 
 #include <p18f1320.inc>  
 __CONFIG    _CONFIG1H, b'00001000'
 __CONFIG  _CONFIG2L, b'00001101'
  __CONFIG  _CONFIG2H, b'00011110'
  __CONFIG  _CONFIG3H, _MCLRE_ON_3H
  __CONFIG  _CONFIG4L, _DEBUG_OFF_4L & _LVP_OFF_4L & _STVR_OFF_4L ; b'10000001' ;
  __CONFIG  _CONFIG5L, _CP0_OFF_5L & _CP1_OFF_5L
  __CONFIG  _CONFIG5H, _CPB_OFF_5H & _CPD_OFF_5H
  __CONFIG  _CONFIG6L, _WRT0_OFF_6L & _WRT1_OFF_6L
  __CONFIG  _CONFIG6H, _WRTC_OFF_6H & _WRTB_OFF_6H & _WRTD_OFF_6H
  __CONFIG  _CONFIG7L, _EBTR0_OFF_7L & _EBTR1_OFF_7L
   __CONFIG  _CONFIG7H, _EBTRB_OFF_7H

Init_rc
; Active internal RC à 8 MHz
 clrf OSCTUNE
 movlw b'11111110' ;
 movwf OSCCON

a++
                        Tu vas la faire clignoter cette led !!                                                    

Re : Liaison RS232 Pic 18F2620 vers PC le 01/03/2005 14:38:42

fun_olivier

Merci pour ton aide, j'ai essayé de modifier mon code et ça donne ça :

 list p=18f2620   ; Définition de processeur
#include <p18F2620.inc> ; Fichier include

 __CONFIG _CONFIG1H, _OSC_INTIO7_1H  ; INT RC-CLKOUT on RA6, PORT on RA7
 __CONFIG _CONFIG2L, _BOREN_OFF_2L&_PWRT_ON_2L
 __CONFIG _CONFIG2H, _WDT_OFF_2H
 __CONFIG _CONFIG4L, _DEBUG_OFF_4L&_STVREN_ON_4L&_LVP_OFF_4L
 __CONFIG _CONFIG5L, _CP0_OFF_5L&_CP1_OFF_5L&_CP2_OFF_5L&_CP3_OFF_5L
 __CONFIG _CONFIG5H, _CPB_OFF_5H&_CPD_OFF_5H
 __CONFIG _CONFIG6L, _WRT0_OFF_6L&_WRT1_OFF_6L&_WRT2_OFF_6L&_WRT3_OFF_6L 
 __CONFIG _CONFIG6H, _WRTB_OFF_6H&_WRTC_OFF_6H&_WRTD_OFF_6H
 __CONFIG _CONFIG7L, _EBTR0_OFF_7L&_EBTR1_OFF_7L&_EBTR2_OFF_7L& _EBTR3_OFF_7L
 __CONFIG _CONFIG7H, _EBTRB_OFF_7H

; ------------Direction des ports I/O--------------

val_baud equ d'25'

DIRPORTA EQU B'11010100' ;
DIRPORTB EQU B'11111111'
DIRPORTC EQU B'10111111' ; RC7 en entrée & RC6 en sortie


 org 0     ; le reset vector est placé en 0x00h
 goto start

;***********************************************************************;
;                                                                       ;
;                          PROGRAMME PRINCIPAL                          ;
;                                                                       ;
;***********************************************************************;
 org 0x20
start
 call init

;***********************************************************************;
;                             TRANSMISSION                              ;
;***********************************************************************;

;loop       ; Boucle de transmission et de réception
trans
    bsf  TXSTA,TXEN,0 ; Mets à 1 TXEN pour emettre
    btfss TXSTA,TRMT,0 ; Test pour savoir si octet présent ds registre 
    goto trans   ; de transfert (1 = vide)
    movlw 0x50         ; Envoi de 0x50
    movwf TXREG,0
    bcf  TXSTA,TXEN,0 ; Arret de la transmision
    goto  trans


;***********************************************************************;
;                            RECEPTION                                  ;
;***********************************************************************;

;recep

    ;bsf  RCSTA,CREN,0   ; On établi la reception permanente
    ;btfss PIR1,RCIF,0    ; tester si = 1 message recu
    ;goto recep          ; non = 0  attendre
   ; movf RCREG,0,0      ; charger octet recu
   ; bcf  RCSTA,CREN,0   ; On arrete la reception
    ;goto  loop

;***********************************************************************;
;                                                                       ;
;                            INITIALISATIONS                            ;
;                                                                       ;
;***********************************************************************;

init

;----Initialisation des ports

    movlw 0x07
    movwf ADCON1,0

    clrf PORTA,0
    clrf PORTB,0
    clrf PORTC,0

    movlw DIRPORTA
    movwf TRISA,0

    movlw DIRPORTB
    movwf TRISB,0

    movlw DIRPORTC
    movwf TRISC,0

;----- Initialisation Quartz 8Mhz------;

           movlw b'01110000'  ; Valeur pour 8Mhz    
           movwf OSCCON,0  ;     
Stable btfss OSCCON,IOFS,0 ; Frequence stable?   
           bra    Stable   ; Non, donc boucle 


;------- Initialisation liaison serie--------
;
INIT232  bcf  PORTC,TX,0    
               bsf  PORTC,RX,0       
               movlw b'10010000' ; SPEN=1, CREN=1     
               movwf RCSTA,0  ;      
               movlw b'00100100' ; TXEN=1, SYNC=0, BRGH=1    
               movwf TXSTA,0  ; 
               clrf BAUDCON,0 ; 8 bit SPBRG   
               movlw val_baud ; Valeur pour 19.2kb (8-mhz)   
               movwf SPBRG,0  ;      
               movf RCREG,W,0 ; Efface le buffer Rx   

 RETURN

 END

Pour le moment j'ai désactivé la réception  . Car la fonction de transmission toute seule ne marche pas ! Vous savez pourquoi? Pour le moment je voudrai juste envoyer en continu.  Sinon est il necessaire de mettre le ",0" pour faire des operations dans les registres suivant les banques?

Merci


Re : Liaison RS232 Pic 18F2620 vers PC le 01/03/2005 17:54:20

phenojeff
Allo
Reponse au sujet du ,0  pour le moment tu est pas oubliger rien si tu change le BSR de banque la il faut y penser  mais la ca marchera pas ta encore des erreur dans les registre de CONFIG pour savoir si ton pic vire mais toi une led avec une resitance dison RC0 et fait la flacher.
a++

Re : Liaison RS232 Pic 18F2620 vers PC le 01/03/2005 18:11:44

phenojeff

Regarde ca dans un nouveau projet je doit pas etre loin

 list p=18f2620   ; Définition de processeur
 #include <p18F2620.inc> ; Fichier include

 __CONFIG _CONFIG1H, 0x38
 __CONFIG _CONFIG2L, 0xF8
 __CONFIG _CONFIG2H, 0xFE
 __CONFIG _CONFIG4L, 0x81
 __CONFIG _CONFIG5L, 0xBB
 __CONFIG _CONFIG5H, 0xFF
 __CONFIG _CONFIG6L, 0xFF
 __CONFIG _CONFIG6H, 0xFF
 __CONFIG _CONFIG7L, 0xFF
 __CONFIG _CONFIG7H, 0xFF


;//////////////// CALCUL DE LA VITESSE DU PORT COMM //////////////////////
#define FOSC D'8000000'  ; <<< frequence du quartz[Hz], max. 20 MHz
#define BAUD D'19200'   ; <<< vitesse du port serie [bit/sec]
#define BAUD_REAL (FOSC/(D'16' * BAUD))-1 ;Haute Vitesse TXSTA Bit 2 =1

#define LED1 PORTC,RC0 ;Led sur RC0

; ------------Direction des ports I/O--------------
DIRPORTA EQU B'11010100' ;
DIRPORTB EQU B'11111111'
DIRPORTC EQU B'10111110' ; RC7 en entrée & RC6 en sortie,RC0 en sortie
;*******************************************************************
;                    VARIABLE
;*******************************************************************
 CBLOCK 0x00
 PDel0 :1
 PDel1 :1
 PDel2 :1
 ENDC
;*******************************************************************
;                    VECTOR DU RESET
;*******************************************************************

  ORG 0x0000    
  GOTO init
;*******************************************************************
;                    INTERUPTION HAUTE
;*******************************************************************
 ORG 0x0008
 GOTO HighInt
;*******************************************************************
;     INTERUPTION BASE
;*******************************************************************
 ORG 0x0018   ; vecteur d'interruption basse priorité
 GOTO LowInt   
;*****************************************************************
;                      INTERUPTION HAUTE
;*****************************************************************
HighInt:

 retfie FAST
 
;*****************************************************************
;                      INTERUPTION BASE
;*****************************************************************
LowInt:
       
 retfie FAST    ; retour avec restauration automatique

;***********************************************************************;
;                          PROGRAMME PRINCIPAL                          ;
;***********************************************************************;
Main
 movlw 0x41  ;envoyer un "A"
 call transmet_rs232
Main_P 
 call PDelay
 BTG  LED1 ;inverse la led
 bra Main_P
;***********************************************************************;
;                             TRANSMISSION                              ;
;***********************************************************************;

transmet_rs232     
 movwf TXREG
 bsf TXSTA,TXEN
attend_fin_octet   
 btfss TXSTA,TRMT
    goto attend_fin_octet
 return


;***********************************************************************;
;                            RECEPTION                                  ;
;***********************************************************************;
Rx_Rs232_Sans_Int
    btfss  PIR1,RCIF ; on attend ce bit soit a 1 , ce qui signale une reception   
    bra  Rx_Rs232_Sans_Int
    movf  RCREG,W
 return  

;***********************************************************************;
;                            INITIALISATIONS                            ;
;***********************************************************************;
init
;----Initialisation des ports

    movlw 0x0F ;Configure toute les pins en digital i/o
    movwf ADCON1

    clrf PORTA
    clrf PORTB
    clrf PORTC
    movlw DIRPORTA
    movwf TRISA
    movlw DIRPORTB
    movwf TRISB
    movlw DIRPORTC
    movwf TRISC

;----- Initialisation Quartz 8Mhz------;
 clrf OSCTUNE
 movlw b'11111110' ;
 movwf OSCCON
Stable
 btfss OSCCON,IOFS ; Frequence stable?  
    bra    Stable   ; Non, donc boucle


;------- Initialisation liaison serie--------
;
; initialiser USART
   ; -----------------
 bcf  IPR1,RCIP ;Interruption basse priorité
 bcf  IPR1,TXIP ;Interruption basse priorité
 movlw B'00000000' ;
 movwf TXSTA  ; dans registre de contrôle
 movlw B'10000000' ; module USART en service
 movwf RCSTA  ; dans registre de contrôle

 movlw  BAUD_REAL
    movwf  SPBRG          ; Vitesse du Port Comm
    bsf  TXSTA,BRGH      
   
   ; lancer la réception
   ; --------------------
 bsf  TXSTA,TXEN ; émission en service.
 bsf  RCSTA,CREN ; lancer la réception
 bcf  PIE1,RCIE ; interdire interruption réception

 bra  Main ; programme principal
;=============================================================================
;                           Delay                          =
;=============================================================================
;-----------------------------------------------------------------------------
PDelay  movlw     .165      ; 1 set number of repetitions (C)
        movwf     PDel0     ; 1 |
PLoop0  movlw     .41       ; 1 set number of repetitions (B)
        movwf     PDel1     ; 1 |
PLoop1  movlw     .147      ; 1 set number of repetitions (A)
        movwf     PDel2     ; 1 |
PLoop2  clrwdt              ; 1 clear watchdog
        clrwdt              ; 1 cycle delay
        decfsz    PDel2, 1  ; 1 + (1) is the time over? (A)
        bra       PLoop2    ; 2 no, loop
        decfsz    PDel1,  1 ; 1 + (1) is the time over? (B)
        bra       PLoop1    ; 2 no, loop
        decfsz    PDel0,  1 ; 1 + (1) is the time over? (C)
        bra       PLoop0    ; 2 no, loop
        return              ; 2+2 Done
  END

 



Classé sous : liaison, pic, loop, movlw, movwf

Participer à cet échange

Pub



Appels d'offres

Recherche developpeur ...
Budget : 700€
SITE MARCHAND LOCATION...
Budget : 3 000€
SITE MARCHAND POUR HOTEL
Budget : 4 000€

CalendriCode

Août 2008
LMMJVSD
    123
45678910
11121314151617
18192021222324
25262728293031

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS