fufaru
Messages postés2Date d'inscriptionlundi 22 mai 2006StatutMembreDernière intervention22 mai 2006
-
22 mai 2006 à 11:55
cs_patatalo
Messages postés1466Date d'inscriptionvendredi 2 janvier 2004StatutModérateurDernière intervention14 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
cs_patatalo
Messages postés1466Date d'inscriptionvendredi 2 janvier 2004StatutModérateurDernière intervention14 février 20142 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.
fufaru
Messages postés2Date d'inscriptionlundi 22 mai 2006StatutMembreDernière intervention22 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
cs_patatalo
Messages postés1466Date d'inscriptionvendredi 2 janvier 2004StatutModérateurDernière intervention14 février 20142 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.