Récupérer deux mots de 8 bits par le port série

duquep Messages postés 5 Date d'inscription mardi 9 mars 2004 Statut Membre Dernière intervention 25 avril 2005 - 24 avril 2005 à 22:46
duquep Messages postés 5 Date d'inscription mardi 9 mars 2004 Statut Membre Dernière intervention 25 avril 2005 - 25 avril 2005 à 18:09
Bonjour à tous,

Quelq'un pourrait m'aider!
En deux mots, j'utilise un PIC 16F876 qui envoie deux mots de 8 bits afin de retransmettre une donnée analogique vers le pc par le port série
voilà mon code:
----------------------------------------------------
Dim dat(3)
Private Sub Command1_Click()
If MSComm1.PortOpen = True Then
MSComm1.PortOpen = False
End If
End


End Sub
Private Sub Form_Load()
Dim TempC
n = 0
MSComm1.Settings = "9600,N,8,1" 'Set baud rate
MSComm1.CommPort = 2 'Set comm port
MSComm1.PortOpen = True 'Open comm port
Form1.Visible = True 'Show the form
Do
Start:
For n = 1 To 2
Do

DoEvents
Loop Until MSComm1.InBufferCount > 0
dat(n) = Asc(MSComm1.Input) 'Store bytes in Array
Debug.Print dat(n) ' Debug purposes only


Next n
Label1.Caption = dat(1)
Label2.Caption = dat(2)
Label3.Caption = (dat(1)*256)+dat(2)



Loop


End Sub

-----------------------------------------------------
Mon problème est que lorsque je lance le programme, il ne synchronise pas toujours sur le premier mot d 8 bits!!!!! Quelqu'un pourrait-il m'aider??????? Pour que le programme s'ynchronise sur le premier mot au lancement de celui-ci!!!!

Merci d'avance

Phil

3 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
25 avril 2005 à 00:02
Ouh lala ! Attention
Tu as imbriqué deux boucles l'une dans l'autre : Dans l'ordre, tu as : For - Do - Next - Loop
Ca ne va pas du tout. Il faut impérativement que le Loop soit avant le Next
Mais comme je ne sait pas ce que tu cherches à faire avec ces boucles, difficile de t'aider à restructurer. (et en regardant mieux, il y a plus de Do que de Loop ! je me demande comment VB peut se lancer !)

Si tu veux lire les données numériques issues du port Com, je te conseille de ne pas te compliquer la vie : lis les caractères et traite-les après.
Dans ton cas, tu dimensionnes ton tableau à trois données. Et si le port Com en envoie plus, que se passe t-il ? le programme se plante ou bien ton tableau est écrasé : dans les deux cas, tu perds des données : c'est peut-être ce qui t'arrive.

Ce qu'il faut que tu saches, c'est que quand tu mets 'MSComm1.Input', ça lit toutes les données, mais aussi, ça vide le buffer : Donc si tu n'exploites pas toutes les infos reccueillies, tu en perdras, c'est sûr.
Donc, fait ça en deux temps :
-1- Lit les données et stocke-les
-2- Analyse tes données après

' Variable de réception
Dim Données As String
' Attend les données
Do While MSComm1.InBufferCount = 0
DoEvents
Loop
' Lecture des données
Données = MSComm1.Input
' Analyse des données
For r = 1 To Len(Données)
' 1 est le 1er caractère ..
Debug.Print "r = "; r; " --> "; Asc(Mid(Données, r, 1))
Next r

Pour le reste, à toi de voir ce que tu vas faire de ces chiffres.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage. (Socrate)
0
duquep Messages postés 5 Date d'inscription mardi 9 mars 2004 Statut Membre Dernière intervention 25 avril 2005
25 avril 2005 à 18:09
Merci pour ton aide fructueuse!


La seule chose que je puise encore te demander, enfin si tu veux bien....


Comment dois-je faire pour afficher ces deux "mots" dans 2 label.En effet mon composant n'envoie que deux valeurs et j'aimerais qu'il lise ces deux valeurs en boucle.


Un tout tout grand merci.





PS voici le ligne du programme de mon composant électronique qui envoie les données :


serout PortC.6,84,[VAR1.HighByte,VAR1.LowByte]<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />



Phil
0
duquep Messages postés 5 Date d'inscription mardi 9 mars 2004 Statut Membre Dernière intervention 25 avril 2005
25 avril 2005 à 18:09
Phil
0
Rejoignez-nous