Start
Licznik sekundowy
Programowanie - Bascom
Wpisany przez Administrator   
niedziela, 02 listopada 2008 23:40

Prosty licznik sekundowy.

Do pobrania : prog_12.zip ( prog_12.bas, prog_12.hex )

Typ : pełna, darmowa
Rozmiar pliku : 0.01 MB
Autor : www.neTsl.net
Systemy : Mikrokontroler AT90S2313

   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 
'Program napisany na mikrokontroler ATMEGA AT90S2313
'Prosty licznik sekundowy od zera ( 0000 ) do ( 9999 ) z skokiem co 1
'Po doliczeniu do konca zaczyna od poczatku jednak ilosc przejsc od poczatku do 
  konca zapamietuje w osobnej
'zmiennej do podgladniecia po przycisnieciu przycisku P0
'Przetestowany na zestawie demo ( plytce testowej ) do kursu Bascom AVR - 
  AVT3500
'W zestawie PORTB podlaczony do czterech wyswietlaczy 7-segmentowych pracujacych
  w trybie multipleksowym
'PORTD.0 oraz PORTD.1 jako przyciski, PORTD.2 do PORTD.6 podlaczone do 
  tranzystorow sterujacych wlaczanie/wylaczanie
'wspolna anoda poszczegolnych wyswietlaczy 7-segmentowych ( czyli w 
  rzeczywistosci wlacza/wylacza pojedyncza cyfre - modul )
'Schemat elektryczny zestawu na stronie www.netsl.net ( szukaj : AVT3500 )
'Autor : neTsl.net  02.11.2008


'USTAL KONFIGURACJE PORTOW
'=========================
'wszystkie porty b jako wyjscie - to te od wyswietlaczy 7-segmentowych port b to
  8 wyjsc/wejsc
'7 segmentow cyfry ( modulu ) plus kropka
Config Portb = Output
'porty d dwa najmlodsze czyli przyciski (pd.0) i (pd.1) jako wejscie ( 0 ), 
  reszta ( czyli m.in. tranzystory sterujace ledami )
'jako wyjscie ( 1 ), port d to 7 wyjsc/wejsc
Config Portd = &B1111100

'USTAL STAN SPOCZYNKOWY PORTOW
'=============================
'wpisujac ( 0 ) zalaczamy tranzystor ktory nam jest potrzebny, dwa najmlodsze 
  bity pd.0 i pd.1 czyli przyciski, tam dajemy jedynki czyli
'podciagamy do plusa zasilania przez to beda reagowac na wcisniecie czyli 
  dopiecie do masy
Portd = &B00000111
'na wszystkich wyjsciach portu b ustalamy ( 1 ) czyli wylaczamy ledy
Portb = &B11111111


'ZACZYNAMY
'=========
Dim Kw As Byte , A As Word , B As Byte , C As Byte , D As Byte , Migaj As Bit , 
  P1 As Byte , P2 As Byte
Dim A2 As Byte , B2 As Byte , C2 As Byte , D2 As Byte
Config Timer0 = Timer , Prescale = 64 : Enable Interrupts : Enable Timer0

On Timer0 T1

Kw = 0 : A = 0 : B = 0 : C = 0 : D = 0 : Migaj = 0 : P1 = 0 : P2 = 0
A2 = 0 : B2 = 0 : C2 = 0 : D2 = 0

Do : Loop : End               'glowna petla

Tabela:                       'potrzebna do wyswietlenia cyfr 0...9
Data 192 , 249 , 164 , 176 , 153 , 146 , 130 , 248 , 128 , 144



Zwieksz:
 Incr A
 If A = 10 Then
   A = 0
   Incr B
   If B = 10 Then
      B = 0
      Incr C
      If C = 10 Then
         C = 0
         Incr D
         If D = 10 Then
            D = 0
            Incr A2
            If A2 = 10 Then
               A2 = 0
               Incr B2
               If B2 = 10 Then
                  B2 = 0
                  Incr C2
                  If C2 = 10 Then
                     C2 = 0
                     Incr D2
                     If D2 = 10 Then D2 = 0
                  End If
               End If
            End If
         End If
      End If
   End If
 End If
Return



T1:
'przerwanie od timera co 4ms
'czestotliwosc kwarcu przy mikrokontrolerze 4MHz
'4MHz = 4000000 Hz czyli 4000000 razy na sekunde
'czyli 1sekunda/4000000 = 0.00000025s - tyle wynosi przebieg z kwarcu
'prescaler wlaczony na 64 ( Prescale = 64 ), czyli 0.00000025s * 64 = 0.000016s 
  czyli 16us ( mikrosekund )
'Timer0 to licznik od 0 do 255 czyli po zliczeniu 255 takich 16us sygnalow 
  wysyla do procesora przerwanie
'czyli w sumie to daje sygnal przerwania co 0.00408s, my chcemy dokladnie co 4ms
  wiec od 255 - 6 = 249 ale liczymy lacznie z
'0 wiec w sumie 250 * 16us = 0.004ms ( milisekundy )
Timer0 = 6

Incr P2
If P2 = 250 Then              '250 * 0.004s to dokladnie 1s i co tyle bedzie 
  zwiekszany licznik
   P2 = 0
   Gosub Zwieksz
End If

Incr P1                       'zwieksz P1
If P1 = 40 Then               '40 * 0.004s to dokladnie 0.16s i co tyle bedzie 
  zaswiecana kropka
   P1 = 0
   Toggle Migaj               'zmien na przeciwny stan zmiennej Migaj
End If

Incr Kw : If Kw = 4 Then Kw = 0       'wybierz kolejny wyswietlacz

'OBSLUGA WYSWIETLACZY CO 4ms
'===========================
Portd = &B1111111             'wygas wyswietlacze

If Pind.0 = 1 Then
   Select Case Kw
   Case 0:
      Portb = Lookup(a , Tabela)       'wpisz wartosci do portu b
      Portd.3 = 0             'zaswiec ( wlacz ) cyfre pierwsza
      Portb.7 = Migaj         'obsluga punktu migajacego
   Case 1:
      Portb = Lookup(b , Tabela)
      Portd.4 = 0
   Case 2:
      Portb = Lookup(c , Tabela)
      Portd.5 = 0
   Case 3:
      Portb = Lookup(d , Tabela)
      Portd.6 = 0
   End Select
Else
   Select Case Kw
   Case 0:
      Portb = Lookup(a2 , Tabela)       'wpisz wartosci do portu b
      Portd.3 = 0             'zaswiec ( wlacz ) cyfre pierwsza
      Portb.7 = Migaj         'obsluga punktu migajacego
   Case 1:
      Portb = Lookup(b2 , Tabela)
      Portd.4 = 0
      Portb.7 = 0
   Case 2:
      Portb = Lookup(c2 , Tabela)
      Portd.5 = 0
   Case 3:
      Portb = Lookup(d2 , Tabela)
      Portd.6 = 0
   End Select
End If
Return

Zmieniony: poniedziałek, 03 listopada 2008 00:09
 
Analizator leksykalny
Programowanie - Zadania C++
Wpisany przez Administrator   
niedziela, 01 lutego 2009 11:15

Analizator leksykalny w wersji podstawowej. Klasy znaków : identyfikatory, liczby rzeczywiste, liczby całkowite, słowa kluczowe, operatory addytywne i multiplikatywne, nawiasy, operator przypisania. Program po uruchomieniu odczytuje tekst do analizy z pliku "test.txt", wstawia do listy i dokonuje analizy.

Do pobrania również spakowana wersja z przykładowym plikiem "test.txt" i programem do uruchomienia analizator.exe 

Do pobrania : analizator.zip

Wersja : 2.12
Typ : pełna, GPL
Rozmiar pliku : 0.20 MB
Autor : www.neTsl.net
 

   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 

 169 
 170 
 171 

 172 

 173 

 174 
 175 
 176 
 177 
 178 

 179 

 180 

 181 
 182 
 183 

 184 

 185 

 186 
 187 
 188 

 189 

 190 

 191 
 192 
 193 

 194 

 195 

 196 
 197 
 198 

 199 

 200 

 201 
 202 
 203 

 204 

 205 

 206 
 207 
 208 

 209 

 210 

 211 
 212 
 213 
 214 
 215 
 216 
 217 
 218 
 219 
 220 
 221 
 222 
 223 
 224 
 225 
 226 
 227 
 228 
 229 

 230 
 231 
 232 

 233 
 234 
 235 
 236 
 237 
 238 
 239 
 240 
 241 
 242 
 243 
 244 
 245 
 246 
 247 
 248 
 249 
 250 
 251 

 252 
 253 
 254 
 255 
 256 
 257 
 258 
 259 
 260 
 261 
 262 
 263 
 264 
 265 
 266 
 267 
 268 
 269 
 270 
 271 
 272 
 273 
 274 
 275 
 276 
 277 
 278 
 279 
 280 
 281 
 282 
 283 
 284 
 285 
 286 
 287 
 288 
 289 
 290 
 291 
 292 
 293 
 294 
 295 
 296 
 297 
 298 
 299 
 300 
 301 
 302 
 303 
 304 
 305 
 306 
 307 
 308 
 309 
 310 
 311 
 312 
 313 
 314 
 315 
 316 
 317 
 318 
 319 
 320 
 321 
 322 
 323 
 324 
 325 
 326 
 327 
 328 
 329 
 330 
 331 
 332 
 333 
#include <map>
#include <list>
#include <string.h>
#include <iostream>
#include <fstream.h>

//=====================
//Autor : www.neTsl.net
//=====================

using namespace std;

multimap <string,int> symbol;
multimap <string,int> kluczowe;
list <string> tab; //deklaracja listy
list <string>::iterator itr; //iterator do listy, a zarazem glowica analizatora

typedef enum stany {q0, q1, q2, q3, q4, q5, q6, q7, q8, q9, q10, q11, q12, q13, 
  q14, q15, qk1, qk2, qk3, qk4, qk5, qk6, qk7, qk8, qk9, qk10, qk11, qk12, qk13,
  qerr, qer} stan;
stan analiza[16][17];
stan akt_stan = q0;

int a, k;
string bufor, c;

  
class analizator
{
public:
analizator()
{
      tab.clear();
      itr = tab.begin(); //iterator na poczatek listy
      bufor = "";
}

void inicjuj()
{
      itr = tab.begin(); //iterator na poczatek listy
      akt_stan = q0;
      bufor = "";      
}

void czytaj_plik() //czyta plik i wstawia do listy
{
     ifstream plik; plik.open("test.txt");
     while (plik.good()) { c = plik.get(); if (plik.good()) { tab.push_back(c); 
       } }
     plik.close();
}

void pokaz_plik() //wyswietla zawartosc listy
{     
     system("cls");
     cout << "!POKAZ PLIK-----------------------------" << endl;
     cout << "----------------------------------------" << endl << endl;
     for (itr=tab.begin(); itr!=tab.end(); itr++) cout << *itr;
     cout << endl << endl << "Liczba znakow w pliku : " << tab.size() << endl <<
       endl;
}

string wczytaj_nie_spacje()
{
       while (*itr == " " || *itr == "\n" || *itr == "\t") { itr++; }
       return *itr;
}

int wyznacz_klase(string znak) //wyznacza klase znaku
{
       return symbol.find(znak)->second;
}

void pokaz_klasy() //wyswietla klasy dla poszczegolnych znakow
{
     inicjuj();

     cout << "!POKAZ KLASY ZNAKOW---------------------" << endl;     
     cout << "----------------------------------------" << endl << endl;
     do
     {
          c = wczytaj_nie_spacje();
          cout << c << "=" << wyznacz_klase(c) << "  ";
          itr++;
     } while (itr!=tab.end());
     cout << endl << endl;

};


int main(int argc, char *argv[])
{  
  symbol.insert (pair<string,int>("a",0)); symbol.insert (pair<string,int>
    ("b",0)); symbol.insert (pair<string,int>("c",0));
  symbol.insert (pair<string,int>("d",0)); symbol.insert (pair<string,int>
    ("f",0)); symbol.insert (pair<string,int>("g",0));
  symbol.insert (pair<string,int>("h",0)); symbol.insert (pair<string,int>
    ("i",0)); symbol.insert (pair<string,int>("j",0));
  symbol.insert (pair<string,int>("k",0)); symbol.insert (pair<string,int>
    ("l",0)); symbol.insert (pair<string,int>("m",0));
  symbol.insert (pair<string,int>("n",0)); symbol.insert (pair<string,int>
    ("o",0)); symbol.insert (pair<string,int>("p",0));
  symbol.insert (pair<string,int>("r",0)); symbol.insert (pair<string,int>
    ("s",0)); symbol.insert (pair<string,int>("t",0));
  symbol.insert (pair<string,int>("u",0)); symbol.insert (pair<string,int>
    ("v",0)); symbol.insert (pair<string,int>("w",0));
  symbol.insert (pair<string,int>("x",0)); symbol.insert (pair<string,int>
    ("y",0)); symbol.insert (pair<string,int>("z",0));

  symbol.insert (pair<string,int>("A",0)); symbol.insert (pair<string,int>
    ("B",0)); symbol.insert (pair<string,int>("C",0));
  symbol.insert (pair<string,int>("D",0)); symbol.insert (pair<string,int>
    ("F",0)); symbol.insert (pair<string,int>("G",0));
  symbol.insert (pair<string,int>("H",0)); symbol.insert (pair<string,int>
    ("I",0)); symbol.insert (pair<string,int>("J",0));
  symbol.insert (pair<string,int>("K",0)); symbol.insert (pair<string,int>
    ("L",0)); symbol.insert (pair<string,int>("M",0));
  symbol.insert (pair<string,int>("N",0)); symbol.insert (pair<string,int>
    ("O",0)); symbol.insert (pair<string,int>("P",0));
  symbol.insert (pair<string,int>("R",0)); symbol.insert (pair<string,int>
    ("S",0)); symbol.insert (pair<string,int>("T",0));
  symbol.insert (pair<string,int>("U",0)); symbol.insert (pair<string,int>
    ("V",0)); symbol.insert (pair<string,int>("W",0));
  symbol.insert (pair<string,int>("X",0)); symbol.insert (pair<string,int>
    ("Y",0)); symbol.insert (pair<string,int>("Z",0));

  symbol.insert (pair<string,int>("e",1)); symbol.insert (pair<string,int>
    ("E",1));

  symbol.insert (pair<string,int>("1",2)); symbol.insert (pair<string,int>
    ("2",2)); symbol.insert (pair<string,int>("3",2));
  symbol.insert (pair<string,int>("4",2)); symbol.insert (pair<string,int>
    ("5",2)); symbol.insert (pair<string,int>("6",2));
  symbol.insert (pair<string,int>("7",2)); symbol.insert (pair<string,int>
    ("8",2)); symbol.insert (pair<string,int>("9",2));
  symbol.insert (pair<string,int>("0",2));

  symbol.insert (pair<string,int>(".",3)); symbol.insert (pair<string,int>
    ("+",4)); symbol.insert (pair<string,int>("-",4));
  symbol.insert (pair<string,int>(":",5)); symbol.insert (pair<string,int>
    ("=",6)); symbol.insert (pair<string,int>("/",7));
  symbol.insert (pair<string,int>("*",7)); symbol.insert (pair<string,int>
    ("_",8));
  
  symbol.insert (pair<string,int>(">",9)); symbol.insert (pair<string,int>("<
    ",9));
  symbol.insert (pair<string,int>(",",9)); symbol.insert (pair<string,int>
    ("\"",9));
  symbol.insert (pair<string,int>("!",9)); symbol.insert (pair<string,int>
    ("'",9)); symbol.insert (pair<string,int>("\\",9));      
  symbol.insert (pair<string,int>(" ",9)); symbol.insert (pair<string,int>
    ("\n",9)); symbol.insert (pair<string,int>("%",9));
  
  symbol.insert (pair<string,int>("{",10)); symbol.insert (pair<string,int>
    ("}",11)); symbol.insert (pair<string,int>("(",12));
  symbol.insert (pair<string,int>(")",13)); symbol.insert (pair<string,int>
    ("[",14)); symbol.insert (pair<string,int>("]",15)); 
  
  symbol.insert (pair<string,int>(";",16));
   
  
  kluczowe.insert (pair<string,int>("main",0)); kluczowe.insert (pair<string
    ,int>("if",0)); kluczowe.insert (pair<string,int>("else",0));
  kluczowe.insert (pair<string,int>("do",0)); kluczowe.insert (pair<string,int>
    ("while",0)); kluczowe.insert (pair<string,int>("int",0));
  kluczowe.insert (pair<string,int>("char",0)); kluczowe.insert (pair<string
    ,int>("float",0)); kluczowe.insert (pair<string,int>("double",0));
  kluczowe.insert (pair<string,int>("return",0)); kluczowe.insert (pair<string
    ,int>("const",0)); kluczowe.insert (pair<string,int>("void",0));
  kluczowe.insert (pair<string,int>("for",0)); kluczowe.insert (pair<string,int>
    ("switch",0)); kluczowe.insert (pair<string,int>("case",0));
  kluczowe.insert (pair<string,int>("class",0)); kluczowe.insert (pair<string
    ,int>("private",0)); kluczowe.insert (pair<string,int>("public",0));
  kluczowe.insert (pair<string,int>("include",0)); kluczowe.insert (pair<string
    ,int>("cin",0)); kluczowe.insert (pair<string,int>("cout",0));
  
  analiza[0][0] = q7; analiza[0][1] = q7; analiza[0][2] = q1; analiza[0][3] = 
    qer; analiza[0][4] = qk6;
  analiza[0][5] = q8; analiza[0][6] = q8; analiza[0][7] = qk5; analiza[0][8] = 
    qer; analiza[0][9] = qer;
  analiza[0][10] = q9; analiza[0][11] = q10; analiza[0][12] = q11; 
    analiza[0][13] = q12; analiza[0][14] = q13;
  analiza[0][15] = q14; analiza[0][16] = q15;  

  analiza[1][0] = qk2; analiza[1][1] = qk2; analiza[1][2] = q1; analiza[1][3] = 
    q2; analiza[1][4] = qk2;
  analiza[1][5] = qk2; analiza[1][6] = qk2; analiza[1][7] = qk2; analiza[1][8] =
    qk2; analiza[1][9] = qk2;
  analiza[1][10] = qk2; analiza[1][11] = qk2; analiza[1][12] = qk2; 
    analiza[1][13] = qk2; analiza[1][14] = qk2;
  analiza[1][15] = qk2; analiza[1][16] = qk2;

  analiza[2][0] = qerr; analiza[2][1] = qerr; analiza[2][2] = q3; analiza[2][3] 
    = qerr; analiza[2][4] = qerr;
  analiza[2][5] = qerr; analiza[2][6] = qerr;analiza[2][7] = qerr; analiza[2][8]
    = qerr; analiza[2][9] = qerr;

  analiza[3][0] = qk1; analiza[3][1] = q4; analiza[3][2] = q3; analiza[3][3] = 
    qk1; analiza[3][4] = qk1;
  analiza[3][5] = qk1; analiza[3][6] = qk1; analiza[3][7] = qk1; analiza[3][8] =
    qk1; analiza[3][9] = qk1;
  analiza[3][10] = qk1; analiza[3][11] = qk1; analiza[3][12] = qk1; 
    analiza[3][13] = qk1; analiza[3][14] = qk1;
  analiza[3][15] = qk1; analiza[3][16] = qk1;

  analiza[4][0] = qerr; analiza[4][1] = qerr; analiza[4][2] = q6; analiza[4][3] 
    = qerr; analiza[4][4] = q5;
  analiza[4][5] = qerr; analiza[4][6] = qerr; analiza[4][7] = qerr; 
    analiza[4][8] = qerr; analiza[4][9] = qerr;

  analiza[5][0] = qerr; analiza[5][1] = qerr; analiza[5][2] = q6; analiza[5][3] 
    = qerr; analiza[5][4] = qerr;
  analiza[5][5] = qerr; analiza[5][6] = qerr; analiza[5][7] = qerr; 
    analiza[5][8] = qerr; analiza[5][9] = qerr;

  analiza[6][0] = qk1; analiza[6][1] = qk1; analiza[6][2] = q6; analiza[6][3] = 
    qk1; analiza[6][4] = qk1;
  analiza[6][5] = qk1; analiza[6][6] = qk1; analiza[6][7] = qk1; analiza[6][8] =
    qk1; analiza[6][9] = qk1;
  analiza[6][10] = qk1; analiza[6][11] = qk1; analiza[6][12] = qk1; 
    analiza[6][13] = qk1; analiza[6][14] = qk1;
  analiza[6][15] = qk1; analiza[6][16] = qk1;

  analiza[7][0] = q7; analiza[7][1] = q7; analiza[7][2] = q7; analiza[7][3] = 
    qk3; analiza[7][4] = qk3;
  analiza[7][5] = qk3; analiza[7][6] = qk3; analiza[7][7] = qk3; analiza[7][8] =
    q7; analiza[7][9] = qk3;
  analiza[7][10] = qk3; analiza[7][11] = qk3; analiza[7][12] = qk3; 
    analiza[7][13] = qk3; analiza[7][14] = qk3;
  analiza[7][15] = qk3; analiza[7][16] = qk3;

  analiza[8][0] = qk4; analiza[8][1] = qk4; analiza[8][2] = qk4; analiza[8][3] =
    qerr; analiza[8][4] = qerr;
  analiza[8][5] = qerr; analiza[8][6] = q8; analiza[8][7] = qerr; analiza[8][8] 
    = qerr; analiza[8][9] = qk4;
  analiza[8][10] = qk4; analiza[8][11] = qk4; analiza[8][12] = qk4; 
    analiza[8][13] = qk4; analiza[8][14] = qk4;
  analiza[8][15] = qk4; analiza[8][16] = qk4; 
  
  
  
  analiza[9][0] = qk7; analiza[9][1] = qk7; analiza[9][2] = qk7; analiza[9][3] =
    qk7; analiza[9][4] = qk7;
  analiza[9][5] = qk7; analiza[9][6] = qk7; analiza[9][7] = qk7; analiza[9][8] =
    qk7; analiza[9][9] = qk7;  
  analiza[9][10] = qk7; analiza[9][11] = qk7; analiza[9][12] = qk7; 
    analiza[9][13] = qk7; analiza[9][14] = qk7;
  analiza[9][15] = qk7; analiza[9][16] = qk7;

  analiza[10][0] = qk8; analiza[10][1] = qk8; analiza[10][2] = qk8; 
    analiza[10][3] = qk8; analiza[10][4] = qk8;
  analiza[10][5] = qk8; analiza[10][6] = qk8; analiza[10][7] = qk8; 
    analiza[10][8] = qk8; analiza[10][9] = qk8;  
  analiza[10][10] = qk8; analiza[10][11] = qk8; analiza[10][12] = qk8; 
    analiza[10][13] = qk8; analiza[10][14] = qk8;
  analiza[10][15] = qk8; analiza[10][16] = qk8;
  
  analiza[11][0] = qk9; analiza[11][1] = qk9; analiza[11][2] = qk9; 
    analiza[11][3] = qk9; analiza[11][4] = qk9;
  analiza[11][5] = qk9; analiza[11][6] = qk9; analiza[11][7] = qk9; 
    analiza[11][8] = qk9; analiza[11][9] = qk9;
  analiza[11][10] = qk9; analiza[11][11] = qk9; analiza[11][12] = qk9; 
    analiza[11][13] = qk9; analiza[11][14] = qk9;
  analiza[11][15] = qk9; analiza[11][16] = qk9;
    
  analiza[12][0] = qk10; analiza[12][1] = qk10; analiza[12][2] = qk10; 
    analiza[12][3] = qk10; analiza[12][4] = qk10;
  analiza[12][5] = qk10; analiza[12][6] = qk10; analiza[12][7] = qk10; 
    analiza[12][8] = qk10; analiza[12][9] = qk10;
  analiza[12][10] = qk10; analiza[12][11] = qk10; analiza[12][12] = qk10; 
    analiza[12][13] = qk10; analiza[12][14] = qk10;
  analiza[12][15] = qk10; analiza[12][16] = qk10;   

  analiza[13][0] = qk11; analiza[13][1] = qk11; analiza[13][2] = qk11; 
    analiza[13][3] = qk11; analiza[13][4] = qk11;
  analiza[13][5] = qk11; analiza[13][6] = qk11; analiza[13][7] = qk11; 
    analiza[13][8] = qk11; analiza[13][9] = qk11;
  analiza[13][10] = qk11; analiza[13][11] = qk11; analiza[13][13] = qk11; 
    analiza[13][13] = qk11; analiza[13][14] = qk11;
  analiza[13][15] = qk11; analiza[13][16] = qk11;   

  analiza[14][0] = qk12; analiza[14][1] = qk12; analiza[14][2] = qk12; 
    analiza[14][3] = qk12; analiza[14][4] = qk12;
  analiza[14][5] = qk12; analiza[14][6] = qk12; analiza[14][7] = qk12; 
    analiza[14][8] = qk12; analiza[14][9] = qk12;
  analiza[14][10] = qk12; analiza[14][11] = qk12; analiza[14][14] = qk12; 
    analiza[14][13] = qk12; analiza[14][14] = qk12;
  analiza[14][15] = qk12; analiza[14][16] = qk12;   

  analiza[15][0] = qk13; analiza[15][1] = qk13; analiza[15][2] = qk13; 
    analiza[15][3] = qk13; analiza[15][4] = qk13;
  analiza[15][5] = qk13; analiza[15][6] = qk13; analiza[15][7] = qk13; 
    analiza[15][8] = qk13; analiza[15][9] = qk13;
  analiza[15][10] = qk13; analiza[15][11] = qk13; analiza[15][15] = qk13; 
    analiza[15][13] = qk13; analiza[15][15] = qk13;
  analiza[15][15] = qk13; analiza[15][16] = qerr;   
  
  analizator test;
  test.czytaj_plik();
  test.pokaz_plik();
  //test.pokaz_klasy();

  test.inicjuj();
  cout << "!ANALIZA LEKSYKALNA---------------------" << endl;
  cout << "----------------------------------------" << endl << endl;    
  
  do
  {  
  k = 0;

  while (akt_stan>=q0 && akt_stan<=q15 && itr!=tab.end())
  {
        if(k == 0) { c = test.wczytaj_nie_spacje(); k = 1; } else c = *itr;
        //cout << "akt_stan:" << akt_stan << "klasa:" << test.wyznacz_klase(c) <
          < endl;
        akt_stan = analiza[akt_stan][test.wyznacz_klase(c)];
        //cout << "akt_stan:" << akt_stan << endl;
        if((akt_stan>=q0 && akt_stan<=q15) || (bufor=="")) { bufor = bufor + c; 
          }
        itr++;
  }

  switch(akt_stan)
  {
      case qk1:
           cout << "ROZPOZNANO LICZBA RZECZYWISTA -> ";
           cout << bufor << endl;
           itr--;
           bufor = ""; akt_stan = q0; break;
           
      case qk2:
           cout << "ROZPOZNANO LICZBA CALKOWITA -> ";
           cout << bufor << endl;
           itr--;
           bufor = ""; akt_stan = q0; break;

      case qk3:
           if (!kluczowe.find(bufor)->second) cout << "ROZPOZNANO SLOWO KLUCZOWE
             -> ";
           else cout << "ROZPOZNANO IDENTYFIKATOR -> ";
           cout << bufor << endl;
           itr--;
           bufor = ""; akt_stan = q0; break;

      case qk4:
           cout << "ROZPOZNANO OPERATOR PRZYPISANIA -> ";
           cout << bufor << endl;
           bufor = ""; akt_stan = q0; break;

      case qk5:
           cout << "ROZPOZNANO OPERATOR MULTIPLIKATYWNY -> ";
           cout << bufor << endl;
           bufor = ""; akt_stan = q0; break;

      case qk6:
           cout << "ROZPOZNANO OPERATOR ADDYTYWNY -> ";
           cout << bufor << endl;
           bufor = ""; akt_stan = q0; break;

      case qk7:
           cout << "ROZPOZNANO NAWIAS LEWY KLAMROWY -> ";
           cout << bufor << endl;
           itr--;           
           bufor = ""; akt_stan = q0; break;

      case qk8:
           cout << "ROZPOZNANO NAWIAS PRAWY KLAMROWY -> ";
           cout << bufor << endl;
           itr--;
           bufor = ""; akt_stan = q0; break;
           
      case qk9:
           cout << "ROZPOZNANO NAWIAS LEWY OKRAGLY -> ";
           cout << bufor << endl;
           itr--;
           bufor = ""; akt_stan = q0; break;           

      case qk10:
           cout << "ROZPOZNANO NAWIAS PRAWY OKRAGLY -> ";
           cout << bufor << endl;
           itr--;
           bufor = ""; akt_stan = q0; break;
           
      case qk11:
           cout << "ROZPOZNANO NAWIAS LEWY KWADRATOWY -> ";
           cout << bufor << endl;
           itr--;
           bufor = ""; akt_stan = q0; break;

      case qk12:
           cout << "ROZPOZNANO NAWIAS PRAWY KWADRATOWY -> ";
           cout << bufor << endl;
           itr--;
           bufor = ""; akt_stan = q0; break;
                      
      case qk13:
           cout << "ROZPOZNANO SREDNIK -> ";
           cout << bufor << endl;
           itr--;
           bufor = ""; akt_stan = q0; break;
           
      case qerr:
           cout << "ROZPOZNANO BLAD!!!!! -> ";
           cout << bufor << endl;
           itr--;
           bufor = ""; akt_stan = q0; break;

      case qer:
           cout << "ROZPOZNANO BLAD!!!!! -> ";
           cout << bufor << endl;
           bufor = ""; akt_stan = q0; break;
  }


  } while (itr!=tab.end());

  
  system("PAUSE");
  return EXIT_SUCCESS;
}

Zmieniony: sobota, 21 lutego 2009 22:08
 
ICL7107 - woltomierz
Elektronika - Aplikacje - układy scalone
Wpisany przez Administrator   
czwartek, 23 października 2008 15:20

Zbiór materiałów dla układu scalonego ICL7107 :

Do pobrania : Najsłynniejsze aplikacje - ICL7106, ICL7107 część I

Rozmiar pliku : 0.46 MB
Producent : Elektronika dla Wszystkich 5/97

Do pobrania : Najsłynniejsze aplikacje - ICL7106, ICL7107 część II

Rozmiar pliku : 0.65 MB
Producent : Elektronika dla Wszystkich 6/97

Do pobrania : Datasheet ICL7106, ICL7107, ICL7107S

Rozmiar pliku : 0.53 MB
Producent : Intersil

Do pobrania : Moduł miliwoltomierza do zasilaczy AVT-2270

Rozmiar pliku : 0.23 MB
Producent : Elektronika dla Wszystkich 03/1998

Do pobrania : Jednozakresowy woltomierz - amperomierz 3 i 1/2 cyfry

Rozmiar pliku : 0.23 MB
Producent : Praktyczny Elektronik 12/1996
 

Schemat tworzenia dzielników napięć ( pomocne przy ustalaniu zakresu działania miernika na ICL71** ) :

 dzielnik.jpg

Zmieniony: czwartek, 11 czerwca 2009 20:40
 
Symulacja awarii w systemie rozproszonym
Programowanie - Zadania C++
Wpisany przez Administrator   
sobota, 07 czerwca 2008 16:23

Ogólnie program działa w sposób następujący :

Mamy serwer i nieograniczoną liczbę klientów. Serwer wysyła do klientów dane ( czas i datę w odstępach co 5 sekund przez protokół TCP/IP ). Klient lub klienci odbierają te dane. W momencie awarii serwera – klient który pierwszy zauważy brak komunikacji z serwerem ( brak przychodzących danych ), szuka serwera i jeśli nie znajdzie sam próbuje zostać serwerem.

Konfiguracja przed skompilowaniem pliku ko.cpp :

Ustawiamy maskę adresów IP w zmiennej char ip[] = "192.168.1.";

Ustawiamy adres startowy czwartego oktetu w adresie IP – zmienna BEGIN.

Ustawiamy adres końcowy czwartego oktetu w adresie IP – zmienna END.

Uruchamiamy plik ko.out. ( można nieograniczoną ilość razy – program uruchomiony jako pierwszy zostaje pierwszym serwerem, reszta klientami – jeśli serwer zabijemy ( kill PID ) - któryś z klientów będzie chciał nim zostać. )

1.) Po uruchomieniu program początkowo szuka serwera ( skanuje po kolei adresy IP z maski, zaczynając od adresu BEGIN z czwartego oktetu i kończąc na END ). Skanowanie zaimplementowane jest w pętli for i sprawdza czy wykonanie instrukcji :


connect(sockfd1, (struct sockaddr *)&their_addr, sizeof(struct sockaddr));


zwraca błąd czy nie – jeśli zwraca błąd skanowany jest kolejny adres aż do końca.

2a.) Jeśli po przeskanowaniu wszystkich adresów IP nie znajdzie serwera ( connect za każdym razem będzie zwracał błąd ) - program próbuje przejść w stan SERWERA :

 

sockfd1 = socket(AF_INET, SOCK_STREAM, 0)

bind(sockfd1, (struct sockaddr *)&my_addr, sizeof(struct sockaddr))

listen(sockfd1, BACKLOG)


, nasłuchując za potencjalnym klientem. Po uzyskaniu połączenia z klientem tworzy proces-dziecko który wysyła do klienta w odstępach 5 sekundowych aktualny czas i datę :

Zmieniony: sobota, 06 września 2008 15:14
Więcej…
 
Linux kolejka
Programowanie - Zadania C++
Wpisany przez Administrator   
piątek, 16 maja 2008 21:30

Rozwiązanie zadania z serwerem ( odpowiadaczem ) który pobiera dane z kolejki wysłane przez klienta i wynik przesyła z powrotem do tej samej kolejki aby mógł go pobrać klient. Ważniejsze elementy programu są opisane w plikach, tutaj chciałbym przedstawić ogólny opis. Uruchamiamy jeden plik serwer.cpp i dowolną ilość plików klient.cpp ( ilość ta jest ograniczona stałą #define max_klient w programie ). W pierwszej kolejności serwer tworzy kolejkę w której trzyma kolejne numery identyfikatorów. Każdy klient pobiera z kolejki jeden ( następny, indywidualny ) identyfikator aż do wyczerpania puli ( max_klient ) oraz zapisuje go do pliku. W ten sposób nie będzie możliwosci duplikowania identyfikatorów. Klient przy uruchomieniu tworzy dwa procesy, jeden jest odpowiedzialny tylko za wysyłkę zapytań do właściwej kolejki ( jako msgsnd mtype ma ustawioną na stałe liczbę 100 - w ten sposób serwer wie że to zapytanie jest do niego ), drugi proces odbiera wyniki z kolejki i to tylko takie które mają mtype= identyfikator + 1000. Zmienna id ( identyfikator ) jest przesyłana w strukturze przez pierwszy proces, stąd serwer wie jaki mtype przypisać przy wiadomości wychodzącej ( wyniku ). Kolejny uruchomiony klient znów pobiera z pierwszej kolejki indywidualny id, wysyła zapytanie ( msgsnd mtype = 100 ) do kolejki, serwer odbiera dane do obliczeń oraz id klienta przysyłającego ( zawarte w strukturze ), następnie oblicza wynik i przesyła z powrotem do kolejki ( jako mtype = 1000 + id ), drugi proces klienta odbiera tylko takie wiadomości których mtype = 1000 + id, czyli właśnie wyniki wysłane przez serwer do kolejki. Pierwszy proces klienta znów wysyła zapytanie do kolejki dla serwera itd. ( pętla nieskończona while ). Program do skompilowania pod którymś z systemów Unix komendą ( wcześniej skopiuj kod i zapisz go w pliku pod nazwą nazwa_programu.cpp ) :

g++ nazwa_programu.cpp -o nazwa_programu.out

Kompilowany i testowany pod Suse Linux 10.3.

Do pobrania : serwer_klient.zip

Autor : www.neTsl.net

Rozmiar pliku : 13.5 KB

Zmieniony: sobota, 06 września 2008 15:17
 
<< Początek < Poprzednia 1 2 3 4 5 6 7 8 9 Następna > Ostatnie >>

Strona 1 z 9
RocketTheme Joomla Templates
Joomla Polska
©2007-2009 www.neTsl.net  26.09.2008  LP:9602 :: 38.103.63.61  38.103.63.61