Transmission série

Fermé
bibich2604 Messages postés 6 Date d'inscription vendredi 2 novembre 2007 Statut Membre Dernière intervention 2 février 2009 - 2 juil. 2008 à 11:44
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 - 2 juil. 2008 à 11:50
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

1 réponse

Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 192
2 juil. 2008 à 11:50
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
0