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)

vendredi 25 février 2005 à 11:42:26 | Liaison RS232 Pic 18F2620 vers PC

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


mardi 1 mars 2005 à 07:23:31 | Re : Liaison RS232 Pic 18F2620 vers PC

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 !!                                                    

mardi 1 mars 2005 à 14:38:42 | Re : Liaison RS232 Pic 18F2620 vers PC

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


mardi 1 mars 2005 à 17:54:20 | Re : Liaison RS232 Pic 18F2620 vers PC

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++

mardi 1 mars 2005 à 18:11:44 | Re : Liaison RS232 Pic 18F2620 vers PC

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

 




Cette discussion est classé dans : liaison, pic, loop, movlw, movwf


Répondre à ce message

Sujets en rapport avec ce message

liaison rs232 avec pic16f84a [ par Lastar ] Bonjour à tous, voila je voudrais allumer et éteindre une led à partir du clavier d'un PC. J'ai donc pour cela mis un MAX232CPE avec le pic. Le prob texte en memoire dans pic [ par yalein ] Bonjour a tous, je suis débutant dans la programmation en assembleur et la je coince sur un probleme. J'utilise un pic 16f877 avec un afficheur et je PIC:Modification du reg.de pile [ par flagyg ] Bonjour,Je travaille sur un PIC 16F877J'ai un bouton qui génère une interruption, et à un moment donné le programme devrait revenir au plus bas niveau commande PIC 68HC11E2 [ par salim_samir ] salut à touscomment je peut tester un bit de port c de pic 68HC11E2 et commander un clignotement de 4 lampe (si le bit x de port c est vrais fait un c Usart et bus i2c [ par blueburry ] Bonjour,je suis en train de programmer un pic 16F877 et je voudrais envoyer des donnees qui arrivent dans le pic a travers le registre USART (RCSTA) a PIC:Debug&programmation probleme [ par flagyg ] Bonjour,J'ai fait un programme sur un PIC 16F873Je l'ai développé en mode debugger avec mplab et l'interface ronde de microship.Il marche a merveille Pic et USB [ par blueburry ] Bonjour, je voudrais connecter mon PIC16F877 a une camera digitale via un cable USB afin d'envoyer des images. Je voudrais savoir s'il existe un code Reception de caractère et tri [ par fufaru ] Bonjour à tous,Je travaille sur un dsPIC30F avec une liaison série MAX232 et un pc (Matlab v7.31).  Je suis débutant en assembleurje dois récupérer un invader [ par henri12 ] saluton peut actuellement faire des jeux video sur les PIC16F84 qui genere de la compositepong tetris dejaes qu on peut faire un jeu comme invader ave aide sur PIC 16f84 [ par Rou25 ] salut a tout le monde,je suis actuellement etudiant genie electrique entammant la phase finale de mes etudes, actuellement jai eu un projet a faire do


Nos sponsors

Sondage...

CalendriCode

Janvier 2009
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode

Téléchargements

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



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,499 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.