;------------------------------------------------------------------------- ; ; Routine de Liaison Série : ; réception d'un octet sur RB0-RXD ; et d'envoi sur RB1- TXD. ; 1 Start Bit, 8 bits données, pas de parité et 1 stop bit, ; le tout à 9600 bds. ; ; Repris par ACQUIER Bernard (car je n'ai vraiment rien inventé ). ; ; Historique : V1.10 le 31/08/2001 sur baudconst de 0x020 à 0x023 ; sinon, la carte ne comprenait pas les codes de la carte clavier ; V1.00 le 22/05/2001 ; ; ;------------------------------------------------------------------------- ; CBLOCK 0x02D ; début de la zone variables en RAM XmtReg : 1 ; réservation de l'octet à recevoir ou à envoyer XCount : 1 ; Compteur de bit de l'octet à envoyer delai : 1 ; Boucle d'attente avant le prochain envoi de bit ENDC ; Fin de la zone ; baudconst EQU 0x023 ;Cela donne 99µs + les "call"+ différents traitements ;et return et on arrive à environ 104µs par bit. #DEFINE RXD PORTB,0 ; Entré RB0 #DEFINE TXD PORTB,1 ; Sortie RB1 ;---------------------------------------------------------------------------- ; Routine de Transmission d'un octet ;---------------------------------------------------------------------------- ; ;********************* Transmission***************************** ; ENVOI: movlw 8 movwf XCount ; 8 bits de données + start bcf TXD ; Send Start Bit sur RB1 (=0) X_next: Call Delay rrf XmtReg,F btfsc STATUS,C ; Test du bit carry à transmettre bsf TXD ; Bit est à un btfss STATUS,C bcf TXD ; Bit est à zero decfsz XCount,F goto X_next ; Bit suivant à envoyer X_Stop: Call Delay bsf TXD ; Send Stop Bit sur RB1 (=1) Call Delay RETURN Delay movlw baudconst ; on prépare l'autre boucle d'attente movwf delai Delay1 decfsz delai,F ; Delai de 94 µs Goto Delay1 Return ; ;********************* Reception***************************** ; RECEPT: movlw baudconst ; donne le temps d'attente entre chaque bit movwf delai movlw 9 movwf XCount ; 8 bits de données + start R_Wait: decfsz delai,F goto R_Wait movlw baudconst ; donne le temps d'attente entre chaque bit movwf delai decfsz XCount,F goto R_Next NOP NOP RETURN R_Next: bcf STATUS,C ;RAZ Carry btfsc RXD ; Lecture de RB0 (RXD) bsf STATUS,C ;RA1 Carry rrf XmtReg,F goto R_Wait END ;Fin de tout le programme