Salut,
je vourait savoir si quelqu' un aurai un bou de code qui permet dès qu' il y a une info(30 caractères) sur le port com1 et com2 de la lire et de la mettre ds une variable.
Merci
Jérémi :
Salut,
je vourait savoir si quelqu' un aurai un bou de code qui permet dès qu' il y a une info(30 caractères) sur le port com1 et com2 de la lire et de la mettre ds une variable.
Merci
Jérémi :
voici un code qui permet de recevoir 1 caractère il suffit de l'appeller autant de fois que necessaire !!!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 //Dfinition port #define COM1 0 #define COM2 1 #define COM3 2 #define COM4 3 //Dfinition parit #define PAIRE 24 // 00011000 en binaire #define IMPAIRE 8 // 00001000 en binaire #define SANS 0 // 00000000 en binaire /* Dfinition des registres du 8250 */ int RBR[4] = {0x3F8, 0x2F8, 0x370, 0x270 }, THR[4] = {0x3F8, 0x2F8, 0x370, 0x270 }, DLL[4] = {0x3F8, 0x2F8, 0x370, 0x270 }, DLH[4] = {0x3F9, 0x2F9, 0x371, 0x271 }, IER[4] = {0x3F9, 0x2F9, 0x371, 0x271 }, IIR[4] = {0x3FA, 0x2FA, 0x372, 0x272 }, LCR[4] = {0x3FB, 0x2FB, 0x373, 0x273 }, MCR[4] = {0x3FC, 0x2FC, 0x374, 0x274 }, LSR[4] = {0x3FD, 0x2FD, 0x375, 0x275 }, MSR[4] = {0x3FE, 0x2FE, 0x376, 0x276 }; /************************* Reception d'un caractre *************************/ unsigned RECEPT_CAR(char port) { while ((inportb(LSR[port])&0x01) != 1); return (inportb(RBR[port])); }
Pour voir qu'il fait noir, on n'a pas besoin d'être une lumière.
Il faut cueillir les cerises avec la queue. J'avais déjà du mal avec la main !
merci,
le problème c' est que je ne sais pas quand je reçois des données sur le port com, elle peuvent survenir n'importe quand. En fait' c'est pour recevoir des données d' un chrono et dès qu' il y a une arrivé, il envoie le tps.
@+
Jérémi
Est ce que tu connais le nombre de caractère que tu vas recevoir ?
si : oui tu place la fonction dans une boucle for
sinon : tu peux trouver une condition d'arret (appuie sur une touch ...ou ce que tu veux) mais la il ne faut pas que la fonction de lecture soit bloquante donc il faut remplacer while par if
deplus combien de caractère envoie le chrono lors d'une mesure !!!!
Est ce que tu me comprends ???
Bon courage
Si tu as du mal va lire des cours et tutoriels pour bien apprendre la programmation en langage C : http://c.developpez.com/cours/
Pour voir qu'il fait noir, on n'a pas besoin d'être une lumière.
Il faut cueillir les cerises avec la queue. J'avais déjà du mal avec la main !
Si tu travaille sous DOS pur, il est possible d'utiliser une interruption (je sais plus laquelle, je regarderais ce soir si j'y pense) qui est leve a la reception d'une donnee sur un port serie
je vais recevoir 30 caractère.
Mon problème c' est que en même temps, je veux pouvoir tapper les numéros de dossard qui arrivent. et je ne veux pas que quand je tape un numéro, cela interrompe ce que je suis en train de faire, je voudrais que cela se mette dans un buffer.
Pour ce qui est de travailler sous dos, je veux travailler avec une fenêtre de dos ouverte sous win.
@+
Jérémi
PS: je ne sais pas si j' ai été très clair.
Si tu veux recevoir des donnee et en meme temps taper le numero des dossards, je vois au moins deux solutions.
* Utiliser l'interruption hard du port serie en detournant le vecteur d'interruption. A chaque fois qu'une donnee arrive tu la lis et la mets dans un buffer. Ainsi la saisie des numeros de dossards sera peu impacter, puisque l'interruption est tres courte.
* sous windows lancer deux threads ou deux processus, l'n pour la saisie des numeros de dossards, l'autre ecoutant le port serie.
Si tu veux détourner l'interruption tu dois :
1 - Initialiser ton UART
2 - Initialiser ton PIC (irq 4 == com1 == interruption 12 (4+8) ou irq 5 pour com2
3 - detourner l'it correspondante (12 ou 13 dec.)
et n'oublie pas a la fin de ton IT d'acquitter le PIC (out 20h,20h si je me souviens bien)
Un truc en passant, il faut aussi sauvegarder l'ancienne interruption et la remettre en place en sortant du programme.
...et surtout devalider le pic (ou le restaurer)
salut,
ça parait bien compliqué tout ça. Ce n' est pas plus simple avec des threads?
@+ et merci encore
Jérémi
Si ca doit etre plus simple, mais tu n'es pas sur de recuperer les donnees sur le port serie au moment exact mais lorsque que le thread a la main. Ce qui ne devrait pas poser de probleme particulier dans ton cas.
Ca ne devrait pas poser de problème. du moment que l' on ne perde pas les infos, c' est bon.
@+ et Merci
Jérémi
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager