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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168
| program com;
uses dos,crt;
const nbport = 0; {**********************************************}
{* nbport = 0 pour COM1 *}
{* nbport = 1 pour COM2 *}
{**********************************************}
procedure rs_init;
{**********************************************************************}
{* Initialise le port RS232C : 8 bits de donnes *}
{* 2 bits Stop *}
{* Parit Paire *}
{* Vitesse
2400 Bauds *}
{* Cette procedure doit tre appel une fois , avant de pouvoir *}
{* utiliser la liaison srie *}
{* Entrée: AH = 0x00 *}
{* DX = Numéro de l'interface série *}
{* 0x00 = COM1 *}
{* 0x01 = COM2 *}
{* AL = Paramètres de configuration *}
{* Bits 0-1: longueur du mot *}
{* 10 = 7 bits *}
{* 11 = 8 bits *}
{* Bit 2: nombre de bits de stop *}
{* 0 = 1 bit de stop *}
{* 1 = 2 bits de stop *}
{* Bit 3-4: contrôle de parité *}
{* 00 = aucun *}
{* 01 = impair *}
{* 11 = pair *}
{* Bit 5-7: vitesse de transmission *}
{* 000 = 110 bauds *}
{* 001 = 150 bauds *}
{* 010 = 300 bauds *}
{* 011 = 600 bauds *}
{* 100 = 1200 bauds *}
{* 101 = 2400 bauds *}
{* 110 = 4800 bauds *}
{* 111 = 9600 bauds *}
{* *}
{**********************************************************************}
var
regs : registers;
begin
regs.ah:=0;
regs.dx:=nbport;
regs.al:=227; //= 'E3' en hex et 11100011 en binaire :8 bits, pas de parité, 1 bits stop,9600bds
intr($14,regs);
{ writeln('Rsultat initialisation ah=',regs.ah);}
end;
function rs_status:integer;
{*********************************************************************}
{* Cette fonction lit le statut du port srie *}
{*********************************************************************}
var
regs : registers;
begin
regs.ah:=3;
regs.dx:=nbport;
intr($14,regs);
rs_status:=regs.ah;
end;
function rs_read:integer;
{***********************************************************************}
{* Lecture au vol de la RS232C , Si aucun caractre n'a t recu la *}
{* function renvoie -1 *}
{***********************************************************************}
var
regs : registers;
begin
if (rs_status and 1)=1 then
begin
regs.ah:=2;
regs.dx:=nbport;
intr($14,regs);
if (regs.ah and 128)=128 then begin
writeln('Il y a eu erreur en lecture, AH=:',regs.ah);
end else rs_read:=regs.al;
end else begin
rs_read:=-1;
end;
end;
function rs_lecture : integer;
{********************************************************************}
{* Cette function attend q'un caractre soit recu sur le port srie *}
{********************************************************************}
var
aux : integer;
begin
repeat
aux:=rs_read;
until aux<>-1;
rs_lecture:=aux;
end;
procedure rs_write(data : byte);
{*******************************************************************}
{* Cette procdure permet d'emettre un caractre sur le port srie *}
{*******************************************************************}
var
regs : registers;
begin
regs.ah:=1;
regs.dx:=nbport;
regs.al:=data;
intr($14,regs);
if (regs.ah and 128)=128 then writeln('Erreur transmition : ',regs.ah);
end;
procedure test_lecture;
{********************************************************************}
{* Cette procedure permet de tester la fiabilit de la liaison *}
{* PC - Robot , elle permet entre autre d'effectuer le rglage de *}
{* Vitesse de la RS232 du robot VECTOR *}
{********************************************************************}
var
err,i,aux,cnt : integer;
begin
clrscr;
rs_init;
aux:=-1;
err:=-1;
cnt:=-1;
repeat
rs_init;
i:=rs_lecture;
if i<>aux+1 then err:=err+1;
aux:=i;
if i=255 then aux:=-1;
inc(cnt);
until keypressed or (cnt=1000);
writeln;
writeln('Il y a eu ',err,' erreurs sur 1000 ');
end;
procedure test_ecriture;
{*******************************************************************}
{* Permet de tester l'mission d'un caractre vers le robot VECTOR *}
{*******************************************************************}
var i,aux,j : integer;
carac : char;
begin
clrscr;
repeat
repeat until keypressed;
carac:=readkey;
rs_init;
rs_write(ord(carac));
write(carac);
until ((carac='Q') or (carac='q'));
end;
begin
test_ecriture;
end. |
Partager