INSTYTUT POLITECHNICZNY
Sieciowe Systemy Informatyczne
Przedmiot: Mikroprocesory i mikrokontrolery sieciowe |
Data oddania projektu:
|
Imię i nazwisko: Nr 13826 Bartosz Fortuna IV SSI(zaoczne) |
Ocena: |
Temat projektu: Sumy kontrolne – Zadanie 1 i 7 |
Podpis: |
Zadanie 1:
Komunikat ”:0cs#”, w którym cs jest sumą kontrolną modulo 10, powoduje, że LED L1
gaśnie, a komunikat ”:1xcs#”, że L1 pulsuje, przy czym znak x określa czas świecenia i
zgaszenia wyrażony w sekundach (1…9). Po otrzymaniu poprawnego komunikatu
sterownik odpowiada jego powtórzeniem, a na błędny komunikat nie reaguje.
A
L1=1 d1 tim--
2 L1=0 tim=_T
1 tim=_T !tim !tim
Lx=1 Lx=0 tim=_T !d1
3 L1=0 !d1
Ustawienie zmiennych automatu
sterującego tim--
A utomat komunikacyjny:
4 4 d x cs
‘:’
1 2 3 5
Kontrola d1,x, kontrola cs
cs
Kod w PB_sym:
Komunikacja.cpp
extern char d1;
char cs,_T=10,d;
. . .
if (znak_k){
switch(stan_k) {
case 1: if (znak_k==':') stan_k=2; else {send_string("ERROR : \r\n");stan_k=1;}
break;
case 2: d=znak_k;stan_k=3;
break;
case 3: if(d=='0'){cs=znak_k;stan_k=5;}
else if(d=='1'){x=znak_k;stan_k=4;}
else {send_string("ERROR 3 \r\n");stan_k=1;}
break;
case 4: cs=znak_k;
stan_k=5;
break;
case 5: if(znak_k=='#') {
if(d=='0')
if (((d-'0')+(cs-'0'))%10==0){
d1=0;send_char(':');send_char(d);send_char(cs);
send_char('#');send_string(" OFF \r\n");stan_k=1;}
else {send_string("ERROR cs \r\n");stan_k=1;}
else if((x>=1)||(x<=9))
if (((d-'0')+(x-'0')+(cs-'0'))%10==0){
d1=1;_T=(x-'0')*10;send_char(':');
send_char(d);send_char(x);
send_char(cs);send_char('#');
send_string(" ON \r\n");stan_k=1;}
else {send_string("ERROR cs \r\n");stan_k=1;}
}else{send_string("ERROR # \r\n");stan_k=1;}
}
}
Regulator.cpp
extern char _T;
char tim, d1;
. . .
switch (stan) {
case 1: L1=0;
if (d1) {tim=_T; stan=2; }
break;
case 2: L1=1;
if (!tim) {tim=_T; stan=3;}else if (!d1) stan=1;
break;
case 3: L1=0;
if (!tim) {tim=_T; stan=2;}else if (!d1) stan=1;
break;
}if(tim) tim--;
Zadanie 7:
Napisz program realizujący poniższy przebieg czasowy.
gdzie: Tx = 2 s, Ty = 3 s.
Komunikat ”:TxTycs1cs2#”, w którym cs1, cs2 stanowią sumę kontrolną LRC, zmienia
czasy Tx, Ty w zakresie 1…9 s.
A utomat sterujący:
Automat komunikacyjny:
Sumy cs:
T1=1 T2=1 cs=FE T1=1 T2=2 cs=FD T1=1 T2=3 cs=FC T1=1 T2=4 cs=FB T1=1 T2=5 cs=FA T1=1 T2=6 cs=F9 T1=1 T2=7 cs=F8 T1=1 T2=8 cs=F7 T1=1 T2=9 cs=F6
|
T1=2 T2=1 cs=FD T1=2 T2=2 cs=FC T1=2 T2=3 cs=FB T1=2 T2=4 cs=FA T1=2 T2=5 cs=F9 T1=2 T2=6 cs=F8 T1=2 T2=7 cs=F7 T1=2 T2=8 cs=F6 T1=2 T2=9 cs=F5 |
T1=3 T2=1 cs=FC T1=3 T2=2 cs=FB T1=3 T2=3 cs=FA T1=3 T2=4 cs=F9 T1=3 T2=5 cs=F8 T1=3 T2=6 cs=F7 T1=3 T2=7 cs=F6 T1=3 T2=8 cs=F5 T1=3 T2=9 cs=F4 |
T1=4 T2=1 cs=FB T1=4 T2=2 cs=FA T1=4 T2=3 cs=F9 T1=4 T2=4 cs=F8 T1=4 T2=5 cs=F7 T1=4 T2=6 cs=F6 T1=4 T2=7 cs=F5 T1=4 T2=8 cs=F4 T1=4 T2=9 cs=F3 |
T1=5 T2=1 cs=FA T1=5 T2=2 cs=F9 T1=5 T2=3 cs=F8 T1=5 T2=4 cs=F7 T1=5 T2=5 cs=F6 T1=5 T2=6 cs=F5 T1=5 T2=7 cs=F4 T1=5 T2=8 cs=F3 T1=5 T2=9 cs=F2 |
T1=6 T2=1 cs=F9 T1=6 T2=2 cs=F8 T1=6 T2=3 cs=F7 T1=6 T2=4 cs=F6 T1=6 T2=5 cs=F5 T1=6 T2=6 cs=F4 T1=6 T2=7 cs=F3 T1=6 T2=8 cs=F2 T1=6 T2=9 cs=F1 |
T1=7 T2=1 cs=F8 T1=7 T2=2 cs=F7 T1=7 T2=3 cs=F6 T1=7 T2=4 cs=F5 T1=7 T2=5 cs=F4 T1=7 T2=6 cs=F3 T1=7 T2=7 cs=F2 T1=7 T2=8 cs=F1 T1=7 T2=9 cs=F0 |
T1=8 T2=1 cs=F7 T1=8 T2=2 cs=F6 T1=8 T2=3 cs=F5 T1=8 T2=4 cs=F4 T1=8 T2=5 cs=F3 T1=8 T2=6 cs=F2 T1=8 T2=7 cs=F1 T1=8 T2=8 cs=F0 T1=8 T2=9 cs=EF |
T1=9 T2=1 cs=F6 T1=9 T2=2 cs=F5 T1=9 T2=3 cs=F4 T1=9 T2=4 cs=F3 T1=9 T2=5 cs=F2 T1=9 T2=6 cs=F1 T1=9 T2=7 cs=F0 T1=9 T2=8 cs=EF T1=9 T2=9 cs=EE |
Kod:
Regulator.cpp
char WE,WY,T1=20,T2=30;
. . .
WE=aK1;
switch (stan) { // miganie diody
case 1: WY=0; if (WE) { stan=2; tim=T1; } break;
case 2: WY=0; if (!tim) { stan=3; tim=T2; } else if (!WE) stan=1;break;
case 3: WY=1; if (!WE||!tim) stan=1; break;
}
if (tim) --tim;
L1=WY;
Komunikacja.cpp
extern char T1,T2;
char cs1,cs2,Tx,Ty,z,cs;
. . .
char ascii2hex(char znak)
{
if (znak<='9') return znak-'0';
else return znak-'A'+10;
}
char hex2ascii(char liczba)
{
if (liczba<=9) return liczba+'0';
else return liczba+'A'-10;
}
switch(stan_k) {
case 1: if (znak_k==':') stan_k=2; else stan_k=1; // znak ':'
break;
case 2: Tx=znak_k; stan_k=3;
break;
case 3: Ty=znak_k; stan_k=4;
cs=-((Tx-'0')+(Ty-'0'));
cs1=cs&0xF0;
cs1=(cs1>>4)&0x0F;
cs1=hex2ascii(cs1);
cs2=cs&0x0F;
cs2=hex2ascii(cs2);
char b1[10],b2[10];
send_string("cs=");
send_char(cs1);send_char(cs2);
send_string("\r\n");
break;
case 4: cs1=znak_k; stan_k=5;
break;
case 5: cs2=znak_k; stan_k=6;
break;
case 6: if(znak_k=='#')
{
if(((Tx>='1')&&(Tx<='9'))&&((Ty>='1')&&(Ty<='9')))
{
cs=ascii2hex(cs1);
cs=(cs<<4)&0xF0;
cs=cs|ascii2hex(cs2);
z=(Tx-'0')+(Ty-'0')+cs;
if (z==0)
{
T1=(Tx-'0')*10;
T2=(Ty-'0')*10;
send_string("OK\r\n");
stan_k=1;
} else {send_string("error cs\r\n");stan_k=1;}
} else {send_string("error czas\r\n");stan_k=1;}
} else {send_string("error #\r\n");stan_k=1;}
break;
}