PIC apmācība - no reģistriem līdz pārtraukumiem

Izmēģiniet Mūsu Instrumentu Problēmu Novēršanai





Pirms iedziļināties PIC programmēšanas sīkākajās detaļās, vispirms būtu svarīgi iemācīties dažas labas programmēšanas metodes.

Izpratne par reģistriem

Vispirms pieņemsim, ka jebkurā programmas punktā ierakstāt (semikolu), kompilators ignorēs visus, kas nāk pēc šī semikola, līdz, protams, ratiņš atgriezīsies pozīcijā.



Iepriekš minētā funkcija ļauj mums pievienot komentārus vai piezīmes tā, lai tie nekļūtu par programmas daļu, tomēr palīdz mums identificēt programmu, izmantojot blakus esošos komentārus. Komentāru ievietošana ir ieteicama prakse, ieprogrammējot jebkuru IC.

Nākamā svarīgā lieta kursā ir piešķirt nosaukumus dažādām konstantēm (jūs tos iemācītos vēlāk sīki). Tādējādi vienkāršāk ir saprast, kas tiek rakstīts vai kas attiecas uz iesaistītajām vērtībām, nevis sajaukt ar iekļautajiem skaitļiem.



Iepriekšminētais ir jādara tūlītēju atpazīšanas faktisko nosaukumu formā, piemēram, COUNT. Ir svarīgi atzīmēt, ka šeit tiek izmantoti visi lielie burti, lai to atšķirtu, kā arī norāda, ka tā ir nemainīga vērtība.


Kā redzam, iepriekšminētais tiek darīts kastes formā, kas izgatavota no semikoliem, tas tikai padara to tīrāku. Turklāt mēģiniet dokumentēt programmu arī uz papīra, šī prakse palīdzēs lietas izprast pakāpeniski.

2. Reģistri.

PIC reģistrs ir joma, kas pieņem rakstisku informāciju, kā arī ļauj to lasīt. Jūs to varat salīdzināt ar papīra lapu, kurā varat vizualizēt saturu un pievienot, pārrakstot to.

Zemāk redzamajā attēlā attēlota tipiska reģistra failu karte, kas iegulta PIC16F84. Formāts nav kaut kas, kas faktiski tiek iestatīts PIC iekšienē, tas vienkārši norāda, kā biti var būt sakārtoti mikroshēmā, un lai saprastu dažas no iesaistītajām komandām.

Var redzēt, ka tas būtībā ir sadalīts 0. un 1. bankā. 1. banka ir atbildīga par PIC faktiskās darbības kontroli, piemēram, tā pa tālruni PIC, kuri biti A ostā ir piešķirti kā ieejas un kuri ir kā izejas.

2. banka ir paredzēta tikai informācijas manipulēšanai.

Sapratīsim to, izmantojot šādu piemēru:

Pieņemsim, ka mēs vēlamies piešķirt vienu bitu PortA high. Lai to izdarītu, mums vispirms jādodas uz 1. banku, lai iestatītu norādīto bitu vai tapu A porta izejas formā. Pēc tam mēs atgriežamies 0 bankā un piegādājam loģiku 1 (1. bits) šai konkrētajai tapai.

Visizplatītākie reģistri, kurus mēs vēlētos izmantot 1. bankā, ir STATUS, TRISA un TRISB.

STATUS palīdz mums atgriezties 0 bankā, TRISA ļauj mums izvēlēties, kuras adatas A ostā ir izejas un kuras var būt ieejas, savukārt TRISB atvieglo izvēli starp izeju un ievades kontaktu B ostā. SELECT reģistrs BANK 0 ļauj lietotājam pāriet uz 1. banku.

Apkoposim visu koncepciju ar šādu aprakstu:

STĀVOKLIS:

Lai pārietu no 0 bankas uz 1 banku, mēs komandējam STATUS reģistru. To īsteno, iestatot STATUS reģistra bitu # 5 uz 1. Lai atgrieztos atpakaļ 0 bankā, STATUS reģistra 5. bitu piešķiram 0. Statusa reģistrs atrodas adresē 03h, šeit h apzīmē skaitli var būt heksadecimāls.

TRISA un TRISB:

Tie atrodas attiecīgi adresēs 85h un 86h. Lai programmētu tapu kā izeju vai ieeju, mēs vienkārši piegādājam nulli vai vienu konkrētajam reģistra bitam. Tagad to var izdarīt divos veidos, izmantojot bināro vai Hex. Gadījumā, ja kāds nevar pārveidot parametru, viņš vai viņa var izmantot zinātnisko kalkulatoru vērtību ieviešanai.

Tagad mums A ostā ir 5 tapas, kas atbilst 5 tapām. Ja mēs plānojam noteikt vienu no tapām kā ievades, mēs piegādājam “1” uz konkrēto bitu.

Gadījumā, ja mēs vēlētos piešķirt vienu no tapām kā izvadi, mēs iestatīsim konkrēto tapu uz “0”. Biti ir precīzi atbilstoši bitiem, vai precīzāk bits 0 ir RA0, 1. bits būtu RA1, bits 2 = RA2 un tā tālāk. Sapratīsim to šādā veidā:

Pieņemsim, ka vēlaties izlabot RA0, RA3 un RA4 kā izvadi, bet RA1 / RA2 kā i / ps, jūs to darīsit, nosūtot 00110 (06h). Pārbaudiet, vai bits 0 ir pa labi, kā norādīts šeit:

Ports A PIN RA4 RA3 RA2 RA1 RA0

Bitu skaits 4 3 2 1 0

Binārā 0 0 1 1 0

Tas pats attiecas uz TRISB.

PORTA un PORTB

Lai novirzītu vienu no izejas tapām augstu, mēs vienkārši piedāvājam “1” līdz attiecīgajam bitam mūsu PORTA vai PORTB reģistrā. Identisku procedūru var ievērot arī TRISA un TRISB reģistriem. Pirms ķeramies pie pirmā kodēšanas piemēra, sapratīsim tikai vairāku reģistru kupeju, proti: w un f.

W un F

W reģistrs ir parasts reģistrs, kas ļauj jums piešķirt jebkuru jūsu izvēlēto vērtību. Tiklīdz piešķirat W lielumu, varat turpināt, pievienojot to citai vērtībai vai vienkārši pārvietojot to. Piešķirot citu vērtību, informācija W vienkārši tiek pārrakstīta.

F reģistrs pārsūta savus rakstiskos jautājumus reģistram. Mēs pieprasīsim, lai šis F reģistrs piešķirtu vērtību reģistram, var pārsniegt STATUS vai TRISA reģistrus, jo tie neļaus mums tieši pārlikt vērtības. Programmas piemērs

Izpētīsim šādu koda piemēru, kas parādīs, kā tiek izpildīta iepriekš minētā instrukcija, kā arī liecinās par dažām kursa instrukcijām.

Sāksim, salabojot A portu, kā tika apspriests iepriekš.

Lai to izdarītu, mums jāpārslēdzas no 0 bankas uz 1. banku, tas tiek darīts, izveidojot STATUS reģistru, kas atrodas adresē 03h, 5. līdz 1. bits.

BSF 03h, 5

BSF nozīmē bitu kopu F. Pēc šīs instrukcijas mēs izmantojam divus skaitļus - 03h, kas ir STATUS reģistra adrese, un skaitli 5, kas atbilst bitu skaitlim.

Tātad, tas, ko mēs sakām, ir “Iestatīt 5. bitu adresē 03h uz 1”.

Tagad mēs atrodamies 1. bankā.

MOVLW 00110b

Mēs ievietojam bināro vērtību 00110 (burts b nozīmē, ka skaitlis ir binārs) mūsu vispārējās nozīmes reģistrā W. Es, protams, varēju to izdarīt sešstūrī, tādā gadījumā mūsu instrukcija būtu:

MOVLW 06h

Vai nu darbojas. MOVLW nozīmē ‘Move Literal Value Into W’, kas angļu valodā nozīmē ievietot sekojošo vērtību tieši W reģistrā.

Tagad mums ir jāievieto šī vērtība mūsu TRISA reģistrā, lai izveidotu ostu:

MOVWF 85h

Šajā instrukcijā norādīts “Pārvietot W saturu reģistrā, kas seko”, šajā gadījumā adrese attiecas uz TRISA.

Mūsu TRISA reģistram šajā brīdī ir skaitlis 00110 vai grafiski:

Ports A PIN RA4 RA3 RA2 RA1 RA0

Binārā 0 0 1 1 0

Ieeja / izvade O O I I O

Tāpēc tagad mums ir mūsu A porta tapas, mums ir jāatgriežas 0 bankā, lai pielāgotu vienu no informācijas.

BCF 03h, 5

Ar šo instrukciju tiek izpildīts BSF reverss. Tas nozīmē “Bit Clear F”. Pāris skaitļu pāris, kas atbilst, ir reģistra adrese, šeit STATUS reģistrs, kā arī bitu skaitlis, šajā gadījumā pieci biti. Tas, ko tieši esam pabeiguši šobrīd, ir noteikts mūsu bits

STATUS reģistrēties līdz 0

Šajā brīdī mēs esam atgriezušies 0 bankā.
Šis kods ir viss vienā blokā:

BSF 03h, 5 Doties uz 1. banku
MOVLW 06h Ielieciet 00110 W
MOVWF 85h Pārvietojiet 00110 uz TRISA
BCF 03h, 5. Atgriezieties 0. bankā

Pēdējā mācību laikā mēs jums apstiprinājām veidu, kā izveidot IO porta tapas PIC, lai to varētu ievadīt vai izvest.

Šajā kursā ļaujiet man jums palīdzēt nosūtīt datus uz ostām.

Datu sūtīšana ostām

Nākamajā apmācībā mēs pabeigsim, mirgojot LED ieslēgšanu un izslēgšanu, kas sastāv no pilnīgas programmas detalizācijas un vienkāršas shēmas, lai jūs varētu redzēt, kā PIC veic tieši to, ko mēs to paredzam.

Nemēģiniet salikt un ieprogrammēt PIC ar zemāk redzamajiem rezultātiem, jo ​​tie ir tikai ilustratīvi. Sākumā mēs izveidosim 2. porta bitu kā izvadi:

To varēja atpazīt pēc iepriekšējās instrukcijas. Vienīgā atšķirība varētu būt: Mēs esam izlabojuši visus A tapu bitus kā izvadi, piegādājot 0h trīsstāvokļu reģistrā. Kas viņam tagad jādara, ir ieslēgt LED.

Mēs to paveicam, ieplānojot vienu no tapām (to, kurai ir piesaistīts LED). Citādi sakot, uz tapas mēs pieliekam ‘1’. Tas tiek veikts tieši tā (ievērojiet komentārus, lai sniegtu skaidrību katrai rindai):

Tāpēc tas, ko tagad esam paveikuši, ir LED ieslēgšana un izslēgšana vienu reizi. Mēs vēlamies, lai LED pēc tam nepārtraukti ieslēgtos.

Mēs to sasniedzam, iegūstot programmu, lai atgrieztos sākumā. Mēs to paveicam, sākotnēji izveidojot tagu jau mūsu programmas sākumā, pēc tam informējot programmu, lai turpinātu tur atgriezties. Mēs norādām tagu diezgan vienkārši.

Mēs ievadām vārdu, teiksim SĀKT, pēc tam ievadiet kodu:

Kā parādīts, mēs sākumā programmas sākumā pieminējām izteicienu ‘Sākt’.

Pēc tam pašā programmas beigās mēs skaidri pieminējām ‘goto Start’. “Goto” instrukcija izpilda tieši to, ko tā deklarē.

Šī programma vienmēr ieslēgtu un izslēgtu LED, kad mēs ieslēdzam ķēdi, mēdzot izslēgties, kad mēs noņemam elektrību. Varbūt mums vajadzētu vēlreiz pārbaudīt savu programmu:

Protams, mēs esam izlaiduši komentārus, tomēr mēs joprojām varam ievērot norādījumus un numurus.

Tas vēlāk var būt nedaudz mulsinošs, ja mēģināt novērst programmu un rakstot kodu, iegaumējat visas adreses.

Lai arī komentārus var ievietot joprojām, tas varētu kļūt nedaudz pārblīvēts. Tam būs jānosauc numuri, un to var paveikt ar papildu instrukciju: 'equ' 'equ' instrukcija liek domāt, ka daži sīkumi varētu būt vienādi ar citiem.

Iespējams, ka tā nav instrukcija PIC, drīzāk montētājam. Šī instrukcija atvieglo vārda piešķiršanu reģistra adreses vietai vai konstantu programmēšanas terminam.

Mēs izveidosim dažas konstantes savai programmai un arī liecināsim, cik tieša tā ir programmas lasīšana.

Kopš tagad mēs esam fiksējuši nemainīgās vērtības, kuras mēs varam turpināt, iestatot tās mūsu programmā. Pirms to izmantošanas ir jānorāda nemainīgās vērtības.

tāpēc pārliecinieties, ka vienmēr tos novietojat programmas sākumā. Mēs vēlreiz pārrakstīsim programmu, izslēdzot komentārus, lai salīdzinātu agrāko marķējumu ar jaunāko.

Varbūt jūs pamanīsit, ka konstantes ļauj nedaudz vieglāk izprast programmu, tomēr mēs joprojām esam bez komentāriem, tomēr neuztraucieties, jo mēs vēl neesam pabeiguši.

Mūsu mirgojošajai LED programmai var būt neliels mīnuss.
Katras instrukcijas pabeigšanai ir nepieciešama 1 pulksteņa secība. Gadījumā, ja mēs izmantojam 4MHz kristālu, tad katrā instrukcijā tiek prasīts, lai pabeigtu 1 / 4MHz vai 1uS.

Tā kā mēs izmantojam tikai piecas instrukcijas, gaismas diode 5uS laikā aktivizējas. Tas varētu būt pārāk ātri, lai ļaudis to pamanītu, turklāt šķiet, ka LED ir pilnībā ieslēgts.

Tas, kas mums būtu jāpaveic, ir radīt traucējumu starp LED ieslēgšanu un LED izslēgšanu. Inhibīcijas teorija ir tāda, ka mēs skaitām no agrāka daudzuma, tāpēc, kad tas sasniedz nulli, mēs pārtraucam skaitīšanu.

Nulles vērtība nozīmē kavēšanās secinājumu, un mēs turpinām strādāt visā programmā. Tāpēc vispirms mums ir jānosaka konstante, kuru izmantot kā mūsu skaitītāju.

Nosauksim šo nemainīgo COUNT. Pēc tam mums jānosaka, cik nozīmīgs skaitlis jāsāk skaitīt. Protams, lielākais skaitlis, ko mēs varētu iekļaut, ir 255 vai FFh hex., Kā es runāju par iepriekšējo apmācību, equ instrukcija piešķir izteiksmi reģistra situācijai.

Tas nozīmē, ka neatkarīgi no tā, kādu daudzumu mēs piešķiram savam COUNT, tas atbilstu reģistra vienumiem. Gadījumā, ja mēs mēģinām noteikt vērtību FFh, mēs kļūsim kļūdaini, tiklīdz būsim sastādījuši programmu.

Iemesls ir atrašanās vieta FFh, tāpēc mēs nevaram tai piekļūt. Tāpēc kā mums jānorāda īsts skaitlis? Protams, tas prasīs nelielu pārdomu no sāniem.

Piemēram, ja mēs, piemēram, norādīsim savu COUNT adresi uz adresi 08h, tas norādītu pamata mērķa reģistra galamērķi. Pēc noklusējuma neskartie apgabali ir iestatīti uz FFh. Līdz ar to, ja COUNT novedīs pie 08h, jūs sastapsieties ar FFh vērtību, kamēr mēs pirmo reizi ieslēdzam. Neskatoties uz to, es jūs, kā mēs varam noteikt COUNT uz citu numuru ?, viss, ko mēs izmantojam, ir vispirms ‘pārvietot’ vērtējumu uz šo galamērķi.

Piemēram, pieņemsim, ka mēs vēlējāmies, lai COUNT vērtība būtu 85h, mēs nevaram pieminēt COUNT ekvivalentu 85h, jo tā ir A-ostas Tri-State reģistra pozīcija. Tieši tas, ko mēs paveicam, ir šāds: 85h vērtība W reģistrā movwf 08h

Tagad pārvietojiet to uz mūsu 08h reģistru. Pēc tam, ja mēs izteiksim COUNT vienādu 08h, COUNT atbilstu vērtībai 85h. Delikāts, vai ne! Tāpēc sākotnēji mēs nosakām mūsu konstanti: COUNT ekv. 08h Pēc tam šis skaitlis jāsamazina par vienu, līdz tas kļūst nulle.

Tā vienkārši notiek, ka pastāv viena instrukcija, kas paredzēta, lai to paveiktu mums, izmantojot ‘goto’ un tagu.

Norādījums, kuru mēs izmantosim, ir šāds: DECFSZ COUNT, 1 Šajā instrukcijā teikts: “Samazināt reģistru (šeit tas ir COUNT) pēc skaitļa, kas izseko komatu. Ja mēs sasniedzam nulli, apsteidziet divas vietas uz priekšu. ’Ļaujiet to vispirms atrast darbībā, pirms mēs to ievietojam savā kursā.

Tas, ko mēs esam veikuši, sākotnēji nosaka mūsu nemainīgo COUNT līdz 255. Nākamais segments novieto tagu, sauktu LABEL, tuvu mūsu decfsz instrukcijai.

Decfsz COUNT, 1 samazina COUNT vērtību par vienu un gala rezultātu saglabā tieši COUNT. Turklāt tas pārbauda, ​​lai pārbaudītu, vai COUNT vērtība ir 0.

Ja tas nenotiek, tas tādā gadījumā liek programmai pāriet uz nākamo rindu. Tagad mums ir deklarācija “goto”, kas mūs atgriežas pie mūsu decfsz instrukcijas.

Gadījumā, ja COUNT vērtība ir vienāda, decfsz instrukcijas rezultātā mūsu programma pāriet 2 vietas uz priekšu un tiek nosūtīta uz vietu, kur mēs esam pieprasījuši “Turpināt šeit”.

Tāpēc, tā kā jūs varat novērot, mēs esam sagatavojuši programmu sēdēt vienā vietā iepriekš noteiktu laiku pirms turpināt. To varētu nosaukt par aizkaves cilpu.

Kavēšanās cilpu izpratne

Gadījumā, ja mums ir nepieciešama būtiskāka kavēšanās, mēs varētu turpināt vienu ciklu līdz nākamajam. Papildu cilpas, pagarināja kavēšanos. Ļaujiet mums vismaz divus, pieņemot, ka mēs vēlamies novērot LED zibspuldzi. Mēs ievietosim šīs kavēšanās cilpas mūsu programmā un paveiksim, padarot to par īstu programmu, ieviešot komentārus:

Šo programmu ir iespējams apkopot, pēc kuras programmas PIC. Protams, pārliecinieties, ka mēģināt ķēdi pārbaudīt, vai tā patiešām darbojas. Tālāk ir shēma, kas jums jākonstruē, tiklīdz esat ieprogrammējis PIC.


Labi darīts, jūs faktiski varētu būt izveidojis savu pirmo PIC programmu, kā arī izveidot ķēdi, lai mirgot LED ieslēgtu un izslēgtu. Līdz šim, ja esat apguvis šos kursus, jūs, iespējams, esat apguvis septiņas instrukcijas no 35, taču, bez šaubām, līdz šim jūs, iespējams, kontrolējat I / O porti!

Vai jūs mēģinātu mainīt aizkaves lokus, lai padarītu LED zibspuldzi ātrāku - kāda ir COUNT minimālā vērtība, lai būtībā redzētu LED zibspuldzi? Vai varbūt pēc sākotnējās vēlaties iekļaut 3. vai papildu aizkaves cilpas, lai stabilizētu gaismas diodes darbību. unikāla konstante katrai aizkaves cilpai.

Pēc tam jūs, iespējams, varētu faktiski kavēties ar savām aizkaves cilpām, lai padarītu LED zibspuldzi ar noteiktu ātrumu, piemēram, pēc sekundes. Nākamajā apmācībā apskatīsim, kā mēs spējam izmantot kaut ko zināmu kā apakšprogrammu, lai uzturētu programmu kompaktu un pamata. Apakšprogramma ir neatņemama koda vai programmas sastāvdaļa, uz kuru var atsaukties un kad tā jums var būt nepieciešama. Apakšprogrammas tiek izmantotas gadījumos, kad jūs bieži veicat identisku funkciju.

Kas ir apakšprogrammas

Apakšprogrammas izmantošanas priekšrocības ir tādas, ka, visticamāk, ir vienkāršāk mainīt vērtību, kad tā atrodas apakšprogrammā, nevis, teiksim, desmit reizes visā programmā, kā arī tas ievērojami palīdz samazināt jūsu programmas patērētās atmiņas līmeni PIC. Mēs pārbaudīsim apakšprogrammu:

Sākotnēji mums jānorāda apakšprogrammas apzīmējums, un šajā situācijā mēs esam izvēlējušies ROUTINE. Mēs pēc šī tipa ievadām kodu, kuru mēs vēlētos izpildīt kā parasti. Tāpēc mēs esam izvēlējušies aizkavēšanos mūsu mirgojošajā vadītajā programmā. Visbeidzot, mēs noslēdzam apakšprogrammu, ievadot RETURN instrukciju.

Lai sāktu apakšprogrammu no jebkuras vietas mūsu programmā, mēs ātri ierakstām instrukciju CALL un pēc tam apakšprogrammas apzīmējumu.

Mēs to apsvērsim nedaudz dziļāk. Kad esam nonākuši mūsu programmas sadaļā CALL xxx, kurā xxx ir mūsu apakšprogrammas nosaukums, programma pāriet uz jebkuru vietu, kur ir instalēta apakšprogramma xxx. Tiek izpildītas instrukcijas apakšprogrammā.

Ikreiz, kad tiek izpildīta instrukcija RETURN, programma pāriet uz mūsu galveno programmu pie instrukcijas pēc mūsu CALL xxx instrukcijas.

Līdzīgu apakšprogrammu var izsaukt vairākas reizes, kā vēlaties, kas izskaidro, kāpēc apakšprogrammu izmantošana samazina mūsu programmas vispārējo ilgumu.

Neskatoties uz to, jums vajadzētu zināt pāris faktorus. Sākotnēji, tāpat kā mūsu galvenajā programmā, pirms to izmantošanas ir jāapstiprina visas konkrētās konstantes.

Tos, iespējams, var atzīt pašā apakšprogrammā vai tieši galvenās programmas sākumā. Es iesaku jums atzīt visu savas galvenās programmas sākumā, kopš tā laika jūs saprotat, ka lietas ir identiskā stāvoklī. Pēc tam jāpārliecinās, ka galvenā programma izlaiž pāri apakšprogrammai.

Ar to es domāju, ja jūs apakšprogrammu ievietojat tieši savas primārās programmas noslēgumā, izņemot, ja jūs izmantojat “Goto” deklarāciju, lai pārietu no vietas, kur atrodas apakšprogramma, programma turpinātu un ieviestu apakšprogrammu neatkarīgi no tā, vai jūs to prasīt vai citādi.

PIC nenošķir apakšprogrammu no galvenās programmas. Mēs pārbaudīsim mūsu mirgojošo vadīto programmu, tomēr šoreiz aizkaves ciklam izmantosim apakšprogrammu. Ideālā gadījumā jūs uzzināsiet, cik daudz mazāk sarežģīta programma parādās, kā arī jūs varētu uzzināt, kā praktiski darbojas apakšprogramma.

Galu galā jūs varat novērot, ka, izmantojot mūsu kavēšanās ciklam apakšprogrammu, iespējams, esam samazinājuši programmas izmērus.

Katru reizi, kad mēs vēlamies kavēšanos, iespējams, kad gaismas diode ir ieslēgta vai izslēgta, mēs aizkavi pamatā saucam par apakšprogrammu. Pēc apakšprogrammas noslēguma programma atgriežas pie līnijas, ievērojot mūsu norādījumu “Zvans”. Iepriekš redzamajā attēlā mēs ieslēdzam LED.

Pēc tam mēs sazināmies ar apakšprogrammu. Pēc tam programma atgriežas, lai mēs varētu izslēgt LED. Mēs vēlreiz izsaucam apakšprogrammu, tikai gadījumā, ja apakšprogramma varētu būt pabeigta, programma atgriežas un nākamā instrukcija, ko tā atzīst, ir “goto Start”. Ikvienam, kurš varētu būt ieinteresēts, mūsu pirmā programma bija 120 baitu gara.

Izmantojot apakšprogrammu, mēs varētu samazināt mūsu programmas lielumu līdz 103 baitiem. Tas nevarētu izklausīties tik fantastiski, tomēr, ņemot vērā faktu, ka PIC iekšienē mums ir tikai 1024 baiti, katra mazā summa nāk par labu.

Nākamajā instrukcijā pārbaudīsim lasījumus no ostām.

Līdz šim mēs esam komponējuši portam A, lai mēs spētu ieslēgt un izslēgt LED. Šajā brīdī mēs redzēsim, kā mēs lasīsim I / O tapas ostās.

Ieejas / izejas portu lasīšana

Tas ir tieši tāpēc, lai nodrošinātu, ka mēs spējam sasaistīt ārēju ķēdi un ietekmēt visus konkrētos tā piedāvātos rezultātus.

Ja jūs atceraties no mūsu iepriekšējiem kursiem, ja vēlaties izveidot I / O porti, mums vajadzēja pāriet no 0 bankas uz 1. banku. Sākotnēji to paveiksim:

Šajā brīdī ievadei mēs esam fiksējuši A porta 0 bitu. tagad mums jāpārbauda, ​​vai tapa ir augsta vai zema. Lai to paveiktu, var izmantot tikai vienu no diviem norādījumiem:

BTFSC un BTFSS.

BTFSC instrukcija nozīmē “Veiciet mazliet pārbaudi reģistrā, kā arī bitu, kuru mēs norādām.

Ja tas ir 0, tādā gadījumā mēs izlaižam nākamo norādījumu ”. BTFSS nozīmē ‘Veiciet mazliet pārbaudi reģistrā un bitu, kuru mēs izveidojam. Ja tas ir iestatīts uz 1, mēs apejam nākamo instrukciju.

To, kuru mēs izmantojam, nosaka tieši tas, kā mēs vēlamies, lai mūsu programma reaģē, kamēr mēs pētām ieguldījumu. Piemēram, gadījumā, ja mēs tikai gaidām ievadi 1, mēs, iespējams, varēsim izmantot BTFSS instrukciju šādā veidā:

Kods šeit:

BTFSS PortA, 0 Sākt Sākt Turpiniet šeit:
:

Programma vienkārši pārietu uz “Pārvadāt šeit” ar nosacījumu, ka PortA 0 bits ir paredzēts 1.

Pašlaik mēs rakstīsim programmu, kas varētu pamudināt LED ar vienu ātrumu, tomēr, ja slēdzis ir ierobežots, tas LED mirgos divas reizes lēnāk.

Iespējams, ka jūs patstāvīgi izmantojat šo programmu, tomēr mēs kaut kā esam iekļāvuši sarakstu.

Jūs varētu mēģināt autorēt visu programmu, lai pārbaudītu, vai gadījumā, ja esat sapratis principus. Mēs izmantosim līdzvērtīgu ķēdi kā iepriekš, iekļaujot PIC pievienoto slēdzi RA0 un mūsu piegādes pozitīvo sliedi.

Tas, ko mēs esam paveikuši, ir ieslēgt LED. Pēc tam es nosaku, vai slēdzis ir izslēgts.

Ja tas ir ierobežots, tad es izveidoju savienojumu ar mūsu kavēšanās apakšprogrammu. Tas mums nodrošina līdzvērtīgu kavēšanos kā līdz šim, tomēr mēs šobrīd ar to sazināmies divas reizes.

Tas pats attiecas uz gadījumiem, kad gaismas diode ir izslēgta. Gadījumā, ja slēdzis nav aizvērts, mums ir ierakstīti iepriekšējie ieslēgšanas un izslēgšanas periodi.

Vai esat sekojis šīm nodarbībām no paša sākuma, iespējams, mēģināt saprast, ka pašlaik esat atradis desmit no 35 PIC 16F84 35 instrukcijām! Katru no šiem gadījumiem var iemācīties, tikai ieslēdzot un izslēdzot LED.

Līdz šim mēs esam izveidojuši PIC, kas mirgo ar LED ieslēgšanu un izslēgšanu.

Pēc tam mēs spējām ar mūsu PIC, iekļaujot slēdzi, tādējādi mainot zibspuldzes ātrumu.

Efektīva atmiņas vietas izmantošana

Vienīgais jautājums ir tāds, ka programma ir diezgan gara un diezgan neefektīva atmiņā. Tas šķita labi, kamēr es pirmo reizi iekļāvu komandas, tomēr vajadzētu būt vienkāršākam tā izpildes veidam. Pozitīvi, ka mēs analizēsim, kā mēs burtiski ieslēdzām un izslēdzām LED.

movlw 02hmovwf PORTAMovlw 00hmovlw PORTA

Sākumā mēs piebāzām w reģistru ar 02h, pēc tam to pārsūtījām uz mūsu PortA reģistru, lai ieslēgtu LED. Lai to izslēgtu, mēs iesaiņojām w ar 00h, pēc kura to pārcēlām uz mūsu PortA reģistru.

Starp visām šīm kārtībām mēs bijām spiesti sazināties ar apakšprogrammu, lai nodrošinātu, ka mēs varam novērot, kā mirgo LED.

Tāpēc mums vajadzēja pāris reizes pārsūtīt divus informācijas komplektus (vienu reizi w reģistrā, pēc tam uz PORTA), kā arī divas reizes izsaukt apakšprogrammu (vienu reizi ieslēgt, vienu reizi izslēgt). Tātad, kā mēs to varētu panākt ar lielāku efektivitāti? Ļoti vienkārši.

Mēs izmantojam citu instrukciju, kas pazīstama kā XORF. XORF instrukcija reģistrā darbojas ar funkciju Exclusive OR, kuru mēs norādām ar mūsu sniegto informāciju. Es uzskatu, ka man ir jāprecizē, kas pasaulē ir ekskluzīvs VAI, pirms turpinām. Gadījumā, ja mums ir divas ieejas un viena izeja, ieeja var būt tikai 1, ja abas ieejas atšķiras. Lai gan tie ir vienādi, izeja, iespējams, būs 0. Tālāk sniegta patiesības tabula personām, kuras izvēlas pārbaudīt šīs:

A B F0 0 00 1 11 0 11 1 0

Šajā brīdī mēs pārbaudīsim, kas notiek, ja mēs atveidosim B tāpat kā mūsu iepriekšējo izvadi un vienkārši mainīsim A vērtību:

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

Ja mēs saglabātu vērtību A kā 1, un mēs to izslēgtu VAI ar izvadi, izeja pārslēgtos. Ja to nevarat pamanīt no patiesības tabulas, zemāk to var redzēt, izmantojot bināro:

0 Pašreizējā izeja
EX-OR ar 1 1 jaunu izvadi
EX-OR ar 1 0 jaunu izeju

Varbūt jūs varat atrast, ka, izņēmuma kārtā OR izejot ar 1, mēs tagad pārslēgsim izvadi no 0 uz 1 līdz 0.
Tādējādi, lai ieslēgtu un izslēgtu mūsu LED, mums ir nepieciešami tikai daži teikumi:

MOVLW 02h
XORWF DURVIS, 1

Tas, ko mēs precīzi veiksim, ir mūsu reģistru pievienošana ar 02h. Tādā gadījumā mēs esam ekskluzīvi OR pasūtot šo numuru neatkarīgi no tā, kas atrodas mūsu PortA. Gadījumā, ja bits 1 ir 1, tas mainīsies uz 0. Ja bits 1 ir 0, tas mainīsies uz 1. Pārbaudīsim šo kodu vienu vai divas reizes, lai parādītu, kā tas darbojas binārā veidā:

DURVIS
00010
xorwf 00000
xorwf 00010
xorwf 00000
xorwf 00010

Mums faktiski katru reizi nav jāielādē identiska vērtība mūsu reģistrā, tāpēc to ir iespējams izpildīt vienu reizi sākumā un vienkārši atgriezties pie mūsu pārslēgšanas komandas. Turklāt mums nav jānosaka vērtība mūsu PortA reģistrā. Iemesls? Protams, tā kā ieslēgšanas gadījumā tas ir 1, mēs to varam viegli pārslēgt. Es, alternatīvi, ieslēdzot 0, mēs pat tagad to pārslēgtu.

Tāpēc jūs vēlētos redzēt mūsu jaunizveidoto kodu. Pirmais apzīmē mūsu mirgojošo LED kodu, bet otrais parāda kodu ar slēdža pievienošanu:

Vēlamies, lai jūs uzzinātu, ka, vienkārši izmantojot vienu vienkāršu instrukciju, mēs tagad esam samazinājuši mūsu programmas mērogu. Patiesība ir tāda, ka, lai parādītu, cik daudz mēs varētu samazināt mūsu programmas, mēs esam parādījuši abas programmas, tikai tās, kas tika izveidotas, un to izmērus zemāk esošajā tabulā:

Programmas mainītāja izmēri (baiti)
Mirgojošs LED Original 120
Mirgojoša LED apakšprogramma Pievienota 103
Mirgojoša LED XOR funkcija izmantota 91
LED ar slēdzi Original 132
Gaismas diode ar slēdzi XOR izmantota 124.

Tāpēc mēs ne tikai esam atklājuši dažus jaunus norādījumus, bet arī noteikti esam samazinājuši mūsu skriptu lielumu!

Tālāk mēs analizēsim, kā jūs varat savaldīt atsevišķus bitus, veikt noteiktu tiešu aritmētiku, kā arī datu tabulas.

Loģiskie vadītāji

Pēdējās apmācības laikā es iepazīstināju ar darbību Ekskluzīvs VAI. ExOR funkcija tiek saprasta kā loģisks operators.

Šajā apmācībā es izgaismošu papildu loģiskos operatorus, kurus PIC veicina. Punktu programmās nebūs neviena gadījuma, tomēr mēs iemācīsimies vienkāršas operatoru izmantošanas metodes, izmantojot nelielus koda apgabalus.

AND funkcija AND pamatā analizē divus bitus un nodrošina 1, neatkarīgi no tā, vai tie ir vienādi, un 0, ja tie ir atšķirīgi. Piemēram, ja mēs pieminējām 1 UN 1, rezultāts ir 1, savukārt gadījumā, ja mēs deklarējām 1 UN 0, sekas būtu 0.

Lieki teikt, ka mēs spējam novērtēt arī vārdus, kā arī visas AND funkcijas, kuras tiek veiktas, ir pamazām pārskatīt abus terminus. Tālāk parādītais piemērs parāda divus 8 bitu vārdus, kas kopā ar produktu kļūst par ANDed:

11001011
UN 10110011
Vienāds ar 10000011

Es ceru, ka piekrītat, iznākumam vienkārši būs 1, kad 2 1 roku rokā ir viens ar otru pāris vārdos. Mēs varam izmantot AND funkciju, lai, piemēram, pārbaudītu ostas.

Gadījumā, ja mēs pārbaudām dažus I / O tapas, kas ir savienotas ar ķēdi, un mums vajadzētu sekot līdzi konkrētai situācijai, kurā tikai daži no tapām ir augstu, tādā gadījumā mēs varam diezgan daudz nolasīt portu, pēc kura UN rezultāts ar nosacījumu, kuru mēs pārbaudījām, ir identisks iepriekš minētajam gadījumam.

PIC nodrošina mums divas sastāvdaļas AND.
Tie ir ANDLW un ANDWF. ANDLW ļauj mums veikt AND funkciju ar W reģistra detaļām un summu, kuru mēs norādām.

Sintakse ir: ANDLW, kurā ir tieši tas, uz ko mēs ejam, un W saturs ar.

Funkcijas AND sekas tiktu saglabātas tieši W reģistrā.
ANDWF ļauj mums veikt AND funkciju W reģistrā un citā reģistrā, piemēram, PORT. Sintakse ir: ANDWF, d, kurā ir reģistrs, par kuru mēs esam sajūsmā, piem. PORTA un d parāda PIC, kur jānovieto rezultāts. Ja d = 0, rezultāts tiek ierakstīts W reģistrā, un no d = 1 gala rezultāts tiek saglabāts mūsu noteiktajā reģistrā. Divās zemāk esošajās koda daļās ir parādīts labs katras AND funkcijas piemērs.

Sākotnējais ir PORTA statusa pārbaude, kurā mums jāpārbauda, ​​vai ievadi ir 1100. Rezultātu varam ievietot atpakaļ W reģistrā.

movlw 1100
ANDWF 05h, 0 Otrā ilustrācija tagad var pārbaudīt W reģistra saturu:
ANDLW 1100

VAI

Tagad mēs esam atklājuši vienu OR funkciju, precīzāk sakot, XOR. Tas pārvēršas par 1, ja divi biti nav vienādi, bet ir atšķirīgi. Jūs varat atrast citu OR funkciju ar nosaukumu IOR, kas ir iekļaujošais OR. Šī funkcija ģenerēs 1, ja jebkurš bits ir 1, bet papildus tam, ja katrs bits ir 1. Zemāk ir skaidra patiesības tabula, kas to ilustrē:

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

Kas ir aritmētiskie operatori

PIEVIENOT

Šī funkcija izpilda to, ko parasti apgalvo. Tas dod divus skaitļus! Gadījumā, ja abu skaitļu pievienošanas sekas pārsniedz 8 bitus, iespējams, tiks iestatīts karodziņš CARRY. CARRY karogs atrodas adresē 03h bit 0.

Kad šis bits ir ieplānots, abi skaitļi pārsniedza 8 bitus. Kad tas ir 0, tādā gadījumā sekas atrodas 8 bitu robežās. Tāpat kā iepriekš, PIC nodrošina mums divus ADD stilus, īpaši ADDLW un ADDWF. Kā jūs, iespējams, esat pieņēmis, tas ir līdzīgs iepriekšminētajai funkcijai. ADDLW piedāvā W reģistra saturu tam, ko mēs noteicām. Sintakse ir šāda: ADDLW ADDWF pievieno W reģistra un kāda cita mūsu norādītā reģistra saturu.

Sintakse ir: ADDWF, d ir kur

SUB

Šajā brīdī es domāju, ka jūs nevarat pieņemt, ko šī funkcija veic! Patiešām, jums bija aizdomas, šī funkcija
atņem vienu bitu no otra. Atkal PIC nodrošina mums 2 gaumes: SUBLW un SUBWF. Sintakse ir tieši līdzīga funkcijai ADD, izņemot to, ka acīmredzot ADD vietā ierakstāt SUB!

Pieaugums Gadījumā, ja mēs vēlētos PIC iekļaut skaitli 1, mēs absolūti varētu izmantot funkciju ADD un izmantot numuru viens. ~ Grūtības ir tādas, ka mums vispirms ir jāievieto skaitlis W reģistrā, pēc tam jāizmanto ADDLW 1 vadīkla, lai to palielinātu. Gadījumā, ja mēs vēlētos iekļaut 1 reģistrā, tas var būt vēl sliktāk. Vispirms mums ir jāievieto skaitlis 1 W reģistrā, pēc tam jāizmanto ADDWF, 1. Tāpēc, piemēram, lai iekļautu 1 vietā 0C, teiksim, mums vajadzētu būt šādai skripta daļai:

movlw 01
addwf 0c, 1

Pastāv vienkāršāka metode, kā to izdarīt. Mēs varam izpildīt komandu INCF. Sintakse ir: INCF, d kur, ir reģistrs vai vieta, kurā mēs esam noraizējušies, un d parāda PIC, kur jums jānovieto rezultāts. Gadījumā, ja d = 0, rezultāts ir W reģistrā, un gadījumā, ja d = 1, sekas tiek noteiktas mūsu noteiktajā reģistrā.

Izmantojot šo individuālo instrukciju, mēs faktiski varam iegūt piecdesmit procentus kodēšanas. Gadījumā, ja mēs vēlējāmies, lai rezultāts tiktu atjaunots W reģistrā, tādā gadījumā, izmantojot iepriekš minēto gadījumu, mums, iespējams, vajadzēja iekļaut papildu komandu, lai pārvietotu 0C elementus atpakaļ W reģistrā, pēc kura 0C reģistrs atkal jānovieto uz vienalga, kas tas bija.

Pastāv pieauguma komanda. Tas ir INCFSZ. Šī komanda var palielināt mūsu noteikto reģistru, tomēr, ja reģistrs ir vienāds ar 0 pēc pieauguma (tas notiks, kamēr mēs iekļaujam no 1 līdz 127) pēc tam, PIC, iespējams, izturēs nākamo instrukciju. Tālāk redzamā koda daļa to atspoguļo:

Cilpa incfsz 0C
Goto cilpa
:
:
Pārējā programmas daļa.

Iepriekš minētajā koda daļā 0C tiks palielināts ar 1. Tālāk mums pieder instrukcija, kas informē PIC atgriezties pie mūsu taga ar nosaukumu Loop un vēlreiz palielina 0C par 1. Tas turpinās līdz brīdim, kad 0C būs vienāds ar 127. Šajā gadījumā, kad mēs palielinām 0C par 1, 0C tagad sakritīs ar 0. Mūsu INCFSZ instrukcija varētu ļoti labi informēt PIC izlaist nākamo instrukciju, kas šajā gadījumā ir goto deklarācija, līdz ar to PIC turpinās programmas atlikušo daļu.

Samazinājums

Mēs jau esam apsprieduši samazināšanas funkciju iepriekšējās apmācībās, tāpēc es to vairs nepārskatīšu.

Papildināt

Šīs diskusijas galīgais norādījums mainīs katru mūsu reģistrā iekļauto bitu. Sintakse ir: COMF, d kur

Izpratne par bitu operācijām

To varētu izmantot, piemēram, lai ātri nomainītu ostas tapas no izvades uz ievadi utt. Bitu funkcijas ļauj mums izteiksmē veidot vienu bitu. Tie ļauj mums turpināt, iestatīt un atbrīvoties no atsevišķiem bitiem reģistros vai numuros, kurus mēs norādām.

Pēc šī kursa noslēguma mēs atklāsim programmu, kas izveidota, lai izveidotu sekvencēšanas gaismu komplektu, kas virzās uz priekšu, pēc tam pretēji. Mēs novērojām, ka tas tika paveikts agrāk, kad mēs pārbaudījām ekskluzīvo OR funkciju, kurā mēs tikai ekskluzīvi novirzījām ostas ar izteiksmi. Mēs esam līdz šim pamanījuši dažas bitu funkcijas, kad mēs izveidojam PIC porti un

Ļaujiet man šeit atkārtot to izmantošanu.

BCF

Šī instrukcija nedaudz izdzēsīs to, ko mēs norādām reģistrā, kuru mēs norādām. Sintakse
ir:
BCF,

Mēs to izmantojām agrāk, lai mainītu no 1. lappuses uz 0. lappusi, noņemot mazliet STATUS reģistrā. Mēs varam to izmantot arī, lai mazliet labotu uz 0 jebkurā citā reģistrā / vietā. Piemēram, ja mēs vēlētos iestatīt 3. bitu 11001101, kas saglabāts 0C sadaļā 0, mēs varētu
ievietot:

BCF 0C, 03

BSF

Šī instrukcija labos jebkuru mūsu noteikto bitu līdz 1 jebkurā reģistrā, kuru norādām. Mēs to izmantojām iepriekš, lai pārietu no 0. lappuses uz 1. lappusi. Sintakse ir: BSF ,, un tiek izmantota tieši tādā pašā metodē kā BCF iepriekš.

BTFSCU Līdz šim mēs varētu iestatīt vai notīrīt mazliet reģistrā. Tomēr iedomājieties, vai mums ir jāpārbauda, ​​vai bits reģistrā ir 1 vai 0?

Protams, ir iespējams izmantot BTFSC. Tajā norādīts bitu testa reģistrs F un izlaist, ja tas ir skaidrs. Šajā instrukcijā tiks analizēts bits, kuru mēs norādām reģistrā. Gadījumā, ja bits ir 0, instrukcija informēs PIC, nokārtojot nākamo instrukciju.

Mēs varētu izmantot šo instrukciju gadījumā, ja mēs vēlētos pārbaudīt karodziņu, piemēram, pārnēsāšanas karodziņu. Tas mums ietaupa nepieciešamību lasīt STATUS reģistru un meklēt atsevišķus bitus, lai uzzinātu, kuri karodziņi ir fiksēti. 29 Piemēram, ja mēs vēlētos pārbaudīt, vai Carry karogs ir iestatīts uz 1, pēc tam, kad esam pievienojuši 2 skaitļus, mēs varam ierakstīt šādi:

BTFSC 03h, 0
turpiniet šeit, ja iestatīts uz 1
vai šeit, ja iestatīts uz 0

Gadījumā, ja bita statuss ir 1, tādā gadījumā tiktu izpildīta BTFSC sekojošā instrukcija. Ja tas ir iestatīts uz 0, tādā gadījumā nākamā instrukcija tiek izlaista. Šāda koda daļa parāda, kur to var izmantot:

Cilpa:
:
:
BTFSC 03,0
Goto cilpa

Iepriekš minētajā kodā PIC vienkārši izkļūs no cilpas, ja STATUS reģistra 0 bits (vai Carry karogs) ir definēts kā 0. Vai arī citādi tiktu izpildīta komanda goto.

BTFSS

Šajā instrukcijā norādīts bitu testa reģistrs F un izlaist, ja iestatīts. To var salīdzināt ar BTFSC instrukciju, izņemot to, ka PIC izlaistu nākamo instrukciju, ja mūsu novērtētais bits ir iestatīts uz 1, nevis 0.

CLRF

Ar šo instrukciju visa reģistra informācija tiks salabota uz 0. Sintakse ir šāda:

CLRF
Mēs to izmantojām agrāk, lai ostu izlaidi iestatītu uz 0, piemērojot CLRF 85h. Turklāt mēs to izmantojām, lai piestiprinātu ostas, lai iekļautu visas tapas izvadē, izmantojot CLRF
05h.

CLRW

Tas varētu būt līdzīgs CLRF instrukcijai, izņemot W reģistra notīrīšanu. Sintakse ir diezgan vienkārši:

CLRW

RLF un RRF

Šie virzieni reģistrā mazliet transportētu vienu slotu pa kreisi (RLF) vai pa labi (RRF) reģistrā. Piemēram, ja mums bija nepieciešams 00000001 un mēs izmantojām RLF, tādā gadījumā mums varētu būt 00000010. Kas šajā brīdī notiek, ja ir 10000000 un piemēro RLF instrukciju? Protams, 1 būtu novietots karodziņā. Gadījumā, ja mēs vēlreiz izmantotu RLF instrukciju, sākumā atkal parādīsies 1. Līdzīgi, tomēr pretēji, notiek RRF instrukcijā. Tālāk redzamais gadījums to parāda RLF instrukcijai, kurā mums ir redzami 8 reģistra biti, kā arī pārnēsāšanas karodziņš:

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

Programmas piemērs

Tagad mēs redzēsim koda paraugu, kuru var apkopot un vadīt. Tas radītu sekvencēšanas gaismu, kas sākas ar PortA 0 bitu, dodoties uz PortB bitu 8 un
pēc tam atgriežoties.
Pievienojiet gaismas diodes katrai no ostas tapām. Mums būs mazliet
šajā apmācībā norādītās procedūras.

TIME EQU 9FH Mainīgs aizkaves ciklam.
PORTB EQU 06H B ostas adrese.
TRISB EQU 86H B osta Tristate.
PORTA EQU 05H osta A adrese.
TRISA EQU 85H ports A Tristates adrese.
STATUS EQU 03H Lapas atlases reģistrs.
COUNT1 EQU 0CH cilpu reģistrs.
COUNT2 EQU 0DH cilpu reģistrs.

BSF STATUSS, 5 Pārejiet uz 1. lpp
MOVLW 00H un iestatiet
MOVWF TRISB gan A, gan B ostā
MOVLW 00H uz izvadi,
Pēc tam atgriezieties MOVWF TRISA
BCF STATUSS, 5. lpp. 0.
MOVLW 00H Notīrīt A porti.
MOVWF DURVIS

Galvenās programmas sākums

RUNMOVLW
01H Iestatiet pirmo bituMOVWF
PORTB ostā B. ZVANIET
KAVĒŠANA Pagaidiet brīdiZVANIET
KAVA
Pārvietojiet bitu B ostā pa kreisi, pēc tam pauzējiet .RLF
PORTB, 1CALL
AIZkavēšanās
DELAYRLF
PORTB, 1CALL
AIZkavēšanās
DELAYRLF
PORTB, 1CALL
AIZkavēšanās
DELAYRLF
PORTB, 1CALL
AIZkavēšanās
DELAYRLF
PORTB, 1CALL
AIZkavēšanās
DELAYRLF
PORTB, 1CALL
AIZkavēšanās
DELAYRLF
PORTB, 1CALL
AIZkavēšanās
DELAYRLF
PORTB, 1 Tas pārvieto uzgali pārnēsāšanas karodziņā
Tagad pārejiet uz A portu un pārvietojiet bitu pa kreisi
PORTA, 1 Tas pārvieto bitu no nulles karodziņa uz PortACALL
DELAYCALL DELAYRLF
DURVIS, 1ZVANIET
AIZkavēšanās
DELAYRLF
DURVIS, 1ZVANIET
AIZkavēšanās
DELAYRLF
DURVIS, 1ZVANIET
AIZkavēšanās
KAVA
Pārvietojiet bitu atpakaļ portā ARRF
DURVIS, 1ZVANIET
AIZkavēšanās
KAVĀJUMS
DURVIS, 1ZVANIET
AIZkavēšanās
KAVĀJUMS
DURVIS, 1ZVANIET
AIZkavēšanās
KAVĀJUMS
PORTA, 1 Tas pārvieto bitu nulles karodziņā. Tagad pārvietojiet bitu
atpakaļ uz BRRF ostu
PORTB, 1CALL
AIZkavēšanās
KAVĀJUMS
PORTB, 1CALL
AIZkavēšanās
KAVĀJUMS
PORTB, 1CALL
AIZkavēšanās
KAVĀJUMS
PORTB, 1CALL
DELAYCALL DELAYRRF
PORTB, 1CALL
AIZkavēšanās
KAVĀJUMS
PORTB, 1CALL
AIZkavēšanās
KAVĀJUMS
PORTB, 1CALL
AIZkavēšanās
Kavēšanās Tagad mēs esam atgriezušies tur, kur mēs sākām, GOTO
RUN ejam atkal.

Apmācību komplektā ir lieliska iespēja, kas ļauj izmantot datu tabulu.

Datu tabula ir tikai datu citātu saraksts, kurā viss tiek izskatīts, pamatojoties uz dažiem apsvērumiem.
Piemēram, jums varētu būt ķēde, kas izmanto PIC, kas skaita gadījumu skaitu, kad ievades tapa kļūst augsta vienas sekundes laikā. Pēc tam numuru var parādīt 7 segmentu displejā.

Tiklīdz laiks ir sācies, PIC sāk skaitīt to gadījumu skaitu, kad tapa ir augsta. Pēc 1 sekundes tas apmeklē galdu un uzmeklē datus, uz kuriem displejā jāparāda skaitlis, kas simbolizē to, cik daudz piespraudes gadījumu bija daudz. Tas var būt izdevīgi, jo mēs nenosakām, kāds skaitlis varētu būt, kamēr PIC nav izpildījis savu aplēsi.

Izmantojot tabulu, mēs varam ļaut PIC noteikt, kuru skaitli attēlot. Šajā brīdī, pirms es turpinu jums parādīt, kā darbojas datu tabula, man, iespējams, būs jāpasaka jums, ka PIC saglabā programmas atrašanās vietu tajā laikā, kamēr tā darbojas.

Tas atvieglo tos, kuri ir veikuši noteiktu programmēšanu BASIC. Pretējā gadījumā neuztraucieties, iespējams, vēlēsities turpināt apgūt teoriju. Iedomājieties, ka ir BASIC programma, kas ir līdzīga zemāk redzamajai:

10 GADI K = 0
11 K = K + 1
12 JA K> 10 TAD GOTO 20 CITI GOTO 11
20 DRUKĀT K
21 BEIGT

Programma sākas 10. rindā. Tiklīdz K ir ieplānots 0, tā nāk uz priekšu 11. rindā. Pēc tam, kad mēs esam iekļāvuši 1 līdz K, mēs pēc tam turpinām 12. rindu.

Šajā brīdī mēs varētu būt ziņkārīgi, ja K ir augstāks par 10. Ja tas tā ir, tad nākamais dodamies uz 20. līniju vai arī mēs atgriežamies pie 11. rindas.

20. rinda dokumentē K, un 21. rinda noslēdz programmu. BASIC izmanto statistikas datus, lai palīdzētu programmētājam reģistrēt problēmas, jo etiķetes nav atļautas. PIC izmanto uzlīmes, lai aizbēgtu starp galamērķiem - vai tas tiešām var?

Mēs izmantojam etiķetes, lai pārliecinātos par to, kur ir problēmas, kā arī lai mēs spētu vienkāršā veidā informēt PIC, kur meklēt.

Precīzi notiek tas, ka PIC izmanto iekšējās līnijas skaitītāju, ko sauc par programmas skaitītāju. Programmas skaitītājs (saīsināti ar datoru) taka atmiņas galamērķim, kur atrodas šī instrukcija.

Ikreiz, kad mēs informējam PIC apmeklēt izvēlēto etiķeti, tā saprot atmiņas vietu un tāpēc palielina datoru, līdz redz šo atmiņas galamērķi. Šī ir tieši tā pati metode, kā mēs pārbaudām iepriekš minēto BASIC programmu. Zem katras instrukcijas ir koda segments ar atmiņas vietām vai datora elementiem:

Datora instrukcija0000 movlw 03
0001 movwf 0C
0002 Cilpa decfsc 0C
0003 goto cilpa
0004 beigas

Iepriekš redzamajā attēlā mēs esam salabojuši datoru uz 0000. Tajā mums ir instrukcija movlw 03. Kad PIC ir ieviesis šos datus, tas palielina datoru, lai skenētu nākamo instrukciju. Šajā brīdī PIC skati movwf 0C. Dators atkal tiek palielināts.

Tagad PIC pētījumi decfsc 0C. Gadījumā, ja 0C informācija nav 0, tādā gadījumā datoru palielina ar 1, kā arī sekojošā instrukcija goto Loop informē datoru, lai atgrieztos 0003 pozīcijā, kas ir minētā cilpa. Gadījumā, ja 0C informācija ir 0, personālajam datoram ieteicams palielināt par 2, vienkārši izslēdzot nākamo instrukciju.

Izpratne par datu tabulām

Tas novieto datoru 0004 pozīcijā, kur programma tiek pabeigta. Galamērķus nosaka montētājs, un mums parasti nav jāuztraucas par datora sasniegumiem. Līdz brīdim mēs uzskatām, ka ir nepieciešams to kontrolēt tāpat kā to darām, izmantojot datu tabulas. Visērtākais veids, kā aprakstīt datu tabulas darbību, ir sākt ar ilustrāciju.

PC equ 02
movlw 03
zvanu tabula
:
galda addwf dators
retlw 01
retlw 02
retlw 03
retlw 04
retlw 05
retlw 06
retlw 07
atgriešanās

Sākotnējā instrukcijā tiek piešķirta etiķete PC ar Program Counter adresi (02h). Drīz mēs būsim pēc 03h vērtības ievietošanas w reģistrā. Pēc tam mēs sazināmies ar galdu. Apakšprogrammas tabulas priekšējā līnija papildina W reģistra (03h) datus uz programmas skaitītāju.

Tas liek programmas skaitītājam paaugstināt par 3 vai, citādi izsakoties, stimulē programmas skaitītāju iet uz leju 3 rindās. Kamēr skaitītājs nonāk 3 līnijas uz leju, PIC atpazīst instrukciju retlw. Šī komanda nosūta tai sekojošo vērtību W reģistrā, pēc tam atgriežoties no apakšprogrammas. RETLW būtībā apzīmē atgriešanos, burtiski pret W.

Skatiet, ka es ievietoju komatu aiz vārda Return. Tā kā mēs atrodamies apakšprogrammā, mums ir nepieciešama atgriešanās instrukcija uz tās virsmas. Tāpēc NĪN instrukcijā. Pēc tam, kad RETLW instrukcija ir skaitlis, un tas ir tieši tas, kas tiek ierakstīts W reģistrā.

Šajā gadījumā tas ir skaitlis 3. Mēs varētu reģistrēt jebkuru daudzumu W reģistrā, ja vien šis skaitlis ir apvienots ar programmas skaitītāju tabulas apakšprogrammā, mēs atklāsim retlw instrukciju. Iepriekš redzamajā attēlā tas nozīmē, ka mums var būt jebkurš skaitlis no 1 līdz 7. Ja turpināsim apakšprogrammu, mēs varētu pabeigt papildu programmas sadaļu. Šī iemesla dēļ datu tabulas izvietošana tieši PIC programmas beigās parasti ir gudrs solis, tādēļ, ja šajā gadījumā pārsniegsim, mēs jebkurā gadījumā nonāksim pie programmas noslēguma.

Pārtraukumu tēma var būt visilgākā un visgrūtākā.

Jūs nevarat atrast nevienu nesarežģītu pārtraukumu detalizēšanas metodi, tomēr ar nelielu veiksmi šīs daļas beigās, iespējams, varēsiet pielietot pārtraukumus arī savās programmās.
Mēs esam sadalījuši sadaļu 2 posmos. Tas ir, lai ļautu tēmu sadalīt sadaļās, kā arī nodrošināt ērtu izpratni.

Kas īsti ir pārtraukums? Protams, kā norāda termins, pārtraukums ir paņēmiens vai signāls, kas neļauj mikroprocesoram / mikrokontrollerim veikt jebkādas darbības, lai varētu notikt kaut kas cits.

Ļaujiet man sniegt jums ikdienas ilustrāciju. Domājiet, ka jūs atpūšaties savās mājās, sarunājaties ar citu cilvēku. Pēkšņi atskan tālrunis.

Jūs pārtraucat runāt un paņemat tālruni, lai runātu ar zvanītāju. Kad esat sazinājies ar tālruni, jūs nolemjat atgriezties pie sarunas ar personu pirms tālruņa zvana. Ir iespējams apsvērt galveno rutīnu, kamēr jūs tērzējat ar kādu citu, tālruņa zvana dēļ tiek traucēta jūsu saruna, un rutīnas pārtraukums ir metode, kā runāt pa tālruni.

Kamēr diskusija pa tālruni beidzas, jūs atgriežaties pie savas sarunas. Šī ilustrācija ir tieši tā, kā pārtraukt procesora darbību.

Primārā programma darbojas, veicot noteiktas funkcijas ķēdē, taču, kad notiek pārtraukums, galvenā programma apstājas, kamēr tiek veikta cita kārtība. rutīna beidzas, procesors pāriet atpakaļ uz primāro rutīnu tāpat kā iepriekš.

Izpratne par pārtraukumiem

PIC ir 4 pārtraukuma avoti. Tos varēja sadalīt pāris grupās. Divi ir pārtraukumu avoti, kurus var izmantot ārēji PIC, bet pārējie divi ir iekšējie procesi. Ļaujiet man šeit precizēt divus ārējos veidus. Pārējie divi tiks aprakstīti dažādās apmācībās, tiklīdz būsim nonākuši pie taimeriem un saglabāsim datus.

Ja pārbaudīsit PIC piespraudi, pamanīsit, ka 6. kontakts ir RB0 / INT. Šajā brīdī RB0 nepārprotami ir B porta bits 0. INT norāda, ka to varētu konfigurēt arī kā ārējā pārtraukuma tapu. Turklāt B porta tapas no 4 līdz 7 (tapas no 10 līdz 13) var izmantot arī pārtraukumiem. Pirms mēs varam izmantot INT vai citas Port B tapas, mums ir jāveic divi uzdevumi. Vispirms mums jāinformē PIC, ka mēs izmantosim pārtraukumus.

Tālāk mums ir jānorāda, kuru B porta tapu mēs izmantosim kā pārtraukumu, nevis kā I / O tapu. PIC iekšpusē varat atrast reģistru, kas pazīstams kā INTCON, un tas atrodas adresē 0Bh. Šajā reģistrā jūs atradīsit 8 bitus, kas var būt iespējoti vai atspējoti. INTCON 7. bits ir pazīstams kā GIE. Šī ir globālā starplauzuma iespējošana. Nosakot to uz 1, PIC informē, ka mēs izmantosim pārtraukumu.

INTCON 4. bits ir pazīstams kā INTE, INTerrupt Enable. Ievietojot šo bitu līdz 1, PIC tiek paziņots, ka RB0 būs pārtraukuma tapa. Konfigurējot 3. bitu, sauktu par RBIE, PIc tiek informēts, ka mēs izmantosim B porta bitus no 4 līdz 7. Šajā brīdī PIC saprot, kad šī tapa var būt augsta vai zema, jāaptur tā darbība un jāturpina ar pārtraukumu rutīna. Šajā brīdī mums jāinformē PIC, vai pārtraukums, visticamāk, būs signāla transformācijā uz augšupejošo malu (0 V līdz + 5 V) vai kritušās malas (+ 5 V līdz 0 V).

Vienkāršāk sakot, vai mēs vēlamies, lai PIC pārtrauc katru reizi, kad signāls virzās no zemas uz augstu vai no augšas uz zemu. Ar likumpārkāpumu to var noteikt, lai to novietotu uz augošās malas.

Malu ‘iedarbināšana’ ir ieplānota augšējā reģistrā, ko sauc par OPTION reģistru, uz adresi 81h. Bits, par kuru mēs esam sajūsmā, ir 6. bits, ko bieži dēvē par INTEDG.

Ja iestatāt šo vērtību uz 1, PIC tiek traucēta uz stiprinājuma malas (noklusējuma stāvoklis) un iestatīšana uz 0 stimulē PIC traucējumus bīdāmajā malā. Ja vēlaties, lai PIC aktivizētos uz augošās malas, jums noteikti nekas nav jādara šim bitam.

Šajā brīdī, diemžēl, opciju reģistrs atrodas 1. bankā, tas nozīmē, ka mums ir patīkami pārveidot no 0 bankas uz 1 banku, iestatīt bitu Option reģistrā, pēc tam atgriežoties bankā 0. Galvenais šeit ir paveikt katru bitu 1. banka reģistrējas vienā streikā, piemēram, nosakot ostas tapas, pēc tam atgriežoties 0. bankā, ja esat pabeidzis.

Lieliski, līdz ar to mēs esam informējuši PIC, kurš kontakts, iespējams, būs pārtraukums, un kur mala iedarbināt, kas notiek programmā un PIC jebkurā laikā, kad notiek pārtraukums? Notiek pāris sīkumi. Vispirms ir paredzēts ‘karogs’.

Tas informē PIC iekšējo procesoru, ka ir noticis pārtraukums. Pēc tam programmas skaitītājs (par kuru es runāju iepriekšējā apmācībā) sniedz padomus uz konkrētu adresi PIC. Pārbaudīsim šos visus atsevišķi. Pārtraukšanas karogs Mūsu INTCON reģistrā 1. bits ir pārtraukuma karogs, saukts par INTF. Šajā brīdī, kad rodas kāds pārtraukums, šis karodziņš, iespējams, tiks fiksēts uz 1.

Ja nav pārtraukuma, karodziņš tiek novietots uz 0. Kā arī tas gandrīz viss ir paveikts. Šajā brīdī jūs, iespējams, domājat par „kāda jēga?” Protams, pat ja šim karodziņam ir paredzēts 1, PIC nespēj un nereaģēs uz citu pārtraukumu. Tāpēc izteiksimies, ka mēs pārtraucam. Karodziņš, iespējams, tiks fiksēts uz 1, un PIC var izmantot mūsu ikdienu, lai strādātu ar pārtraukumu.

Kad šis karodziņš netika fiksēts uz 1 un PIC bija atļauts turpināt atbildēt uz pārtraukumu, tad, nepārtraukti pulsējot pulti, PIC varētu atgriezties mūsu pārtraukuma rutīnas sākumā un nekādā gadījumā to nepabeigt. Atgriežoties pie manas telefona ilustrācijas, tas ir līdzīgi kā tālruņa pacelšana, un tūlīt pēc tam, kad sākat to apspriest, atkal atkal zvana, jo cita persona vēlas ar jums runāt.

Ieteicams pabeigt vienu dialogu, pēc tam vēlreiz paņemt tālruni, lai runātu ar nākamo personu. Ar šo karodziņu varat atrast nelielu problēmu. Pat ja PIC ātri iestata šo karodziņu uz 1, tas nenosaka to vēlreiz 0! Šī darbība ir jāveic programmētājam - t.i., jums. To var bez piepūles paveikt, jo es esmu pārliecināts, ka tas ir jāpieņem, un tas ir jāsasniedz pēc tam, kad PIC ir izpildījis pārtraukuma rutīnu.

Atmiņas atrašanās vieta Ikreiz, kad sākotnēji ieslēdzat PIC, vai gadījumā, ja ir atiestatīšana, Program Counter iesaka adresēt 0000h, kas varētu būt bez pārtraukuma programmas atmiņas sākumā. Bet, ja notiek pārtraukums, Programmas skaitītājs norāda adresi 0004h.

Tāpēc, kamēr mēs veidojam savu programmu ar pārtraukumiem, mums vispirms ir jāinformē PIC, lai pārietu uz adresi 0004h, un jāuztur pārtraukuma režīms, kas sākas ar adresi 0004h, diskrēti no pārējās programmas daļas.

To var veikt bez problēmām. Sākumā mēs sākam savu programmu ar komandu, kas pazīstama kā ORG. Šī komanda norāda izcelsmi vai sākumu. Mēs turamies pie tā ar adresi. Tā kā PIC sākas ar adresi 0000h, mēs ierakstām ORG 0000h. Pēc tam mums jāapiet adrese 0004h. Mēs to paveicam, ieliekot GOTO instrukciju, kurai pievienota etiķete, kas sniedz padomus mūsu primārajai programmai.

Pēc tam mēs pievienojamies šai GOTO komandai ar vēl vienu ORG, šo brīdi ar adresi 0004h. Pēc šīs komandas mēs ievietosim pārtraukt rutīnu. Šajā brīdī mēs, iespējams, varēsim ierakstīt mūsu pārtraukuma rutīnu tieši pēc otrās ORG komandas, vai arī mēs varam novietot GOTO paziņojumu, kas norāda uz pārtraukšanas rutīnu.

Tas patiešām ir saistīts ar opciju no jūsu puses. Lai informētu PIC, ko tā piedāvā, tika pārtraukta rutīna, mums komanda RTFIE jānovieto rutīnas beigās. Šī komanda nozīmē atgriešanos no pārtraukšanas rutīnas. Kamēr PIC to pamana, Program Counter norāda galīgo stāvokli, kurā PIC atradās pirms pārtraukuma. Tālāk mēs esam izveidojuši īsu koda sadaļu, lai parādītu iepriekš minēto:

Lietojot pārtraucienus, ir jāinformē pāris sīkumi. Sākotnēji mēdz būt tāds, ka, ja jūs, iespējams, izmantojat identisku reģistru savā primārajā programmā un pārtraukuma rutīnā, ņemiet vērā, ka reģistra informācija, visticamāk, mainīsies, kad notiks pārtraukums.

Piemēram, izmantosim w reģistru, lai pārsūtītu datus A porta primārajai programmai, tāpēc jūs varat papildus izmantot w reģistru pārtraukšanas rutīnā, lai datus pārsūtītu no viena mērķa uz citu.

Ja neesat piesardzīgs, w reģistrā tiks iekļauta pēdējā vērtība, ko tā saņēma, kamēr tā bija pārtraukuma rutīnā, tāpēc, atgriežoties pēc pārtraukuma, šī informācija tiks piegādāta A ostā, nevis tā vērtība, kas jums bija iepriekš notika pārtraukums.

Līdzekļi tam ir īslaicīgi saglabāt w reģistra informāciju, pirms atkal to izmantojat pārtraukuma rutīnā. Otrais ir fakts, ka jūs varat atrast aizkavēšanos starp brīdi, kad notiek viens pārtraukums, un kad var rasties nākamais. Kamēr jūs saprotat, PIC ir ārējs pulkstenis, kas, iespējams, varētu būt kristāls vai rezistora-kondensatora kombinācija.

Neatkarīgi no šī pulksteņa frekvences, PIC dala to ar 4, pēc kura to izmanto iekšējam laikam. Piemēram, ja jums ir 4MHz kristāls, kas saistīts ar jūsu PIC, tādā gadījumā PIC izpilda instrukcijas pie 1MHz. Šis interjera laiks ir pazīstams kā instrukciju cikls. Šajā brīdī datu lapa apgalvo (neapšaubāmi, ka mazā drukā), ka jums ir jāiespējo 3 līdz 4 instrukciju kārtas starp pārtraukumiem.

Mans būtu iespējot 4 kārtas. Aizkavēšanās iemesls ir tas, ka PIC prasa laiku, lai pārietu uz pārtraukuma adresi, karodziņu un atgrieztos atpakaļ no pārtraukšanas rutīnas. Tādēļ paturiet to prātā, ja strādājat ar alternatīvu shēmu, lai aktivizētu PIC pārtraukumu.

Šajā brīdī punkts ir fakts, ka, ja kā pārtraukumu izmantojat B porta 4 līdz 7 bitus. Jūs nevarat izvēlēties konkrētas B portā esošās tapas, lai tās darbotos kā pārtraukums.

Tādēļ, ja jūs atļaujat šīs tapas, visticamāk, tās visas var iegūt. Tāpēc, piemēram, nevar būt vienkārši 4. un 5. bits - visticamāk, vienlaikus tiks pilnvaroti arī 6. un 7. biti. Kāds ir mērķis panākt, lai četri biti atspoguļotu pārtraukumu? Protams, jums var būt ķēde, kas savienota ar PIC, ja kāds no četrām līnijām iet uz augšu, tādā gadījumā tas var būt jautājums, kuru jums pieprasa, lai PIC nekavējoties ietekmētu.

Viens piemērs tam varētu būt mājas drošības trauksme, kurā četri sensori ir savienoti ar B porta 4. līdz 7. tapām. Jebkurš īpašs sensors var mudināt PIC izraisīt trauksmi, un trauksmes signalizācijas rutīna ir pārtraukuma rutīna. Tas pasargā ostu pastāvīgu pārbaudi un ļauj PIC turpināt risināt dažādus jautājumus. Nākamajā apmācībā mēs izveidosim programmu, lai pārvaldītu pārtraukumu.

Pēdējā apmācībā mēs tikām galā ar daudziem pamatiem, tāpēc, manuprāt, ir pienācis laiks, kad mēs izveidojām savu pirmo programmu.

Programma, kuru mēs rakstīsim, uzskaitīs to gadījumu skaitu, kad mēs ieslēdzam slēdzi, un pēc tam parādīsim numuru.

Programma tiktu skaitīta no 0 līdz 9, skatāma uz 4 gaismas diodēm binārā formā, kā arī ievade vai pārtraukums, iespējams, būs RB0.

Pirmā lieta, kas mums jāveic, ir informēt PIC, lai viņš pārietu uz adresi, uz kuru norāda Programmas skaitītājs, kad notiek pārtraukums.

Jūs ievērosiet, ka mēs izmantojam unikālu metodi heksadecimālo skaitļu parādīšanai. Pirms es noticu, lietojiet F9h, kurā h norādīts heksadecimāls. Mēs to varētu uzrakstīt kā 0xF9, kas ir struktūra, kuru mēs turpmāk izmantosim.

Tagad mums jāpasaka PIC, ka mēs izmantosim pārtraukumus, un kā pārtraukuma tapu mēs izmantojam RB0 tapu 6:

bsf INTCON, 7GIE - globālā pārtraukuma iespējošana (1 = iespējot)
bsf INTCON, 4INTE - RB0 pārtraukuma iespējošana (1 = iespējošana)
Es katram gadījumam notīrīšu pārtraukuma karodziņu (es nekad neko neuzticos!)
bcf INTCON, 1INTF - notīriet karodziņu katram gadījumam

Pašlaik mums ir jāizveido mūsu 2 ostas. Paturiet prātā, ka, tā kā mēs tagad izmantojam RB0 kā pārtraukuma tapu, tas ir jānosaka kā ievade:

Mēs izmantosim mainīgo ar nosaukumu COUNT, lai saglabātu slēdžu skaitu. Mēs varētu vienkārši palielināt A porta vērtību, bet jūs redzēsiet, kāpēc es izmantoju mainīgo, kad mēs rakstām mūsu pārtraukuma rutīnu.

Tāpēc mūsu galvenā programma ir izveidota, un šajā brīdī mums jāinformē PIC, kā rīkoties ikreiz, kad notiek pārtraukums. Šajā piemērā mūsu pārtraukums, iespējams, būs slēdzis. Katru reizi, kad slēdzis ir ierobežots, tas, ko mēs vēlētos, lai PIC būtu viens no regulējamajiem COUNT.

Neskatoties uz to, mēs tikai vēlamies parādīt, cik reizes slēdzis tiek izslēgts no 0 līdz 9. Iepriekš es teicu, ka mēs varētu vienkārši palielināt A porta vērtību katru reizi, kad notiek pārtraukums. Tomēr ostā A ir 5 biti, ja mēs vienkārši palielinātu ostu, mums būs vislielākais skaitlis 31. Ir daži paskaidrojumi, kāpēc es izvēlējos nepārvietoties līdz 31.

Sākotnēji mēs izmantosim 7 segmentu ekrānu, kas pārsvarā var pārsniegt tikai 0 līdz 15 (sešstūrī no 0 līdz F). Tālāk es vēlos jums parādīt dažas no aritmētiskajām komandām, uz kurām jūs paklupāt dažās iepriekšējās nodarbībās.

Tāpēc mēs turpināsim darboties ar pārtraukumiem. Pašlaik mums vispirms ir īsi jāsaglabā mūsu w reģistra informācija, jo mēs to izmantojām, lai COUNT saturu pārvietotu uz PORTA. Gadījumā, ja mēs to neizglābjam, tādā gadījumā mēs aritmētikas dēļ varētu piegādāt pilnīgi atšķirīgu skaitli. Tāpēc paveiksim to vispirms:

Šajā brīdī mēs saprotam, vai COUNT vērtība ir 9 vai lielāka. Tas, kas mums tagad ir jāpaveic, ir tas, ja COUNT ir lielāks par 9, novietojiet to atpakaļ uz 0 vai atgriezieties galvenajā programmā, lai nodrošinātu, ka mēs spējam to piegādāt A portā. BTFSS komanda, jo jūs saprotat, vai nākamā
instrukcija gadījumā, ja pārvadāšanas karodziņš ir plānots, t.i., COUNT = 10

Vienīgais, kas tagad jādara, ir ievadīt kolektīvi, kā arī noteikt vērtības mūsu konstantēm, kuras mēs varam izpildīt jau savas programmas sākumā.

Katru reizi, kad aktivizējat ieslēgšanu, gaismas diodes tiks skaitītas binārā režīmā no 0000 līdz 1010, pēc tam atkal līdz 0000.

Šajā attēlā parādīta shēma, kas ir saderīga ar iepriekš paskaidroto kodu. Interesanti, ka jūs atradīsit, ka laika kondensators ir iekļauts projektā. Tas ir jauks mazs triks, ar kura palīdzību jūs varat brīvi izvairīties no kondensatora iekļaušanas, ja šajā laikā jums nav neviena.

Šeit kapacitāte nonāk spēlē caur klaiņojošo kapacitāti pāri oscilatora tapai un zemei.
Protams, tas, iespējams, nešķiet ļoti saprātīgs veids, kā praktiski izvairīties no kondensatora, jo klaiņojošā vērtība var atšķirties atkarībā no dažādiem apstākļiem.

Vēl viena sadaļa, ko var redzēt ķēdē, ir denonsējošais tīkls pāri slēdzim. Tas novērš traucējumus mehāniskas pārslēgšanās laikā un novērš PIC sajaukšanos, ja pārslēgšana bija viena pārslēgšana vai vairākas pārslēgšanās.




Pāri: Programmējama divvirzienu motora taimera ķēde Nākamais: Kā darbojas Buck-Boost shēmas