Reception de caractère et tri

fufaru Messages postés 2 Date d'inscription lundi 22 mai 2006 Statut Membre Dernière intervention 22 mai 2006 - 22 mai 2006 à 11:55
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 - 22 mai 2006 à 18:52
Bonjour à tous,

Je travaille sur un dsPIC30F avec une liaison série MAX232 et un pc (Matlab v7.31).  Je suis débutant en assembleur

je dois récupérer un caractère que j'envoie par le biais de l'hyperterminal, bon la liaison marche ya pas de problème, mais je dois (en assembleur) lui faire reconnaître si c'est une lettre ou un chiffre.

Il met bien venu à l'idée de soustraire la valeur du 0 en ASCII(48) a la valeur reçu puis defaire pareil pour les lettres : soustraire la valeur de A-10 (55)

mais voila, le problème c'est que je ne sais pas comment faire pour qu'il prenne en compte les deux, pour que lorsque j'envoie un caractère il fasse soit l'un soit l'autre.

En espérant avoir été assez clair, et en espérant une aide de votre part
je vous remercie par avance

<!-- / message -->

4 réponses

cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
22 mai 2006 à 12:42
salut,




si c'est sur le PC, il faut simplement dupliquer la valeur a comparer
mov ah,al
sub al,'0'
je nombre
cmp al,'9'-'0'
mov al,ah
jbe nombre
sub al,'A'
je charMaj
sub al,'Z'-'A'
mov al,ah
jbe charMaj
sub al,'a'
je charMin
sub al,'z'-'a'
jbe charMin

si c'est sur le PIC, le principe est le meme: dupliquer la valeur a comparer ou la sauvegarder en memoire pour pouvoir la restaurer avant traitement.

@++
0
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
22 mai 2006 à 12:44
pardon,





remplacer les sub al,'x'-'y' par des cmp
@++
0
fufaru Messages postés 2 Date d'inscription lundi 22 mai 2006 Statut Membre Dernière intervention 22 mai 2006
22 mai 2006 à 13:42
ok mais voila j'ai un autre problème en fait j'ai quatre caractère a recevoir donc pour cela j'ai ouvert un espace de 8 octets comme cela :

 .section .nbss, bss, near


carac_1:   .space 8

Mais ensuite je n'arrive pas a stocker les caractères au fur et a mesure, j'arive a stocker le premier dans carac_1 a l'adresse 0x0800 mais comment faire pour stocker les autres sachant que j'en ai quatres a stocker dans l'espace carac_1 , il me manques un peti bout de programme ici (la ou ya les étoiles):
__T1Interrupt:
  
_SetMessage:       MOV #U1RXREG, W1
                                MOV #60, W4
                                MOV #62, W3
                                CP W4, W1
                                BTSC SR, #Z
                                BRA  _SetMessage   
                                CP  W3, W1
                                BTSS SR, #Z
                                BRA  _Read
                                BSET IFS1, #0
                                BRA  _EndMessage
_Read:                   MOV W1, carac_1   *********
                               MOV carac_1            ********
                               BRA  _SetMessage    
_EndMessage:    BCLR IFS0, #T1IF          ;Clear the Timer1 Interrupt flag status bit.
                               RETFIE    

Merci pour vos réponses              
0
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
22 mai 2006 à 18:52
re,




si 1 caractère pour une interruption, tu dois mettre en place un compteur de 0 a 3, tu masque le compteur avec 3 en entrée et tu l'incremente en sortie.
le compteur te donnera la position.


si 4 caractères pour une interruption, mov W1,carac_1+2,...
je ne connais pas les commandes des PICs donc je ne peux pas t'ecrire le code correspondant.

@++
0
Rejoignez-nous