Водич за ПИЦ - Од регистара до прекида

Испробајте Наш Инструмент За Елиминисање Проблема





Пре него што уђемо у детаљне детаље програмирања ПИЦ-а, прво би било важно научити неколико добрих метода програмирања.

Разумевање регистара

За почетак претпоставимо да укуцате (тачку и зарез) у било којој тачки програма, преводилац ће занемарити све оне који долазе након овог зареза, све док се наравно кочија не врати у положај.



Горња карактеристика омогућава нам да додајемо коментаре или примедбе тако да не постану део програма, али нам олакшава да програм идентификујемо уз помоћ коментара поред њега. Давање коментара је препоручена пракса током програмирања било које ИЦ.

Следећа важна ствар у курсу је додељивање имена различитим константама (касније ћете их детаљно научити). Ово такође олакшава разумевање на шта се пише или у вези са укљученим вредностима, уместо да се збуњује са укљученим бројевима.



Горе наведено мора бити изведено у облику стварних имена за тренутно препознавање, на пример ЦОУНТ, било би важно напоменути да су овде употребљена сва велика слова како би се то разликовало и такође указало да је то константна вредност.


Као што видимо, горе наведено је урађено у облику кутије направљене од тачака и зареза, што само чини да изгледа чишће. Поред тога, покушајте документовати програм и на папиру, ова пракса ће вам помоћи да ствари схватите корак по корак.

2. Регистри.

Регистар у оквиру ПИЦ-а је подручје које прихвата писане детаље и омогућава читање из њега. Можете га упоредити са листом папира на којем можете да визуализујете садржај и додате га тако што ћете га преписати.

Слика испод приказује типичну мапу датотека регистра која је уграђена у ПИЦ16Ф84. Формат није нешто што је заправо постављено унутар ПИЦ-а, то је једноставно да би се назначило како битови могу бити распоређени унутар чипа и да би се разумело неколико укључених команди.

Можете видети да је у основи подељен на банку 0 и банку 1. Банка 1 је одговорна за контролу стварног рада ПИЦ-а, на пример, она саопштава ПИЦ-у који су битови у порту А додељени као улази, а који као излази.

Банка 2 је само за манипулисање информацијама.

Да схватимо ово кроз следећи пример:

Претпоставимо да желимо доделити један бит на ПортА хигх. За ово би прво требало да одемо до банке 1 за подешавање наведеног бита или пина на порту А у облику излаза. Након тога враћамо се у банку 0 и испоручујемо логику 1 (бит 1) на тај одређени пин.

Најчешћи регистри које бисмо желели да користимо у банци 1 су СТАТУС, ТРИСА и ТРИСБ.

СТАТУС нам помаже да се вратимо у банку 0, ТРИСА нам омогућава да изаберемо који су пинови на порту А излази и који могу бити улази, док ТРИСБ олакшава избор између излазног и улазног пина на порту Б. РЕГИСТАР СЕЛЕЦТ у БАНК 0 омогућава кориснику да пребаците на банку 1.

Сумирајмо цео концепт следећим описом:

СТАТУС:

Да бисмо се пребацили са банке 0 на банку 1, наређујемо СТАТУС регистар. Ово се спроводи постављањем бита 5 регистра СТАТУС на 1. Да бисмо се вратили у банку 0, додељујемо бит 5 регистра СТАТУС 0. Регистар СТАТУС је позициониран на адреси 03х, овде х означава тат број може бити у хексадецималном облику.

ТРИСА и ТРИСБ:

Они се налазе на адреси 85х и 86х, у складу с тим. За програмирање пина као излаза или улаза, само испоручујемо нулу или јединицу одређеном биту у регистру. Сада се то може учинити на два начина, путем бинарног или Хек-а. У случају да неко не може да претвори параметар, он или она могу потражити научни калкулатор за примену вредности.

Сада имамо 5 пинова на порту А, што одговара 5 пинова. Ако један од пинова намеравамо да поправимо као улазе, испоручујемо „1“ на одређени бит.

У случају да бисмо желели да дамо један од пинова као излазе, поставили бисмо одређени пин на „0“. Битови су помоћ која тачно одговара битовима, или прецизније бит 0 је РА0, бит 1 би био РА1, бит 2 = РА2 и тако даље. Схватимо то на следећи начин:

Претпоставимо да желите да поправите РА0, РА3 и РА4 као излазе, док РА1 / РА2 као и / пс, то бисте учинили слањем 00110 (06х). Проверите да ли је бит 0 удесно како је овде приказано:

Прикључак А Пин РА4 РА3 РА2 РА1 РА0

Бит број 4 3 2 1 0

Бинарни 0 0 1 1 0

Исто важи и за ТРИСБ.

ПОРТА и ПОРТБ

Да бисмо високо привели један од излазних пинова, само нудимо „1“ на одговарајући бит у нашем регистру ПОРТА или ПОРТБ. Идентичан поступак се може следити и за ТРИСА и ТРИСБ регистре. Пре него што пређемо на наш први пример кодирања, хајде да разумемо још неколико регистара, наиме: в и ф.

В и Ф.

В регистар је обичан регистар који вам омогућава да доделите било коју вредност по вашем избору. Чим доделите величину В, можете наставити додавањем ове вредности или једноставно премештањем. Када се додели друга вредност, детаљи се једноставно препишу на В.

Ф регистар прослеђује своју писану материју у регистар. Захтевали бисмо да овај Ф регистар додели вредност преко регистра, може бити преко СТАТУС-а или ТРИСА регистра, јер нам они неће омогућити да вредности поставимо директно преко њих. Пример програма

Испитајмо следећи пример кода који ће нам показати како се примењује горња упутства и који ће такође бити сведоци неколико упутстава у току.

Почнимо са поправљањем порта А као што је горе речено.

За ово морамо прећи са банке 0 на банку1, то се постиже постављањем СТАТУС регистра који се налази на адреси 03х, бит 5 до 1.

БСФ 03х, 5

БСФ значи скуп битова Ф. Након овог упутства користимо два броја - 03х, који је адреса регистра СТАТУС, и број 5 који одговара броју битова.

Дакле, оно што ми кажемо је „Поставите бит 5 у адреси 03х на 1“.

Сада смо у банци 1.

МОВЛВ 00110б

Бинарну вредност 00110 (слово б значи да је број у бинарном коду) стављамо у наш општи регистар В. Могао бих то наравно учинити у хексадецималном формату, у том случају би наша инструкција била:

МОВЛВ 06х

Или функционише. МОВЛВ значи „Преместите литералну вредност у В“, што на енглеском значи вредност која следи директно ставите у В регистар.

Сада морамо да ставимо ову вредност у наш ТРИСА регистар да бисмо поставили порт:

МОВВФ 85х

Ово упутство означава „Преместите садржај В у адресу регистра која следи“, у овом случају адреса се односи на ТРИСА.

Наш ТРИСА регистар у овом тренутку има број 00110 или графички представљен:

Прикључак А Пин РА4 РА3 РА2 РА1 РА0

Бинарни 0 0 1 1 0

Улаз / излаз О О И И О

Дакле, сада поседујемо чиоде за порт А, морамо се вратити у банку 0 да бисмо прилагодили једну од информација.

БЦФ 03х, 5

Овим упутством постиже се обрнуто од БСФ-а. Подразумева „Бит Цлеар Ф“. Пар бројева који одговарају су адреса регистра, овде је СТАТУС регистар, као и фигура бита, у овом случају бит пет. Шта смо тачно довршили у овом тренутку, дефинисано је мало пет на нашем

СТАТУС се региструје на 0

У овом тренутку смо се вратили у банку 0.
Следи код у једном блоку:

БСФ 03х, 5 Идите до банке 1
МОВЛВ 06х Ставите 00110 у В
МОВВФ 85х Преместите 00110 на ТРИСА
БЦФ 03х, 5 Вратите се у банку 0

У оквиру последњег упутства, потврдили смо вам начин успостављања пинова ИО порта на ПИЦ-у који би могли бити улазни или излазни.

Кроз овај курс, дозволите ми да вам помогнем у слању података у луке.

Слање података у луке

У следећем упутству завршићемо трептањем ЛЕД лампица које се укључују и искључују, а које се састоје од комплетних детаља о програму и једноставног дијаграма кола, тако да бисте могли да видите како ПИЦ изводи тачно оно што ми предвиђамо.

Не покушавајте да саставите и програмирате свој ПИЦ са доњим резултатима, јер су они само илустрације. У почетку ћемо успоставити Порт А бит 2 као излаз:

Ово се може препознати из претходних упутстава. Једина разлика би могла бити да смо фиксирали сваки бит пинова на А као излаз, испоручујући 0х у три-државни регистар. Дакле, оно што сада мора да уради је да укључи ЛЕД.

То постижемо постављањем високе пинове (оне са ЛЕД везаном за њу). Другим речима, на иглу примењујемо „1“. Управо се то тако спроводи (за сваки ред погледајте појашњења у коментарима):

Према томе, оно што смо сада постигли је да једном укључимо и искључимо ЛЕД. Оно што желимо је да се ЛЕД лампица накнадно непрекидно укључује.

То постижемо добијањем програма за повратак на почетак. То постижемо успостављањем ознаке на почетку нашег програма, након чега обавештавамо програм да се врати тамо. Ознаку прецизирамо сасвим једноставно.

Укуцавамо термин, рецимо СТАРТ, а затим укуцајте код:

Као што је показано, у почетку смо поменули израз „Старт“ одмах на почетку програма.

Даље, на самом крају програма јасно смо споменули „пређи на почетак“. Упутство „гото“ извршава управо оно што декларише.

Овај програм би непрекидно укључивао и искључивао ЛЕД диоде сваки пут кад бисмо напајали струјно коло, тежећи да се ИСКЉУЧИ кад уклонимо струју. Можда би требало да поново проверимо наш програм:

Сигурно смо пропустили коментаре, али још увек можемо поштовати упутства и бројеве.

То касније може бити помало збуњујуће у случају да покушате да решите проблем са програмом и док пишете код који сте запамтили за све адресе.

Иако се коментари могу стављати и даље, могло би постати помало претрпано. Ово ће захтевати именовање бројева, а то се може постићи додатним упутством: 'еку' Упутство 'еку' сугерира да би неке ствари могле бити једнаке другим стварима.

То можда није упутство за ПИЦ, пре за асемблер. Ово упутство олакшава додељивање имена локацији адресе регистра или константе програмском термину.

Успоставићемо неколико константи за наш програм и такође ћемо бити сведоци колико је програм једноставан за читање.

Од сада смо фиксирали константне вредности које можемо наставити постављањем у наш програм. Пре њихове употребе потребно је одредити константне вредности.

зато се побрините да их увек поставите на почетак програма. Поново ћемо написати програм изузимајући коментаре како бисмо упоредили раније означавање са најновијим.

Можда приметите да константе омогућавају мало лакше разумевање програма, међутим и даље смо без коментара, без бриге, јер још увек нисмо завршили.

Можда постоји мањи недостатак нашег трепћућег ЛЕД програма.
За завршетак сваке инструкције потребан је 1 секвенца сата. У случају да користимо кристал од 4МХз, свака инструкција захтева 1 / 4МХз или 1уС да заврши.

Будући да смо користили само пет упутстава, ЛЕД би се активирао и искључио за 5 уС. Ово би могло бити пребрзо да би људи приметили, поред тога, чини се да је ЛЕД у потпуности укључен.

Уместо тога требало би да постигнемо инхибицију између укључивања и искључивања ЛЕД диоде. Теорија инхибиције је да одбројавамо од раније количине, па кад дође до нуле, напуштамо бројање.

Нулта вредност означава закључак кашњења и ми настављамо да радимо током читавог програма. Према томе, прво што морамо учинити је да одредимо константу коју ћемо користити као свој бројач.

Означимо ову константу ЦОУНТ. После тога морамо утврдити од ког је значајног броја започето бројање. Свакако, највећа цифра коју бисмо могли да уврстимо је 255, или ФФх у хексадецималном облику, као што сам говорио у ранијем водичу, инструкција еку додељује израз ситуацији у регистру.

То подразумева да би се, без обзира на количину коју доделимо наш ЦОУНТ, подударали са ставкама у регистру. У случају да покушамо да одредимо вредност ФФх, добићемо грешку када једном саставимо програм.

Разлог томе што је локација ФФх је, стога не можемо да му приступимо. Стога, како морамо одредити прави број? Свакако, биће потребно мало бочног промишљања.

Ако, на пример, можда одредимо свој ЦОУНТ на адресу 08х, то би указивало на основни циљ одредишта за регистрацију. Подразумевано су нетакнута подручја постављена на ФФх. Сходно томе, ако ЦОУНТ води до 08х, наићи ћете на вредност ФФх док се први пут укључимо. Ипак, ја ја, како можемо да поправимо ЦОУНТ на други број ?, све што применимо је да прво „преместимо“ процену на ово одредиште.

Као илустрацију, претпоставимо да смо желели да ЦОУНТ има вредност од 85х, не можемо споменути ЦОУНТ еку 85х јер је то положај ван три-државног регистра за луку А. Управо оно што постижемо је следеће: мовлв 85хПрви пут вредност 85х у В регистру моввф 08х

Сада га преместите у наш 08х регистар. После тога, у случају да изразимо ЦОУНТ једнако 08х, ЦОУНТ би одговарао вредности 85х. Деликатно, зар не! Стога у почетку одређујемо нашу константу: ЦОУНТ еку 08х Након тога морамо ЦОУНТ смањити за један док не постане нула.

Једноставно се догоди да постоји једно упутство дизајнирано да то постигне за нас, коришћењем „гото“ и ознаке.

Упутство које ћемо применити је: ДЕЦФСЗ ЦОУНТ, 1 У овом упутству се наводи „Смањите регистар (овде је ЦОУНТ) бројем који прати зарез. Ако постигнемо нулу, прескочите два места напред. ’Хајде да га прво пронађемо у акцији, пре него што га поставимо у свој курс.

Оно што смо извели је у почетку успоставити нашу константу ЦОУНТ до 255. Следећи сегмент позиционира ознаку, која се назива ЛАБЕЛ, близу наше децфсз инструкције.

Децфсз ЦОУНТ, 1 смањује вредност ЦОУНТ за један и задржава крајњи резултат равно у ЦОУНТ. Штавише, верификује да ли има ЦОУНТ вредност 0.

Ако се то не догоди, у том случају покреће програм да се пребаци на следећу линију. Сада имамо декларацију „гото“ која нас враћа натраг у нашу децфсз инструкцију.

У случају да је вредност ЦОУНТ једнака, тада инструкција децфсз резултира да наш програм прескочи 2 места унапред и шаље се тамо где смо тврдили да „Настави овде“.

Стога, пошто можете да приметите, покренули смо програм да седи на једном месту унапред одређено време пре него што наставимо. Ово би се могло назвати петља одлагања.

Разумевање петљи одлагања

У случају да нам буде потребно знатно кашњење, могли бисмо проводити једну петљу до следеће. Додатне петље, продужено кашњење. Дозволите нам најмање двоје, под претпоставком да желимо да посматрамо ЛЕД блиц .. Ове петље кашњења ћемо сместити у наш програм и то постићи тако што ћемо му пружити прави програм увођењем коментара:

Могуће је саставити овај програм након којег програма ПИЦ. Очигледно, будите сигурни да покушате да склоп провјерите да ли заиста функционише. Следи дијаграм кола који треба да направите чим програмирате ПИЦ.


Браво, могли сте заправо да саставите свој први ПИЦ програм, као и да направите склоп за трептање ЛЕД лампица за укључивање и искључивање. До сада, у случају да сте похађали ове курсеве, можда сте научили укупно седам инструкција од 35, али без сумње сте до сада можда контролисали И / О портове!

Да ли бисте покушали да промените петље кашњења да бисте брже приказали ЛЕД блиц - која се чини минимална вредност ЦОУНТ да бисте у суштини видели ЛЕД блиц? Или ћете можда желети да укључите трећу или додатну петљу одлагања након почетне да бисте стабилизовали ЛЕД. јединствена константа за сваку петљу кашњења.

Тада бисте потенцијално могли да петљате са својим петљама кашњења да бисте приказали ЛЕД блиц одређеном брзином, на пример након секунде. У следећем упутству да видимо како смо у могућности да искористимо нешто што је познато као потпрограм да бисмо одржали програм компактним и основним. Подпрограм је саставни део кода или програма који се може назвати и када вам затреба. Потпрограми се користе у случајевима када идентичну функцију обављате често.

Шта су потпрограми

Предности употребе потпрограма су у томе што ће вероватно бити једноставније променити вредност једном у потпрограму уместо, рецимо, десет пута кроз читав програм, као и да у великој мери доприноси смањењу нивоа меморије коју ваш програм троши унутар ПИЦ. Проверићемо потпрограм:

У почетку морамо да дамо ознаку нашој потпрограму и у овој ситуацији смо изабрали РУТИНУ. Након тога укуцавамо код који бисмо желели да спроводимо као и обично. Због тога смо изабрали кашњење у нашем бљескајућем ЛЕД програму. На крају, потпрограм закључујемо притискањем упутства РЕТУРН.

Да бисмо започели потпрограм са било ког места у нашем програму, брзо укуцамо упуту ЦАЛЛ, а затим ознаку потпрограма.

Ово ћемо размотрити мало дубље. Једном када дођемо до одељка нашег програма који зове ЦАЛЛ ккк, у коме је ккк име наше потпрограма, програм скаче на било које место на којем је инсталирана потпрограм ккк. Извршавају се упутства унутар потпрограма.

Кад год се изврши наредба РЕТУРН, програм прескаче враћајући се нашем главном програму на наредбу након наше инструкције ЦАЛЛ ккк.

Сличну потпрограм можете позвати неколико пута колико желите, што објашњава зашто употреба потпрограма смањује опште трајање нашег програма.

Ипак, постоји неколико фактора које бисте требали знати. У почетку, као и код нашег основног програма, све посебне константе морају бити признате пре него што их можете користити.

Они се могу препознати у самој потпрограму или директно на почетку главног програма. Предлажем вам да све препознате на почетку свог главног програма, од тада препознајете да су ствари у идентичном положају. Даље, треба осигурати да главни програм прескочи потпрограм.

Оно што подразумевам са овим јесте да потпрограм поставите директно на завршетку свог примарног програма, осим ако користите декларацију „Гото“ да бисте искочили са места где је потпрограм, програм би наставио и применио потпрограм без обзира да ли сте захтевати или не.

ПИЦ не би правио разлику између потпрограма и главног програма. Проверићемо наш трепћући лед програм, међутим овај пут ћемо искористити потпрограм за петљу кашњења. У идеалном случају ћете открити колико је програм мање компликован, као и како ћете практично применити потпрограм.

На крају, можете приметити да смо употребом потпрограма за нашу петљу кашњења можда смањили димензије програма.

Сваки пут када пожелимо кашњење, могуће када је ЛЕД лампица укључена или искључена, у основи називамо подпрограм одлагања. На крају потпрограма, програм се враћа на ред следећи наше упутство „Позив“. На горњој илустрацији укључимо ЛЕД.

Ми након тога контактирамо потпрограм. Програм се затим враћа како бисмо могли да искључимо ЛЕД. Подпрограм позивамо још једном, само у случају да је потпрограм потпун, програм се враћа и следећа инструкција коју препознаје је „гото Старт“. За свакога ко би могао бити заинтригиран, наш први програм био је дугачак 120 бајтова.

Коришћењем потпрограма могли бисмо смањити величину програма на 103 бајта. Ово не може звучати толико фантастично, међутим, с обзиром на чињеницу да унутар ПИЦ-а имамо само 1024 бајта, свака мала количина има користи.

У следећем упутству, проверимо читање са портова.

До сада смо компоновали на порт А како бисмо могли да укључујемо и искључујемо ЛЕД. У овом тренутку видећемо како ћемо читати И / О пинове на портовима.

Читање улазних / излазних портова

Ово је управо да би се осигурало да можемо да повежемо спољни круг и да утичемо на било које специфичне излазе које он нуди.

Ако бисте запамтили наше раније курсеве, ако желите да успоставите И / О портове, морали смо да пређемо са банке 0 на банку 1. У почетку ћемо то постићи:

У овом тренутку смо фиксирали бит 0 порта А за улаз. сада морамо испитати да ли је клин висок или низак. Да би се то постигло, може се користити само једно од два упутства:

БТФСЦ и БТФСС.

Упутство БТФСЦ означава „Направи бит тест на регистру као и бит који одредимо.

У случају да је 0, у том случају изостављамо следеће упутство ’. БТФСС подразумева „Направите тест бита у регистру и бит ћемо успоставити. У случају да је постављено на 1, заобилазимо наредне инструкције.

Који ћемо користити, одређује се тачно како желимо да наш програм реагује док проучавамо улазне податке. Као илустрација, у случају да само чекамо да унос буде 1, можда бисмо могли да користимо БТФСС инструкцију на следећи начин:

Код овде:

БТФСС ПортА, 0Започните Носите овде:
:

Програм би се само пребацио на „Царри он хере“ под условом да је бит 0 на ПортА заказан за 1.

Тренутно ћемо написати програм који би могао покренути ЛЕД диоду једном брзином, међутим ако је прекидач ограничен, ЛЕД би бљеснуо два пута спорије.

Могуће је да овај програм увежбате сами, ипак смо списак некако уградили.

Можете покушати и написати цео програм како бисте проверили да ли сте разумели принципе. Користићемо еквивалентно коло као и раније, са укључењем склопке причвршћене РА0 ПИЦ-а и позитивном шином нашег напајања.

Оно што смо овде постигли је да укључимо ЛЕД. Накнадно утврђујем да ли је прекидач затворен.

У случају да је ограничен, следећи пут се повежем са нашом подпрограмом одлагања. Ово нам пружа еквивалентно кашњење као и пре, међутим у овом тренутку контактирамо га два пута.

Иста ствар се односи на сваки пут када је ЛЕД искључен. У случају да прекидач није искључен, тада имамо претходно снимљене периоде укључивања и искључивања.

Пратите ли ове лекције од почетка, можда желите да схватите да сте тренутно открили десет од 35 упутстава за ПИЦ 16Ф84! И сваки део овога се научи пуким укључивањем и искључивањем ЛЕД диоде.

До сада смо саставили како ПИЦ трепће и укључује и искључује ЛЕД.

Касније смо били у могућности са нашим ПИЦ-ом укључивањем прекидача, варирајући тако брзину блица.

Ефикасно коришћење меморијског простора

Једина ствар је у томе што је програм прилично дугачак и прилично неефикасан у меморијском простору. Чинило се у реду док сам први пут укључивао наредбе, али требало би да постоји лакши начин извршења. Позитивно постоји, анализираћемо како смо буквално укључивали и искључивали ЛЕД.

мовлв 02хмоввф ПОРТАмовлв 00хмовлв ПОРТА

Прво смо напунили свој в регистар са 02х, након чега смо га пренели у наш ПортА регистар да бисмо укључили ЛЕД. Да бисмо га искључили, спаковали смо в са 00х након чега смо га пребацили у наш ПортА регистар.

Између свих ових рутина били смо присиљени да ступимо у контакт са потпрограмом како бисмо били сигурни да можемо да посматрамо како ЛЕД трепери.

Због тога смо морали неколико пута да пренесемо два скупа информација (једном у в регистар, а затим у ПОРТА), као и да два пута позовемо потпрограм (једном укључено па једном искључено). Дакле, како бисмо то могли постићи са додатном ефикасношћу? Врло једноставна.

Користимо различите инструкције познате као КСОРФ. КСОРФ инструкција ради ексклузивну ИЛИ функцију на регистру коју предвиђамо информацијама које пружамо. Верујем да морам да разјасним шта је то ексклузивно ИЛИ пре него што наставимо. У случају да имамо два улаза и један излаз, улаз може бити само 1 ако и док год се два улаза разликују. Иако су исти, излаз ће вероватно бити 0. Следи табела истине за појединце који одлуче да их провере:

А Б Ф0 0 00 1 11 0 11 1 0

У овом тренутку ћемо проверити шта се дешава ако прикажемо Б баш као и наш ранији излаз и једноставно променимо вредност А:

А Б Ф.
0 0 0
0 0 0
1 0 1
1 1 0
1 0 1

Ако задржимо вредност А једнаку 1, а са излазом ексклузивно ИЛИ је, излаз би се пребацио. У случају да ово не можете да приметите из табеле истине, испод се може видети бинарно коришћење:

0 Тренутни излаз
ЕКС-ОР са 1 1 новим излазом
ЕКС-ОР са 1 0 новим излазом

Можда можете пронаћи да ћемо ексклузивним ОР-ом излаза са 1 сада пребацити излаз са 0 на 1 на 0.
Стога, да бисмо укључили и искључили ЛЕД диоду, потребно нам је само неколико реченица:

МОВЛВ 02х
КСОРВФ ВРАТА, 1

Оно што ћемо тачно постићи је додавање нашег регистра за 02х. Ми смо у том случају Ексклузивни ИЛИ постављамо овај број без обзира на то што је на нашој ПортА. У случају да је бит 1 1, променит ће се у 0. У случају да је бит 1 0, променит ће се у 1. Испитајмо овај код једном или два пута, да прикажемо како ради бинарно:

ВРАТА
00010
корвф 00000
корвф 00010
корвф 00000
корвф 00010

Заправо не морамо сваки пут учитавати идентичну вредност у свој в регистар, стога је могуће то постићи једном на почетку и једноставно се вратити на нашу команду за пребацивање. Поред тога, не би требало да поправљамо вредност на нашем ПортА регистру. Разлог? Сигурно, с обзиром да је у случају укључивања 1, можемо га лако пребацити. Ја, алтернативно 0 при укључивању, чак бисмо и сада то пребацили.

Стога бисте желели да видите наш новоформирани код. Први представља наш трепћући ЛЕД код, док други приказује онај са додатком прекидача:

Пожелимо да сазнате да смо једноставним коришћењем једне једноставне инструкције сада смањили размере нашег програма. Истина је, да бисмо приказали за колико бисмо могли смањити наше програме, показали смо два програма, управо оно што су састављени и њихове димензије у доњој табели:

Промените димензије програма (бајтови)
Трепћућа ЛЕД оригинал 120
Треперење ЛЕД потпрограма додато 103
Трепћућа ЛЕД КСОР функција коришћена 91
ЛЕД са прекидачем Оригинал 132
Коришћена ЛЕД са прекидачем КСОР функција 124.

Стога, не само да смо открили неколико нових упутстава, већ смо поред тога и смањили величину скриптирања!

У наставку ћемо анализирати како можете померати појединачне битове, изводити одређене једноставне аритметике, као и табеле података.

Логички менаџери

У оквиру последњег водича представио сам операцију Екцлусиве ОР. ЕкОР функција се схвата као логички оператор.

У овом упутству ћу осветлити додатне логичке операторе које ПИЦ промовише. У поинт програмима неће бити било каквих случајева, међутим Научићемо једноставне методе за употребу оператора применом малих подручја кода.

И функција АНД у основи анализира два бита и даје 1 да ли су исти, а 0 у случају да се разликују. На пример, ако смо поменули 1 И 1, исход је 1, док би у случају да смо прогласили 1 И 0 последица била 0.

Непотребно је рећи да смо у стању да процењујемо и речи, као и све што функција АНД постиже је преглед по два термина мало по мало. Следећи пример приказује две 8-битне речи које заједно са производом постају АНДед:

11001011
И 10110011
Једнако 10000011

Надам се да се слажете, исход ће једноставно имати 1 кад год се 2 1 руку под руку повежу у пар речи. На пример, можемо да користимо функцију АНД да бисмо верификовали портове.

У случају да проверавамо неколико И / О пинова који су повезани са струјним кругом, и требали бисмо припазити на одређену ситуацију у којој је само неколико пинова високо, у том случају можемо прилично прочитати лука, након чега И исход са условом због којег испитујемо, идентичан претходном примеру.

ПИЦ нам пружа два састојка за АНД.
Они су АНДЛВ и АНДВФ. АНДЛВ нам дозвољава да извршимо функцију АНД са детаљима В регистра и износом који одредимо.

Синтакса је: АНДЛВ при чему је управо оно чему идемо И садржај В са.

Последица функције АНД била би ускладиштена директно у В регистар.
АНДВФ нам дозвољава да извршавамо функцију АНД на В регистру и другом регистру, на пример ПОРТ. Синтакса је: АНДВФ, д у којем је регистар којим смо одушевљени, нпр. ПОРТА, а д приказује ПИЦ где треба да поставите резултат. Ако је д = 0, исход се ставља у В регистар, а од д = 1 крајњи резултат се чува у регистру који смо одредили. Два дела доњег кода приказују добар пример сваке функције АНД.

Иницијал испитује статус ПОРТА-е, у којем морамо да проверимо да ли су уноси 1100. Исход можемо вратити назад у В регистар

мовлв 1100
АНДВФ 05х, 0Друга илустрација сада може да верификује садржај В регистра:
АНДЛВ 1100

ИЛИ

До сада смо открили једну функцију ИЛИ, тачније КСОР. Ово се развија у 1 ако два бита нису иста, али су различита. Можете пронаћи другу функцију ИЛИ која се зове ИОР, а која укључује ИЛИ. Ова функција ће генерисати 1 у случају да је било који бит 1, али додатно ако су сви битови 1. Испод је јасна табела истине која то илуструје:

А Б О / П
0 0 0
0 1 1
1 0 1
1 1 1

Шта су аритметички оператори

ДОДАТИ

Ова функција остварује оно што обично тврди. Доприноси две цифре! У случају да последица сабирања две цифре премаши 8 битова, у том случају ће вероватно бити постављена ознака ЦАРРИ. Застава ЦАРРИ налази се на адреси 03х бит 0.

Када је овај бит заказан, тада су те две бројке премашиле 8 битова. Када је 0, у том случају се последица налази унутар 8 бита. Као и раније, ПИЦ нам нуди два стила АДД, посебно АДДЛВ и АДДВФ. Као што сте могли претпоставити, ово је сасвим слично горњој функцији. АДДЛВ нуди садржај В регистра према ономе што одредимо. Синтакса је: АДДЛВ АДДВФ додајте садржај В регистра и неког другог регистра који означимо.

Синтакса је: АДДВФ, д је где

СУБ

У овом тренутку претпостављам да не можете претпоставити шта ова функција спроводи! Заиста, сумњали сте, ова функција
одузима један бит од другог. Поново нам ПИЦ пружа два укуса: СУБЛВ и СУБВФ. Синтакса је управо слична функцији АДД, осим што очигледно уместо АДД уписујете СУБ!

Повећање У случају да желимо да у ПИЦ уврстимо један број, могли бисмо апсолутно да користимо функцију АДД и да користимо број један. ~ Тешкоћа је у томе што фигуру прво морамо да ставимо у В регистар, а затим да користимо АДДЛВ 1 контролу да бисмо је повећали. У случају да смо желели да уврстимо 1 у регистар, то може бити још горе. Прво морамо да ставимо број 1 у В регистар, након тога користимо АДДВФ, 1. Стога, на пример, да бисмо укључили 1 на локацију 0Ц, рецимо, требали бисмо да поседујемо следећи део скрипте:

мовлв 01
аддвф 0ц, 1

Постоји лакши метод спровођења овога. Можемо извршити команду ИНЦФ. Синтакса је: ИНЦФ, д где је, регистар или место које нас занима, а д приказује ПИЦ где треба да поставите исход. У случају д = 0, исход је унутар В регистра, а у случају д = 1, последица се поставља у регистар који смо предвидели.

Користећи ово појединачно упутство, ми смо у стању да уствари педесет посто кодирања. У случају да смо желели да се исход врати у В регистар, у том случају би се користила горња инстанца, можда бисмо морали да укључимо додатну команду за премештање предмета 0Ц назад у В регистар, након чега 0Ц регистар вратимо на но ма шта било.

Постоји наредба прираста. То је ИНЦФСЗ. Ова наредба може повећати регистар који одредимо, међутим, ако је регистар једнак 0 након повећања (то ће се десити док укључујемо 1 до 127), након тога ће ПИЦ вероватно проћи следеће упутство. Доњи део кода одражава ово:

Петља инцфсз 0Ц
Гото Лооп
:
:
Остатак програма.

У горњем делу кода, 0Ц ће бити увећан за 1. Следеће поседујемо упутство које обавештава ПИЦ да се врати у нашу ознаку под називом Лооп и поново повећа 0Ц за 1. То се наставља све док се 0Ц не изједначи са 127. У овој околности, када повећамо 0Ц за 1, 0Ц ће се сада поклапати са 0. Наша ИНЦФСЗ инструкција би могла врло добро информисати ПИЦ да изоставља наредну инструкцију, која је у овом случају гото декларација стога ће ПИЦ наставити са преосталим делом програма.

Декремент

До сада смо разговарали о функцији смањења на ранијим тренинзима, па је нећу више ревидирати.

Допуна

Коначна упутства у овој расправи преокренуће сваки поједини бит у регистру који одредимо. Синтакса је: ЦОМФ, д при чему

Разумевање бит операција

Ово се може користити, на пример, за брзу замену пинова порта са излаза на улаз и тако даље. Функције битова омогућавају нам да обликујемо један бит унутар израза. Дозвољавају нам да наставимо, постављамо и ослобађамо се појединачних битова у регистрима или бројевима које одредимо.

На крају овог курса Открићемо програм дизајниран да створи сет секвенцијских лампица које иду напред, а затим обрнуто. То смо приметили раније постигнуто када смо испитивали ексклузивну функцију ОР, при чему смо ексклузивно ОР-ове портове уредили изразом. До сада смо приметили неколико битних функција када успоставимо портове на ПИЦ-у и

Дозволите ми да поновим њихово коришћење овде.

БЦФ

Ово упутство ће избрисати део који смо прописали у регистру који смо одредили. Синтакса
је:
БЦФ,

То смо раније користили за пребацивање са странице 1 на страницу 0 уклањањем мало у СТАТУС регистру. Такође можемо да га користимо да поправимо бит на 0 у било ком другом регистру / месту. На пример, у случају да желимо да 3. бит у 11001101 сачуваном у одељку 0Ц поставимо на 0, могли бисмо
убаци:

БЦФ 0Ц, 03

БСФ

Ово упутство ће поправити било који бит који одредимо на 1 у било ком регистру који назначимо. Ово смо раније користили за прелазак са странице 0 на страницу 1. Синтакса је: БСФ ,, и користи се у потпуно истој методи као и БЦФ горе.

БТФСЦУ до сада смо могли да поставимо или обришемо мало у регистру. Међутим, замислите да ли у основи треба да проверимо да ли је бит 1 или 0 у регистру?

Сигурно је могуће користити БТФСЦ. Наводи се Регистар за тестирање бита Ф и Прескочи ако је јасно. Ово упутство ће анализирати бит који означимо у регистру. У случају да је бит 0, инструкција ће обавестити ПИЦ да проследи наредну инструкцију.

Ову упуту бисмо могли користити у случају да желимо проверити заставицу, на пример заставицу за ношење. Ово нас штеди потребе да читамо СТАТУС регистар и тражимо појединачне битове да бисмо сазнали које су заставице фиксне. 29 На пример, у случају да желимо да проверимо да ли је застава Царри постављена на 1 након што смо додали две цифре, могли бисмо да откуцамо следеће:

БТФСЦ 03х, 0
настави овде ако је постављено на 1
или овде ако је постављено на 0

У случају да је статус бита 1, у том случају би се довршила инструкција која следи након БТФСЦ. У случају да је постављено на 0, у том случају се наредна инструкција прескаче. Следећи део експоната кода у којима би могао да се користи:

Петља:
:
:
БТФСЦ 03,0
Гото Лооп

У горњем коду, ПИЦ ће једноставно изаћи из петље у случају да је бит 0 регистра СТАТУС (или застава Царри) дефинисан на 0. Иначе, извршила би се наредба гото.

БТФСС

Ово упутство наводи Регистар теста бита Ф и прескочи ако је постављен. Ово може бити упоредиво са БТФСЦ инструкцијом, осим што би ПИЦ изоставио наредну инструкцију ако је бит који смо процењивали постављен на 1, уместо на 0.

ЦЛРФ

Ово упутство би поправило све детаље регистра на 0. Синтакса је:

ЦЛРФ
То смо раније користили да поставимо излаз Портова на 0, применом ЦЛРФ 85х. Поред тога, користили смо га за поправљање портова тако да укључују све пинове за излаз употребом ЦЛРФ
05х.

ЦЛРВ

Ово може да личи на ЦЛРФ упутства, осим брисања В регистра. Синтакса је прилично једноставна:

ЦЛРВ

РЛФ и РРФ

Ова упутства би у регистру транспортовала један слот лево (РЛФ) или десно (РРФ) у регистру. На пример, ако нам је требало 00000001 и запослили смо РЛФ, у том случају бисмо могли поседовати 00000010. У овом тренутку, шта се дешава у случају да постоји 10000000 и примени РЛФ инструкцију? Сигурно би 1 био постављен у заставу за ношење. У случају да смо још једном применили РЛФ инструкцију, 1 би се поново појавио на почетку. Слично се, међутим, дешава код РРФ инструкције. Случај у доњој тачки показује ово за РЛФ инструкцију, у којој Ми можемо да видимо 8 битова регистра, као и заставу за ношење:

Ц 87654321
0 00000001
РЛФ 0 00000010
РЛФ 0 00000100
РЛФ 0 00001000
РЛФ 0 00010000
РЛФ 0 00100000
РЛФ 0 01000000
РЛФ 0 10000000
РЛФ 1 00000000
РЛФ 0 00000001

Пример програма

Сада ћемо видети пример кода који се може компајлирати и покретати. То би генерисало светло за секвенцирање које почиње на ПортА бит 0, прелазећи на ПортБ бит 8 и
затим се враћа.
Прикључите ЛЕД диоде на сваки од пин-ова порта. Имаћемо мало
процедуре истакнуте у овом водичу.

ТИМЕ ЕКУ 9ФХ Променљива за петљу кашњења.
ПОРТБ ЕКУ 06Х Адреса Б.
Адреса ТРИСБ ЕКУ 86Х Порт Б Тристате.
ПОРТА ЕКУ 05Х Порт А адреса.
Адреса ТРИСА ЕКУ 85Х Порт А Тристате.
СТАТУС ЕКУ 03Х Регистар за одабир странице.
ЦОУНТ1 ЕКУ 0ЦХ регистар петље.
ЦОУНТ2 ЕКУ 0ДХ Регистар петље.

БСФ СТАТУС, 5 Идите на страницу 1
МОВЛВ 00Х и подешен
МОВВФ ТРИСБ и луке А и Б.
МОВЛВ 00Х за излаз,
МОВВФ ТРИСА затим се вратите у
СТАТУС БЦФ, 5 страна 0.
МОВЛВ 00Х Цлеар Порт А.
МОВВФ ВРАТА

Почетак главног програма

РУНМОВЛВ
01Х Поставите први битМОВВФ
ПОРТБ на луци Б.ЦАЛЛ
ОДЛОЖИТЕ Сачекајте мало ПОЗОВИТЕ
ОДЛОЖИТЕ
Померите бит на прикључку Б лево, а затим паузирајте.РЛФ
ПОРТБ, 1 ПОЗИВ
ОДГОВОР
ДЕЛАИРЛФ
ПОРТБ, 1 ПОЗИВ
ОДГОВОР
ДЕЛАИРЛФ
ПОРТБ, 1 ПОЗИВ
ОДГОВОР
ДЕЛАИРЛФ
ПОРТБ, 1 ПОЗИВ
ОДГОВОР
ДЕЛАИРЛФ
ПОРТБ, 1 ПОЗИВ
ОДГОВОР
ДЕЛАИРЛФ
ПОРТБ, 1 ПОЗИВ
ОДГОВОР
ДЕЛАИРЛФ
ПОРТБ, 1 ПОЗИВ
ОДГОВОР
ДЕЛАИРЛФ
ПОРТБ, 1 Овим се бит премешта у носећу заставу
Сада пређите на прикључак А и померите бит улево.РЛФ
ПОРТА, 1 Овим се бит премешта са нулте заставице у ПортАЦАЛЛ
ДЕЛАИЦАЛЛ ДЕЛАИРЛФ
ВРАТА, 1 ПОЗИВ
ОДГОВОР
ДЕЛАИРЛФ
ВРАТА, 1 ПОЗИВ
ОДГОВОР
ДЕЛАИРЛФ
ВРАТА, 1 ПОЗИВ
ОДГОВОР
ОДЛОЖИТЕ
Вратите бит назад на Порт АРРФ
ВРАТА, 1 ПОЗИВ
ОДГОВОР
ДЕЛАИРРФ
ВРАТА, 1 ПОЗИВ
ОДГОВОР
ДЕЛАИРРФ
ВРАТА, 1 ПОЗИВ
ОДГОВОР
ДЕЛАИРРФ
ПОРТА, 1 Ово помера бит у нулту заставицу. Сада померите бит
назад на луку БРРФ
ПОРТБ, 1 ПОЗИВ
ОДГОВОР
ДЕЛАИРРФ
ПОРТБ, 1 ПОЗИВ
ОДГОВОР
ДЕЛАИРРФ
ПОРТБ, 1 ПОЗИВ
ОДГОВОР
ДЕЛАИРРФ
ПОРТБ, 1 ПОЗИВ
ДЕЛАИЦАЛЛ ДЕЛАИРРФ
ПОРТБ, 1 ПОЗИВ
ОДГОВОР
ДЕЛАИРРФ
ПОРТБ, 1 ПОЗИВ
ОДГОВОР
ДЕЛАИРРФ
ПОРТБ, 1 ПОЗИВ
ОДГОВОР
ОДЛОЖЕЊЕ Сад смо се вратили тамо где смо започели, ГОТО
ТРЧИ идемо поново.

У комплету за обуку постоји одлична опција која вам омогућава да користите табелу података.

Табела података је само листа цитата података, у којој се све прегледава на основу неколико разматрања.
На примјер, могли бисте имати склоп који користи ПИЦ који броји колико случајева улазни пин постане висок за 1 секунду. Након тога можете приказати број на 7-сегментном дисплеју.

Чим се покрене тајминг, ПИЦ почиње да броји колико је пута игла прерасла. Након једне секунде посети сто и прегледа податке, на дисплеју мора приказати број који симболизује количину ситуација које је пин припао. Ово може бити корисно, јер не одређујемо колики би могао бити износ док ПИЦ не изврши процену.

Користећи табелу, можемо да омогућимо ПИЦ-у да одреди коју ће фигуру приказати. У овом тренутку, пре него што наставим да вам показујем како табела података функционише, можда ћу вам морати рећи да ПИЦ одржава пут до места боравка у програму у коме се налази док програм ради.

Омогућава онима који су извели одређено програмирање у БАСИЦ-у. У супротном, не брините, можда бисте желели да и даље учите о теорији. Замислите да постоји ОСНОВНИ програм сличан оном представљеном у наставку:

10 ГОДИНА К = 0
11 К = К + 1
12 АКО К> 10 ОНДА ИДИТЕ 20 ОСТАЛО ИДИТЕ 11
20 ШТАМПА К.
21 КРАЈ

Програм почиње на линији 10. Чим је К заказано на 0, он се даље креће на линију 11. Након што уврстимо 1 до К, након тога прелазимо на ред 12.

У овом тренутку бисмо могли бити знатижељни да ли је К већи од 10. У случају да јесте, следећи пут идемо на ред 20, или се враћамо на ред 11.

Ред 20 документује К, а ред 21 закључује програм. БАСИЦ користи линијске статистике како би помогао програмеру да води евиденцију о проблемима, јер ознаке нису одобрене. ПИЦ користи етикете да би избегао одредиште - или може заиста?

Ознаке користимо како бисмо били сигурни да смо свесни где се налазе проблеми, као и да бисмо на једноставан начин могли да обавестимо ПИЦ где да претражујемо.

Управо оно што се дешава је да ПИЦ користи предност бројача унутрашње линије који се назива Програмски бројач. Траг програмског бројача (скраћено од ПЦ) меморијског одредишта где се налази ово упутство.

Кад год обавестимо ПИЦ да посети изабрану етикету, он разуме меморијско место и зато увећава рачунар док не види то одредиште меморије. Ово је потпуно иста метода као што смо погледали и програм БАСИЦ горе. Испод је сегмент кода, са меморијским просторима или ставкама рачунара, поред сваке инструкције:

Упутство за рачунар0000 мовлв 03
0001 моввф 0Ц
0002 Петља децфсц 0Ц
0003 гото Лооп
0004 крај

У горњој демонстрацији, Фиксирали смо рачунар на 0000. На овом месту имамо упутство мовлв 03. Када ПИЦ имплементира ове податке, повећава ПЦ да би се наредна инструкција скенирала. У овом тренутку ПИЦ прегледава моввф 0Ц. ПЦ се још једном увећава.

Сада ПИЦ проучава децфсц 0Ц. У случају да детаљи 0Ц нису 0, у том случају се рачунар увећава за 1, као и следећа инструкција, гото Лооп, обавештава ПЦ да се врати на позицију 0003, а то је наведена петља. У случају да су детаљи 0Ц 0, ПЦ се саветује да повећа за 2, једноставно изоставите следећу инструкцију.

Разумевање табела података

Ово поставља рачунар на позицију 0004, у којој се програм завршава. Одредишта одређује асемблер и генерално нас не би требало да бринемо шта ПЦ постиже. До тада налазимо потребу да га ставимо под контролу баш као и док радимо када користимо табеле података. Најприкладнији начин да се опише како табела података функционише је започети илустрацијом.

ПЦ еку 02
мовлв 03
позивни сто
:
табле аддвф ПЦ
ретлв 01
ретлв 02
ретлв 03
ретлв 04
ретлв 05
ретлв 06
ретлв 07
повратак

Прво упутство је додељивање етикете ПЦ адреси програмског бројача (02х). Ускоро ћемо унети вредност 03х у в регистар. Ми након тога комуницирамо са столом. Најистакнутији ред у табели потпрограма увећава детаље В регистра (03х) на бројач програма.

Ово покреће бројач програма да се повиси за 3, или другачије речено, стимулише бројач програма да се спусти за 3 линије. Док бројач стиже 3 реда ниже, ПИЦ препознаје наредбу ретлв. Ова наредба шаље вредност која следи за њом у В регистар, након чега се враћа из потпрограма. РЕТЛВ у основи означава Повратак, дословно према В.

Погледајте да сам ставио зарез иза речи Ретурн. Будући да смо у потпрограму, потребна нам је повратна упутства на његову површину. Стога РЕТ у упутству. Након што је упутство РЕТЛВ број, а то је управо оно што се ставља у В регистар.

У овом случају то је слика 3. Могли бисмо да означимо било коју количину у В регистар, све док је ова бројка комбинована са Програмским бројачем у потпрограму табеле, открићемо упуту за поврат. На горњој илустрацији ово подразумева да можемо да поседујемо било који број од 1 до 7. У случају да наставимо даље са потпрограмом, можда ћемо моћи да завршимо са извођењем додатног одељка програма. Из тог разлога је обично паметан потез постављање табеле података тачно на крај програма ПИЦ, па ако у том случају пређемо, у сваком случају ћемо доћи до закључка програма.

Тема прекида можда ће бити најдужа и најтежа за проћи.

Не можете пронаћи некомпликовани метод детаљног прекида, али уз мало среће на крају овог дела можда ћете моћи да примените прекиде у сопствене програме.
Одељак смо раздвојили у 2 фазе. То ће омогућити раздвајање теме на одељке, а такође и пружање практичног прибора за лако разумевање.

Шта је тачно прекид? Сигурно је, као што термин указује, прекид техника или сигнал који спречава микропроцесор / микроконтролер да било шта изврши да се може догодити нешто другачије.

Дозволите ми да вам дам дневну илустрацију. Мислите да се опуштате у свом дому и разговарате са другом особом. Одједном се огласи телефон.

Престанете да разговарате и зграбите телефон да бисте разговарали са позиваоцем. Једном када успоставите телефонску интеракцију, одлучите да се вратите разговору са особом пре него што је телефон зазвонио. Могуће је размотрити главну рутину док некога ћаскате, звоњење телефона ће пореметити ваше разговоре, а прекид рутине је начин разговора путем телефона.

Док се телефонска дискусија завршава, вратите се својој примарној рутини ћаскања. Ова илустрација је управо начин на који прекида процесор да би кренуо у акцију.

Примарни програм ради, извршавајући одређену функцију у колу, међутим када дође до прекида, примарни програм се зауставља док се изводи другачија рутина. рутина се завршава, процесор се враћа на примарну рутину као и раније.

Разумевање прекида

ПИЦ има 4 извора прекида. Могли би бити подељени у неколико група. Два су извори прекида који се могу споља користити за ПИЦ, док су друга два унутрашњи процеси. Овде ћу разјаснити две спољне врсте. Преостала два ће бити описана у различитим упутствима када дођемо до тајмера и складиштења података.

Ако погледате пин-оут ПИЦ-а, приметићете да је пин 6 РБ0 / ИНТ. У овом тренутку, РБ0 је очигледно Порт Б бит 0. ИНТ представља да би могао бити конфигурисан и као спољни пин за прекидање. Даље, пин Б 4 до 7 (пинови 10 до 13) такође се могу користити за прекиде. Пре него што успемо да запослимо ИНТ или друге пинове порта Б, морамо обавити два задатка. Прво морамо обавестити ПИЦ да ћемо користити прекиде.

Даље, морамо одредити који порт Б пин ћемо користити као прекид, а не као И / О пин. Унутар ПИЦ-а можете пронаћи регистар познат под називом ИНТЦОН, а налази се на адреси 0Бх. У овом регистру ћете открити 8 битова који могу бити омогућени или онемогућени. Бит 7 ИНТЦОН-а познат је као ГИЕ. Ово је Глобал Интеррнгупт Енабле. Ако то поправите на 1, обавештава се ПИЦ да ћемо користити прекид.

Бит 4 ИНТЦОН-а познат је као ИНТЕ, ИНТеррупт Енабле. Стављањем овог бита на 1 преноси се на ПИЦ да ће РБ0 бити пин за прекид. Конфигурисање бита 3, званог РБИЕ, обавештава ПИц да ћемо користити битове порта Б од 4 до 7. У овом тренутку ПИЦ разуме када овај пин може бити висок или низак, мора зауставити своје извођење и наставити са прекидом рутина. У овом тренутку морамо да обавестимо ПИЦ да ли ће прекид вероватно бити на узлазној ивици (0В до + 5В) или на падајућој ивици (+ 5В до 0В) трансформације сигнала.

Једноставно речено, желимо ли да ПИЦ прекида сваки пут када се сигнал креће од ниског ка високом или од високог према доњем. Делинквентношћу се може утврдити да се ово поставља на растућу ивицу.

„Окидање“ ивице је заказано у додатном регистру који се назива ОПТИОН регистар, на адреси 81х. Бит којим смо одушевљени је бит 6, који се често назива ИНТЕДГ.

Ако се ово постави на 1, покреће се прекид ПИЦ-а на монтажној ивици (подразумевано стање), а подешавање на 0 стимулише ПИЦ да прекида на клизној ивици. Ако желите да се ПИЦ активира на растућој ивици, тада сигурно не морате ништа учинити на овом делу.

У овом тренутку, нажалост, регистар опција налази се у банци 1, што значи да уживамо у модификовању са банке 0 на банку 1, постављање бита у регистар опција након тог повратка у банку 0. Овде је кључно извршити сваки бит банке 1 региструје се у једном штрајку, на пример успостављањем лучких чворова, након чега се враћа у банку 0 ако сте готови.

У реду, стога смо обавестили ПИЦ-а који ће пин вероватно бити прекид и где ће се ивица покренути, шта се дешава у програму и ПИЦ-у сваки пут кад се догоди прекид? Одржава се неколико ствари. Најпре је заказана ‘застава’.

Ово обавештава интерни процесор ПИЦ-а да је дошло до прекида. Даље, бројач програма (о чему сам говорио у претходном водичу) даје савете на одређену адресу у ПИЦ-у. Брзо проверимо све ово појединачно. Ознака прекида У нашем ИНТЦОН регистру, бит 1 је заставица прекида, која се назива ИНТФ. У овом тренутку, кад год дође до било каквог прекида, ова застава ће вероватно бити фиксирана на 1.

Када нема прекида, застава се поставља на 0. Као и то је готово све постигнуће. У овом тренутку можда размишљате о томе „у чему је поента?“ Сигурно, иако је ова заставица предвиђена за 1, ПИЦ није у стању, нити ће моћи да реагује на нови прекид. Стога, изразимо да доводимо до прекида. Ознака ће вероватно бити фиксирана на 1, а ПИЦ ће можда ићи у нашу рутину за рад на прекиду.

Када ова заставица није била фиксирана на 1, а ПИЦ-у је било дозвољено да и даље одговара на прекид, непрекидно пулсирање игле могло би задржати ПИЦ-а да се врати на почетак наше рутине прекида, а никако да је доврши. Враћајући се на моју илустрацију телефона, слично је подизању телефона и одмах након што се разговара о томе почиње поново да звони, јер друга особа жели да разговара с вама.

Пожељно је завршити један дијалог, а затим поново зграбити телефон да бисте разговарали са следећим појединцем. Можете наћи мали проблем са овом заставом. Иако ПИЦ брзо постави ову заставицу на 1, неће је поново поставити на 0! Ту активност мора да врши програмер - тј. Ви. Ово се може постићи без напора, јер сам сигуран да то морам постићи након што ПИЦ изврши рутину прекида.

Локација меморије Кад год првобитно укључите ПИЦ, или у случају да постоји ресетовање, програмски бројач саветује да адресира 0000х, што би могло бити одмах на почетку програмске меморије. Али, у случају да дође до прекида, програмски бројач ће назначити адресу 0004х.

Стога, док састављамо наш програм који ће имати прекиде, прво морамо обавестити ПИЦ да прескочи адресу 0004х и да одржи рутину прекида која почиње на адреси 0004х одвојено од остатка програма.

Ово може бити без муке за извођење. У почетку започињемо програм наредбом познатом под називом ОРГ. Ова наредба означава порекло или почетак. Држимо се адресе. Пошто ПИЦ започиње на адреси 0000х, укуцавамо ОРГ 0000х. После тога морамо заобићи адресу 0004х. То постижемо стављањем ГОТО упутства, праћених етикетом која даје савете нашем примарном програму.

Ми се након тога придржавамо ове наредбе ГОТО са још једним ОРГ-ом, овог тренутка са адресом 0004х. Након ове наредбе убацимо рутину прекида. У овом тренутку, можда ћемо моћи укуцати нашу рутину прекида директно након друге наредбе ОРГ, или смо у стању да поставимо ГОТО израз који упућује на рутину прекида.

То је заиста повезано са опцијом са ваше стране. Да бисмо обавестили ПИЦ који нуди да је стигао до закључка рутине прекида, морамо поставити команду РТФИЕ према крају рутине. Ова наредба означава повратак из рутине прекида. Док ПИЦ то примећује, програмски бројач указује на коначни положај на којем је био ПИЦ пре него што је дошло до прекида. У наставку смо успоставили кратак одељак кода који приказује горе наведено:

Постоји неколико ствари о којима бисте требали бити обавештени када користите прекиде. Првобитно је то ако можда користите идентични регистар у свом примарном програму и рутину прекида, имајући на уму да ће се детаљи регистра највероватније променити када се догоди прекид.

На пример, искористимо в регистар за прослеђивање података у примарни програм Порт А, стога можете додатно користити в регистар у рутини прекида за премештање података са једног одредишта на друго.

У случају да нисте опрезни, в регистар би садржавао последњу вредност коју је примио док је био у рутини прекида, па ће се по повратку из прекида ове информације доставити у порт А, а не вредност коју сте раније имали дошло је до прекида.

Средство око тога је тренутно спремање детаља о в регистру пре него што га поново употребите у рутини прекида. Друга је чињеница да можете пронаћи кашњење између тренутка када се један прекид догоди и када може настати следећи. Иако разумете, ПИЦ поседује спољни сат, који би могао бити кристал или комбинација отпорник-кондензатор.

Без обзира на фреквенцију овог сата, ПИЦ га дели са 4, након чега користи ово због свог унутрашњег тајминга. На пример, у случају да имате кристал од 4 МХз повезан са вашим ПИЦ-ом, у том случају би ПИЦ извршио упутства на 1 МХз. Ово унутрашње време је познато као циклус упутстава. У овом тренутку лист са подацима тврди (несумњиво у умањеном испису) да треба да омогућите 3 до 4 рунде инструкција између прекида.

Ја бих омогућио 4 рунде. Разлог кашњења је што ПИЦ захтева време да прескочи на адресу прекида, заставицу и врати се даље од рутине прекида. Стога, имајте ово на уму ако радите са алтернативним кругом како бисте активирали прекид за ПИЦ.

У овом тренутку тачка је чињеница да ако користите битове 4 до 7 порта Б као прекид. Не можете одабрати одређене чиоде на порту Б да би функционисале као прекид.

Стога, у случају да дозволите ове пинове, они би вероватно могли да се добију. Стога, на пример, не можете једноставно имати битове 4 и 5 - битови 6 и 7 ће вероватно бити оснажени истовремено. Која је тачно сврха добијања четири бита за представљање прекида? Сигурно вам је можда прикључен струјни круг на ПИЦ, у случају да било ко од четири реда пређе високо, у том случају ово може бити проблем на који требате да ПИЦ одмах утиче.

Једна од илустрација овога може бити кућни алармни аларм, у којем су четири сензора повезана на прикључке Б 4 до 7. Сваки специфични сензор може затражити од ПИЦ-а да активира аларм, а рутина сигнализације аларма је рутина прекида. То штеди стално провјеравање лука и омогућава ПИЦ-у да настави са различитим питањима. У оквиру следећег водича, саставићемо програм за управљање прекидом.

У прошлом упутству смо се позабавили многим основама, стога сматрам да је дошло време да смо саставили свој први програм.

Програм који ћемо написати рачунао је колико смо пута укључили прекидач, а затим показао број.

Програм ће бројати од 0 до 9, видљиво на 4 ЛЕД диоде у бинарном облику, заједно са улазом или прекидом вероватно ће бити на РБ0.

Прва ствар коју морамо да спроведемо је да обавестимо ПИЦ да прескочи адресу на коју указује програмски бројач кад год дође до прекида.

Приметићете да користимо јединствену методу приказивања хексадецималних бројева. Пре него што сам се догодио, применити Ф9х у коме је х означио хексадецимално. Могли бисмо ово написати као 0кФ9, што је структура коју ћемо од сада користити.

Сада треба да кажемо ПИЦ-у да ћемо користити прекиде и користимо РБ0 пин 6 као пин за прекидање:

бсф ИНТЦОН, 7ГИЕ - Глобално омогућавање прекида (1 = омогући)
бсф ИНТЦОН, 4ИНТЕ - Омогућавање прекида РБ0 (1 = омогући)
Очистићу заставицу за прекиде за сваки случај (никад не верујем ни у шта!)
бцф ИНТЦОН, 1ИНТФ - Очистите бит заставице за сваки случај

Тренутно морамо успоставити наша 2 порта. Имајте на уму да, пошто сада користимо РБ0 као прекидни пин, ово треба успоставити као улаз:

Користићемо променљиву звану ЦОУНТ да бисмо сачували број бројева прекидача. Могли бисмо једноставно повећати вредност на порту А, али видећете зашто користим променљиву када пишемо рутину прекида.

Стога је састављен наш главни програм и у овом тренутку морамо обавестити ПИЦ како да поступим кад год дође до прекида. У овом примеру, наш прекид ће вероватно бити прекидач. Само оно што бисмо желели да ПИЦ буде један од подесивих ЦОУНТ сваки пут када је прекидач ограничен.

Ипак, само желимо да покажемо колико се пута прекидач искључује са 0 на 9. Горе, рекао сам да бисмо могли једноставно повећати вредност на порту А сваки пут када дође до прекида. Међутим, порт А има 5 битова, у случају да смо једноставно повећали порт, имаћемо највећи број од 31. Постоји неколико објашњења зашто сам изабрао да се не померам до 31.

У почетку ћемо користити 7-сегментни екран, који може да иде највише од 0 до 15 (0 до Ф у хексадецималном облику). Даље, желим да вам покажем неколико аритметичких наредби на које сте налетели у протеклих неколико лекција.

Стога ћемо наставити са нашом рутином прекида. Тренутно прво што морамо да постигнемо је да на кратко сачувамо детаље свог в регистра, јер то примењујемо за премештање садржаја ЦОУНТ у ПОРТА. У случају да га не сачувамо, у том случају бисмо могли да испоручимо потпуно другачији број због наше аритметике. Стога прво извршимо то:

У овом тренутку схватамо да ли је вредност ЦОУНТ 9 или више. Оно што сада треба да постигнемо је да ако је ЦОУНТ више од 9, вратимо га на 0 или се вратимо у главни програм како бисмо били сигурни да смо у могућности да га доставимо на порт А. Команда БТФСС би, како схватате
упутство у случају да је заказана ознака за пренос тј. ЦОУНТ = 10:

Једино што преостаје да урадимо сада је заједнички улазак, као и одређивање вредности за наше константе, које смо у стању да изведемо одмах на почетку нашег програма.

Сваки пут када активирате прекидач, ЛЕД лампице ће одбројавати у бинарном облику од 0000 до 1010, а затим се враћају на 0000.

Следећа слика приказује дијаграм кола који је компатибилан са горе објашњеним кодом. Занимљиво ћете открити да је временски кондензатор укључен у дизајн. Ово је леп мали трик кроз који имате слободу да избегнете укључивање кондензатора у случају да га током тог времена немате код себе.

Овде капацитивност долази у обзир преко залуталог капацитета преко осцилаторног пина и земље.
Наравно, можда се не чини да је то врло интелигентан начин избегавања кондензатора практично јер се вредност залуталих може разликовати у различитим датим условима.

Још један одељак који се може видети у кругу је мрежа за одбацивање преко прекидача. Ово спречава сметње током механичког пребацивања и спречава да се ПИЦ збуни ако је пребацивање било једно или више прекидача.




Претходно: Програмабилни двосмерни круг тајмера мотора Следеће: Како функционишу Буцк-Боост кругови