PIC-opetusohjelma - rekistereistä keskeytyksiin

PIC-opetusohjelma - rekistereistä keskeytyksiin

Ennen kuin pääset PIC-ohjelmoinnin yksityiskohtiin, on ensin tärkeää oppia muutama hyvä ohjelmointimenetelmä.

Rekisterien ymmärtäminen

Aluksi oletetaan, että kirjoitat (puolipisteen) ohjelman mihin tahansa kohtaan, kääntäjä jättää kaikki tämän puolipisteen jälkeen tulevat sivut huomioimatta, kunnes tietysti vaunu palaa takaisin paikalleen.



Yllä olevan ominaisuuden avulla voimme lisätä kommentteja tai huomautuksia siten, että niistä ei tule osa ohjelmaa, mutta se auttaa meitä tunnistamaan ohjelman viereisten kommenttien avulla. Kommenttien kirjoittaminen on suositeltavaa käytäntöä minkä tahansa IC: n ohjelmoinnissa.



Seuraava tärkeä asia kurssilla on nimien antaminen eri vakioille (opit ne myöhemmin yksityiskohtaisesti). Tämä tekee myös yksinkertaisemman ymmärtää, mihin kirjoitetaan tai mitkä liittyvät arvot, sen sijaan, että sekoitettaisiin mukana oleviin numeroihin.

Edellä mainittu on tehtävä todellisten nimien muodossa välitöntä tunnistamista varten, esimerkiksi COUNT, on tärkeää huomata, että tässä käytetään kaikkia isoja kirjaimia sen erottamiseksi ja osoittamaan myös, että se on vakioarvo.




Kuten näemme, yllä oleva tehdään puolipisteistä tehdyn laatikon muodossa, mikä tekee siitä vain puhtaamman. Yritä lisäksi dokumentoida ohjelma myös paperilla, tämä käytäntö auttaa ymmärtämään asioita askel askeleelta.

2. Rekisterit.

PIC-rekisteri on alue, joka hyväksyy kirjalliset tiedot ja mahdollistaa lukemisen siitä. Voit verrata sitä paperiarkkiin, jossa voit visualisoida sisältöä ja lisätä niitä kirjoittamalla sen päälle.

Alla oleva kuva kuvaa tyypillistä rekisteritiedostokarttaa upotettuna PIC16F84: een. Formaatti ei ole tosiasiallisesti asetettu PIC: n sisällä, se on yksinkertaisesti osoitettava, kuinka bitit voidaan järjestää sirun sisään, ja ymmärtää muutama mukana olevista komennoista.



Voit nähdä, että se on periaatteessa jaettu pankkiin 0 ja pankkiin 1. Pankki 1 on vastuussa PIC: n varsinaisen toiminnan valvonnasta, esimerkiksi se soittaa PIC: lle, mitkä portissa A olevat bitit on määritetty tuloiksi ja mitkä lähtöiksi.

Pankki 2 on vain tietojen manipuloimiseksi.

Ymmärretään tämä seuraavan esimerkin avulla:

Oletetaan, että haluamme määrittää yhden bitin PortA-korkealla. Tätä varten meidän on ensin mentävä pankkiin 1 asettamaan määritetty bitti tai nasta porttiin A ulostulona. Tämän jälkeen palaamme pankkiin 0 ja toimitamme logiikan 1 (bitti 1) kyseiseen tapiin.

Yleisimmät rekisterit, joita haluamme käyttää pankissa 1, ovat STATUS, TRISA ja TRISB.

TILA auttaa meitä palaamaan pankkiin 0, TRISA antaa meille mahdollisuuden valita, mitkä portin A nastat ovat lähtöjä ja mitkä voivat olla sisääntuloja, kun taas TRISB helpottaa valitsemista lähdön ja tulonastan välillä portissa B. BANK 0: n SELECT-rekisteri sallii käyttäjän kääntää pankkiin 1.

Tiivistetään koko käsite seuraavalla kuvauksella:

TILA:

Siirtymiseksi pankista 0 pankkiin 1 käskemme STATUS-rekisteriä. Tämä toteutetaan asettamalla STATUS-rekisterin bitti # 5 arvoon 1. Palataksemme takaisin pankkiin 0, osoitamme STATUS-rekisterin bitin 5 arvoon 0. STATUS-rekisteri on sijoitettu osoitteeseen 03h, tässä h merkitsee numeroa voi olla heksadesimaali.

TRISA ja TRISB:

Ne sijaitsevat vastaavasti osoitteissa 85h ja 86h. Jos haluat ohjelmoida nastan lähdöksi tai tuloksi, toimitamme vain nollan tai yhden rekisterin tietylle bitille. Nyt tämä voidaan tehdä kahdella tavalla, binäärisen tai Hexin kautta. Jos parametriä ei voida muuntaa, hän voi käyttää tieteellistä laskinta arvojen toteuttamiseksi.

Nyt meillä on 5 nastaa satamassa A, mikä vastaa 5 nastaa. Jos aiotaan korjata yksi nastoista tuloina, toimitamme “1” tietylle bitille.

Jos haluaisimme määrittää yhden nastoista lähtöiksi, asetamme tietyn nastan arvoksi '0'. Bitit tukevat tarkasti bittejä, tai tarkemmin bitti 0 on RA0, bitti 1 olisi RA1, bitti 2 = RA2 ja niin edelleen. Ymmärretään se tällä tavalla:

Oletetaan, että haluat korjata RA0-, RA3- ja RA4-lähdöt, kun taas RA1 / RA2 i / ps: na, teet tämän lähettämällä 00110 (06h). Tarkista, että bitti 0 on kohti oikeaa, kuten tässä on esitetty:

Portti Tappi RA4 RA3 RA2 RA1 RA0

Bittinumero 4 3 2 1 0

Binaarinen 0 0 1 1 0

Sama koskee TRISB: ää.

PORTA ja PORTB

Yhden ulostulonastan poistamiseksi korkealta tarjoamme vain “1” - to-bitin PORTA- tai PORTB-rekisterissämme. Samaa menettelytapaa voidaan noudattaa myös TRISA- ja TRISB-rekistereissä. Ennen kuin aloitamme ensimmäisen esimerkkikoodauksen, ymmärretään vain useampien rekistereiden joukko, nimittäin: w ja f.

W ja F

W-rekisteri on tavallinen rekisteri, jonka avulla voit määrittää minkä tahansa valitsemasi arvon. Heti kun määrität suuruuden W: lle, voit jatkaa lisäämällä tämän toiseen arvoon tai yksinkertaisesti siirtämällä sitä. Kun toinen arvo on määritetty, yksityiskohdat yksinkertaisesti korvataan W: llä.

F-rekisteri välittää kirjallisen asiansa rekisteriin. Vaadimme, että tämä F-rekisteri antaa arvon rekisterille, voi olla STATUS- tai TRISA-rekisterien yli, koska nämä eivät salli arvojen asettamista suoraan niiden päälle. Esimerkkiohjelma

Tarkastellaan seuraavaa esimerkkikoodia, joka näyttää meille, kuinka yllä oleva ohje toteutetaan, ja todistaisimme myös muutamia kurssin ohjeita.

Aloitetaan korjaamalla portti A kuten edellä on keskusteltu.

Tätä varten meidän on siirryttävä pankista 0 pankkiin 1, tämä tehdään asettamalla STATUS-rekisteri, joka sijaitsee osoitteessa 03h, bitit 5-1.

BSF 03h, 5

BSF tarkoittaa bittisarjaa F. Käytämme kahta numeroa tämän käskyn jälkeen - 03h, joka on STATUS-rekisteriosoite, ja numeroa 5, joka vastaa bittinumeroa.

Joten mitä sanomme on 'Aseta bitti 5 osoitteessa 03h arvoon 1'.

Olemme nyt pankissa 1.

MOVLW 00110b

Laitamme binääriarvon 00110 (kirjain b tarkoittaa, että numero on binäärinen) yleiskäyttöön tarkoitettuun rekisteriimme W.Olen tietysti voinut tehdä tämän heksadesimaalisena, jolloin käskymme olisi:

MOVLW 06h

Kumpikin toimii. MOVLW tarkoittaa ”Move Literal Value In W”, mikä englanniksi tarkoittaa laittaa seuraava arvo suoraan W-rekisteriin.

Nyt meidän on lisättävä tämä arvo TRISA-rekisteriimme portin määrittämiseksi:

MOVWF 85 tuntia

Tämä ohje osoittaa 'Siirrä W: n sisältö seuraavaan rekisteriosoitteeseen', tässä tapauksessa osoite viittaa TRISAan.

TRISA-rekisterissämme on tässä vaiheessa kuva 00110 tai graafisesti esitetty:

Portti Tappi RA4 RA3 RA2 RA1 RA0

Binaarinen 0 0 1 1 0

Tulo / lähtö O O I I O

Joten nyt meillä on Port A -nastamme, meidän on palattava pankkiin 0 säätääksemme yhtä tietoa.

BCF 03h, 5

Tämä ohje suorittaa BSF: n päinvastaisen. Se tarkoittaa 'Bit Clear F'. Vastaavat numeroparit ovat rekisterin osoite, tässä STATUS-rekisteri, samoin kuin bittiluku, tässä tapauksessa bitti viisi. Se, mitä olemme tällä hetkellä valmiit, on määritelty bittimme viisi

STATUS-rekisteröinti arvoon 0

Olemme tässä vaiheessa palanneet pankkiin 0.
Seuraava on koodi yhdessä lohkossa:

BSF 03h, 5 Siirry pankkiin 1
MOVLW 06h Laita 00110 W: hen
MOVWF 85h Siirrä 00110 TRISA: lle
BCF 03h, 5 Palaa takaisin pankkiin 0

Viimeisen ohjeen aikana vahvistimme sinulle tavan perustaa PIC: n IO-portin nastat mahdollisesti syötteeksi tai ulostuloksi.

Tämän kurssin kautta haluan auttaa sinua lähettämään tietoja portteihin.

Tietojen lähettäminen satamiin

Seuraavassa opetusohjelmassa aiomme täydentää vilkkumalla LED-merkkivaloa päälle ja pois, joka koostuu täydellisestä ohjelman yksityiskohdasta ja suoraviivaisesta piirikaaviosta, jotta voit nähdä PIC: n suorittavan tarkalleen sen, mitä odotamme sen olevan.

Älä yritä koota ja ohjelmoida PIC-koodiasi alla olevien tulosten kanssa, koska ne ovat vain havainnollistettavia. Aluksi muodostetaan portti Bitti 2 lähtöön:

Tämä voidaan tunnistaa edellisestä opetuksesta. Ainoa ero voisi olla: Olemme kiinnittäneet kaikki A-nastojen bitit ulostulona toimittamalla 0t kolmitilarekisteriin. Joten mitä hänen on nyt tehtävä, on kytkeä LED päälle.

Saavutamme tämän aikatauluttamalla yhden nastoista (sen, johon LED on kytketty) korkeaksi. Toisin sanoen käytämme nastaan ​​1-merkkiä. Näin se suoritetaan täsmälleen (noudata kommentteja jokaisen rivin selvennykseksi):

Siksi mitä olemme nyt saavuttaneet, on kytkeä LED päälle ja pois päältä kerran. Haluamme, että LED sammuu sen jälkeen jatkuvasti.

Saavutamme tämän hankkimalla ohjelman palata alkuun. Saavutamme tämän luomalla aluksi tunnisteen ohjelmamme alussa ja ilmoittamalla sitten ohjelmalle, että se voi palata sinne. Määritämme tunnisteen melko suoraviivaisesti.

Näppäilemme termin, sano START, seuraavaksi kirjoita koodi:

Kuten on osoitettu, mainitsimme alun perin ilmaisun ”Start” heti ohjelman alussa.

Seuraavaksi, aivan ohjelman lopussa, mainitsimme selvästi 'goto Start'. Goto-käsky suorittaa juuri sen, mitä se julistaa.

Tämä ohjelma kytkee LEDin jatkuvasti päälle ja pois päältä aina, kun kytket virran virtapiiriin. Meidän on ehkä tarkistettava ohjelmamme uudelleen:

Olemme varmasti jättäneet kommentit pois, mutta voimme silti noudattaa ohjeita ja numeroita.

Tämä voi olla hieman hämmentävää myöhemmin, jos yrität vianetsintäohjelmaa ja kirjoittaessasi koodia olet muistanut kaikki osoitteet.

Vaikka kommentit voidaan sijoittaa paikallaan, siitä saattaa tulla hieman sotkuinen. Tämä edellyttää numeroiden nimeämistä, ja se voidaan toteuttaa lisäohjeella: 'equ' Equ-käsky viittaa siihen, että jotkut jutut saattavat olla yhtä suuria kuin toiset.

Se ei välttämättä ole käsky PIC: lle, pikemminkin kokoonpanijalle. Tämä ohje helpottaa nimen osoittamista rekisteriosoitteen sijaintiin tai vakion ohjelmointitermiin.

Perustamme muutaman vakion ohjelmallemme ja todistamme myös, kuinka suoraviivaista se lukee ohjelmaa.

Olemme nyt korjanneet vakioarvot, joita voimme jatkaa asettamalla ne ohjelmallemme. Vakioarvot on määriteltävä ennen niiden käyttöä.

Siksi varmista, että sijoitat ne aina ohjelman alkuun. Kirjoitamme ohjelman uudelleen ilman kommentteja, jotta voimme verrata aikaisempaa merkintää uusimpaan.

Saatat huomata, että vakiot mahdollistavat hieman helpomman ymmärryksen ohjelmasta, mutta olemme edelleen ilman kommentteja, huolimatta siitä, ettemme ole vielä valmiita.

Vilkkuvassa LED-ohjelmassa voi olla pieni haittapuoli.
Jokainen käsky tarvitsee yhden kellosarjan loppuun. Jos käytämme 4 MHz: n kristallia, jokainen käsky vaatii 1 / 4MHz: n tai 1uS: n lopettamista.

Koska olemme käyttäneet vain viittä ohjetta, LED aktivoituu ja sammuu sitten 5uS: ssä. Tämä voi olla aivan liian nopeaa, jotta ihmiset huomaavat, lisäksi näyttää siltä, ​​että LED on täysin päällä.

Sen sijaan meidän tulisi tuottaa esto LEDin kytkemisen päälle ja sammuttamisen välillä. Estämisen teoria on, että laskemme aikaisemmasta määrästä, joten kun se saavuttaa nollan, lopetamme laskemisen.

Nolla-arvo tarkoittaa viiveen päättymistä, ja jatkamme prosessiamme koko ohjelman ajan. Siksi ensiksi meidän on määritettävä vakio, jota käytetään laskurina.

Sanotaan tämä vakio COUNT. Sen jälkeen meidän on määritettävä, kuinka merkittävä luku alkaa laskea. Varmasti suurin luku, jonka voisimme sisällyttää, on 255 tai FFh heksadesimaalina. Kuten puhuin edellisessä opetusohjelmassa, equ-käsky osoittaa lausekkeen rekisteritilanteeseen.

Tämä tarkoittaa, että riippumatta siitä, minkä määrän jaamme COUNT: n, se vastaisi rekisterin kohteita. Jos yritämme määrittää arvon FFh, saamme virheen, kun saamme koota ohjelman.

Syynä on sijainti FFh, joten emme voi käyttää sitä. Siksi, kuinka meidän on nimettävä aito numero? Varmasti se vaatii vähän sivuttaista pohdintaa.

Jos kenties määrittelemme COUNT esimerkiksi osoitteeksi 08h, se osoittaisi perustavoitteiden rekisterin määränpään. Oletusarvoisesti koskemattomat alueet ovat FFh. Näin ollen, jos COUNT johtaa aikaan 08h, kohtaat FFh: n arvon, kun käynnistämme ensin. Siitä huolimatta minä sinä, kuinka voimme korjata COUNT toiseen numeroon? Kaikki mitä käytämme, on 'siirtää' arvostus ensin tähän määränpäähän.

Oletetaan esimerkiksi, että halusimme, että COUNT: lla olisi arvo 85h, emme voi mainita COUNT: aa 85h, koska se on portin A kolmen valtion ulkopuolisen rekisterin asema. Juuri se, mitä saavutamme, on seuraava: movlw 85h 85h: n arvo W-rekisterissä movwf 08h

Siirrä se nyt 08h-rekisteriimme. Seuraavaksi, jos ilmaisemme COUNT ekv. 08h, COUNT vastaisi arvoa 85h. Herkkä, eikö olekin! Siksi aluksi määritämme vakion: COUNT ekv. 08h Seuraavaksi meidän on vähennettävä tätä lukua yhdellä, kunnes siitä tulee nolla.

Yksinkertaisesti sattuu, että on olemassa yksi käsky, joka on suunniteltu saavuttamaan tämä meille hyödyntämällä 'goto' ja tag.

Käsky, jota aiomme soveltaa, on: DECFSZ COUNT, 1 Tässä ohjeessa sanotaan 'Pienennä rekisteriä (tässä se on COUNT) pilkua jäljittävällä numerolla. Jos saavutamme nollan, hyppää kaksi paikkaa eteenpäin. ”Löydetään se ensin toiminnassa, ennen kuin asetamme sen kurssillemme.

Se, mitä olemme suorittaneet, on alun perin muodostaa vakio COUNT - 255. Seuraavat segmentit sijoittavat tunnisteen, nimeltään LABEL, lähelle decfsz-käskyämme.

Decfsz COUNT, 1 vähentää COUNT: n arvoa yhdellä ja säilyttää lopputuloksen suoraan COUNT: ksi. Lisäksi se tarkistaa, onko COUNT: lla arvo 0.

Jos näin ei ole, se laukaisee ohjelman siirtymään seuraavalle riville. Nyt meillä on 'goto' -julistus, joka vie meidät takaisin decfsz-ohjeisiin.

Jos COUNT-arvon arvo on sama, decfsz-käsky johtaa siihen, että ohjelmamme hyppää 2 pistettä eteenpäin ja lähetetään sinne, missä olemme väittäneet 'Jatka täällä'.

Siksi, koska voitte havaita, olemme saaneet ohjelman istumaan yhdessä paikassa ennalta määrätyn ajan ennen jatkamista. Tämä voitaisiin nimetä viive-silmukaksi.

Viivästyssilmukoiden ymmärtäminen

Jos tarvitsemme suuremman viiveen, voimme jatkaa yhtä silmukkaa seuraavaan. Ylimääräiset silmukat pidentävät viivettä. Olkaamme ainakin kaksi, olettaen, että haluamme tarkkailla LED-salamaa. Sijoitamme nämä viive silmukat ohjelmaamme ja toteutamme tekemällä siitä aito ohjelma esittämällä kommentteja:

On mahdollista koota tämä ohjelma, minkä jälkeen PIC. On selvää, että yrität virtapiirin tarkistaa, toimiiko se todella. Seuraava on piirikaavio, joka sinun tulisi luoda heti, kun olet ohjelmoinut PIC: n.


Hyvin tehty, olisit voinut itse säveltää ensimmäisen PIC-ohjelmasi ja rakentaa piirin, joka vilkuttaa LEDiä päälle ja pois. Tähän asti, jos olet suorittanut nämä kurssit, olet ehkä oppinut yhteensä seitsemän opetusta 35: stä, mutta epäilemättä olet ehkä toistaiseksi hallinnoin I / O-portteja!

Yritätkö muuttaa viiveketjuja, jotta LED-salama olisi nopeampi - mikä näyttää COUNT: n vähimmäisarvosta, jotta LED-salama näyttäisi olennaisesti? Tai ehkä haluat sisällyttää kolmannen tai täydentävän viiveen silmukan alkuperäisen jälkeen LED: n vakauttamiseksi. ainutlaatuinen vakio kullekin viive-silmukalle.

Voisit sitten tosiasiallisesti hioa viiveketjujasi saadaksesi LED-salaman tietyllä nopeudella, esimerkiksi sekunnin kuluttua. Seuraavassa opetuksessa katsotaanpa, kuinka pystymme hyödyntämään jotain aliohjelmana tunnettua ohjelmaa ylläpitämään ohjelmaa pienikokoisena ja perusohjelmana. Aliohjelma on olennainen osa koodia tai ohjelmaa, johon voidaan viitata silloin, kun sitä tarvitset. Aliohjelmia käytetään tapauksissa, joissa suoritat saman toiminnon usein.

Mitä ovat alirutiinit

Alirutiinin käyttämisen edut ovat, että todennäköisesti on yksinkertaisempaa muuttaa arvoa kerran aliohjelman sisällä sen sijaan, että se olisi kymmenen kertaa koko ohjelmasi kautta, ja se vähentää merkittävästi ohjelmasi kuluttaman muistin määrää KUVA. Tarkistamme alirutiinin:

Aluksi meidän on annettava aliohjelmallemme nimitys, ja tässä tilanteessa olemme valinneet RUTIININ. Tämän jälkeen kirjoitamme koodin, jonka haluaisimme suorittaa normaalisti. Siksi olemme valinneet viiveen vilkkuvassa led-ohjelmassa. Lopuksi päätämme aliohjelman näppäilemällä RETURN-käskyn.

Aloita aliohjelma mistä tahansa ohjelmamme osasta kirjoittamalla käsky CALL ja sitten aliohjelman nimi.

Harkitsemme tätä hieman syvällisemmin. Kun olemme saapuneet ohjelmamme osaan CALL xxx, jossa xxx on aliohjelmamme nimi, ohjelma hyppää mihin tahansa alirutiini xxx on asennettu. Alirutiinin sisällä olevat ohjeet suoritetaan.

Aina kun käsky RETURN suoritetaan, ohjelma hyppää palaamaan pääohjelmaan CALL xxx -komennon jälkeiseen käskyyn.

Vastaavalle aliohjelmalle on mahdollista soittaa useita kertoja kuin haluat, mikä selittää, miksi aliohjelmien käyttö vähentää ohjelman yleistä kestoa.

Siitä huolimatta sinun on tiedettävä pari tekijää. Aluksi, kuten pääohjelmassamme, kaikki vakiot on tunnustettava, ennen kuin voit käyttää niitä.

Nämä voidaan mahdollisesti tunnistaa itse aliohjelmassa tai suoraan pääohjelman alussa. Ehdotan, että tunnustat kaiken pääohjelmasi alussa, siitä lähtien tiedät, että asiat ovat samassa asemassa. Seuraavaksi on varmistettava, että pääohjelma ohittaa aliohjelman.

Tarkoitan, että asetatko alirutiinin suoraan ensisijaisen ohjelmasi loppuun, paitsi jos käytät Goto-ilmoitusta hypätäksesi alirutiinin sijainnista, ohjelma jatkaisi ja toteuttaisi alirutiinin riippumatta siitä, haluatko vaatia sitä tai muuten.

PIC ei erottaisi aliohjelmaa pääohjelmasta. Tarkistamme vilkkuvan led-ohjelmamme, mutta tällä kertaa aiomme käyttää aliohjelmaa viive-silmukalle. Ihannetapauksessa huomaat kuinka paljon monimutkaisempi ohjelma näyttää, samoin kuin saatat huomata, kuinka alirutiini toimii käytännössä.

Lopulta voit havaita, että käyttämällä aliohjelmaa viivesilmukkaamme varten olemme saattaneet pienentää ohjelman ulottuvuuksia.

Aina kun haluamme viivettä, mahdollisesti kun LED on päällä tai pois päältä, kutsumme periaatteessa viivettä aliohjelmaksi. Alirutiinin päätyttyä ohjelma johtaa takaisin linjalle, joka seuraa 'Call' -ohjeitamme. Yllä olevassa kuvassa LED käännetään.

Tämän jälkeen otamme yhteyttä alirutiiniin. Ohjelma palaa sitten takaisin, jotta voimme sammuttaa LEDin. Kutsumme aliohjelmia vielä kerran, siltä varalta, että aliohjelma on saattanut valmistua, ohjelma palaa takaisin ja seuraava sen tunnistama käsky on 'goto Start'. Kaikille kiinnostuneille, ensimmäinen ohjelma oli 120 tavua pitkä.

Alirutiinin avulla voimme pienentää ohjelmamme kokoa 103 tavuun. Tämä ei voi kuulostaa niin fantastiselta, mutta kun otetaan huomioon se, että PIC: ssä on vain 1024 tavua, jokainen pieni hyöty.

Seuraavassa oppaassa tarkistetaan lukeminen satamista.

Toistaiseksi olemme säveltäneet porttiin A voidaksemme kytkeä LED: n päälle ja pois päältä. Tässä vaiheessa näemme, miten aiomme lukea porttien I / O-nastat.

Tulo- / lähtöporttien lukeminen

Tämä on täsmälleen varmistaaksemme, että pystymme yhdistämään ulkoisen piirin ja vaikuttamaan kaikkiin sen tarjoamiin erityisiin lähtöihin.

Jos haluat muistaa aikaisemmista kursseistamme, jos haluat muodostaa I / O-portit, meidän oli siirryttävä pankista 0 pankkiin 1. Suoritamme sen aluksi:

Tässä vaiheessa meillä on kiinteä portin A bitti 0 syötettäväksi. meidän on nyt tutkittava, onko tappi korkea tai matala. Tämän saavuttamiseksi voidaan käyttää vain yhtä kahdesta ohjeesta:

BTFSC ja BTFSS.

BTFSC-käsky tarkoittaa 'Tee bitti testi rekisterissä sekä bittiä, jonka määrittelemme.

Jos se on 0, jätämme seuraavan käskyn pois ”. BTFSS tarkoittaa 'Suorita bitti testi rekisterissä ja luomamme bitti. Jos se asetetaan arvoon 1, ohitamme seuraavan käskyn.

Mitä käytämme, määräytyy sen mukaan, miten haluamme ohjelmamme vastaavan, kun tutkimme panosta. Esimerkiksi, jos odotamme vain syötteen olevan 1, voimme ehkä käyttää BTFSS-käskyä seuraavalla tavalla:

Koodi tähän:

BTFSS PortA, 0Goto start Jatka täältä:
:

Ohjelma siirtyisi vain kohtaan 'Carry on here', edellyttäen, että PortA: n bitti 0 on ajoitettu arvoon 1.

Kirjoitamme tällä hetkellä ohjelmaa, joka voisi kehottaa LEDiä yhdellä nopeudella, mutta jos kytkin on suljettu, se vilkkaisi LEDiä kaksi kertaa hitaammin.

On mahdollista käyttää tätä ohjelmaa yksin, silti olemme sisällyttäneet listan jotenkin.

Voit yrittää ja kirjoittaa koko ohjelman tarkistaaksesi, oletko ymmärtänyt periaatteet. Käytämme vastaavaa virtapiiriä kuin ennen, mukaan lukien PIC: n kytketty kytkin RA0 ja syöttömme positiivinen kisko.

Tässä olemme saavuttaneet LEDin kytkemisen päälle. Myöhemmin määritän, onko kytkin suljettu.

Jos se on rajoitettu, seuraavaksi muodostan yhteyden viive-aliohjelmaamme. Tämä antaa meille vastaavan viiveen kuin aikaisemmin, mutta otamme tässä vaiheessa yhteyttä siihen kaksi kertaa.

Sama pätee aina, kun LED ei pala. Siinä tapauksessa, että kytkintä ei ole suljettu, aikaisemmat tiedot tallennetaan päälle ja pois päältä.

Oletko seurannut näitä oppitunteja alusta alkaen, saatat yrittää ymmärtää, että olet löytänyt kymmenen PIC 16F84: n 35 ohjeesta! Ja jokainen näistä tapahtuu vain oppimalla LED-valo päälle ja pois.

Tähän asti olemme koonneet PIC: n vilkkuvan LED-valon päälle ja pois.

Myöhemmin pystyimme PIC-laitteellamme sisällyttämällä kytkimen, mikä muutti salamannopeutta.

Muistitilan tehokas käyttö

Ainoa asia on, että ohjelma on melko pitkä ja melko tehoton muistitilaa. Tuntui hyvältä, kun sisällytin komentoja ensimmäistä kertaa, mutta sen suorittamisen pitäisi olla helpompaa. Positiivisesti on, analysoimme, kuinka kirjaimellisesti kytkimme LEDin päälle ja pois.

movlw 02hmovwf PORTAMovlw 00hmovlw PORTA

Aluksi täytimme w-rekisterimme 02h: lla, sen jälkeen siirrimme sen PortA-rekisteriimme LED: n kytkemiseksi päälle. Sammuttaaksemme sen, pakasimme w: n 00h: lla, minkä jälkeen se siirrettiin PortA-rekisteriimme.

Kaikkien näiden rutiinien välissä meidät pakotettiin ottamaan yhteyttä aliohjelmaan varmistaaksemme, että voimme tarkkailla LED-merkkivalon vilkkumista.

Siksi meidän oli siirrettävä kaksi tietojoukkoa pari kertaa (yksi kerta w-rekisteriin ja sitten PORTA: lle) ja soitettava alirutiini kaksi kertaa (kerran päälle, sitten pois päältä). Kuinka voimme saavuttaa tämän lisäämällä tehokkuutta? Erittäin yksinkertainen.

Käytämme erilaista käskyä, joka tunnetaan nimellä XORF. XORF-käsky toimii Exclusive OR -toiminnolla rekisterissä, jonka määrittelemme antamiemme tietojen kanssa. Uskon, että minun on selvitettävä, mikä maailmassa yksinomainen OR on, ennen kuin jatkamme. Jos meillä on kaksi tuloa ja yksi lähtö, tulo voi olla vain 1, jos ja niin kauan kuin nämä kaksi tuloa eroavat toisistaan. Vaikka ne ovat samat, tulos on todennäköisesti 0. Seuraava on totuustaulukko henkilöille, jotka haluavat tarkistaa nämä:

A B F0 0 00 1 11 0 11 1 0

Tarkastelemme tässä vaiheessa, mitä tapahtuu, jos renderöimme B: n aivan kuten aikaisemman tuotoksemme, ja yksinkertaisesti muutamme A: n arvoa:

A B F
0 0 0
0 0 0
1 0 1
1 1 0
1 0 1

Jos säilytämme A: n arvon yhtä kuin 1 ja yksinoikeudella TAI sen lähdön kanssa, lähtö vaihtaisi. Jos et huomaa tätä totuustaulukosta, sen alapuolella voidaan nähdä binääriä:

0 Virtalähtö
EX-OR 1 1 uudella lähdöllä
EX-OR 1 0 uudella lähdöllä

Ehkä huomaat, että siirtämällä lähtö yksinkertaisella TAI: lla yhdellä, vaihdamme lähdön 0: sta 1: een.
LEDin kytkemiseksi päälle ja pois päältä tarvitsemme vain muutaman lauseen:

MOVLW 02h
XORWF-OVI, 1

Mitä tarkalleen tulemme saavuttamaan, on lisätä w-rekisterimme 02h. Olemme siinä tapauksessa yksinoikeudella TAI numeron muuttaminen riippumatta siitä, mitä PortA-palvelumme sisältää. Jos bitti 1 on 1, se muuttuu arvoksi 0. Jos bitti 1 on 0, se muuttuu arvoksi 1. Tutkitaan tätä koodia kerran tai kahdesti sen näyttämiseksi, kuinka se toimii binaarisesti:

OVI
00010
xorwf 00000
xorwf 00010
xorwf 00000
xorwf 00010

Meidän ei tarvitse tosiasiallisesti ladata identtistä arvoa w-rekisteriimme joka kerta, joten tämä on mahdollista suorittaa kerran alussa ja yksinkertaisesti palata takaisin vaihtokomentoon. Lisäksi meidän ei tarvitse korjata arvoa PortA-rekisteriimme. Syy? Varmasti, koska jos käynnistettäessä se on 1, voimme helposti vaihtaa sitä. Minä, vaihtoehtoisesti 0 käynnistyksen yhteydessä, vaihdamme sen nyt.

Siksi haluat nähdä vasta muodostetun koodin. Ensimmäinen edustaa vilkkuvaa LED-koodia, kun taas toinen näyttää kytkimen lisäämällä:

Toivomme, että voit löytää, että yksinkertaisesti käyttämällä yhtä helppoa ohjetta olemme nyt leikkaaneet ohjelmamme mittakaavaa. Totuus on, että osoittaaksemme kuinka paljon voisimme vähentää ohjelmiamme, olemme osoittaneet, että kaksi ohjelmaa, juuri sävelletyt, ja niiden mitat alla olevassa taulukossa:

Ohjelman muutosmitat (tavua)
Vilkkuva LED Original 120
Vilkkuva LED-alirutiini lisätty 103
Vilkkuva LED XOR -toiminto käytetty 91
LED kytkimellä Original 132
LED kytkimellä XOR-toiminto käytetty 124.

Siksi emme ole vain löytäneet muutamia uusia ohjeita, mutta olemme varmasti myös pienentäneet komentosarjojemme kokoa!

Seuraavassa analysoimme, kuinka voit heiluttaa yksittäisiä bittejä, suorittaa tiettyjä suoraviivaisia ​​aritmeettisia sekä tietotaulukoita.

Loogiset johtajat

Viimeisessä opetusohjelmassa esitin Exclusive OR -operaation. ExOR-toiminto ymmärretään loogisena operaattorina.

Tässä opetusohjelmassa valaistaan ​​muita loogisia operaattoreita, joita PIC edistää. Pisteohjelmissa ei tule olemaan minkäänlaisia ​​tapauksia, mutta opimme operaattoreiden helppoja tapoja soveltamalla pieniä koodialueita.

AND-funktio analysoi periaatteessa kaksi bittiä ja antaa 1, ovatko ne samat, ja 0, jos ne ovat erottamiskykyisiä. Esimerkiksi, jos mainitsemme 1 JA 1, tulos on 1, kun taas jos ilmoitamme 1 JA 0, seurauksena olisi 0.

Tarpeetonta sanoa, että pystymme arvioimaan myös sanoja, samoin kuin kaikki AND-toiminnot, joita nämä kaksi termiä tarkastellaan vähitellen. Alla oleva esimerkki osoittaa, että kahdesta 8-bittisestä sanasta tulee ANDed yhdessä tuotteen kanssa:

11001011
JA 10110011
On yhtä suuri kuin 10000011

Toivon, että olette samaa mieltä, lopputuloksella on yksinkertaisesti yksi, kun 2 1 kädessä käsi kädessä toistensa kanssa pari sanaa. Voimme käyttää AND-toimintoa esimerkiksi porttien tarkistamiseen.

Jos tarkistamme muutamia piiriin kytkettyjä I / O-nastoja, ja meidän on pidettävä silmällä tiettyä tilannetta, jossa vain muutama nasta on korkealla, siinä tapauksessa voimme melko paljon lukea portti, jonka jälkeen JA tulos ehdolla, jota olemme tutkineet, identtinen yllä olevan esimerkin kanssa.

PIC tarjoaa meille kaksi ainesosaa AND: lle.
Ne ovat ANDLW ja ANDWF. ANDLW antaa meille mahdollisuuden suorittaa AND-toiminto, jossa on W-rekisterin tiedot ja määräämämme summa.

Syntaksi on: ANDLW jossa on tarkalleen mitä olemme menossa, ja W: n sisältö.

AND-toiminnon seuraukset tallennettaisiin suoraan W-rekisteriin.
ANDWF antaa meille mahdollisuuden suorittaa AND-toiminto W-rekisterissä ja eri rekisterissä, esimerkiksi PORT. Syntaksi on: ANDWF, d, joka on rekisteri, josta olemme innostuneita, esim. PORTA ja d osoittavat PIC: n, johon tulos tulisi sijoittaa. Jos d = 0, tulos laitetaan W-rekisteriin ja arvosta d = 1 lopputulos tallennetaan määräämäämme rekisteriin. Alla olevat kaksi koodin osaa esittävät hyvän esimerkin kustakin AND-toiminnosta.

Alkuosa tutkii PORTAn tilaa, jossa meidän on tarkistettava, ovatko syötteet 1100. Voimme sijoittaa tuloksen takaisin W-rekisteriin

movlw 1100
ANDWF 05h, 0 Toinen kuva saattaa nyt tarkistaa W-rekisterin sisällön:
ANDLW 1100

TAI

Olemme nyt löytäneet yhden OR-toiminnon, tarkalleen XOR. Tästä kehittyy 1, jos kaksi bittiä eivät ole samat, mutta ovat erilaisia. Löydät toisen TAI-toiminnon nimeltä IOR, joka on kattava TAI. Tämä toiminto tuottaa 1, jos jompikumpi bitti on 1, mutta lisäksi, jos jokainen bitti on 1. Alla on selkeä totuustaulukko tämän havainnollistamiseksi:

A B O / P
0 0 0
0 1 1
1 0 1
1 1 1

Mitkä ovat aritmeettiset operaattorit

LISÄTÄ

Tämä toiminto saavuttaa sen, mitä se yleensä väittää. Se antaa kaksi lukua! Siinä tapauksessa, että kahden luvun lisäämisen seuraukset ylittävät 8 bittiä, tällöin luultavasti asetetaan CARRY-lippu. CARRY-lippu sijaitsee osoitteessa 03h bitti 0.

Kun tämä bitti on ajoitettu, nämä kaksi lukua ylittivät 8 bittiä. Kun se on 0, siinä tapauksessa seuraus sijaitsee 8 bitin sisällä. Kuten aikaisemmin, PIC tarjoaa meille kaksi ADD-tyyliä, erityisesti ADDLW ja ADDWF. Kuten oletit voinut olettaa, tämä on aivan kuten yllä oleva toiminto. ADDLW tarjoaa W-rekisterin sisällön sille, minkä määräämme. Syntaksi on: ADDLW ADDWF lisää W-rekisterin ja jonkin muun määrittelemämme rekisterin sisällön.

Syntaksi on: ADDWF, d on missä

SUB

Tässä vaiheessa luulen, että et voi olettaa, mitä tämä toiminto suorittaa! Todellakin, epäilet sitä, tätä toimintoa
vähentää yhden bitin toisesta. Jälleen PIC tarjoaa meille 2 makua: SUBLW ja SUBWF. Syntaksi on täsmälleen samanlainen kuin ADD-toiminnossa, lukuun ottamatta ilmeisesti sitä, että kirjoitat SUB ADD: n sijasta!

Lisäys Jos haluaisimme sisällyttää yhden numeroon PIC: ään, voisimme ehdottomasti hyödyntää ADD-toimintoa ja käyttää numeroa yksi. ~ Tämän vaikeus on se, että meidän on ensin sijoitettava luku W-rekisteriin ja sen jälkeen lisättävä ADDLW 1 -ohjainta. Jos haluaisimme sisällyttää yhden rekisteriin, se voi olla vielä pahempi. Meidän on ensin asetettava numero 1 W-rekisteriin, sen jälkeen käytettävä ADDWF, 1. Siksi esimerkiksi, jos haluat sisällyttää 1 sijaintiin 0C, meidän on esimerkiksi omistettava seuraava komentosarjan osa:

movlw 01
addwf 0c, 1

Tämän toteuttamiseksi on olemassa helpompi menetelmä. Voimme suorittaa komennon INCF. Syntaksi on: INCF, d missä, on rekisteri tai paikka, josta olemme huolissamme, ja d näyttää PIC: n, johon tulos tulisi sijoittaa. Jos d = 0, tulos on W-rekisterissä, ja jos d = 1, seuraus asetetaan määrittelemäämme rekisteriin.

Käyttämällä tätä yksittäistä käskyä pystymme tosiasiallisesti viisikymmentä prosenttia koodauksesta. Jos haluaisimme lopputuloksen palautettua W-rekisteriin, siinä tapauksessa käytettäessä yllä olevaa esimerkkiä, meidän on ehkä pitänyt sisällyttää ylimääräinen komento siirtää 0C: n kohteet takaisin W-rekisteriin, minkä jälkeen 0C-rekisteri siirretään takaisin mitä se oli.

Lisäyskomento on olemassa. Se on INCFSZ. Tämä komento voi lisätä määräämäämme rekisteriä, mutta jos rekisteri on yhtä suuri kuin 0 lisäyksen jälkeen (joka tapahtuu, kun sisällytämme 1-127), sen jälkeen PIC todennäköisesti läpäisee seuraavan käskyn. Alla oleva koodiosa heijastaa tätä:

Silmukka incfsz 0C
Siirry silmukkaan
:
:
Loput ohjelmasta.

Yllä olevassa koodin osassa 0C: tä lisätään 1: llä. Seuraavaksi omistamme käskyn, joka ilmoittaa PIC: lle palaavan tunnisteeseemme nimeltä Loop ja lisäämällä 0C: tä 1: llä. Tämä jatkuu, kunnes 0C on 127. Tässä tilanteessa, kun kasvatamme 0C: tä 1: llä, 0C on nyt sama kuin 0. INCFSZ-käskymme voisi hyvin ilmoittaa PIC: lle jättämään myöhemmät ohjeet, jotka tässä tapauksessa ovat goto-ilmoitus, Siksi PIC jatkaa ohjelman loppua.

Vähennys

Olemme jo keskustelleet vähennystoiminnosta aiemmassa koulutuksessa, joten en tarkista sitä enää.

Täydentää

Tämän keskustelun viimeinen ohje kääntäisi kaikki määrittelemämme rekisterin bitit. Syntaksi on: COMF, d jossa

Bittitoimintojen ymmärtäminen

Tätä voitaisiin käyttää esimerkiksi vaihtamaan portin nastat nopeasti lähdöstä tuloon ja niin edelleen. Bittitoiminnot antavat meille mahdollisuuden muotoilla yksi bitti lausekkeessa. Ne antavat meille mahdollisuuden edetä, asettaa ja päästä eroon valitsemiemme rekisterien tai numeroiden yksittäisistä biteistä.

Kurssin lopussa julkistamme ohjelman, joka on suunniteltu luomaan joukko sekvenssivaloja, jotka etenevät eteenpäin, sitten päinvastoin. Havaitsimme tämän saavutetun aikaisemmin, kun tarkastelimme yksinomaista TAI-toimintoa, jossa järjestimme portit yksinomaan lausekkeella. Olemme huomanneet muutaman bittisen toiminnon, kun muodostamme PIC: n portit, ja

Haluan toistaa niiden käytön tässä.

BCF

Tämä ohje pyyhkii vähän, jonka määrittelemme nimeämäämme rekisteriin. Syntaksi
On:
BCF,

Käytimme tätä aiemmin muuttamaan sivulta 1 sivulle 0 poistamalla bitin STATUS-rekisteristä. Voimme myös käyttää sitä korjaamaan bitin 0 mihin tahansa eri rekisteriin / sijaintiin. Esimerkiksi, jos halusimme asettaa osaan 0C tallennetun kolmannen bitin 11001101: n arvoon 0, voimme
lisää:

BCF 0C, 03

BSF

Tämä ohje korjaa minkä tahansa määräämämme bitin arvoksi 1 missä tahansa ilmoittamassamme rekisterissä. Käytimme tätä aiemmin siirtyäksemme sivulta 0 sivulle 1. Syntaksi on: BSF ,, ja sitä käytetään täsmälleen samalla menetelmällä kuin yllä oleva BCF.

BTFSCU Tähän asti voimme asettaa tai tyhjentää vähän rekisteristä. Kuvittele kuitenkin, jos meidän on periaatteessa tarkistettava, onko bitti 1 tai 0 rekisterissä?

Varmasti on mahdollista käyttää BTFSC: tä. Siinä ilmoitetaan bittitestirekisteri F ja ohitetaan, jos se on selvä. Tämä ohje analysoi rekisterissä määrittelemämme bitin. Jos bitti on 0, käsky ilmoittaa PIC: lle ohittamalla seuraavan käskyn.

Voisimme käyttää tätä ohjetta siinä tapauksessa, että haluaisimme tarkistaa lipun, esimerkiksi kantolipun. Tämä säästää sitä, että meidän on luettava STATUS-rekisteri ja etsittävä yksittäisiä bittejä, jotta voimme oppia, mitkä liput on kiinnitetty. Esimerkiksi, jos halusimme tarkistaa, onko Carry-lippu asetettu 1: een, kun olimme lisänneet 2 numeroa, voimme kirjoittaa seuraavat:

BTFSC 03h, 0
jatka täällä, jos se on asetettu arvoon 1
tai tässä, jos asetettu arvoon 0

Jos bitin tila on 1, siinä tapauksessa BTFSC: n jälkeinen käsky suoritettaisiin loppuun. Jos se asetetaan arvoon 0, seuraava käsky ohitetaan. Seuraava koodin osa osoittaa, missä sitä voidaan käyttää:

Silmukka:
:
:
BTFSC 03,0
Siirry silmukkaan

Edellä olevassa koodissa PIC yksinkertaisesti poistuu silmukasta, jos STATUS-rekisterin bitti 0 (tai Carry-lippu) määritetään arvoon 0. Tai muuten goto-komento suoritettaisiin.

BTFSS

Tässä ohjeessa ilmoitetaan bittitestirekisteri F ja ohita, jos se on asetettu. Tätä voidaan verrata BTFSC-käskyyn, lukuun ottamatta sitä, että PIC jättää pois seuraavan käskyn, jos arvioimamme bitti asetetaan arvoon 1 0: n sijasta.

CLRF

Tämä ohje korjata rekisterin kaikki yksityiskohdat arvoon 0. Syntaksi on:

CLRF
Käytimme tätä aikaisemmin asettamalla porttien tuotoksi 0 käyttämällä CLRF 85h -arvoa. Käytimme sitä myös porttien korjaamiseen sisällyttämään kaikki nastat tulostettavaksi käyttämällä CLRF: ää
05h.

CLRW

Tämä saattaa muistuttaa CLRF-käskyä, paitsi tyhjentää W-rekisterin. Syntaksi on melko yksinkertainen:

CLRW

RLF ja RRF

Nämä suunnat kuljettavat hieman rekisterissä yhden korttipaikan vasemmalle (RLF) tai oikealle (RRF) rekisterissä. Esimerkiksi, jos tarvitsemme 00000001 ja käytimme RLF: tä, siinä tapauksessa meillä voi olla 00000010. Mitä tässä vaiheessa tapahtuu, jos on 10000000 ja sovelletaan RLF-käskyä? Yksi olisi varmasti sijoitettu kantolippuun. Jos sovellamme RLF-käskyä vielä kerran, 1 ilmestyy takaisin alkuun. Samankaltaisia ​​tapahtuu, vaikka päinvastoin, RRF-käskyn suhteen. Alla oleva tapaus osoittaa tämän RLF-käskyn osalta, jossa meillä on nähtävissä rekisterin 8 bittiä sekä kantolippu:

C 87654321
0 00000001
RLF 0 00000010
RLF 0 00000100
RLF 0 00001000
RLF 0 00010000
RLF 0 00100000
RLF 0 01000000
RLF 0 10000000
RLF 1 00000000
RLF 0 00000001

Esimerkkiohjelmasta

Näemme nyt esimerkkikoodin, jonka voi kääntää ja ajaa. Se tuottaisi sekvenssivalon, joka alkaa PortA-bittistä 0, menee PortB-bitteihin 8 ja
sitten palaamassa.
Kiinnitä LEDit jokaiselle portin nastalle. Meillä on osa vähän
tässä opetusohjelmassa esitetyt menettelyt.

TIME EQU 9FH Muuttuu viive silmukalle.
PORTB EQU 06H Port B-osoite.
TRISB EQU 86H -portti B Tristate-osoite.
PORTA EQU 05H -portti A-osoite.
TRISA EQU 85H -portti A Tristate-osoite.
STATUS EQU 03H Sivunvalintarekisteri.
COUNT1 EQU 0CH Loop -rekisteri.
COUNT2 EQU 0DH Silmukkarekisteri.

BSF-TILA, 5 Siirry sivulle 1
MOVLW 00H ja asenna
MOVWF TRISB sekä portit A että B
MOVLW 00H lähtöön,
MOVWF TRISA palaa sitten kohtaan
BCF STATUS, 5 sivu 0.
MOVLW 00H Tyhjennä portti A.
MOVWF-OVI

Pääohjelman alku

RUNMOVLW
01H Aseta ensimmäinen bitMOVWF
PORTB satamassa B.CALL
VIIVE Odota hetkiSoita
VIIVE
Siirrä portin B bitti vasemmalle ja keskeytä sitten
PORTB, 1Soita
VIIVETTY
DELAYRLF
PORTB, 1Soita
VIIVETTY
DELAYRLF
PORTB, 1Soita
VIIVETTY
DELAYRLF
PORTB, 1Soita
VIIVETTY
DELAYRLF
PORTB, 1Soita
VIIVETTY
DELAYRLF
PORTB, 1Soita
VIIVETTY
DELAYRLF
PORTB, 1Soita
VIIVETTY
DELAYRLF
PORTB, 1 Tämä siirtää bitin kantolippuun
Siirry nyt porttiin A ja siirrä bitti vasemmalle
PORTA, 1 Tämä siirtää bitin nollalipusta PortACALL: iin
DELAYCALL DELAYRLF
OVI, 1PYYNTÖ
VIIVETTY
DELAYRLF
OVI, 1PYYNTÖ
VIIVETTY
DELAYRLF
OVI, 1PYYNTÖ
VIIVETTY
VIIVE
Siirrä bitti takaisin Port ARRF: ssä
OVI, 1PYYNTÖ
VIIVETTY
VIIVETYS
OVI, 1PYYNTÖ
VIIVETTY
VIIVETYS
OVI, 1PYYNTÖ
VIIVETTY
VIIVETYS
PORTA, 1 Tämä siirtää bitin nollalippuun Siirrä nyt bittiä
takaisin satamaan BRRF
PORTB, 1Soita
VIIVETTY
VIIVETYS
PORTB, 1Soita
VIIVETTY
VIIVETYS
PORTB, 1Soita
VIIVETTY
VIIVETYS
PORTB, 1Soita
DELAYCALL DELAYRRF
PORTB, 1Soita
VIIVETTY
VIIVETYS
PORTB, 1Soita
VIIVETTY
VIIVETYS
PORTB, 1Soita
VIIVETTY
VIIVE Nyt olemme palanneet alkuun, GOTO
RUN mennään taas.

Koulutusjoukossa on loistava vaihtoehto, jonka avulla voit käyttää tietotaulukkoa.

Tietotaulukko on vain luettelo lainausmerkeistä, jossa kaikki tarkastellaan muutaman näkökohdan perusteella.
Sinulla voi olla esimerkiksi piiri, joka käyttää PIC: ää, joka laskee niiden tapausten määrän, joista tulonasta tulee korkea 1 sekunnissa. Sen jälkeen voit näyttää numeron 7 segmentin näytöllä.

Heti kun ajoitus on alkanut, PIC alkaa laskea kuinka monta kertaa tappi nousee korkealle. Yhden sekunnin kuluttua se vierailee pöydässä ja etsii dataa, jonka on näytettävä numero, joka symboloi tapin korkeita tilanteita. Tästä voi olla hyötyä, koska emme määritä, mikä luku voi olla, ennen kuin PIC on suorittanut arvionsa.

Taulukkoa käyttämällä voimme antaa PIC: n määrittää, mikä kuva näytetään. Tässä vaiheessa, ennen kuin näytän edelleen, kuinka tietotaulukko toimii, joudun ehkä kertomaan sinulle, että PIC ylläpitää olinpaikan polkua siinä ohjelmassa, jolla se on ohjelman toimiessa.

Se helpottaa niitä, jotka ovat suorittaneet tietyn ohjelmoinnin BASIC-järjestelmässä. Muussa tapauksessa älä ole ahdistunut, haluat ehkä jatkaa teorian oppimista. Kuvitellaan, että BASIC-ohjelma on samanlainen kuin alla esitetty:

10 VUOTTA K = 0
11 K = K + 1
12 JOS K> 10 Sitten GOTO 20 MUUT GOTO 11
20 TULOSTA K
21 LOPPU

Ohjelma alkaa riviltä 10. Heti kun K: n on tarkoitus olla 0, se siirtyy seuraavaksi riville 11. Kun olemme sisällyttäneet 1: n K: hen, jatkaamme sen jälkeen riville 12.

Tässä vaiheessa voimme olla uteliaita, jos K on suurempi kuin 10. Siinä tapauksessa, että seuraavaksi siirrymme riville 20 tai muuten palaamme riville 11.

Rivi 20 dokumentoi K: n ja rivi 21 päättää ohjelman. BASIC käyttää linjatilastoja auttamaan ohjelmoijaa pitämään kirjaa ongelmien sijainnista, koska tarroja ei ole valtuutettu. PIC käyttää tarroja paeta kohteiden välillä - vai voiko se todella?

Käytämme tarroja varmistaaksemme, että olemme tietoisia ongelmien sijainnista, ja varmistaaksemme, että pystymme ilmoittamaan PIC: lle yksinkertaisella tavalla, mistä etsiä.

Juuri mitä tapahtuu, PIC käyttää hyväkseen sisäistä linjalaskuria, jota kutsutaan ohjelmalaskuriksi. Ohjelmalaskuri (lyhennettynä PC: ksi) sen muistin määränpään kohdalle, missä tämä käsky on.

Aina kun ilmoitamme PIC: lle käydä valitussa tarrassa, se ymmärtää muistipaikan ja lisää siten tietokonetta, kunnes se näkee kyseisen muistikohteen. Tämä on täsmälleen sama menetelmä kuin tarkistamme yllä olevan BASIC-ohjelman. Alla on koodisegmentti, jossa on muistitilat tai tietokoneen kohteet jokaisen käskyn vieressä:

PC-ohjeet0000 movlw 03
0001 movwf 0C
0002 Silmukka decfsc 0C
0003 goto Silmukka
0004 loppu

Yllä olevassa esittelyssä olemme kiinnittäneet PC: n 0000: een. Siinä on käsky movlw 03. Kun PIC on toteuttanut nämä tiedot, se lisää tietokonetta, jotta seuraava käsky skannataan. Tässä vaiheessa PIC näyttää movwf 0C. Tietokonetta lisätään jälleen.

Nyt PIC-tutkimukset decfsc 0C. Siinä tapauksessa, että 0C: n yksityiskohdat eivät ole 0, tällöin PC: tä lisätään yhdellä, ja seuraava ohje, goto Loop, kehottaa PC: tä palaamaan asentoon 0003, joka on mainittu silmukka. Jos 0C: n yksityiskohdat ovat 0, PC: tä kehotetaan lisäämään 2: llä, yksinkertaisesti jätetään seuraava käsky pois.

Tietotaulukoiden ymmärtäminen

Tämä asettaa PC-paikan 0004, jolloin ohjelma päättyy. Asentaja on määrännyt määränpäät, eikä meidän pitäisi yleensä olla huolissamme siitä, mitä PC saavuttaa. Kunnes löydämme tarpeen hallita sitä samalla tavalla kuin tietotaulukoita käytettäessä. Kätevin tapa kuvata tietotaulukon toimintaa on aloittaa kuvalla.

PC-taso 02
movlw 03
puhelupöytä
:
taulukko addwf PC
retlw 01
retlw 02
retlw 03
retlw 04
retlw 05
retlw 06
retlw 07
palata

Alkuperäisessä ohjeessa osoitetaan etiketti PC: lle ohjelmalaskurin osoite (02h). Olemme pian sen jälkeen, kun 03h: n arvo on asetettu w-rekisteriin. Sen jälkeen kommunikoimme pöydälle. Alirutiinitaulukon etulinja lisää W-rekisterin (03h) yksityiskohdat ohjelmalaskuriin.

Tämä saa ohjelmalaskurin nostamaan 3: lla tai toisin sanoen, kannustaa ohjelmalaskuria siirtymään 3 riviä alaspäin. Kun laskuri saapuu 3 riviä alaspäin, PIC tunnistaa käskyn retlw. Tämä komento lähettää sen seuraaman arvon W-rekisteriin, minkä jälkeen se palaa aliohjelmasta. RETLW tarkoittaa periaatteessa paluuta, kirjaimellisesti W.

Katso, asetin pilkun sanan Paluu jälkeen. Koska olemme aliohjelmassa, tarvitsemme Return-käskyn sen pinnalle. Siksi RET ohjeessa. Kun RETLW-käsky on numero, juuri tämä laitetaan W-rekisteriin.

Tässä tapauksessa se on kuva 3. Voisimme määrittää minkä tahansa määrän W-rekisteriin, kunhan tämä luku yhdistetään taulukon aliohjelman ohjelmalaskuriin, löydämme retlw-käskyn. Yllä olevassa kuvassa tämä tarkoittaa, että pystymme omistamaan minkä tahansa numeron 1: stä 7. Jos jatkamme aliohjelman ohi, saatamme pystyä suorittamaan ohjelman toisen osan. Tästä syystä on yleensä järkevää sijoittaa tietotaulukko täsmälleen PIC-ohjelman loppupuolelle, joten jos ylitämme siinä tapauksessa, aiomme päästä ohjelman päätökseen joka tapauksessa.

Keskeytysten aihe voi hyvinkin olla pisin ja vaikein läpi.

Et löydä mitään yksinkertaista tapaa yksityiskohtaisesti keskeyttää, mutta pienellä onnella tämän osan loppupuolella saatat pystyä soveltamaan keskeytyksiä omiin ohjelmiin.
Olemme jakaneet osan kahteen vaiheeseen. Tämä tarkoittaa, että aihe voidaan erottaa osioiksi, ja tarjota sinulle myös kätevä tapa ymmärtää helposti.

Mikä on keskeytys? Varmasti, kuten termi osoittaa, keskeytys on tekniikka tai signaali, joka estää mikroprosessoria / mikro-ohjainta suorittamasta mitä tahansa asiaa, että jotain muuta voisi tapahtua.

Sallikaa minun antaa sinulle päivittäin kuva. Luulet, että rentoudut omassa kodissasi keskustellessasi toisen henkilön kanssa. Yhtäkkiä puhelin soi.

Lopetat puhumisen ja tartut puhelimeen puhuaksesi soittajan kanssa. Kun olet keskustellut puhelimessasi, päätät palata keskustelemaan henkilön kanssa ennen kuin puhelin soi. On mahdollista ottaa huomioon päärutiini, kun juttelet jonkun kanssa, puhelimen soitto häiritsee keskustelua, ja rutiinitauko on tapa puhua puhelimessa.

Kun puhelinkeskustelu on päättymässä, palaat takaisin ensisijaiseen keskustelurutiiniin. Tämä kuva on juuri se, kuinka prosessori keskeytetään toimimaan.

Ensisijainen ohjelma toimii, suorittaa tiettyjä toimintoja piirissä, mutta kun keskeytys tapahtuu, ensisijainen ohjelma pysähtyy toisen rutiinin suorittamisen aikana. rutiini päättyy, prosessori siirtyy takaisin ensisijaiseen rutiiniin aivan kuten aiemmin.

Keskeytysten ymmärtäminen

PIC: llä on neljä keskeytyslähdettä. Ne voidaan jakaa pariin ryhmään. Kaksi ovat keskeytyslähteitä, joita voidaan hyödyntää ulospäin PIC: lle, kun taas kaksi muuta ovat sisäisiä prosesseja. Haluan selventää kaksi ulkoista tyyppiä tässä. Kaksi muuta kuvataan erilaisissa opetusohjelmissa, kun pääsemme ajastimiin ja tallennamme tietoja.

Jos tarkistat PIC: n pin-outin, huomaat, että tappi 6 on RB0 / INT. Tässä vaiheessa RB0 on ​​selvästi portti B-bitti 0. INT edustaa, että se voisi yhtä hyvin olla konfiguroitu ulkopuolisena keskeytystapina. Lisäksi portin B nastoja 4 - 7 (nastat 10 - 13) voidaan käyttää myös keskeytyksiin. Ennen kuin voimme käyttää INT: ää tai muita Port B -nastoja, meidän on suoritettava kaksi tehtävää. Aivan ensin meidän on ilmoitettava PIC: lle, että käytämme keskeytyksiä.

Seuraavaksi meidän on määritettävä, mitä portti B-nastaa aiomme käyttää keskeytyksenä I / O-nastana. PIC: n sisällä on rekisteri, joka tunnetaan nimellä INTCON, ja se on osoitteessa 0Bh. Tästä rekisteristä löydät 8 bittiä, jotka voidaan ottaa käyttöön tai poistaa käytöstä. INTCONin bitti 7 tunnetaan nimellä GIE. Tämä on Global Interrngupt Enable. Korjaamalla tämä arvoon 1 ilmoitetaan PIC: lle, että käytämme keskeytystä.

INTCONin bitti 4 tunnetaan nimellä INTE, Interrupt Enable. Tämän bitin asettaminen yhteen välittää PIC: lle, että RB0 tulee olemaan keskeytystappi. Konfiguroimalla bitti 3, nimeltään RBIE, ilmoitetaan PIc: lle, että aiomme käyttää portti B -bittejä 4-7. Tässä vaiheessa PIC ymmärtää, milloin tämä nasta voi olla korkea tai matala, hänen on pysäytettävä suorituksensa ja jatkettava keskeytyksellä rutiini. Tässä vaiheessa meidän on ilmoitettava PIC: lle, onko keskeytys todennäköisesti signaalin nousevalla reunalla (0 V - + 5 V) vai pudotusreuna (+ 5 V - 0 V).

Toivomme yksinkertaisesti, haluammeko PIC: n keskeytyä joka kerta, kun signaali liikkuu matalasta korkeaan tai suuresta matalaan. Rikollisuuden vuoksi tämä voidaan todeta sijoitettavaksi nousevalle reunalle.

Reunan liipaisu ajoitetaan ylimääräiseen rekisteriin nimeltä OPTION -rekisteri, osoitteeseen 81h. Bitti, josta olemme innostuneita, on bitti 6, jota usein kutsutaan nimellä INTEDG.

Jos asetat tämän arvoksi 1, PIC saa häiriön kiinnitysreunassa (oletusarvo) ja 0: n asettaminen stimuloi PIC: tä häiritsemään liukuvaa reunaa. Jos haluat PIC: n aktivoituvan nousevalla reunalla, sinun ei todellakaan tarvitse tehdä mitään tälle bitille.

Tässä vaiheessa valitettavasti optiorekisteri on pankissa 1, mikä tarkoittaa, että nautimme muunnoksesta pankista 0 pankkiin 1, aseta bitti optiorekisteriin sen jälkeen, kun palaat pankkiin 0. Tärkeintä tässä on suorittaa jokainen bitti pankin 1 rekistereistä yhdellä lakolla, esimerkiksi perustamalla porttinastat, palattuaan sitten pankkiin 0, jos olet valmis.

Hienoa, näin ollen olemme ilmoittaneet PIC: lle, mikä nasta todennäköisesti on keskeytys, ja missä reunassa laukaista, mitä ohjelmassa ja PIC: ssä tapahtuu aina, kun keskeytys tapahtuu? Pari tapahtumaa tapahtuu. Aivan ensimmäinen, lippu on ajoitettu.

Tämä ilmoittaa PIC: n sisäiselle prosessorille, että keskeytys on tapahtunut. Seuraavaksi ohjelmalaskuri (josta puhuin edellisessä opetusohjelmassa) vihjaa tiettyyn osoitteeseen PIC: ssä. Tarkastellaan kaikki nämä nopeasti yksitellen. Keskeytyslippu INTCON-rekisterissämme bitti 1 on keskeytyslippu, nimeltään INTF. Tässä vaiheessa, kun keskeytyksiä esiintyy, tämä lippu todennäköisesti vahvistetaan arvoon 1.

Kun keskeytystä ei ole, lippu asetetaan arvoon 0. Sekä se on melkein kaikki saavutettavissa. Tässä vaiheessa saatat miettiä, 'mikä on järkeä?' Varmasti, vaikka tämä lippu on ajoitettu arvoon 1, PIC ei pysty eikä reagoi toiseen keskeytykseen. Siksi ilmaisemme, että saamme aikaan keskeytyksen. Lippu vahvistetaan todennäköisesti arvoon 1, ja PIC saattaa mennä rutiinimme puoleen keskeytyksen suorittamiseksi.

Kun tätä lippua ei ollut korjattu arvoon 1 ja PIC: n sallittiin jatkaa vastaamista keskeytykseen, tappi jatkuva pulssi voi pitää PIC: n palaamassa keskeytysrutiinimme alkuun eikä suinkaan täydentää sitä. Palatakseni puhelinkuvaani, se muistuttaa puhelimen nostamista ja heti keskustelun aloittaminen alkaa soida uudelleen, koska toinen henkilö haluaa puhua kanssasi.

On suositeltavaa suorittaa yksi vuoropuhelu ja tarttua sitten puhelimeen uudelleen puhuaksesi seuraavan henkilön kanssa. Löydät pienen ongelman tästä lipusta. Vaikka PIC asettaa tämän lipun nopeasti arvoon 1, se ei aseta sitä uudelleen 0: ksi! Ohjelmoijan - eli sinun - on harjoitettava kyseistä toimintaa. Tämä voidaan toteuttaa vaivattomasti, koska olen varma, että se on saavutettava sen jälkeen, kun PIC on suorittanut keskeytysrutiinin.

Muistin sijainti Aina kun käynnistät PIC: n tai jos nollaaminen tapahtuu, ohjelmalaskuri antaa osoitteen 0000h, joka voi olla heti ohjelmamuistin alussa. Mutta jos keskeytys tapahtuu, ohjelmalaskuri ilmoittaa osoitteen 0004h.

Siksi, kun olemme laatimassa keskeytyksiä sisältävää ohjelmaa, meidän on ensin ilmoitettava PIC: lle hypätä osoitteen 0004h yli ja ylläpitää keskeytysrutiini, joka alkaa osoitteesta 0004h erillään ohjelman loppuosasta.

Tämä voi olla vaivatonta suorittaa. Aluksi aloitamme ohjelmamme komennolla, joka tunnetaan nimellä ORG. Tämä komento ilmaisee alkuperän tai aloituksen. Pidämme kiinni osoitteesta. Koska PIC alkaa osoitteesta 0000h, kirjoitamme ORG 0000h. Sen jälkeen meidän on ohitettava osoite 0004h. Saavutamme tämän laittamalla GOTO-ohjeet, joihin on liitetty etiketti, joka vihjaa ensisijaiseen ohjelmaamme.

Tämän jälkeen noudatamme tätä GOTO-komentoa yhdellä ORG: lla, tällä hetkellä osoitteella 0004h. Tämän komennon jälkeen lisätään keskeytysrutiinimme. Tässä vaiheessa saatamme pystyä mahdollisesti kirjoittamaan keskeytysrutiinimme suoraan toisen ORG-komennon seurauksena tai pystymme sijoittamaan GOTO-käskyn, joka osoittaa keskeytysrutiiniin.

Se liittyy todella vaihtoehtoosi. Ilmoittaakseen sen tarjoamalle PIC: lle päädyimme keskeytysrutiinin loppuun, meidän on sijoitettava komento RTFIE rutiinin loppua kohti. Tämä komento tarkoittaa paluuta keskeytysrutiinista. Vaikka PIC huomaa tämän, ohjelmalaskuri ilmaisee lopullisen sijainnin, jossa PIC oli ennen keskeytystä. Olemme laatineet alla lyhyen osan koodista yllä olevan esittämiseksi:

On olemassa pari tavaraa, joista sinun tulisi ilmoittaa keskeytyksiä käytettäessä. Alkuperäinen on yleensä se, että jos saatat käyttää samaa rekisteriä ensisijaisessa ohjelmassa ja keskeytysrutiinissa, muista, että rekisterin yksityiskohdat todennäköisesti muuttuvat keskeytyksen tapahtuessa.

Hyödynnetään esimerkiksi w-rekisteriä datan edelleenlähettämiseen portti A: n ensisijaiseen ohjelmaan, joten voit käyttää w-rekisteriä lisäksi keskeytysrutiinissa siirtämään dataa kohteesta toiseen.

Jos et ole varovainen, w-rekisteri sisältää viimeisimmän arvon, jonka se sai ollessaan keskeytysrutiinissa, joten kun palaat keskeytyksestä, nämä tiedot toimitetaan A-porttiin sen sijaan, että sinulla olisi aiemmin ollut arvo keskeytys tapahtui.

Keino tämän ympärillä on tallentaa w-rekisterin tiedot hetkellisesti ennen kuin käytät sitä uudelleen keskeytysrutiinissa. Toinen on tosiasia, että voit löytää viiveen, kun yksi keskeytys tapahtuu ja milloin seuraava voi syntyä. Vaikka ymmärrät, PIC: llä on ulkokello, joka voi olla kristalli tai vastus-kondensaattori-yhdistelmä.

Huolimatta kellon taajuudesta, PIC jakaa sen 4: llä, minkä jälkeen se käyttää sitä sisäisen ajoituksensa vuoksi. Esimerkiksi jos sinulla on 4 MHz: n kide, joka on liitetty PIC: ään, siinä tapauksessa PIC suorittaa ohjeet taajuudella 1 MHz. Tämä sisätilojen ajoitus tunnetaan käyttöjaksona. Tässä vaiheessa tietolomake väittää (epäilemättä pienennetyssä muodossa), että sinun on sallittava 3-4 käskykierrosta keskeytysten välillä.

Minun olisi sallittava 4 kierrosta. Viiveen syy on, että PIC vaatii aikaa siirtyä keskeytysosoitteeseen, lippuun ja saapua takaisin keskeytysrutiinista. Siksi pidä tämä mielessäsi, jos työskentelet vaihtoehtoisen piirin kanssa aktivoidaksesi keskeytyksen PIC: lle.

Tässä vaiheessa piste on se tosiasia, että jos käytät portin B bittejä 4–7 keskeytyksenä. Et voi valita tiettyjä portin B nastoja toimiakseen keskeytyksinä.

Siksi, jos sallit nämä nastat, ne todennäköisesti ovat kaikki saatavissa. Siksi esimerkiksi ei voi olla vain bittejä 4 ja 5 - bitit 6 ja 7 todennäköisesti valtuutetaan samanaikaisesti. Mikä tarkalleen on tarkoitus saada neljä bittiä edustamaan keskeytystä? Sinulla saattaa olla kytkentä PIC: ään, jos joku neljästä linjasta menee korkealle, siinä tapauksessa tämä voi olla ongelma, johon vaadit PIC: n vaikuttamaan välittömästi.

Yksi esimerkki tästä voisi olla kodin turvahälytys, jossa neljä anturia on kytketty portin B nastoihin 4-7. Mikä tahansa erityinen anturi voi kehottaa PIC: tä laukaisemaan hälytyksen, ja hälytyksen signalointirutiini on keskeytysrutiini. Tämä säästää porttien tarkistamista jatkuvasti ja sallii PIC: n jatkavan eri asioita. Seuraavassa opetusohjelmassa aiomme laatia ohjelman keskeytyksen hallitsemiseksi.

Käsittelimme paljon perusasioita viimeisessä opetusohjelmassa, joten mielestäni on tullut aika, että laadimme ensimmäisen ohjelmamme.

Kirjoitettava ohjelma laskee, kuinka monta kertaa kytket virran päälle ja näytetään sitten numero.

Ohjelma laskisi 0: sta 9: een, katsottavissa 4 LEDillä binäärimuodossa, ja tulo tai keskeytys ovat todennäköisesti RB0: ssa.

Tärkein asia, jonka meidän on suoritettava, on ilmoittaa PIC: lle hypätä yli osoite, johon ohjelmalaskuri osoittaa aina, kun tapahtuu keskeytys.

Huomaa, että käytämme ainutlaatuista menetelmää heksadesimaalilukujen esittämiseen. Ennen kuin tapahtui, käytä F9h: tä, jossa h ilmoitti heksadesimaalin. Voisimme kirjoittaa tämän muodossa 0xF9, joka on rakenne, jota aiomme käyttää tästä lähtien.

Nyt meidän on kerrottava PIC: lle, että aiomme käyttää keskeytyksiä, ja käytämme RB0-nastaa 6 keskeytystapina:

bsf INTCON, 7GIE - Globaali keskeytys (1 = käytössä)
bsf INTCON, 4INTE - RB0 keskeytys käytössä (1 = käytössä)
Aion tyhjentää keskeytyslipun joka tapauksessa (en koskaan luota mihinkään!)
bcf INTCON, 1INTF - Tyhjennä lippubitti joka tapauksessa

Tällä hetkellä meidän on perustettava 2 satamaamme. Muista, että koska nyt käytämme RB0: ta keskeytysnastana, tämä on määritettävä syötteeksi:

Aiomme käyttää muuttujaa nimeltä COUNT, jotta voimme tallentaa kytkinten määrän. Voisimme yksinkertaisesti lisätä portin A arvoa, mutta näet, miksi käytän muuttujaa kirjoittaessamme keskeytysrutiiniamme.

Siksi pääohjelma koostuu, ja tässä vaiheessa meidän on ilmoitettava PIC: lle, kuinka edetä aina, kun tapahtuu keskeytys. Tässä esimerkissä keskeytyksemme on todennäköisesti kytkin. Juuri mitä haluaisimme PIC: n, on yksi säädettävälle COUNT: lle aina, kun kytkin on rajoitettu.

Haluamme kuitenkin näyttää vain, kuinka monta kertaa kytkin sammuu 0: sta 9: een. Edellä totesin, että voisimme pystyä yksinkertaisesti lisäämään portin A arvoa aina, kun keskeytys tapahtuu. Satamassa A on kuitenkin 5 bittiä, jos yksinkertaisesti kasvatamme porttia, meillä on korkein lukumäärä 31. On olemassa pari selitystä, miksi päätin olla siirtymättä 31: een.

Aluksi käytämme 7-segmenttistä näyttöä, joka voi olla enintään 0: sta 15: een (0 - F heksadesimaalina). Seuraavaksi haluan lisäksi näyttää sinulle muutaman aritmeettisen komennon, johon kompastit muutamassa viime oppitunnissa.

Siksi jatkamme keskeytysrutiiniamme. Tällä hetkellä ensinnäkin meidän on suoritettava se, että tallennamme lyhyesti w-rekisterimme tiedot, koska olemme soveltaneet tätä siirtääksesi COUNT-sisällön PORTA-tilaan. Jos emme tallenna sitä, voimme siinä tapauksessa pystyä toimittamaan täysin erilaisen numeron aritmeettisuutemme takia. Suoritetaan siis ensin:

Tässä vaiheessa ymmärrämme, onko COUNT arvo 9 tai enemmän. Juuri se, mitä meidän on nyt suoritettava, on, jos COUNT on suurempi kuin 9, aseta se takaisin 0: een tai palaa pääohjelmaan varmistaaksemme, että pystymme toimittamaan sen porttiin A. BTFSS-komento, koska ymmärrät, että seuraava
ohje siinä tapauksessa, että kantolippu on ajoitettu, eli COUNT = 10:

Ainoa asia, joka on jäljellä, on nyt syöttää kollektiivisesti ja määrittää vakioillemme arvot, jotka voimme suorittaa heti ohjelmamme alussa.

Aina kun käynnistät virran, LEDit laskevat binäärinä välillä 0000 - 1010 ja sitten takaisin 0000.

Seuraava kuva esittää yllä olevan selitetyn koodin kanssa yhteensopivan piirikaavion. Mielenkiintoista on, että ajoituskondensaattori on sisällytetty suunnitteluun. Tämä on mukava pieni juoni, jonka kautta saat vapauden välttää kondensaattorin sisällyttämistä, jos sinulla ei ole yhtään mukanasi tuona aikana.

Tällöin kapasitanssi tulee esiin oskillaattorin tapin ja maan läpi kulkevan hajakapasitanssin kautta.
Tietenkään se ei ehkä näytä olevan kovin älykäs tapa välttää kondensaattoria käytännössä, koska harha-arvo voi vaihdella eri olosuhteissa.

Toinen piirissä todistettava osa on kytkimen poikki oleva kumoava verkko. Tämä estää häiriöitä mekaanisen kytkennän aikana ja estää PIC: tä sekoittumasta, jos kytkentä oli yksi vai useampi vaihto.




Edellinen: Ohjelmoitava kaksisuuntainen moottorin ajastinpiiri Seuraava: Kuinka Buck-Boost-piirit toimivat