Transmission série
bibich2604
Messages postés
7
Statut
Membre
-
Nabla's Messages postés 20731 Statut Contributeur -
Nabla's Messages postés 20731 Statut Contributeur -
Bonjour,
J'ai écrit un programme en assembleur pour faire la transmission série rs232 d'un pic 16f877 et un PC. que voilà:
;***************************************************************************************************
; *
; Programme de de conversion A/N et transmission sur le PIC16F876. *
; *
; Lecture de la valeur analogique sur RA0 entre 0V et 5V, et conversion numérique. *
; Trame standard SNR (1 bit de start, 1 octet, 1 bit de stop, synchro FF), envoyée sur TX (RC6). *
; *
; Date : *
; *
;***************************************************************************************************
PROCESSOR 16F877 ; 16F877 quartz à 20 MHZ
#include <p16F877.inc>
;**********************************************************************************************
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_OFF & _XT_OSC
; '__CONFIG' précise les paramètres encodés dans le processeur au moment de
; la programmation du processeur. Les définitions sont dans le fichier include.
; Voici les valeurs et leurs définitions :
; _CP_ON Code protection ON : impossible de relire
; _CP_OFF Code protection OFF
; _PWRTE_ON Timer reset sur power on en service
; _PWRTE_OFF Timer reset hors-service
; _WDT_ON Watch-dog en service
; _WDT_OFF Watch-dog hors service
; _LP_OSC Oscillateur quartz basse vitesse
; _XT_OSC Oscillateur quartz moyenne vitesse
; _HS_OSC Oscillateur quartz grande vitesse
; _RC_OSC Oscillateur à réseau RC
;**********************************************************************************************
; ASSIGNATIONS
;**********************************************************************************************
; REGISTRE OPTION_REG (configuration)
; -----------------------------------
; REGISTRE OPTION_REG (configuration)
; -----------------------------------
OPTION_VAL EQU H'0088' ; masque pour OPTION_REG
; (pas de resistances de tirage au niveau haut, pas de prescaler)
; REGISTRE INTCON (contrôle interruptions standard)
; -------------------------------------------------
INTCON_VAL EQU B'00000000' ; masque pour INTCON (pas d'interruption)
; Registre ADCON0
; --------------------------
;ADCON0_VAL0 EQU B'10000001' ; masque pour ADCON0 avec entree analogique 0
;ADCON0_VAL1 EQU B'10001001' ; masque pour ADCON0 avec entree analogique 1
;ADCON0_VAL2 EQU B'10010001' ; masque pour ADCON0 avec entree analogique 2
;ADCON0_VAL3 EQU B'10011001' ; masque pour ADCON0 avec entree analogique 3
;ADCON0_VAL4 EQU B'10111001' ; masque pour ADCON0 avec entree analogique 4
;ADCON0_VAL5 EQU B'10101001' ; masque pour ADCON0 avec entree analogique 5
; REGISTRE ADCON1 (ANALOGIQUE/DIGITAL)
; --------------------------------------------------------------------
;ADCON1_VAL EQU B'00000000' ; masque pour ADCON1
; initialiser USART
; -----------------
TXSTA_VAL EQU B'00100000' ; masque pour TXSTA (pas de 9em bit, asynchrone)
RCSTA_VAL EQU B'10000000' ; masque pour RCSTA (enable les RX et TX)
TRISC_VAL EQU B'00000000' ; masque pour TRISC (tout le portC en sortie)
SPBRG_VAL EQU D'64' ; vitesse(baud) = Fosc/(64(x+1))
;*****************************************************************************
; MACRO *
;*****************************************************************************
; Changement de banques
; ----------------------
BANK0 macro ; passer en banque0;
bcf STATUS,RP0
bcf STATUS,RP1
endm
BANK1 macro ; passer en banque1
bsf STATUS,RP0
bcf STATUS,RP1
endm
BANK2 macro ; passer en banque2
bcf STATUS,RP0
bsf STATUS,RP1
endm
BANK3 macro ; passer en banque3
bsf STATUS,RP0
bsf STATUS,RP1
endm
;**********************************************************************************************
; DEMARRAGE SUR RESET
;
; Entrée du programme sur Reset
;**********************************************************************************************
org H'0000' ; vecteur de reset
goto init
;*****************************************************************************
; INITIALISATIONS
;*****************************************************************************
init
banksel OPTION_REG
movlw OPTION_VAL ; charge OPTION_REG
movwf OPTION_REG
banksel INTCON
movlw INTCON_VAL ; charge INTCON
movwf INTCON
banksel TXSTA
movlw TXSTA_VAL ; charge TXSTA
movwf TXSTA
banksel RCSTA
movlw RCSTA_VAL ; charge RCSTA
movwf RCSTA
banksel SPBRG
movlw SPBRG_VAL ; charge SPBRG
movwf SPBRG
banksel TRISC
movlw TRISC_VAL ; charge TRISC
movwf TRISC
BANK0 ; passe en bank0
goto start ; fin d'initialisation, boucler
;**********************************************************************************************
; Programme principal
;**********************************************************************************************
start
testTX2
BANK1
btfss TXSTA,TRMT ; regarde si buffer vide
goto testTX2 ; si non, boucler
BANK0
movlw B'00000111'
movwf TXREG
goto start
END
mais le problème est que je n'arrive pas à voir les resultat sur mon PC (je vois des valeur erronées) sachant que J'arrive à le voir sur l'oscilloscope . alors je me demandais si il y aurait un probleme dans mon programme ou du coté PC( j'utilise le logiciel "Docklight")
merci
J'ai écrit un programme en assembleur pour faire la transmission série rs232 d'un pic 16f877 et un PC. que voilà:
;***************************************************************************************************
; *
; Programme de de conversion A/N et transmission sur le PIC16F876. *
; *
; Lecture de la valeur analogique sur RA0 entre 0V et 5V, et conversion numérique. *
; Trame standard SNR (1 bit de start, 1 octet, 1 bit de stop, synchro FF), envoyée sur TX (RC6). *
; *
; Date : *
; *
;***************************************************************************************************
PROCESSOR 16F877 ; 16F877 quartz à 20 MHZ
#include <p16F877.inc>
;**********************************************************************************************
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_OFF & _XT_OSC
; '__CONFIG' précise les paramètres encodés dans le processeur au moment de
; la programmation du processeur. Les définitions sont dans le fichier include.
; Voici les valeurs et leurs définitions :
; _CP_ON Code protection ON : impossible de relire
; _CP_OFF Code protection OFF
; _PWRTE_ON Timer reset sur power on en service
; _PWRTE_OFF Timer reset hors-service
; _WDT_ON Watch-dog en service
; _WDT_OFF Watch-dog hors service
; _LP_OSC Oscillateur quartz basse vitesse
; _XT_OSC Oscillateur quartz moyenne vitesse
; _HS_OSC Oscillateur quartz grande vitesse
; _RC_OSC Oscillateur à réseau RC
;**********************************************************************************************
; ASSIGNATIONS
;**********************************************************************************************
; REGISTRE OPTION_REG (configuration)
; -----------------------------------
; REGISTRE OPTION_REG (configuration)
; -----------------------------------
OPTION_VAL EQU H'0088' ; masque pour OPTION_REG
; (pas de resistances de tirage au niveau haut, pas de prescaler)
; REGISTRE INTCON (contrôle interruptions standard)
; -------------------------------------------------
INTCON_VAL EQU B'00000000' ; masque pour INTCON (pas d'interruption)
; Registre ADCON0
; --------------------------
;ADCON0_VAL0 EQU B'10000001' ; masque pour ADCON0 avec entree analogique 0
;ADCON0_VAL1 EQU B'10001001' ; masque pour ADCON0 avec entree analogique 1
;ADCON0_VAL2 EQU B'10010001' ; masque pour ADCON0 avec entree analogique 2
;ADCON0_VAL3 EQU B'10011001' ; masque pour ADCON0 avec entree analogique 3
;ADCON0_VAL4 EQU B'10111001' ; masque pour ADCON0 avec entree analogique 4
;ADCON0_VAL5 EQU B'10101001' ; masque pour ADCON0 avec entree analogique 5
; REGISTRE ADCON1 (ANALOGIQUE/DIGITAL)
; --------------------------------------------------------------------
;ADCON1_VAL EQU B'00000000' ; masque pour ADCON1
; initialiser USART
; -----------------
TXSTA_VAL EQU B'00100000' ; masque pour TXSTA (pas de 9em bit, asynchrone)
RCSTA_VAL EQU B'10000000' ; masque pour RCSTA (enable les RX et TX)
TRISC_VAL EQU B'00000000' ; masque pour TRISC (tout le portC en sortie)
SPBRG_VAL EQU D'64' ; vitesse(baud) = Fosc/(64(x+1))
;*****************************************************************************
; MACRO *
;*****************************************************************************
; Changement de banques
; ----------------------
BANK0 macro ; passer en banque0;
bcf STATUS,RP0
bcf STATUS,RP1
endm
BANK1 macro ; passer en banque1
bsf STATUS,RP0
bcf STATUS,RP1
endm
BANK2 macro ; passer en banque2
bcf STATUS,RP0
bsf STATUS,RP1
endm
BANK3 macro ; passer en banque3
bsf STATUS,RP0
bsf STATUS,RP1
endm
;**********************************************************************************************
; DEMARRAGE SUR RESET
;
; Entrée du programme sur Reset
;**********************************************************************************************
org H'0000' ; vecteur de reset
goto init
;*****************************************************************************
; INITIALISATIONS
;*****************************************************************************
init
banksel OPTION_REG
movlw OPTION_VAL ; charge OPTION_REG
movwf OPTION_REG
banksel INTCON
movlw INTCON_VAL ; charge INTCON
movwf INTCON
banksel TXSTA
movlw TXSTA_VAL ; charge TXSTA
movwf TXSTA
banksel RCSTA
movlw RCSTA_VAL ; charge RCSTA
movwf RCSTA
banksel SPBRG
movlw SPBRG_VAL ; charge SPBRG
movwf SPBRG
banksel TRISC
movlw TRISC_VAL ; charge TRISC
movwf TRISC
BANK0 ; passe en bank0
goto start ; fin d'initialisation, boucler
;**********************************************************************************************
; Programme principal
;**********************************************************************************************
start
testTX2
BANK1
btfss TXSTA,TRMT ; regarde si buffer vide
goto testTX2 ; si non, boucler
BANK0
movlw B'00000111'
movwf TXREG
goto start
END
mais le problème est que je n'arrive pas à voir les resultat sur mon PC (je vois des valeur erronées) sachant que J'arrive à le voir sur l'oscilloscope . alors je me demandais si il y aurait un probleme dans mon programme ou du coté PC( j'utilise le logiciel "Docklight")
merci
A voir également:
- Transmission série
- Télécharger idm gratuitement sans numéro de série - Télécharger - Téléchargement & Transfert
- Numéro de série idm ✓ - Forum Logiciels
- Besoin d'un numéro de série pour idm - Forum Téléchargement
- Numéro de serie cmd ✓ - Forum Matériel & Système
- Localiser macbook avec numéro de série - Forum MacOS
1 réponse
essayes de dire a ton programme d envoyer des charactères ascii ( https://fr.wikipedia.org/wiki/American_Standard_Code_for_Information_Interchange#Table_des_128_caract.C3.A8res_ASCII ) et utilises hyperterminal pour la lecture ... si ca marche pas, ca vient de ton programme sur le pic