'siirretään osia ohjelmasta assemblerille 200997 ! 'muokataan lopulliselle kortille 080298 alkaen 'näkkileipäversion kokeilu '-------------- 'Protokortilla: 'Näyttorutiini toimii 090398 'Näppäimien luku toimii 090398 '-------------- 'MERKKAA huutomerkkejä osiin, joihin pitää tehdä muutoksia !!!!!! 'sanoja: hib=high nible, lob=low nible ' HC137= 74HC137, HC573=74HC573 ' D137=HC137:n data ' D4511=4511:N data ' D573=HC573:n data ' L137=HC137:n GL, eli Latch ' L573=HC573:n Latch ' L4511=4511:n Latch ' HC137= 74HC137:n lähto 0 '----------------------------------------------------------------------- 'MUUTTUJIEN MAARITTELYT 'Erikoisrekisterit symbol portA=$05 symbol trisA=$85 symbol portB=$06 'D137 <012>, D4511 <4567>, näppäimet <34567> symbol trisB=$86 symbol option=$81 symbol status=$03 symbol sda=4 'PLL:n data-linja symbol clk=3 'PLL:n clk-linja, pulssi ylos symbol stb=2 'PLL:n stb-linja, pulssi ylos 'Muuttujat 'temp-muuttuja oletetaan aina tyhjäksi aliohjelmaan tultaessa symbol temp1=b0 '(W0) symbol temp2=b1 '-"- symbol temp3=b2 '(W1) symbol temp4=b3 '-"- symbol count1=b4 '(W2) Laskuri, näppäimiston painon pituus symbol count2=b5 '-"- Laskuri,ei käytossä symbol sc=b6 '(W3) for-next -laskuri pääohjelmassa symbol RXjl=b7 '-"- Vast.ot.taajuuden jakoluku symbol TXjl=b8 '(W4) Lähetystaajuuden jakoluku symbol napbuf1=b9 '-"-, ed kierroksen painettu näppäin symbol napbuf2=b10 '(w5), tämän kierroksen painettu näppäin symbol tmp=b11 '-"- ei käytossä symbol registry=b12 ' sekalaisia bittimuuttujia / vakioita 'bit0=1: scanA aktivoitu -All 'bit1=1: scanB aktivoitu -Memory 'bit2=0/1: Slow stopping scan / fast scan 'bit3=0/1: RX/TX asetukset tehty RF-kortille. 'bit4=0/1: Simplex/dublex 'bit5=0/1: normal/rev. Dublex 'bit6=1: ei käytossä 'bit7=1: ei käytossä 'Näyttobufferi 5 paikkaa '01234', paikka 4 kolmelle merkkiLED:lle 'merkkiledejä ohjataan antamalla muistipaikkaan nb4 jokin luku symbol nb0=b17 'LSB 1 symbol nb1=b18 'TSB 10 symbol nb2=b19 'NSB 100 symbol nb3=b20 'MSB 1000 symbol nb4=b21 'indikaattori LEDit 'b22 ja isommat Basic:n käytossä 16C84:ssä '--------------------------------------------------------------------------- 'INITIALISOINTI 'Data-EEPROM:lle tallettuvat tiivistetyt PLL:n RX-jakoluvut 'b7 -merkkki 'b654 -Np 'b3210-A 'Simplex, f(RX) = f(TX) <=> JL(RX)=JL(TX) EEPROM 1,(32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47) 'Ripeaterin lähetyhtaajuus = Mocoman kuuntelutaajuus 'bit<7>=1 ->Tx saadaan: JL(TX) = JL(RX)-24 EEPROM 17,(176,177,178,179,180,181,182,183) 'Parametrimuisti paikasta 55 alkaen. '55-kantajakoluvun (361) 7 ylintä bittiä. Ylimmäksi lisätään '0' '56-ripiipin puolijakso '57-käynnistyksessä käytettävä kanava 1..24/pak1/pak2/pak3 + ' käynnistyksessa käytettävä moodi: sc 1/2/3/4/kuuntelu EEPROM 55,(47,50) 'portB'n ylosvetovastukset käyttoon. Välttämäton, koska ei käytetä 'ulkoisia ylosvetoja. poke option,$7f 'portti A voi olla koko ajan samassa tilassa poke trisA,%11110100 'portA bit0124 out muut in ' ||||`-137 latch, out, 1-latched ' |||`-573 latch, out, 0-latched ' ||`-573 unlock, in ' |`-Ripiip out, vaatii ylosvedon ' `-SQ, in 'portB on oletusarvoisesti OUT. Vain näp.palvelun aikana hetken IN poke trisB,0 'portB bit01234567 out poke portB,0 poke portA,%11111111 'L573 auki poke portA,%11111101 'L573 kiinni 'HC573 pitää initialisoida Rx-tilaan ! '---------------------------------------------------------------------------- 'Käynnistysasetukset nb0=0:nb1=1:nb2=2:nb3=3:nb4=4 '1000 100 10 1 leds 'Numerot ovat näytollä sikin sokin, joten ne joudutaan järjestämään 'käsin oikeaan järjestykseen. Se tapahtuu tässä branch-lauseella. '---------------------------------------------------------------------------- '---------------------------------------------------------------------------- alku: for sc=0 to 4 'haetaan tulostettava merkki näyttobufferista 'branchia on turha korvata ASM:lla branch sc,(Dnp0,Dnp1,Dnp2,Dnp3,Dnp4) 'temp1 vie tulostettavan merkin 'temp2 vie koodatun SC:n Dnp0: temp1=nb0:temp2=4:goto yli2 Dnp1: temp1=nb1:temp2=2:goto yli2 Dnp2: temp1=nb2:temp2=6:goto yli2 Dnp3: temp1=nb3:temp2=1:goto yli2 Dnp4: temp1=nb4:temp2=5 yli2: '---------------------------------------------------------------------------- call toleds 'NAPBUF2:ssa uudelleen järjestetty merkkipaikka call key2bcd 'temp1 :ssä tulostettava data 'kutsutaan ASM-alirutiinia nc.inc:stä 'palauttaa painetun näppäimen (0..23) napbuf2:ssä 'näytolle tulostus testattu toimivaksi 120398 '---------------------------------------------------------------------------- next sc 'Tähän päättyy scannauskierros. SC=4 jälkeen katsotaan, 'mitä on tarttunut haaviin eli mitä näppäintä on painettu. 'Ainoastaan ketjun viimeinen näppäin kelpaa, muut on hylätty jo 'scannauksessa. 'Koska haavin seulonta tehdään scannauksen jälkeen, merkkien 'valovoima ei vaihtele ! 'näppäimistopalvelu alkaa 'napbuf1 -vanha arvo, napbuf2 -uusi arvo saatu toleds-aliohjelmalta if napbuf1=napbuf2 then eitark 'pois jos nappaimissä ei muutosta if count1 < 20 then eitark 'debounce count1=0 'kauanko sama näppäin painettuna 'if napbuf1<>TX goto naptaul 'jos TX on nyt vapautettu tai painettu jotain muutakin näppäintä, 'laite pitää pistää RX:lle !!!!! 'Lisää tähän TX->RX -osa. naptaul: 'Numeronäppäinten toimintaa yksinkertaistettu rajusti temp1=0 branch napbuf2,(NPL,k1,sc3,sc1,sc2,k5,k6,sc6,sc4,sc5,k10,k11,k12,k13,k14,k15,k16,k17,k18,sc0,k20,k21,sc9,sc7,sc8,k25) k1: nb3=0:nb2=0:goto eitark 'F k5: nb3=0:nb2=5:goto eitark k6: nb3=0:nb2=6:goto eitark 'B k11: nb3=1:nb2=1:goto eitark k12: nb3=1:nb2=2:goto eitark k13: nb3=1:nb2=3:goto eitark k14: nb3=1:nb2=4:goto eitark k15: nb3=1:nb2=5:goto eitark k16: nb3=1:nb2=6:goto eitark 'D k17: nb3=1:nb2=7:goto eitark '# k18: nb3=1:nb2=8:goto eitark '* k20: nb3=2:nb2=0:goto eitark k21: nb3=2:nb2=1:goto eitark 'C k25: nb3=2:nb2=5:goto eitark '---------------------------------------- k10: 'RIPIIP 'TEST: CALL TX; Aseta lähetykselle 'asm sytyttää merkkiledit 1 ja 3: läh ja ripiip call ripiip 'kutsutaan ASM-alirutiinia nc.inc:stä goto NPL '---------------------------------------- ' k17: 'TEST: näkkileivällä tämä leikkii olevansa '#' 'haetaan näyttoä vastaava pointteri 'ei pelleillä vielä muistien kanssa. '!! Näytolle pitää tulostaa asetettu taajuus valinnan jälkeen 'neljällä numerolla ! (145775=>4577) 'Tämä siksi, että käyttäjän pitää tietää, mitä kanavaa käyttää call freq2ind 'pointteri (tiiv)jakolukuun JL(RX) on nyt muuttujassa temp1 'Luetaan jl(RX) EEPROM:lta read temp1,RXjl TXjl=RXjl 'suora if bit7=0 then eirip TXjl=RXjl-24 'Ripiitterikanava, vakioerotus 24x25kc=600kc eirip: '-temp<654> Np, Tähän lisätään kl=360 (%0101101000) jonka ylimmät '7 bittiä on luettu EEPROM(55):sta (ks doc300997/2,korjaus 011097) 'ylin bitti täytettä '-temp<3210> A, '-pumpataan RXjl PLL:lle '-jäädään kuulolle '---------------------------------------- 'datan pumppaus RF-liittimelle. Linjat sda,clk,stb 'ensin kl, sitten RXjl<6543210>, loppuun täyte %000 'Passivoidaan näppäimiston scannaus, jotta mahd näppäimiston 'painallukset eivät haittaisi tiedon siirtoa RF-portille poke portB,7 'scan-linja7 käyttämäton 'L137 lukkoon, L573 auki poke portA,%11111100 '573 Latched, 137 open poke portA,%11111111 '573 Open, 137 Latched low stb 'PLL Strobe-linjan alustus 'pumpataan data RF-kortille read 55,temp1 'haetaan EEPROMilta 'Kuin sattumaa: call pumppaa 'sekä kl että jl ylin bitti temp1=RXjl 'on turha ! call pumppaa call pumppaa30 'pumpataan kolme nollaa. high stb 'strobe-pulssi PLL:lle low stb 'suljetaan 573-portti RF-kortille poke portA,%11111101 '573 Latched, 137 Latched goto NPL '---------------------------------------- 'lisää näppäimiä tähän väliin ! '---------------------------------------- sc9: temp1=temp1+1 sc8: temp1=temp1+1 sc7: temp1=temp1+1 sc6: temp1=temp1+1 sc5: temp1=temp1+1 sc4: temp1=temp1+1 sc3: temp1=temp1+1 sc2: temp1=temp1+1 sc1: temp1=temp1+1 sc0: 'vieritetään näyttoä vasemmalle ja pistetään painettu numero 'näyton oikeaan laitaan. 'taajuus osoitetaan kahdella numerolla nb1 ja nb0 ! 'nb3 ja nb2 varataan koodeille ja poikkeaville taajuuksille nb1=nb0:nb0=temp1 eitark: count1=count1+1 'debouncelaskuri NPL: napbuf1=napbuf2 'uusi näppäimien tila korvaa vanhan '-------------------------------------------------------------------------- 'tehdään jotain muuta välillä 'Tarkistetaan scannaukset, ' muista:registry<2> =slow/fast scan. Eli jos slow ja sq aukeaa, ' katkaistaan scannaus. Fast:lla kuunnellaan 5 sek ja jatketaan. 'temp1=registry 'if bit0=0 then eiScanA 'scannaa seuraava kanava eiScanA: 'if bit1=0 then eiScanB 'scannaa seuraava muistikanava eiScanB: loppu: '!! TESTI-> heitetään RF-porttiin nb0 sekä hib että lob-osaan '!! Tämän saa poistaa tulostuksen jälkeen poke portB,7 'scan-linja7 käyttämäton poke portA,%11111100 '137 open poke portA,%11111101 '137 Latched poke portA,%11111111 '573 open temp1=nb4*16+nb4 poke portB,temp1 poke portA,%11111101 '573 Latched '<-TESTI !! goto alku '--------------------------------------------------- 'konekieliset aliohjelmakutsut kerätään tänne kasan loppuun. Alussa ne 'pitäisi muistaa kiertää asm include "nc.inc" endasm '---------------------------------------------------