ASINHRONO PODATKOVNO SPORAZUMEVANJE

Asinhrona komunikacija se ustvari na vodu z zaporednim oddajanjem simbolov, ki so grupirani v znake. Vsak znak je komunikacijska celota. Vsebuje start simbol, ki pomeni proženje sprejemnega postopka v sprejemniku. Pojavljanje startnega simbola je časovno povsem naključno. Od tega trenutka naprej, pa je potek podvržen notranjemu taktu oddajnika. Na ta takt mora biti uglašen tudi sprejemnik. To je razlog poimenovanju tega načina »asinhroni prenos«. Za startom sledi dogovorjeno število podatkovnih simbolov. To število je lahko 5 pri telegrafiji, 7 ali 8 pri računalniškemu komuniciranju, lahko pa je tudi drugačno število, ki ga narekujejo potrebe. Podatkovnim simbolom sledi stop simbol, včasih sta tudi dva ali pa eden in pol. Stop simbol označuje konec komunikacije. Ima pa tudi nalogo kompenzirati odstopanja hitrosti med oddajnikom in sprejemnikom. Prenosni vod ima v stanju mirovanja prisoten potencial, ki ga bomo logično označevali z "1". Oznaka pričetka-starta je brezpotencialno stanje, označeno z "0". Podatkovni simboli so lahko "1" ali "0". Zaustavitev, konec znaka oziroma stop simbol je označen s prisotnostjo potenciala, je "1".

Kako izrišemo graf signala na vodu? Derive omogoča skiciranje točke, če jo podamo, kot urejen par. T = [abscisa, ordinata]. Abscisa bo v našem primeru neodvisna spremenljivka. To je čas t, ordinata pa napetost na vodu in bo zavzemala vrednosti 0 ali 1. Ako nanizamo več točk, jih moremo skicirati povezano. To možnost bomo izkoristili za skiciranje. Tvorili bomo niz-vektor z zaporedjem točk. Recimo s temle nizom [[0,1],[1,1],[2,0],[2,1]] skiciramo v času spreminjajočo vrednost. Glej skico.

      ⎡ 0  1 ⎤
      ⎢      ⎥
      ⎢ 1  1 ⎥
      ⎢      ⎥
#1:   ⎢ 2  0 ⎥
      ⎢      ⎥
      ⎢ 2  1 ⎥
      ⎢      ⎥
      ⎣ 4  1 ⎦

Vektor imenovan vod bomo inicializirali z začetnim stanjem s = 1 ob začetnem trenutku t = 0

#2:   t ≔ 0

#3:   s ≔ 1

#4:   vod ≔ [[t, s]]

Vzpostavljen je niz z enim elementom, točko, ki kaže stanje (napetost) voda v začetnem trenutku. V vod bomo dodajali točke ustreznih položajev [čas, napetost] in jih kasneje povezano skicirali.

Če spremenljivko vod izračunamo, dobimo vektor z enim elementom, točko, ki kaže začetni položaj.

#5:   vod

#6:                                [[0, 1]]

Vsak simbol, sestavni element znaka, bo skiciran kot vodoravnica, trajajoča eno časovno enoto in bo potekala v višini 0 ali 1. Mirovanje  ima s = 1, start ima s = 0, podatki imajo lahko eno ali drugo vrednost in stop ima s = 1. Za risanje simbola zgradimo funkcijo sim(x), ki v trenutnem času vzpostavi stanje  x in ga kot točko vrine v vektor vod. Za to točko še enkrat vrine enako stanje s povečano vrednostjo časa.

najprej funkcijo deklariramo sim(x):=
Ker jo sestavlja več stavkov, jih razvrstimo v strukturo prog. Prvi stavek vrine v vektor vod točko [t,x]. Čas t je v teku programa že prisoten, x pa je podan kot argument v funkciji. Novonastalo vrednost se prenese v lokacijo vod. 
V naslednjem koraku povečamo čas za enoto.
V vod vrinemo še eno točko, ki je zaradi povečanega časa premaknjena. 

      sim(x) ≔                     
        Prog                       
#7:       vod ≔ INSERT([t, x], vod)
          t ≔ t + 1                
          vod ≔ INSERT([t, x], vod)

#8:   sim(x)

                                      ⎡ 1  x ⎤
                                      ⎢      ⎥
#9:                             vod ≔ ⎢ 0  x ⎥
                                      ⎢      ⎥
                                      ⎣ 0  1 ⎦

Izračun funkcije, ki ima vrednost argumenta x, pokaže začetno vrednost, ki smo jo predhodno postavili, na najnižjem mestu torej v tretji vrstici 0, 1. V drugi vrstici je vpisana točka s časom 0 in vrednostjo argumenta, ki je x. Nato je dodana še ena točka z isto vrednostjo x, le da je v času 1.

Ustvarimo funkcijo zagon, ki bo pomenila začetno nastavitev voda.

      zagon(s) ≔        
        Prog            
#10:      t ≔ 0         
          vod ≔ [[t, s]]

tej funkciji bomo prilepili še tri simbola. Velikost teh treh simbolov bo določil program z naključnosnto funkcijo random(2). Argument 2 pomeni da funkcija vrne pozitivno celo število, ki je manjše od 2. Torej naključno vrača le vrednost 0 ali 1.

#11:  poskus1 ≔ PROG(zagon(1), sim(RANDOM(2)), sim(RANDOM(2)), 

        sim(RANDOM(2)))

                                           ⎡ 3  1 ⎤
                                           ⎢      ⎥
                                           ⎢ 2  1 ⎥
                                           ⎢      ⎥
                                           ⎢ 2  0 ⎥
                                           ⎢      ⎥
#12:                       poskus1 ≔ vod ≔ ⎢ 1  0 ⎥
                                           ⎢      ⎥
                                           ⎢ 1  1 ⎥
                                           ⎢      ⎥
                                           ⎢ 0  1 ⎥
                                           ⎢      ⎥
                                           ⎣ 0  1 ⎦

Iz grafa je razvidno, da je program skiciral zaporedje simbolov 1, 0, 1.

V znaku-karakterju je lahko različno število simbolov. Tvorili bomo funkcijo znak(d) z argumentom d, ki bo to število definiral. 
V funkciji bo najprej zagon,nato bomo dodali mirovni simbola, za njem bomo naključno generirali d podatkovnih simbolov in na koncu dodali dva stop simbola.

Da bo zapis preglednejši, bomo za stanja voda uporabili označbe mir = 1, start = 0, data = random(2) in stop = 1.

#13:  mir ≔ 1

#14:  start ≔ 0

#15:  data ≔ RANDOM(2)

#16:  stop ≔ 1

Znotraj programa je vnos podatkovnih simbolov oblikovan s funkcijo info(). V njej z if stavkom nadzorujemo štetje simbolov. Ko doštejemo zadnji simbol, preidemo v vejo za generiranje stop simbolov in se iz funkcije znak() vračamo z napolnjenim vektorjem vod. 

      znak(d) ≔                  
        Prog                     
          zagon(s)               
          sim(mir)               
          sim(start)             
          info(n) ≔              
            Prog                 
              n ≔ 1              
#17:          sim(start)         
              Loop               
                If d ≠ n         
                   sim(RANDOM(2))
                   Prog          
                     sim(stop)   
                     sim(mir)    
                     RETURN vod  
                n ≔ n + 1        

#18:  znak(7)

Oblikovali smo znak s skupno dolžino 10 simbolov (start + 7 X podatek + 1 X stop + mir). Pred verigo teh desetih simbolov je postavljen še mirovno stanje voda. V času med ena in dve se nahaja startni simbol in med časom devet in deset se nahaja stop. 

#19:  znak(35)

Izdelajte program ASINH, ki bo izrisal zaporedno oddajanje treh znakov. Izrišite sekvenco teh treh znakov. Poiščite v preglednici ASCII (stran ~41 v PKS beležkah) katere znake je program izpisal