begin process at 2012 05 25 12:04:39
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive Assembleur

 > 

Archives

 > 

c, c++ et asm

 > 

Prob de programme MAX232


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Prob de programme MAX232

mercredi 12 octobre 2005 à 09:32:00 | Prob de programme MAX232

xmaz57000

Bonjour,

Je fais appel à votre aide car j'ai un problème avec du code en assembleur et à vrai dire, je n'y connais quasiment rien :/

Le problème est qu'actuellement nous avons une électronique munie de 4 ports séries.
J'ai fait un programme PC qui permet d'envoyer des trames de plusieurs octets.
Donc je lance 2 fois le programme.
Sur un programme j'envoi une trame de 12octects toute les 2s. (COM1)
Sur un autre programme j'envoi une trame de 70octects toutes les 333ms. (COM2)

Aucun problème quand je ne lance qu'un programme mais dès que je lance les 2 en meme temps, j'ai des pertes de caractères en entrée des ports série :/ (je perds un ou deux caractères de temps en temps dans la trame, ce qui fait que le CRC est décallé et donc la chaine éronée).

Si qqun ici pouvait me dire au moins où chercher ou alors corriger le bug dans le code, ça serait parfait

Voici le code qui gére les ports série :


;*===========================================================*
;*                   Fichier: INTSER4.S                      *
;*  Sous programmes sorties_series lies au materiel (hard)   *
;*===========================================================*

                nolist
                include         "ioa4.i"
                include         "bioad4.i"
                include         "config4.i"
                include         "confss4.i"
                include         "kcar.i"
                include         "maccos12.i"
                include         "bio2692.i"
                list

                xref            _TA_bufemi,_TA_finemi
                xref            _TA_bufrec,_TA_finrec
                xref            _TemiSS1,_TemiSS2,_TemiSS3,_TemiSS4
                xref            _def_SS,_fnt_SS
                xref            _redemarrage

                xdef            _irqsci1,_irqsci2
;                xdef            _redemarrage
                page
;*-------- definition des sorties series --------*/
;typedef struct {
;  char vit;
;  char bit;
;  char stop;
;  char parite;                 {"SANS ", "PAIRE", "IMP  "};
;  char protocol;
;}  DEF_SS:
KDEF_SS:        equ             5       ;taille de la structure DEF_SS
O_vit:          equ             0       ;ofset vitesse
O_bit:          equ             1       ;ofset nb de bits
O_stop:         equ             2       ;ofset nb de stop
O_parite:       equ             3       ;ofset parite
O_protocol:     equ             4       ;ofset protocol
;@eeprom DEF_SS def_SS[Knb_SSmax];

;*-------- fonctionnement sorties series --------*
;typedef struct {
;  char *Pemiecr;        /* pointeur ecriture emission */
;  char *Pemilec;        /* pointeur lecture emission */
;  char *Prececr;        /* pointeur ecriture reception */
;  char *Preclec;        /* pointeur lecture reception */
;  int nbcar;            /* Nombre de car recus sur SS (a gerer si <0) */
;  char kc;              /* break sur entree serie */
;  char bufocc;          /* buffer emis. occupe */
;  char prot0            /* protocole 0 temporaire */
;} FNT_SS;
KFNT_SS:        equ             13      ;taille de la structure FNT_SS;
O_Pemiecr:      equ             0       ;ofset pointeur ecriture emission
O_Pemilec:      equ             2       ;ofset pointeur lecture emission
O_Prececr:      equ             4       ;ofset pointeur ecriture reception
O_Preclec:      equ             6       ;ofset pointeur lecture reception
O_nbcar:        equ             8       ;ofset nbcar
O_kc:           equ             10      ;ofset kc
O_bufocc:       equ             11      ;buffer emis. occupe
O_prot0:        equ             12      ;protocole 0 temporaire
                page
;*-----------------------------------------------*
;*  Definitions pour les registres du 68HC12A4   *
;*-----------------------------------------------*
;*---- Bits speciaux de SCxCR2 ----*
SBK:            equ             %00000001       ;send break
RWU:            equ             %00000010       ;wake up
RE:             equ             %00000100       ;validation reception
TE:             equ             %00001000       ;validation emission
ILIE:           equ             %00010000       ;validation idle
RIE:            equ             %00100000       ;validation IT reception
TCIE:           equ             %01000000       ;validation IT emission terminee
TIE:            equ             %10000000       ;validation IT emission

;*---- Bits speciaux de SCxSR1 ----*
PF:             equ             %00000001       ;parite erreur
FE:             equ             %00000010       ;framming erreur
NF:             equ             %00000100       ;bruit detecte
OR:             equ             %00001000       ;overrun
IDLE:           equ             %00010000       ;idle sur RXD
RDRF:           equ             %00100000       ;reception plein
TC:             equ             %01000000       ;emission terminee completement
TDRE:           equ             %10000000       ;emission prete

KSS1:           equ             0       ;no de la 1ere SS
KSS2:           equ             1       ;no de la 2eme SS
KSS3:           equ             2       ;no de la 3eme SS
KSS4:           equ             3       ;no de la 4eme SS
protSTXETX:     equ             1       ;protocole STXETX
                page
                switch          .text
;*-----------------------------------------------*
;*            Emission sur sortie 1              *
;*-----------------------------------------------*
chcar1:   ldy    O_Pemilec,x   ;x=@fnt_SS[0]
;*---- Emission caractere (y=adresse buffer emission) ----*
    cpy    O_Pemiecr,x
    beq    fimp1
    ldaa   #1
    staa   O_bufocc,x   ;emis. en cours
    ldaa   y     ;car a emettre
    iny
    cpy    #_TemiSS1+Kmaxemi ;fin buffer ?
    bcs    sty1
    ldy    #_TemiSS1   ;remet le ptr au debut
sty1:   sty    O_Pemilec,x

;*---- emission caractere sur SS1 (a=car a emettre) ----*
outSS1:   brclr   _SC0SR1,#TDRE,outSS1;attente emis.prete
    staa   _SC0DRL    ;envoi car
;    bra    chcar1
    rti

fimp1:   bclr   _SC0CR2,#TIE  ;fin emission (att fin complete)
    clr    O_bufocc,x   ;emis. plus en cours
    rti

;*-----------------------------------------------*
;*            Emission sur sortie 2              *
;*-----------------------------------------------*
chcar2:         ldy             O_Pemilec,x         ;x=@fnt_SS[1]
;*---- Emission caractere (y=adresse buffer emission) ----*
                cpy             O_Pemiecr,x
                beq             fimp2
                ldaa            #1
                staa            O_bufocc,x          ;emis. en cours
                ldaa            y                   ;car a emettre
                iny
                cpy             #_TemiSS2+Kmaxemi  ;fin buffer ?
                bcs             sty2
                ldy             #_TemiSS2           ;remet le ptr au debut
sty2:           sty             O_Pemilec,x
;*---- emission caractere sur SS2 (b=car a emettre) ----*
                bset            _PORTT,#S_RTS2         ;Met SS2 en emission
outSS2:         brclr           _SC1SR1,#TDRE,outSS2   ;attente emis.prete
                staa            _SC1DRL                ;envoi car
                rti

fimp2:          bset            _SC1CR2,#TCIE      ;attente fin emission
                bclr            _SC1CR2,#TIE       ;arret emission
                rti
                page
;*-----------------------------------------------*
;*         Interruption sortie serie 2           *
;*-----------------------------------------------*
_irqsci2:       ldx             #_fnt_SS+KFNT_SS   ;x=@fnt_SS[1]
                ldaa            _SC1SR1
                bita            #OR|FE          ;OV ou FE
                bne             break2
                bita            #NF|PF          ;bruit ou par
                bne             nogood2    ;!!!!
                bita            #RDRF           ;car recu ?
                bne             recu2
                bita            #TDRE           ;emission ?
                beq             rti1
;---- IT emission. Terminee ou non ? ----*
                bita            #TC             ;emission terminee ?
                beq             chcar2          ;emission, x=@fnt_SS[1]
                brclr           _SC1CR2,#TCIE,chcar2  ;attente TC ?
termine2:       bclr            _SC1CR2,#TIE|TCIE  ;arret IT emission
                bclr            _PORTT,#S_RTS2     ;Met SS2 en reception
                clr             O_bufocc,x         ;emis. plus en cours
rti1:           rti

break2:         ldaa            #2
                staa            O_kc,x
                clrd
                std             O_nbcar,x          ;int nbcar
                bclr            _SC1CR2,#RIE       ;plus IT reception
nogood2:        ldaa            _SC1DRL            ;cl it
                rti

recu2:   ldaa   _SC1DRL         ;car recu
    psha                            ;car recu -> stack
    ldab   #KSS2           ;KSS2
    ldaa   _def_SS+KDEF_SS+O_protocol ;protocole pour SS2
    bra    recu1234
    page
;*-----------------------------------------------*
;*         Interruption sortie serie 1           *
;*-----------------------------------------------*
_irqsci1:  ldx    #_fnt_SS   ;x=@fnt_SS[KSS0]
    ldaa   _SC0SR1
;    bita   #OR|FE    ;OV ou FE
;    bne    break1
    bita   #NF|PF    ;bruit ou parite
    bne    nogood1    ;!!!!
    bita   #RDRF    ;car recu ?
    bne    recu1
    bita   #TDRE    ;emission ?
    beq    nogood1
    bra    chcar1    ;emission, x=@fnt_SS[1]

break1:   ldaa   #2
    staa   O_kc,x
    clrd
    std    O_nbcar,x   ;int nbcar
    bclr   _SC0CR2,#RIE  ;plus IT reception
nogood1:  ldaa   _SC0DRL    ;cl it
    rti

recu1:   ldaa   _SC0DRL    ;car recu
    psha        ;car recu -> stack
    clrb        ;KSS1
    ldaa   _def_SS+O_protocol ;protocole pour SS1
    bra    recu1234
    page
;*---- calcul adresse buffer reception ----*
;char * const TA_bufrec[Knb_SSmax] = {TrecSS1, TrecSS2, TrecSS3, TrecSS4};
zbufX:          ldy             #_TA_bufrec
                aslb
                ldy             b,y             ;adresse buffer rec
                sty             O_Prececr,x
                sty             O_Preclec,x
                clr             y               ;securite
                rti

;*---- fin reception message STXETX ----*
finrecX:        ldd             O_nbcar,x       ;d=nbcar
                subd            #1
                nega                            ;nbcar = - (nbcar - 1)
                negb
                sbca            #0
                std             O_nbcar,x
                rti
                page
;*---------------------------------------------------*
;* Orientation de la reception suivant le protocole  *
;*         !! caractere recu dans le stack           *
;*---------------------------------------------------*
recu1234:       tst             O_prot0,x       ;protocole 0 temporaire
                bne             rec1car         ;car recu -> stack
;                cmpa            #protSTXETX     ;a=protocole
;                beq             recuSTXETX      ;x=@fnt_SS[KSS1]
;>>>> !! suite = rec1car
;*-----------------------------------------------*
;* gestion reception des sorties series internes *
;*         pour le protocole standard            *
;*     x=@fnt_SS[b], b=KSSx, a=car recu          *
;*-----------------------------------------------*
;*---- adresses buffer reception ----*
;char * const TA_bufrec[Knb_SSmax] = {TrecSS1, TrecSS2, TrecSS3, TrecSS4};
;char * const TA_finrec[Knb_SSmax] =
;  {TrecSS1 + Kmaxrec, TrecSS2 + Kmaxrec, TrecSS3 + Kmaxrec, TrecSS4 + Kmaxrec};
rec1car:        ldy             O_Prececr,x
                pula                            ;car recu <- stack
                staa            y               ;stoke car recu
                iny
                aslb                            ;b = b x 2
                pshx
                ldx             #_TA_finrec
                cpy             b,x             ;fin buffer ?
                bcs             bony
                ldx             #_TA_bufrec
                ldy             b,x             ;debut buffer
bony:           pulx
                cpy             O_Prececr,x
                beq             plein
                sty             O_Prececr,x
    rti
plein:          rti
                page
ifdef SS34
                xdef            _irq
;*-----------------------------------------------*
;*            Emission sur sortie 3              *
;*-----------------------------------------------*
chcar3:         ldx             #_fnt_SS+(KFNT_SS * 2)  ;x=@fnt_SS[KSS3]
                ldy             O_Pemilec,x
;*---- Emission caractere (y=adresse buffer emission) ----*
                cpy             O_Pemiecr,x
                beq             fimp3
                ldaa            #1
                staa            O_bufocc,x         ;emis. en cours
                ldaa            y                  ;car a emettre
                iny
                cpy             #_TemiSS3+Kmaxemi  ;fin buffer ?
                bcs             sty3
                ldy             #_TemiSS3          ;remet le ptr au debut
sty3:           sty             O_Pemilec,x
;*---- emission caractere sur SS3 (a=car a emettre) ----*
                staa            _TXA                   ;envoi car
                rti

fimp3:          move            #$18,_CRA      ;fin emission
                clr             O_bufocc,x     ;emis. plus en cours
                rti

;*-----------------------------------------------*
;*            Emission sur sortie 4              *
;*-----------------------------------------------*
chcar4:         ldx             #_fnt_SS+(KFNT_SS * 3)  ;x=@fnt_SS[KSS4]
                ldy             O_Pemilec,x
;*---- Emission caractere (y=adresse buffer emission) ----*
                cpy             O_Pemiecr,x
                beq             fimp4
                ldaa            #1
                staa            O_bufocc,x         ;emis. en cours
                ldaa            y                  ;car a emettre
                iny
                cpy             #_TemiSS4+Kmaxemi  ;fin buffer ?
                bcs             sty4
                ldy             #_TemiSS4          ;remet le ptr au debut
sty4:           sty             O_Pemilec,x
;*---- emission caractere sur SS4 (a=car a emettre) ----*
                staa            _TXB                   ;envoi car
                rti

fimp4:          move            #$18,_CRB      ;fin emission
                clr             O_bufocc,x         ;emis. plus en cours
                rti
                page
;*-----------------------------------------------*
;*         Interruption sortie serie DUART       *
;*-----------------------------------------------*
_irq:           ldaa            _ISR
                bita            #2             ;RXRDYA full
                bne             recu3
                bita            #$20           ;RXRDYB full
                bne             recu4
                bita            #1             ;TXRDYA pret
                bne             chcar3
                bita            #$10           ;TXRDYB pret
                bne             chcar4
                rti

recu3:          ldx             #_fnt_SS+(KFNT_SS*2)  ;x=@fnt_SS[KSS3]
                ldaa            _SRA
                bita            #$f0            ;break, fram, parite err, ov
                bne             break3
                ldaa            _RXA            ;car recu
                psha                            ;car recu -> stack
                ldab            #KSS3           ;KSS3
                ldaa        _def_SS+(KDEF_SS*2)+O_protocol ;protocole pour SS3
                bra             recu1234

break3:         ldaa            #2
                staa            O_kc,x
                clrd
                std             O_nbcar,x          ;int nbcar
                move            #$41,_CRA          ;efface flags err, valide rec
                rti

recu4:          ldx             #_fnt_SS+(KFNT_SS*3)  ;x=@fnt_SS[KSS4]
                ldaa            _SRB
                bita            #$f0            ;break, fram, parite err, ov
                bne             break4
                ldaa            _RXB            ;car recu
                psha                            ;car recu -> stack
                ldab            #KSS4           ;KSS4
                ldaa        _def_SS+(KDEF_SS*3)+O_protocol ;protocole pour SS4
                bra             recu1234

break4:         ldaa            #2
                staa            O_kc,x
                clrd
                std             O_nbcar,x          ;int nbcar
                move            #$41,_CRB          ;efface flags err, valide rec
                rti

endif
                end








BON, ça fait po mal de code, mais comme je l'ai dit en haut, si qqun pouvait au moins me dire où peut se situer le bug, je suis preneur parce que la vraiment je vois po

Merci d'avance

jeudi 13 octobre 2005 à 08:54:17 | Re : Prob de programme MAX232

xmaz57000

Personne ne peux m'aider ? plzzzzz


Cette discussion est classée dans : ss, emission, equ, ldaa, fnt


Répondre à ce message

Sujets en rapport avec ce message

Emission de code RC5 [ par MANUCB ] Bonjour,On trouve beaucoup de sources pour décoder le RC5Y'en a t-il pour en emmettreManu commandes shell ss Windows [ par anthraxx ] bonjour,j'ai une question concernant la programmation windows en asm:je voulais savoir comment on peut faire une fonction pour envoyer des commandes a Pb de compilation ressource [ par AlexMAN ] BruNews, ca fait une heure ke je texte ton bat, ca me compile bien mon exe, il est fonctionnel mais ne m'affiche pas ma dialog box ! Voila le code de [MASM] Chronomètre [ par ZogStriP ] Je souhaiterais faire un chronomètre à la miliseconde prés ( au format : mm:ss:nn avec mm minutes, ss secondes, nn milisecondes !)Je souhaiterais pb affichage ligne [ par mat74 ] salut a ts voila j'ai fait une fonction pr faire des lignes , j'ai deciner un carre a 100,100 jusqu'a 200,200 et sa marche nickel mais ia un ptit pb q programme asm [ par smailhou ] Bonjour a tousj'essai de faire un programme de tri par insertion, mais la je n'arrive a complilerj'utilise le MC 68c12je pense qu'il y'a tous dans mon problrmr dr tri en assembleur [ par smailhou ] Bonjour tous le mondevoila je programme en c et j'essai de faire le programe en asmc un programme de tri par insertion, j'ai pu faire le code asm mais probleme avec TASM [ par nernit ] lorsque je compile mo code : .NOLIST #define end.end #define END.end #define equ.equ #define EQU.equ #include "ti83asm.inc" #include "tokens.inc" .LIS ça marche pas, aide ... [ par iscalibar ] Bonjour, j'ai un petit probleme, j'ai ecris un program pour le compilateur masm32 qui ne fai que afficher une fenetre, mai malheureusement ça marche p programme [ par dydydebs ] Bonjour, je voudrai savoir ce que fait ce programme "assembleur 80c535" car je débute en assembleur . Merci pour vos conseille ....Voici le code :   d


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,950 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales