Voici un schéma tout simple, communication avec l'usart
Le seule problème, c'est quand je branche le microcontrôleur comme sur le plan ci-dessus,
Le microcontrôleur se retrouve alimenté, pouvez vous m'expliquer le pourquoi L'entrée de l'usart (RX) du microcontrôleur serait t'elle endommagé ?
Voici le code à tout hasard
Code : Tout sélectionner
;***********************************************************************************************
Errorlevel-302 ; Supprime le message "Ensure that bank bits are correct"
radix dec ; par defaut en mode décimal
list p=18f26K22 ; processeur utilisé
#include <p18f26K22.inc> ; Définitions des constantes
;***********************************************************************************************
; CONFIG11H
CONFIG FOSC = INTIO67
CONFIG FCMEN = OFF
CONFIG IESO = OFF
; CONFIG2L
CONFIG PWRTEN = OFF
CONFIG BOREN = OFF
CONFIG BORV = 190
; CONFIG2H
CONFIG WDTEN = OFF
CONFIG WDTPS = 1
; CONFIG3H
CONFIG CCP2MX = PORTC1
CONFIG PBADEN = OFF
CONFIG CCP3MX = PORTC6
CONFIG HFOFST = OFF
CONFIG T3CMX = PORTC0
CONFIG P2BMX = PORTC0
CONFIG MCLRE = INTMCLR
; CONFIG4L
CONFIG STVREN = ON
CONFIG LVP = OFF
CONFIG XINST = OFF
CONFIG DEBUG = OFF
; CONFIG5L
CONFIG CP0 = OFF
CONFIG CP1 = OFF
CONFIG CP2 = OFF
CONFIG CP3 = OFF
; CONFIG5H
CONFIG CPB = OFF
CONFIG CPD = OFF
; CONFIG6L
CONFIG EBTR0 = OFF
; CONFIG6H
CONFIG EBTR1 = OFF
; CONFIG7L
CONFIG EBTR2 = OFF
; CONFIG7H
CONFIG EBTR3 = OFF
;***********************************************************************************************
;------------------------------ information sur le brochage Usart ------------------------------
;------------------------------------- RC6 = TX, RC7 = RX --------------------------------------
;*************************************** assignations *****************************************
#DEFINE dc LATA,0 ; RA0 ==> sélection du mode : commande = 0 , donnée = 1
#DEFINE cs LATA,1 ; RA1 ==> activer ou désactiver la transmission
#DEFINE rst LATA,2 ; RA2 ==> reset de l'écran
#DEFINE sck LATC,3 ; RC3 ==> horloge de synchronisation
#DEFINE mosi LATC,4 ; RC4 ==> envoyer les données sur écran oled 128x64
#DEFINE led1 LATB,3 ; RB4 led verte, témoin de mise en fonction de l'appareil
#DEFINE seet LATA,0 ; pour emettre niveau haut
;********************************* "déclaration des variables" *********************************
CBLOCK H'20' ; bank0
loop0 :1
loop1 :1
loop2 :1
loop3 :1
loop4 :1
loop5 :1
loop6 :1
loop7 :1
loop8 :1
loop9 :1
indique :1
avance :1
buzzer :1
res16 :1
res8 :1
unité :1
dizaine :1
centaine :1
millième :1
dix_millième :1
afficheur :1
virgule :1
passage :1
reference :1
delay :1
dividende :1
diviseur :1
quotient :1
reste :1
temps :2
tmps :2
durée :1
adresse_hig :1
adresse_low :1
donner :1
bits :1
envoyer :1
ENDC
;********************************** "déclaration des macros" ***********************************
;************************* "Macro pour se positionner dans un tableau" *************************
tableau MACRO adresse
movlw UPPER(adresse) ;
movwf TBLPTRU ;
movlw HIGH(adresse) ;
movwf TBLPTRH ;
movlw LOW(adresse) ;
movwf TBLPTRL
ENDM
;** "Macro pour faire une durée de temps, qui peut aller de 10 ms minimum à 2550 ms maximum "**
delay_s MACRO valeur1
movlw valeur1 ;
movwf durée ; durée du temps défini par la valeur1
call _10ms
ENDM
;** "Macro pour faire une durée de temps, qui peut aller de 1 ms minimum à 255 ms maximum "**
delay_ms MACRO valeur1
movlw valeur1 ;
movwf durée ; durée du temps défini par la valeur1
call _1ms ;
ENDM
;** "Macro pour faire une durée de temps, qui peut aller de 1 µs minimum à 255 µs maximum "**
delay_µs MACRO valeur1
movlw valeur1 ;
movwf durée ; durée du temps défini par la valeur1
call _1µs ; 250 ns
ENDM
;******************************* "adresse de depart après reset" *******************************
ORG H'0'
bra debut
ORG H'8' ; interruption haute priorité
retfie FAST
ORG H'18' ; interruption base priorité
retfie FAST
debut
;***************** "configuration de la bank sélectionné du microcontrôleur" *******************
movlb 0x0F ; BSR pointe sur la banque 15
;******************** "configuration de l'oscillateur du microcontrôleur" **********************
movlw B'01110100' ; oscillateur à 16 Mhz, fréquence stable si PLL (16 * 4)= 64 Mhz
; movlw B'01100100' ; oscillateur à 8 Mhz, fréquence stable si PLL (8 * 4) = 32 Mhz
; movlw B'01010010' ; oscillateur à 4 Mhz, fréquence stable
; movlw B'01000010' ; oscillateur à 2 Mhz, fréquence stable
; movlw B'00110010' ; oscillateur à 1 Mhz, fréquence stable
movwf OSCCON
movlw B'00000000' ;
movwf OSCCON2 ;
;**************************** configuration du registre OSCTUNE ********************************
movlw B'01000000' ; bit 6 à 1 : PLL * 4
movwf OSCTUNE ; bit 6 à 0 : PLL désactivé
;*************************** configuration du registre ANSELA **********************************
movlw B'00100000' ; en mode numérique : 7(RA5)
movwf ANSELA ; en mode E/S : 2(RA0), 3(RA1), 4(RA2), 5(RA3)
;**************************** configuration du registre ANSELB *********************************
movlw B'00000000' ; en mode numérique :
movwf ANSELB ; en mode E/S : 21(RB0), 22(RB1) 23(RB2), 24(RB3), 25(RB4), 26(RB5)
;**************************** configuration du registre ANSELC *********************************
movlw B'00000000' ; en mode numérique :
movwf ANSELC ; en mode E/S : 13(RC2), 14(RC3), 15(RC4), 16(RC5), 17(RC6), 18(RC7)
;*************************** configuration du registre ADCON0 **********************************
movlw B'00000000' ; b0 = ADON mise en service le convertiseur 0 = arrêt : 1 = marche
movwf ADCON0 ; b1 = GO/DONE indique la fin de la conversion analogique, et permet de lancer la conversion
; b2 à b6 = réglage de la sélection du canal
;*************************** configuration du registre ADCON1 **********************************
movlw B'00000000' ; b2 à b3 = 00 : sélection de la tension de reférence, Vref+ = Vss
movwf ADCON1 ; b0 à b1 = 00 : sélection de la tension de reférence, Vref- = Vdd
;*************************** configuration du registre ADCON2 **********************************
movlw B'00001101' ; b0 à b2 = FOSC/64
movwf ADCON2 ; b3 à b5 = 16 TAG
;
; b7 = détermine si le résultat de la conversion
; sera justifié à droite = 1 ou à gauche = 0
;***********************************************************************************************
movlw B'00000000' ; comparateur 1 off
movwf CM1CON0
movlw B'00000000' ; comparateur 2 off
movwf CM2CON0
;***************** configuration des registres TRISA & TRISB & TRISC & TRISE *******************
movlw B'00100000' ; RA0(2), RA1(3), RA2(4), RA3(5), RA4(6), RA5(7), RA6(10), RA7(9)
movwf TRISA ;
movlw B'11110111' ; RB0(21), RB1(22), RB2(23), RB3(24), RB4(25), RB5(26), RB6(27), RB7(28)
movwf TRISB ;
movlw B'10000001' ; RC0(11), RC1(12), RC2(13), RC3(14), RC4(15), RC5(16), RC6(17), RC7(18)
movwf TRISC ;
movlw B'00001000' ; RE3(1)
movwf TRISE ;
; VSS(8), VSS(19), VDD(20)
;******************************* configuration du registre T1CON *******************************
movlw B'10000100' ; mode asynchrone, division par 0
movwf T1CON
;***********************************************************************************************
movlw D'103' ; 9615 bauds(103 décimal, holorge 64 Mhz)
movwf SPBRG1 ; 19230 bauds(51 décimal, horloge 64 Mhz)
; 8 bit, transmition activé, mode asynchronouse, basse vitesse
movlw B'00100000' ;
movwf TXSTA1 ; TXSTA1, TX1STA, TXSTA = H'0FAC'
movlw B'10010000' ; réception ouvert, 8 bits, mode asynchrone
movwf RCSTA1 ; RCSTA1, RC1STA, RCSTA = H'0FAB'
;******************************* configuration du registre T1CON *******************************
movlw B'10000100' ; mode asynchrone, division par 0
movwf T1CON ; comptage sur l'entrée RC0
;******************************* configuration du registre PIE1 ********************************
movlw B'00000000'
movwf PIE1 ; b0 = 0 désactivé le débordement du timer1
;**************************** configuration du registre INTCON2 ********************************
movlw B'00000000' ; B7 = 0 résistances en service
movwf INTCON2 ; interuption base priorité
;**************************** configuration du registre WPUB ***********************************
movlw B'11110111' ; tirage de résistance sur : RB0(21), RB1(22), RB2(23), RB3(24), RB4(25), RB5(26), RB6(27), RB7(28)
movwf WPUB ; pas de tirage de résistance sur :
;**************************** configuration du registre RCON ***********************************
movlw B'00000000' ;
movwf RCON ;
;**************************** configuration du registre INTCON *********************************
movlw B'00000000' ; hors service interruption
movwf INTCON ;
;************************************ départ du programme **************************************
movlb 0x00 ; BSR pointe sur la banque 0
;***********************************************************************************************
clrf PORTA
clrf PORTB
clrf PORTC
clrf LATA
clrf LATB
clrf LATC
movf RCREG,W ; lectures pour vider le tampon
movf RCREG,w ;
movf RCREG,w
;**************************** " témoin visuel de mise en fonction" *****************************
movlw D'4' ; pour 2 clignotements
movwf loop5
clignote
btg led1
delay_s 50 ; macro : 500 ms temps de visionnage
decfsz loop5,F ;
bra clignote
;***********************************************************************************************
;***********************************************************************************************
terminer
nop
bra terminer
;************************************** "reception Usart" **************************************
rx_rec
btfss PIR1,RCIF ; caractère reçu
bra rx_rec ;
movf RCREG,W ; transmettre le caractère reçu dans W
return
;************************************** "émission Usart" ***************************************
tx_emi
btfss TXSTA,TRMT ;
bra tx_emi ;
movwf TXREG1 ;
return
;********************** "pause de 10 millisecondes pour horloge de 64 Mhz" *********************
_10ms
movlw D'201' ;
movwf loop1 ;
movlw D'208' ;
movwf loop2 ;
decfsz loop1 ;
bra $-D'2' ;
decfsz loop2 ;
bra $-D'6' ;
decfsz durée,F ;
bra _10ms ;
return
;********************** "pause de 1 millisecondes pour horloge de 64 Mhz" **********************
_1ms
movlw D'198' ;
movwf loop1 ;
movlw D'21' ;
movwf loop2 ;
decfsz loop1,F ;
bra $-D'2' ;
decfsz loop2,F ;
bra $-D'6'
decfsz durée,F ;
bra _1ms ;
return
;********************** "pause de 1 microseconde pour horloge de 64 Mhz" ***********************
_1µs
movlw D'4' ;
movwf loop1 ;
decfsz loop1,F ;
bra $-D'2' ;
decfsz durée,F ;
bra _1µs ;
return
End


pour ta réponse.