Programmation UART pour pic 16f84A probleme aidez moi

cs_looloo78 Messages postés 15 Date d'inscription vendredi 18 février 2005 Statut Membre Dernière intervention 26 novembre 2010 - 6 déc. 2008 à 11:27
cs_looloo78 Messages postés 15 Date d'inscription vendredi 18 février 2005 Statut Membre Dernière intervention 26 novembre 2010 - 11 janv. 2009 à 10:25
bonjour,

j'ai créer ce programme en m'inspirant d'autre programme, le but étant de lire les 8 bits des portB0-7 et de les envoyer par le portA1 suivant le protocole 9600bds, pas de bit de parité 1 bit d'arret .
soit 1 bit tous les 104µs.
j'utilise un quartz 4Mhz soit 1cycle/1µs.
j'envoi un signal sur le portA,0 pour demander le traitement.

je vous présente mon prog, il ya surement un erreur.( je sais beaucoup de nop mais bon...)

************************************************
; 9600 bauds/s     8 bits de données     Pas de bit de parité
; 1 bit de STOP    Pas de contrôle de flux


  List p=16F84A ; processeur utilisé
 #include


 __config _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC
  ;bits de configuration :
  ;code protect OFF
  ;watchdog timer OFF
  ;power up timer ON
  ;oscillateur HS (quartz 4 MHz)


;xxxxxx
; macro
;xxxxxx


bank1 macro  ; passage en banque 1
  bsf STATUS,RP0
  endm


bank0 macro  ; passage en banque 0
  bcf STATUS,RP0
  endm


;xxxxxxxxxxxxxxxxxxxxxxxxx
; déclaration de variables
;xxxxxxxxxxxxxxxxxxxxxxxxx


 CBLOCK 0x000C ; début de la zone des registres d'usage général du 16F84A


 compteur_tempo104 : 1
 
 ENDC


;xxxxxxxxxxxxxxxxxxxx
; démarrage sur reset
;xxxxxxxxxxxxxxxxxxxx


 org 0x0000
 goto initialisation


;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'00000001'
 movwf TRISA
 ; bit 0 du port A (RA0) = 1 : configuration en entrée (RX)
 ; bits 1 à 4 du port A (RA1 à RA4) = 1 : configuration en sortie


 movlw B'11111111'
 movwf TRISB
 ; bit 0 du port B (RB0) = 0 : configuration en entrée
 ; bit 1 du port B (RB1) = 0 : configuration en entrée
 ; bit 2 du port B (RB2) = 0 : configuration en entrée
 ; bit 3 du port B (RB3) = 0 : configuration en entrée
 ; bit 4 du port B (RB4) = 0 : configuration en entrée
 ; bit 5 du port B (RB5) = 0 : configuration en entrée
 ; bit 6 du port B (RB6) = 0 : configuration en entrée
 ; bit 7 du port B (RB7) = 0 : configuration en entrée
 
 bank0 
 movlw B'00011110'
 movwf PORTA 


 movlw D'17'
 movwf compteur_tempo104
 goto debut_programme 
  
;xxxxxxxxxxxxxxxxxxxxx
; programme principal
;xxxxxxxxxxxxxxxxxxxxx


debut_programme


 ; on attend un front montant sur A0
 btfss PORTA , 0
 goto debut_programme ; RX = 1
 
 bcf PORTA,1
 call tempo104
 nop
 nop
 nop
 nop
 nop
 nop
 nop 
 nop
 btfsc PORTB,0
 bsf PORTA,1
 call tempo104
 nop
 nop
 nop
 nop
 nop
 nop
 btfsc PORTB,1
 bsf PORTA,1
 btfss PORTB,1
 bcf PORTA,1
 call tempo104
 nop
 nop
 nop
 nop
 nop
 nop
 btfsc PORTB,2
 bsf PORTA,1
 btfss PORTB,2
 bcf PORTA,1
 call tempo104
 nop
 nop
 nop
 nop
 nop
 nop
 btfsc PORTB,3
 bsf PORTA,1
 btfss PORTB,3
 bcf PORTA,1
 call tempo104
 nop
 nop
 nop
 nop
 nop
 nop
 btfsc PORTB,4
 bsf PORTA,1
 btfss PORTB,4
 bcf PORTA,1
 call tempo104
 nop
 nop
 nop
 nop
 nop
 nop
 btfsc PORTB,5
 bsf PORTA,1
 btfss PORTB,5
 bcf PORTA,1
 call tempo104
 nop
 nop
 nop
 nop
 nop
 nop
 btfsc PORTB,6
 bsf PORTA,1
 btfss PORTB,6
 bcf PORTA,1
 call tempo104
 nop
 nop
 nop
 nop
 nop
 nop
 btfsc PORTB,7
 bsf PORTA,1
 btfss PORTB,7
 bcf PORTA,1
 call tempo104
 nop
 nop
 nop
 nop
 nop
 nop
 nop 
 nop
 nop 
 bsf PORTA,1
 call tempo104
 nop
 nop
 nop
 nop
 nop
 nop
 nop 
 nop
 nop 
    
 goto debut_programme


; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
; routine de temporisation de 104 µs (104 cycles avec un quartz 4 MHz)
tempo104
 
 decf compteur_tempo104 , f
 movf compteur_tempo104 , f
 btfss STATUS , Z 
 goto tempo104 ; compteur_tempo104 <> 0
 movlw D'17'
 movwf compteur_tempo104 
 nop
 nop
 nop
 nop
 return


 END

kix

2 réponses

bofur Messages postés 39 Date d'inscription lundi 13 novembre 2000 Statut Membre Dernière intervention 5 juin 2009
10 janv. 2009 à 22:02
pourquoi mettre des NOP alors qu'il y a déja une tempo?

G.I.G.O.
0
cs_looloo78 Messages postés 15 Date d'inscription vendredi 18 février 2005 Statut Membre Dernière intervention 26 novembre 2010
11 janv. 2009 à 10:25
c'est pour pouvoir avec exactement 104µs pour chaque bit.
9600bauds.
voila, effectivement j'aurais pu faire unhe tempo pile poil mais c'est pas facile ( pour moi) alors j'ai fais une tempo grossiere et je l'ajuste avec des nops

a+

kix
0
Rejoignez-nous