fun_olivier
Messages postés2Date d'inscriptionvendredi 25 février 2005StatutMembreDernière intervention 1 mars 2005
-
25 févr. 2005 à 11:42
phenojeff
Messages postés87Date d'inscriptionjeudi 10 octobre 2002StatutMembreDernière intervention 4 avril 2008
-
1 mars 2005 à 18:11
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é:
;***********************************************************************;
; 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
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...
phenojeff
Messages postés87Date d'inscriptionjeudi 10 octobre 2002StatutMembreDernière intervention 4 avril 2008 1 mars 2005 à 07:23
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
;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
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?
phenojeff
Messages postés87Date d'inscriptionjeudi 10 octobre 2002StatutMembreDernière intervention 4 avril 2008 1 mars 2005 à 17:54
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++
;//////////////// 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
;*******************************************************************
;*****************************************************************
; 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 ;
;***********************************************************************;
;***********************************************************************;
; 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
;----- 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