Bonjour
Pour essayer de comprendre le mode USART sur un 16f876 j'essaye d'envoyer au PC un caractére a chaque interruption sur RB0.
Afin de bien comprendre j'ai fait le plus simple possible sans traiter les erreurs ni la parité.
Mon pic travaille a 20MGHZ
Transmission a 9600 Bds, 1 bit start,8 bits données,sans parité,1 bit stop
J'ai initialisé INTCON,INTE pour RB0
Je n'ai pas initialisé INTCON,PEIE
J'ai initialisé INTCON,GIE pour les interruptions
Ma routine d'interruption sur RB0 fonctionne car elle sert d'interrupteur pour une LED et me postionne un flag pour l'envoi de mon caractére vers le PC
Voici le code
intrb0
bcf STATUS,RP0 ; Sélectionner banque 0
movlw B'00000100'
xorwf PORTA , f ; Inverse la LED
call tempo ; Routine de temporisation
bsf flagrb0 ; Positionne le flag d'envoi d'un
; caractére
return ; fin d'interruption RB0/INT
et dans la boucle du programme
Start
clrwdt ; effacer watch dog
btfss flagrb0 ; Test le flag d'interrution
goto $-2 ; Non boucler
bcf STATUS,RP0 ; passer en banque 0
movlw "r" ; Envoie d'un caractére
movwf TXREG
; Lancer l'emission
; --------------------------
bsf STATUS,RP0 ; passer en banque 1
bsf TXSTA,TXEN ; émission en service.
bsf PIE1,TXIE ; envoyer l'information
; Attendre fin de l'émission
; --------------------------
clrwdt ; effacer watch dog
btfsc PIE1,TXIE ; reste des caractères à envoyer?
goto $-2 ; oui, attendre
btfss TXSTA,TRMT ; buffer de sortie vide?
goto $-4 ; non, attendre
; Preparation pour nouvelle données
; -------------------------------
bcf flagrb0 ; efface flag interruption
goto start ; boucler
END ; directive fin de programme
L'envoie du caractére fonctionne a la premiére interrutions mais pas au suivantes
Cela fait un moment que je planche la dessus mais je ne trouve pas,il doit y avoir quelque chose que je ne comprend pas.
La suite logique (pour moi) de cette exercise est que je veux calculer le temps (avec une précision d'une milliseconde) entre chaque interrution sur RB0 et envoyer cette valeur au PC.
La fréquence des interrutions sur RBO serat au maximun de 3KHZ.
J'ai encore de longues nuits a bosser .....
Mais pour l'instant la je suis bloquer
Cordialement Peter
-----