СОДЕРЖАНИЕ
ГЛАВА 1. Введение в архитектуру компьютеров
1.2. Системы счисления
1.3. Компьютерные форматы данных
1.4. Резюме
1.5. Вопросы и задания
ГЛАВА 2. Архитектура семейства PIC18 и разработка программ
2.2. Модель программирования
2.4. Язык Ассемблера, программа «ассемблер» и компоновщик
2.5. Резюме
2.6. Вопросы и задания
ГЛАВА 3. Набор команд семейства PIC18
3.2. Битовые команды
3.3. Байтовые команды
3.4. Команды управления выполнением программы и косвенная адресация
3.5. Табличные команды
3.6. Макропоследовательности
3.7. Резюме
3.8. Вопросы и задания
ГЛАВА 4. Программирование на языке Ассемблера
4.2. Сложные арифметические операции
4.3. Преобразования между десятичным и двоичным форматами
4.4. Временные задержки
4.5. Примеры программ
4.7. Вопросы и задания
ГЛАВА 5. Программирование PIC18 на языке С
5.2. Использование включаемых файлов языка С
5.3. Примеры программ на языке С
5.4. Математическая библиотека
5.6. Вопросы и задания
ГЛАВА 6. Спецификации аппаратных средств семейства PIC18
6.2. Выводы Ввод-Вывод
6.3. Введение в прерывания
6.4. Другие внутренние периферийные устройства
6.5. Резюме
6.6. Вопросы и задания
ГЛАВА7. Базовый ввод-вывод
7.2. Устройства индикации
7.3. Управления электромоторами
7.4. Реле, соленоиды и датчики
7.5. Резюме
7.6. Вопросы и задания
ГЛАВА 8. Прерывания
8.2. USART и прерывания
8.3. Прерывания по изменению состояния
8.4. Примеры систем, работающих с прерываниями
8.5. Резюме
8.6. Вопросы и задания
ГЛАВА 9. Системы управления
9.2. Примеры системы
9.3. Резюме
9.4. Вопросы и задания
ГЛАВА 10. Вопросы повышенной сложности
10.2. Загрузочный блок
10.3. Расширение ввода-вывода
10.4. Интерфейс CAN
10.5. Интерфейс USB
10.6. Расширенный набор команд PIC18
10.7. Резюме
10.8. Вопросы и задания
Приложения
Содержание компакт-диска
Text
                    o:jII,


/ \'


411/f11f1t" .



..


","'''''''



< . . ... .


<)
;. ::
If,; .1"
{'. :L
<


fIIfIIIII'


....""",.


,;..- ,..


-


,.
........ ..,
 .'!- .


,
 . .,


"',.


< \ ".:. ..

, \\, " . .
"""" .


.


\ i>


:


.
/


" -..a.



 .
.;i:, ' <


,.


..00 .0


.
,.. .. .
 .::i.
. ... . ,

 __. ..-
-..J-r.

-..."..P
I-;;; ......
._

 ""'
."'
 ;.,.ff.".....


M
<KP()
()
TPOnnEP()
>






ApxMTeKTypa, npOrpaMMMpOSaHMe M
nOCTpOeHMe MHTep<pei1cos C
npMMeHeHMeM C M acceM6nepa


-.....


'--



.


WWW.MK-PRESS.COM


"





Applying PIC18 Microcontrollers Architecture, Programming, and Inte'rfacing Using С and AssembIy 
Applying PIC18 Microcontrollers Architecture, Programming, and Interfacing Using С and AssembIy . Barry В. Brey Pcarson Education Inc. {Jpper Saddle River, New Jersey 07458 OSA 
Барри Брей Применение микроконтроллеров PIC18 Архитектура, проrраммирование и построение интерфейсов с применением С и ассемблера Перевод с анrлийскоrо: В. В. Литвин Киев «МК-Пресс» СПб «КОРОНД-ВЕК» 2008 
ББК 32.9734 Б 87 УДК 004.312 Брей Б. 587 nрименение МLI1кроконтроллеров PIC18. ApxLl1TeKTypa, проrраММLI1рование и nOCTpOeHLI1e LI1нтерфейсов с npLl1MeHeHLI1eM С LI1 ассемблера: Пер. с аНrл.  К.: «МК-Пресс», Сnб:. «КОРОНА-ВЕК», 2008.  576с., LI1Л. ISBN 978-5793105163 (<<KOPOHABEK») ISBN 9789668806-551 (<<MKnpecc») ISBN 9780130885463 (анrл.) Сеrодня микроконтроллеры используются повсеместно в автомобилях, бытовой технике, промышленном и медицинском оборудовании и т.П. Этот учебник дает всестороннее представление об архитектуре, проrраммировании и построении интерфейсов этоrо cOBpeMeHHoro чуда. На Прlll\1ере ce меЙства микроконтроллеров PIC 18 производства Microcl1ip в книrе объясняется архитектура, про['рам l\1ирование и построение интерфейсов. Семейство PIC 18 выбрано не случайно. ПОСКОЛЬКУ оно относит ся К самым современным восьмиразрядным микроконтроллерам. Изложенный 13 KIIIII'e I\!атерllал также применим как к более ранним версиям микроконтроллеров Microcl1ip, так и к анаJlOl'ИЧНЫМ YCTp()ikT вам друrих производителей. Он рассчитан на опытных практиков и радиолюбителей, ИlпереСУIOЩIIХСЯ микроконтроллерами. K З2.97ЗО4 Научный редактор: Ю. Ф. Авраменко Компьютерная верстка: И. В. Авраменко rлавный редактор: Ю. А. Шпак Подписано в печать 07.07.2008. Формат 70 х 100 1/16. Бумаrа офсетная. Печать офсетная. УСЛ. печ. л. 46,8. Уч.изд. л. 35,4. Тираж 2000 :жз. 3аказ NQ 9 СПД Савченко Л.А., Украина, r.Киев, тел./ф.: (044) 5177377; email: info@mkpress.com. Свидетельство о внесении субъекта издательскоrо дела в rосударствеНIIЫЙ реостр ИЗ/1318JЮЙ, производителей и распростраllителей издательской продукции: серия дк N951582 от 28.11.2003r. Отпечатано в типоrрафии ЧП Швец С.М. (свидетельство дк NQ867 от 22.03.2002). 32300, Хмельницкая обл., r. КаменецПодольский, ул. Пятницкая, 9а. Тел.: (03849) 27201, 22079. Авторизованный перевод с анrлийскоrо книrи Pearson Edl1cation Inc., изданной под торrовой маркоЙ Prentice Hall, Copyright (g 2008. Все права закреплены. Никакая часть настоящеrо издания ни в каких целях не может быть BOC произведена в какой бы то ни было форме и какими бы то ни было средствами, будь то электронные или механиче ские, включая фотокопирование и запись на любой носитель данных, если на это нет письменноrо разрешения IJЗ дательства Pearson Edl1cation Inc. Издано на русском языке издательством "МКПресс", Copyrigl1t 19 200. Al1tl1Orized translation from t11e Englisl1 langl1age edition pl1bIis11ed Ьу Pearson Edllcatiol1 Il1c., pllbIis\1il1! as РЮ1tlсе НаН, Copyright (g 2008. АН rights reserved. No part of this book тау Ье reprodllced or tral1smitte(i il1 аl1У [01'111 ur Ьу <ту means, electrol1ic or mecl1anical, il1cludil1g photocopying, recording or Ьу апу il1torl11atiol1 stol.age retl.ieva\ systeт, wit11011t perl11ission from Pearsol1 Edl1cation, Inc. Rl1ssian lal1gl1age edition pl1bIisl1ed Ьу pl1bIis11il1g il11pril1t MKPress, Copyrig11t (g 2008. ISBN 97857931 0516-3 ((KOPOHABEK») ISBN 978966880655-1 ((МКПресс») ISBN 9780130885463 (анrл.) @ «МКПресс», 2008 @ Реаrsоп Еdосаtiоп Inc., 2008 
Co.u.eplKaHHe 5 СОДЕРЖАНИЕ rЛАВА 1. Введение в архитектуру компьютеров..................................... 7 1.1. ОСНОВЫ KOMnbIOTepHO архнтектуры ..............................................................7 1.2. снстемы C4HCJleHH .......................................................................................17 1.3. KOMnblOTepHbIe срорматы ,lJ,анных......................................................:............ .25 1.4. Ре3IОме.......................................................................................................... 34 1.5. Вопросы н заданн ............................................................................'............35 rЛАВА 2. Архитектура семейства PIC18 и разработка nporpaMM ...............40 2.1. Архнтектура PIC 18 ........................................................................................ .40 2.2. MO,lJ,eJlb nporpaMMHpoBaHH .......................................................................... .49 2.3. V1HTerpHpoBaHHa снстема разра60ТКН (IDЕ) ..................................................58 2.4. Язык Ассем6лера, nporpaMMa «ассем6лер» Н KOMnOHOBw,HK........................... 70 2.5. Ре3IОме.......................................................................................................... 76 2.6. Вопросы н за,lJ,анн ........................................................................................ 77 r ЛАВА З. Набор команд семейства PIC18.............................................. 79 3.1. ЛнтераJlьные коман,lJ,ы................................................................................... 79 3.2. Бнтовые коман,lJ,Ы .......................................................................................... 84 3.3. Батовые коман,lJ,Ы ................................... .................................................... .86 3.4. Команды ynpaBJleHH BbInOJlHeHHeM nporpaMMbI н KOCBeHHa aдpecau.H ........94 3.5. Т а6Jlнчные коман,lJ,Ы ...................................................................................... 1 04 3.6. МакропоСле,lJ,оВатеJlЬНОСтн............................................................................ 108 3.7. Ре31Оме ......................................................................................................... 109 3.8. Вопросы н за,lJ,анн .......................................................................................110 rЛАВА 4. Проrраммирование на языке Ассемблера ............... .................113 4.1. Структуры стека н 04ере,lJ,Н ............................................................................ 113 4.2. Сложные арнсрмеТН4ескне onepau.HH .............................................................119 4.3. Пре06раЗ0ванн Me)l(,lJ,Y ,lJ,eCTH4HЫM н ,lJ,ВОН4НЫМ срорматамн ........................128 4.4. Временные за,lJ,ержкн .................................................................................... 133 4.5. npHMep[:>1 nporpaMM .................................................................. .....................136 4.6. Ре3IОме.................................................... ......................................................147 4.7. ВОПРОСЫ н заданн ................................................ ........................................147 rЛАВА 5. Проrраммирование PIC18 на языке С ......................................150 5.1. KOMnHJlTop С18 с 3ЫKa С ............................................................................150 5.2. V1CnOJlb30BaHHe BKJl104aeMbIX cpaJlOB 3ЫKa С ................................................. 159 5.3. npHMepbI nporpaMM на 3ЫKe С ...................................................................... 170 5.4. МатемаТИ4еска 6н6лнотека........................................ ................................. 181 5.5. Ре3IОме:................................................ ........................................................ .183 5.6. ВОПРОСЫ и заданн ........................................... .............................................183 
6 Прнмененне МИКрОI\онтроnnеров PIC 18 rЛАВА б. Спецификации аппаратных средств семейства PIC18 ............ ....185 6.1. Цоколевка выводов н 6аЗ0вые операЦНОНllые характернСтикн.................. ..... 185 6.2. выводы BBo).\BЫBOД. ........ ..... .... .............. .......... .............. .... .... ................. ... ..20 1 6.3. Введенне в прерыванн............ ........... ........... ...... .................................... ..... 213 6.4. Друrне внутреннне пернсрернные YCTpOCTBa ........................................ .....229 6.5. Ре3IОме.. ........ ......... ............. ....... ........................ ..................... ...... ........... .. ..246 6.6. Вопросы н заданн ................................................................................... ....247 rЛАВА 7. Базовый BBOДBЫBOД ......................................................... .".249 7.1. Входы от КJllOчевых схем ............................................................................ '" .249 7.2. Устройства НlIднкацни ............................................................. ...... ......... ... '" .259 7.3. УпраВЛОIIН электромоторамн ................................................................... .... 289 7.4. Реле, соленонды н даТLIНКН ........................................................................ .... З06 7.5. Рс310ме........... ..... .... ........... ........... ....... ...... ... ...... ........................... ...... ..... .. ..Э28 7.6. Воп росы н задан H ..................................................................... .. .. . . . .. . .. ... ....329 rЛАВА 8. Прерывания....... ................. ............................................ ... .332 8.1. Повторное знакомство с прерываннмн ................................................... .....332 8.2. USART н npepbIBaHH ................................................................................ .... .343 8.3. Прерыванн по измененнlO COCTOHH ...................................................... .....357 8.4. Прнмеры снстем, pa60TalOw,Hx с прерываннмн ...................................... .....364 8.5. Ре3IОме... ... ......... ..... .......... ............. .... ..... ....... ...... .................... .............., .... .399 8.6. Вопросы н заданн .......... ..... ............ ......... ............... ........... ........... ......... ..... .400 rЛАВА 9. Системы управления ... ..... ...... ....... .... .............................. .... .403 9.1 . ФормаJlнзаu.н снстемы управленн........................................................ ..... .403 9.2. Прнмеры снстемы ... ........................... ........... ..... ..................................... ..... .408 9.3. Ре3IОме.................................................................................................... ,..... .440 9.4. Вопросы н заданн ................ ................................................................ ....... 441 r ЛАВА 1 О. Вопросы повышенной сложности ................................... ......443 10.1. PacwHpeHHe памтн.............................................................................. ,...... .443 1 0.2. ЗаrРУ304НЫ 6лок................................................................................ ....... .465 10. 3. PacwHpeHHe BBoдaBЫBoдa ................................................................. ........473 1 0.4. V1I1Tepcpec CAN .......... ........... ..... ........... .... ......... ............... .... .............. ....... .482 1 0.5. И HTepcpec US В .................................................................................., ........ 490 10.6. PacwHpeHHbI на60Р команд PIC18..................................................... .........524 1 0.7 . Ре310ме .............................................................................................. .........526 10.8. Вопросы н за,lJ,анн ............................................................................ .........527 Приложения............................................................................. ........529 Содержание компактдиска........................................................ '........575 
lnaBa 1. ВБедение в архитектуру компьютеров 7 rЛАВА 1. ВвеАенме в apxt1TeKТYPY компьютеров Мнкроконтроллеры PIC (проrраммируемый интерфейсный контроллер) BXO,lJ,T в cepHIO hhterpaJlbI-lbIХ схем RISC (KoMnblOTep с cOKpaw,eHHbIM на60РОМ коман,lJ,), выпус каемых cpHpMO Microchip Technology Incorporated (htlp:/ /www.microchip.com). V1меется цеJJЫЙ pд тнпоразмеров корпусов зтнх мнкросхем, начнна от малых корпусов с 18 выводамн дО 60ЛЬШНХ - С 128 выводамн. Выпускаетс также u.елы pд нзделн, пред назна4енных дл ра60ТЫ с РIСмнкроконтроллерамн, которые называlOТСЯ BAS/C Staтp@ н выпускаlOТС cpHPMO Parallax Incorporated (htlp://www.parallax.com). Онн про rpaMMHpYIOTC на 3ЫKe BASIC нлн Java вместо 3ЫKa Ассем6лера. Аанная rлава Bn eTC вве,lJ,еннем в мнкроконтроллернуlO н cHcTeMHYIO apxHTeкrypy в ка4естве ба3L11са уnравленн аnпаратнымн сре,lJ,ствамн с npHMeHeHHeM мнкроконтроллеров. Кроме Toro в He оnределетс MHoro термннов, нсnользуемых в мнкроконтроллерных TeXHOJlOrH- x, 6лаrО,lJ,ар 4ему 4нтатель 3HaKOMHTC с основам н 3TO 04ень HHTepeCHO npe,lJ,MeT HO 06naCTH. nOcJle завершенн нзученн это rлавы, вы сможете: 1. Аавать опре,lJ,еnенн термннам, нспользуемым в 06ластн мнкроконтроллеров. 2. Опнсывать назна4енне каждо КОМПOllенты компыoерно снстемы. З. nOHHMaTb ра60ТУ каждо 4астн KOMnblOTepHo снстемы, а так>ке ее взаНМОСВЯ3L11 с друrнмн снстемнымн компонентамн. 4. Оnре,lJ,елть THnbI данных, нспользуемые с мнкроконтроллерамн. 5. Выnолнть npe06pa30BaHH между заnнсми 4нсел в разлнчных 06Ы4/-10 нспош) зуемых снстемах С4нслеIШ. 1 . 1. ОСНОВЫ КОМПЬЮТРНОЙ архитектуры Нан60лее pacnpocTpaHeHHa apxHTeкrypa KQnblOTepoB НЛЛlOстрнруетс 6лок cxeMO, npe,lJ,CTaBJleHHO на рнс. 1.1. Впервые зта -pXHTeKTYpa 6ыла nреAflожена н HC ПОЛЬЗ0вана ЧаРЛЬЗ0М Бе66нджем (Charles Babbage) в ero (.днаЛНТН4еском ,lJ,внrателе» 8 1856 rоду ( http://www.cbi.umn.edu ). Она продолжает НСnОЛЬЗ0ватьс в качестве 6азо вой CHCTeMHO архнтектуры в 60льwннстве cOBpeMeHHblx u.HCPpOBbIX компыоеров.. «АнаЛНТН4ескн двнrатель» пре,lJ,ставлл c060 MexaHH4eCKH компьютер, I1РНВО,lJ,НМЫ в дествие PY4KO. В 60лее не,lJ,авнее BpeM перед повторным открытнем ра60Т Чарльза Бе66нджа архнтектура KOMnblOTepa npHnHcbIBanacb )].>Кону фон HeMaHY,  он ОПLl1сал ее BeCHO 1945. CerO,lJ,H 06 3TO apxHTeкrype 4qCTO rOBopT как 06 архитектуре фОН Неймана. В rllaBe 2 мы 6У,lJ,ем рассматривать ,lJ,pyrylO apxHTeкrypy компыоера,' KOTopa Ha3ЫBaeTC rарваРДСК9Й архитектурой. 3та apxHTeкrypa не так wироко распространена, как apxHTeкrypa срон HeMaHa, О,lJ,нако нменно она нсnользуетс в мнкроконтроллерах ceMeCTBa PIC.  .. BBOДBЫBOД r ЦП r Память    ШИНЫ  Рнс. 1.1. Блок-схема KOMnbIOTepHO системы 
8 ITpHMeHeHHe MHKpOKOHTpOnnepOB PIC 18 Центральный процессор (ЦП) Показанна 6локсхема компыоернойй снстемы, XOT LI1 является ПрОС10Й, однако содер>КLI1Т трн основных 6лока, отра>каlOЩНХ архнтектуру 60ЛЬWLI1нства cOBpeMelH IbIX цифровых компыоерныыx снстем. Ее rnaBHbIM звеном влется ЦП (центраlJl.)НЫЙ flpO цессор)  зnемент, осуществлIOЩНЙ управленне ра60ТОЙ снстемы. PaHHLI1e процессоры предстаВЛJlН c060 мехаНН4ескне снстемы,  такне, как «анаnНТLI1ческнй двиr-атеш>)), аРLl1фмометры н т.Д., которые WИрОКО НСПОnЬЗ0ваnнсь в 70x rодах проwлоrо стоnеТLI1Я. Первые цнсрровые злектронные компыоерыы первона4ально создаваnLl1СЬ с LI1СПОЛЬ30 l3aHLI1eM электронных ламп, а позднее  транзнсторов. Современные компыотер"ые CLl1C темы создаlOТС на 6азе HHTerpanbHbIX схем, НСПОnЬ3УlOЩLl1Х КМОП TeXHonorHIO. Вторым H3MeHIOw,HMC свойством ЦП BneTc ero TaKTOBa частота. Тактоuая частота ЦП BapbHpyeTC в WHpOKHX предеnах, cocTaBn в настощее BpeM lIеСКОJII.)КО Merarepu. ДJl мнкроконтроллеров LI1 вплоть до HecKOnbKHX rнrаrерц ДJl 60лее МОЩIIЫХ процессоров, нспользуемых в HacTOnbHbIX компыоерныыx CLl1CTeMaX. Меrаrерцоuые (мrц) снстемы  зто CLl1CTeMbI, основанные на НСПОЛЬЗ0ваннн тактовой частоты в MLI1J1 nLl10H нмпульсов за секун,lJ,У (4астота в однн нмпуnьс за секунду называется частотой u 1 repu.), в то BpeM как rиrаrерцовая (rrц) система  это CLl1CTeMa, оснопаll"а на TaKTO вой 4астоте в мнnлнар,lJ, нмпульсов в секун,lJ,У. XaHЦY Рудольсру rерцу (Heiппch Rudo/f Hertz) (http://www.ideafinder.com/history/inventors/hertz.htm) выпала чесrь Iшзвать CBO LI1M нменем еднннцу H3MepeHH KOnH4ecTBa нзмененнй полрностн переменноrо тока за секунду (первона4ально зта e,lJ,HHHu.a называлась "u.нклы за секунду"). XOT тактопа частота мнкроконтроллера нлн мнкропроu.ессора мо>кет не ука3ЫВа1Ъ КОЛН4ество KO манд, которые онн ВЫПОЛНlOт в секунду, однако она непосредственно опредеJlет 6ы стродействне снстемы. Т04ное KOnH4ecTBo команд, выпоnнемых в секунду, определ- eTC внутренней KOHCTpYKЦHe ЦП, сложностыо выполнемых команд, а также выпол- HeMЫMH проrраммамн. Одно можно сказать HaBepHKa: eCnH компыоерp на 10мrц сравннть с KOMnblOTepoM на 2 rru., то BTOpO компыоерp Т04НО окажеТС51 60nee быстрым. THn мнкропроu.ессора может также определть ero 6ыстродейстuне. Процессор ТLI1па RISC (компыоерp с сокращенным на60РОМ команд) представлет с060Й устройст во, которое ВЫПОJlнет О,lJ,ну коман,lJ,У на ка>K,D,ЫЙ тактовый нмпульс, ПрLl1 этом el-o на60Р команд СО,lJ,ержнт только 6аЗ0вые команды. Процессор тнпа CISC (компыоерp с COKpa w,eHHbIM на60РОМ коман,lJ,) может выполнть HaMHoro 60льwе ра3ЛLl1ЧНЫХ команд, в сравненнн с компыоеромM тнпа RISC, О,lJ,нако выполненне некоторых команд тре6ует более O,lJ,HOrO TaKToBoro перНО,lJ,а. CerO,lJ,H зтн термнны cTanH HecKOnbKO pa3MbITbIMLI1, поскольку 60ЛЬWННСТВО мнкропроu.ессоров ИСПОЛЬ3УlOт ком6ннаu.ию CISC н RISC тех- нолоrнй с u.елыо выполненн 60nbWHHcTBa команд в рамках одноrо TaKTOBoro пернода, ПрИ этом некоторые Н3 ннх  такне как процессоры ceMeCTBa Pentium@ от Intel, UЫflOЛ нют MHorHe коман,lJ,Ы Bcero лнwь за одну треть TaKTOBoro пернода. ПрLl1 этом в новых компыоерахx 4асто СО,lJ,ержнтс несколько 6локов u.еn04нслеНIЮЙ аРLl1фмеТLI1КLI1, К010рые pa60TalOT однопременно. Задача ЦП. ЦN ответственен за выполненне pдa последоuатеnьных команд, OpraHLI1 З0ванных в rруппы коман,lJ" которые Ha3bIBalOTc проrраммамн. ФактнчеСКLI1, единст венное, 4ТО ЦN может ,lJ,enaTb - зто выполнть команды от момента пода4Н на Hero Ha пря>кеIlН пнтанн вплоть .0.0 момента ero BbIКJlI04eHH. Проu.ессор HeyroMHMo LI1звле кает команды Н3 памтн н выполнет НХ. 3та последовательность нзвле4енн н выпоn HeHH коман,lJ, ДJlHTC до тех пор, пока на ЦП прнсутствует напрженне пнтаIlН. Идея ЦП н спос06, которым он доnжен ра60тать, 6ыла впервые преДJlожена ЧаРЛЬЗ0М Беб бид>кем. С тех пор онн не LI13MeHnHcb н BepOTHO OCTaHYТC TaKLI1MLI1 >ке еще KaKoeTO 
rnaBa 1. BBe.u.eHHe в архитектуру компьютеров 9 BpeM. Более новые KOMnblOTepbI ВЫnОЛНlOт 60лее OДHO команды О,lJ,новременно, так как ЦП сраКТН4ескн состонт Н3 p,lJ,a арнсрметнческнх н лоrН4ескнх npou.eccopoB. Неко- торые Н3 самых последннх KOMnblOTepoB HMelOT несколько ,lJ,ep. MHoro,lJ,epHbI компь- IOтер  зто KOMnblOTep, В мнкросхеме npou.eccopa KOToporo HMeeTC 60лее O,lJ,HOrO мнк- ponpou.eccopa. nporpaMMa KOMnblOTepHo снстемы  это на60Р коман,lJ" crpYnnHpoBaHHbIx после ,lJ,овательно, которые ВЫПОЛНlOтс KOMnblOTepoM одна за OДHO. Напрнмер, nредполо- жнм, 4ТО nporpaMMa ,lJ,олжна npH6aBHTb 6 к 2. Первым waroM (нлн KOMaHДO) 6удет И3 вле4енне Н3 памтн 4нсла 6. Вторым warOM 6У,lJ,ет нзвле4енне 4исла 2. Третнй war 6y дет заКЛlO4атьс В сложеннн 6 н 2. ЗаKJl104нтельна onepau.H 6удет COCTOTb в coxpaHe ннн суммы в какомлн60 месте naMTH. Как НЛЛlOстрнруетс зтнм прнмером, простая зада4а сложенн 6 н 2 раз6нваетс на warH, называемые командамн. 3тн команды CPOpMHPYIOT сле,lJ,УIOw,уlO nporpaMMY, KOTopa выполнетс MHKponpou.eccopoM НJ1Н MHK роконтроллером: 1. nОЛУ4НТЬ 6. 2. nОЛУ4НТЬ 2. 3. Сложнть 6 н 2. 4. Сохраннть сумму В naMTH Кажды war 3TO npocTo nporpaMMbI nepeBO,lJ,HTC на 3ЫK, KOTOpЫ KOMnblOTep поннмает. 3тот 3ЫK Ha3ЫBaeTC MawHHHbIM 3ЫKOM. MawHHHbI 3ЫK  это nоследова тельность 4нсел, которые nре,lJ,ставлIOТ команды. Еслн rOBopHTb о rHnoTeTH4ecKoM ЦП, то «KOMaHДO нзвле4енн Н3 памтн», может 6ыть 4НСЛО 00, KOMaH,lJ,O сложенн может 6ыть 4НСЛО 01, а KOMaH,lJ,O заnомннанн в naMTH может 6ыть 4HCnO 02. Ааllная I1pO rpaMMa на 4нсленном MawHHHoM 3ЫKe 6удет нметь ВН,lJ,: 00 06 00 02 01 0200, НJШ как зто показано В npHMepe 1.1. Пример 1.1 00.06 00 02 01 02 00 Как можно ВН,lJ,еть Н3 3Toro npHMepa, HanHcaHHe 4нсленных MawHHHbIx КО,lJ,ОВ  зто rpOM03,lJ,Ka н заnуТанна npou.e,lJ,ypa. К C4aCTblO, ce4ac уже ннкто не nHweT nporpaMMbI В 4нсленных MawHHHbIx КО,lJ,ах, XOT В раннне ro,lJ,bI KOMnblOTepHo зры зто ,lJ,елалось. Вместо 3Toro сталн НСnОЛЬЗ0вать ннструмент, называlOw,нся ассем6лср. Прн 310М nporpaMMa заnнсываетс В снмвольно срорме с НСПОЛЬЗ0ваннем Мllемоннческнх 060 3Ha4eHH КО,lJ,ОВ onepau.H,  такнх как GET н АОО. Ассем6лер, KOTOpЫ так>ке явлется nporpaMMo, npe06pa3yeT nporpaMMY, HanHcaHHYIO на снмвольном 3ЫKe ассем6лера, в 4нсленные MawHHHbIe КО,lJ,Ы. nporpaMMa на 3ЫKe ассем6лера, KOTopa reHepHpyeT про rpaMMY, показаннуlO В npHMepe 1.1, может нметь ВН,lJ" nоказанны в npHMepe 1.2. Пример 1.2 GET 6 GET 2 АDD STORE О Аа>Ке н TaKa заnнсь nporpaMMbI ,lJ,остаТ04НО rpOM03,lJ,Ka, О,lJ,нако она, по крайней мере, 601lее 4HTa6enbHa, 4ем nосnе,lJ,овательность 4Hcen. По ПРН4Нllе Toro, 4ТО nporpaMMbI на 3ЫKe ассем6лера MOryr 6ыть достаТ04НО длнннымн, а нх напнсанне HHOr,lJ,a может nредставnять c060 ВЫ30В nporpaMMHcry, в современном nporpaMMHpoBaHHH, как правнло, ,lJ.Il reHcpau.HH 
10 ITpHMeHeHHe МИКрОКОНТролnеров PIC 18 MaWL/1HHbIX кодов Hcnonb3YIOTc ЯЗblКИ проrраммирования BblCOKoro уровня. Язык nporpaM ML/1pOB3HH BbIcOKoro ypoВl - это nporpaMMa, KOTopa npHHL/1MaeT в ка4естве входа псевдо aHrnonoA06HbI язык, а затем прео6разует ero в 4НСЛОВОЙ маwннный код. ПрнмераМL/1 TaKL/1X 3ЫKOB MOryт 6ыть BASIC, С, с++ HnH Java. Уже paCCMOTpeHHa nporpaMMa мо>кет 6ыть напи сана на 3ЫKe С, как показано в прнмере 1.3. Пример 1.3 char answer; answer = 6+2; IlотвоАМТСЯ MeC'ro AnЯ ответа I I вьmоnняется cnoeHMe м Ilсохраняется сумма в lIepeMeHHO iшswс;r Как видно Н3 этой CnpOrpaMMbI, прн HanHCaHHH nporpaMMbI на 3ЫKe BbICOKOfO YPOBH, нужно MeHbwe вводнть L/1нсрормацнн с KnaBHaTypbI, нет неоБХОДL/1МОСТИ 3HaТl) MawHHHDIe коды нли 4исnенные 3Ha4eHH адресов памтн, кроме Toro, этL/1 nporpaMMbI HaMHoro леr48 4итаIOТС. Маwннный код, rенеРL/1руемый языком С, мо>кет 6ыть не СТОJII) эсрсреКТL/1ВНЫМ, как код, reHepHpyeMbI acceM6nepoM, однако nporpaMMbI на С HaMlloro леr4е пнсать, nOHHMaTb н 06служнвать. Кроме Toro, nporpaMMbI на С пнwутся HaMHoro быстрее, 4ем на ассем6лере, а 06У4енне HanHcaHHIO nporpaMM на С тре6ует HaMHoro MeHbwe вреМ8НН н YCL/1nH. V1MeHHo по 3TO npH4L/1He nporpaMMHoe 06еспечеНL/1е 4асто разра6атывается с L/1CnOnb30BaHHeM 3ЫKOB проrраммнровани BDIcoKoro ypOBH. Про ,раммное обеспечение компыоернойй снстемы  это ее nporpaMMbI, а аппаратнос 06еспе4енне  это эnектронные схемы компыоернойй системы. Иноrда nporpaMMHoe 06еспе4енне рассматрнвает аппаратное 06еспе4енне как переменнуlO BenL/14L/1HY, по cKonbKY оно H3MeHeT нnи MO,lJ,HcpHu.HpyeT спосо6 СРУIIКЦL/10ннроваНL/1Я аппаратных средств. 3то 0006еНIIО сnраведnиво An MHKpOKoHTponnepHbIx систем. Интересна отметнть, 4ТО ABrycTa Ада Барон (Augusta Ada Byron) (позднее, после выхода замуж з(l ЛОр,lJ,а Байрона  rpacpL/1H Лавnес (Lovelace)) заСЛУ>КL/1ла РСПУТ3ЦL/11О первоrо KOMnblOTepHoro nporpaMMHcTa. Это npoH30wno по ПрL/1ЧL/1не Toro, что она ПL/1салз проrраммы на 4HcneHHoM мащннном 3ЫKe Щl Чарnьза Бе66L/1д>ка L/1 ero «allаJlL/1тическо ro ABHraTen». В ее 4CTb 6ыл назван 3ЫK проrраммнроваllL/1Я Ada, который ИСIIOJIIJЭО Banc Мнннстерством 060РОНЫ США. ФУНКЦИИ цп. цn в компыоернойй CL/1CTeMe BbInonHeT TpL/1 OCllOBHbIC эздаЧL/1: (1) fюре нос данных, (2) арисрмеТИ4ескне н nоrнчеСКL/1е операЦL/1L/1 L/1 (3) управлет ПОСJ\СДОI33 телыюстыо выпоnнеНL1Я nporpaMM. Перенос данных - это одна L/1Э Н3L/1БОJ\се часто вы- полнемых за,lJ,а4 цп. Больwа 4асть временн ра60ТЫ ЦП расходуется на переllOС дан- ных. Пере нос данных ВКnЮ4ает нзвлечеНL/1е команд L/13 паМЯТL/1, 06мен данными ме>кду perHcTpaMH нлн 4ейкамн памтн, а так>ке nepeMew,eHHe резуnьтатOIЗ некоторых лоrL/1 4eCKL/1X HnH арнсрмеТН4ескнх операu.нй ме>КДу naMTblO н ЦП НЛL/1 между УСТРОЙСТlЗ3МL/1 BBoдaBЫBoдa н ЦП. Та 4асть зада4Н переноса данных, которая свзана с L/1зш!СчеНL/1СМ команд Н3 памтн, влетс HaL/160nee 4асто выполнемо н важно операЦL/1ей, реалн- зуемо ЦП. Извле4енне коман,lJ, Н3 памтн nозволет ЦП выпоnнять проrраммы, эarlL/1 санные в naMTL/1 CL/1CTeMbI, с высокнм 6ыстродействнем. КонцеrЩL/1 сохраl/яемой про- ,раммы AenaeT компыоерp весьма MOW,HbIM устройством - она 6bIna впервые предло >кена также Чарльзом Бе66L/1д>кем. БОЛЬШL/1НСТВО проrрамм по крайнсй мсрс 50% BpC мени cBoero выполнеНН51 занты nepeMew,eHL/1eM данных, 4асто этот процент 6удет нз- MHoro более BbICOKL/1M. В та6л. 1.1 перечнслены некоторые Н3 11aL/160nee распространсн IILJIX операцнй переноса данных, BbInOnlleMbIx 60nbwHHcTBOM ЦП. 
rnaBa 1. BBe.u.eHHe в архнтектуру компьютеров 11 Таблица 1.1. Нан60лее распространенных Onepau.H переноса ,lJ,анных Операция Комментарий Память -> Реrистр операций M3BneqeHMe onepaUMM С занесенмем Ee В pe. rMCTp onepaUM Память -> Реrистр данных M3BneqeHMe Аанных М3 naMRTM с занесенмем мх В perMCTp Аанных . "..., ................ ... Реrистр данных > Память Сохраненме Аанных М3 perMCTpa Аанных В Rqейке naMRTM Реrистр данных > Реrис'Х'р данных Оеренос COAepMMoro perMCTpa Аан HX В APY rой perMCTp Аанных Реrис'Х'р данных > BBOДBЫВOД Оеренос СОАеримоrо perMCTpa AaHlНЫx в YCT POCTBO BBOAa-ВЫВОАа Ввод-вывод > Реrистр данных Оеренос COAepMMoro YCTpOCTBa BBOAaBЫBOAa В perMCTp Аанных На выnолненне арнсрмеТН4ескнх н лоrН4ескнх операu.н ЦN тратнт на MHoro меньше временн, 4ем на onepau.HH переноса ,lJ,анных. 04ень 4асто nporpaMMbI ',.pe6YIOT, 4т06ы ЦN уделял арнсрмеТН4ескнм н лоrН4ескнм onepau.HM только не60ЛЬШО  npou.eHT CBO ero временн. В та6л. 1.2 nере4нслены THnH4HbIe арнсрмеТН4ескне н лоr'Н4ескне onepa- u.HH, uыnолняемые ЦN. 3тн onepau.HH 06Ы4НО ВЫnОЛНЯlOтся u.еЛ04нслеНlrlЫМ apHcpMeTH 4ескнм YCTPOCTBOM. ЦN не мо>кет ра60тать с ,lJ,ествнтельнымн 4нслам н 6ез нспользо вання cooTueTCTBYIOW,HX nporpaMM лн60 YCTpOCTBa, называемоrо арифметическим устройством или цифРОВblМ процессором. MHKpOnpOu.eccop часто СОД,ер>кнт, наряду с u.еЛ04нсленным npou.eccopoM, так>ке н u.HCPPOBO проu.ессор, в то upefv JЯ как MHKpOKOH троллеры 04ень ре,lJ,КО UКЛlO4аlOТ u.HcppOBO npou.eccop. Таблица 1.2. 06Ы4ные арнсрметнческие н лоrV',4ескне операции . Операция Комментарий Сложение MeAY perMCTpaMM, perMCTpoM м naMRTb MnM С Henoc :peACTBeHHbIМM Ааннымм. Вычмтание MeAY perMCTpaMM, perMCTpoM м naMRTb млм С Heno' ::реАС'l'венными Ааннымм. Умножение MeAY perMCTpaMM, perMCTpoM м naMRTb MnM С Heno cpeAc'rBeHHbIМM Ааннымм; pe3YnbTaT MoeT мметь YABoeHH opMaT Деление MeAY perMCTpaMM, perMCTpoM м rraMRTb MnM С Henc )среАС'l'веннымм Ааннымм; pe3YnbTaT MoeT мметь YABoeHHbrn opMaT . (Некоторые MMK pOKoHTponnepbl не BblrronHRT onepaUM AeneHMR.) Инверсия Знак qMCna M3MeHReTCR И Лоrмqеское n06MToBoe М MeAY perMcTpaMM, perMC'I 'ром м паМR'l'Ь MnM С неnосреАственнымм даннымм или Лоrмqеское n06MToBoe ММ MeAY perMcTpaMM,. per11c'rpoM м naMRTb млм С HenocpeACTBeHHbIМM Ааннымм ИСlCJIJOчитель Лоrмqеское n06MToBoe MCKnqMTenbHoe ММ MeAY perMC'I'paMM, pel'M. ное или стром м rraMRTb MnM С неnосреАственнымм AaHHЫNIM НЕ Лоrмqеское rr06MTOBoe НЕ Meдy реrмстрамм, perl- ICTpOM м naMR'rb MnM С неnосреАственнымм Ааннымм Нан60лее MOW,HO CPYHKu.He, выnолняемо ЦN, является er:o cnoc06HoCTb MOДH cpHu.HpoBaTb ХО,lJ, потока коман,lJ, nporpaMMbI 4ерез нсnользован не простых чнсловых решенн. Управление выполнением команд проrраММbI 06ecn е4нвает возможность MHorOKpaTHoro uыnолнення в nporpaMMe CeKu.HH лн60 CeKu.H nporpaMMHoro КО,lJ,а. Ko ман,lJ,Ы уnравлення uыnолненнем коман,lJ, nporpaMMbI так>ке nОЗВОЛЯlOт nepe,lJ,aTb ynpal3 
12 ITpHMeHeHHe MHKpOKOHTpOnnepOB PIC 18 леНL/1е выполненнем nporpaMMbI CPYHKu.HH нлн nроu.едуре. V1MeIOTc условные L/1 безус ловные команды nереда4Н уnравленн. npHMepaMH команд безусловно nередаЧL/1 уnравленн ВЛlOтс команды GOTO н команда ВЫЗ0ва CPYHKu.HH CALL. Команды услов HO nередачн уnравлеНL/1 обесnе4L/1ваlOТ возмо>кность npoBepKH 4L/1сел на нх COOTBeTCT вив каКНМJlL/1бо условнм с u.елыо оnределенн Toro, дол>кна лн МОДНсрL/1цнроватьс последовательность уnравлени выполненнем nporpaMMbI. Условные команды. уnравлення последовательностью выnолнення проrраммы оБЫ4НО npoBepIOT 4нсла с u.елыо оnределенн Toro, ВЛlOтс лн онн нулевымн, нмел ЛL/1 место перенос после сло>кенн, лнбо Toro, вляетс лн результат оnераЦНL/1 отрнца- тельным ЛL/1бо nоло>кнтельным. В табл. 1.3 nере4нслены MHorHe L/1з оБЫ4НО nроверяемых условн ДJl больwннства цn. Условные команды уnравленн nоследовательностыо выnолнеНL/1Я проrраммы оБЫ4НО составлIOТ небольwо npou.eHT от всех команд, со- ставлlOw,нх ТНnНЧНУIO nporpaMMY, однако зтн команды делают цn MOW,lIbIM КОМIlОIЮН том KOMnblOTepHo снстемы, надел ее способностью npHHHMaTb решення. HanpL/1Mep, как мо>кет компыоерp оnредеЛL/1ТЬ, то, 4ТО с KJlaBHarypbI введено, HanpHMep, 4НСЛО 3? Он ,lJ,елает зто, OTIHL/1Ma 3 от введенноrо чнсла, а затем npoBepeT, не влетс лн резуль тат нулевым. Еслн результат нулево, то последовательность выnолненн nporpaMMbI моднсрнu.нруетс такнм 06раЗ0М, 4ТО как peaKu.H на ввод с KJlaBHarypbI 4нсла 3 выnол HeTC опредеJ1енна зада4а. Здесь возннкает НЛЛlOзн Toro, 4ТО компьютер мо>кет ду- мать н раССУЖJ'J,ать о npH4HHax ввода 4нсла 3 с клавнаryры, хотя в дествнтельностн едннственное, 4ТО он делает - так зто BbI4L/1TaeT 4НСЛО 3 Н3 введенноrо 1L/1сла, а затем npoBepeT, не влетс лн результат нулевым. Что делает KOMnblOTepHYIO снстему мощ ным ннструментом? Коне4НО >ке, - nporpaMMHoe обесnе4енне, HanHcallHoe nporpaMMH стамн, нбо нменно оно создает НЛЛlO3НIO TOro, 4ТО KOMnblOTep мо>кет думать н paccY>K дать. Таблица 1.3. Условн, npoBepeMbIe MHorL/1MH цn. Условие Ноль Пере но с Знак Переполне ние Комментарий ЯВnRеТСR qMCnO нуnевьш MnM нет? Ммел MnM не MMen место перенос? Чмсnо поnомтеnьно MnM OTpMuaTenbHO? HeKo'ope ЦП ВПОnНRТ проверку на apMMeTM4eCKoe nерепоnненме Память naMTb - зто 4pe3BЫ4aHO Ba>KHЫ компонент KOMnblOTepHo снстемы, поскольку она 06ecne4HBaeT место ДJl pa3Mew,eHH проrрамм, а так>ке данных, нсnользуемыx в nporpaMMax. Без n aMTH компыoерна снстема была бы не БОJlее MOW,HO L/1ЛН быст po, 4ем оБЫ4НЫ каJlЬКУЛТОР на 4етыре дeCTBH. npH наЛН4НН naMTH компьютер nОЛУ4ает досryn к командам, xpaHw,HMc в НЕЙ. Он L/1звлекает нх oтryдa с 04ень высо- KO CKOpOCTblO. "АнаЛНТН4еСКL/1 ,lJ,внrатель" Чарльза Беб6нД)Ка нмел naMTb объемом в 1000 4нсел по 20 ДI9СТН4НЫХ разрдов. 3тот KOMnblOTep так>ке ВЫnОЛНJ1 nporpaMMbI, xpaHw,Hec в nамти. С МL/1кропроu.ессорамн н МНКРОКОНТРОJlлераМL/1 НСnОЛЬ3УlOтс два THna nамятн: nocToHHoe запомнн alOw,ee YCTPOCTBO (ПЗУ) L/1 onepaTHBHoe заnомннаюw,ее YCTPOCTBO (ОЗУ), которое ew,e иноrда называlOТ заnомннаlOw,L/1М YCTPOCTBOM с nроизвольно BЫ борко (зУnв). ПЗУ в мнкроконтроллерных снстемах храннт стаТН4ескне данные, как HanpHMep npOrpaMMI::.I, а так>ке константы, нсnользуемые в nporpaMMax. Большннство встроенных мнкроконтроллерных НЛL/1 мнкроnроцессорных снстем coxpaHIOT только 
rnaBa 1. BBe.u.eHHe в архнтектуру компьютеров 13 одну проrрамму в памти, KOTopa срункционирует как операционная система. ОЗУ 13 микроконтроnnерной системе хранит динамические данные дл системы. Ва>кно OTMe тить, что дисковые накоnитеnи, а также ApyrHe под06ные YCTpOCTBa, не рассматрива IOTC как памть, а С4ита1OТС устроствами BBoдaBЫBoдa, XOT они и xpaHT данные LI1 проrраммы. Это разnнчие делаетс в сипу Toro, что дисковые накопители и подобные нм YCTpOCTBa TpaKTYIOTc иначе, чем памть, при ПОДКЛlOчении к системе. Драйвер (проrрамма, KOTopa уnравлет YCTPOCTBOM BBoдaBЫBoдa) дисковоrо накопитеn пе- реАает в ДИСКОВЫ накопнтель не60ЛЬШО 06ъем ннсрормацин дл Toro, чт06ы заста вить ero работать. Cyw,ecTBeHHoe отлнчне в случае пзу или ОЗУ состоит в том, что дос- туп к зтим устройствам nроцессор ocyw,ecTBneT не 4ерез драйвер, а непосредственно через pд проводов, идуw,их от запоминаlOw,еrо YCTpOCTBa к ЦN и которые непосред ственно управnютс сиrнаnами, выдаваемыми ЦN. пзу. пзу в COBpeMeHHO компыoерно системе  зто, как правило, стираемое про rраммируемое постонное ЗУ (СnnЗУ), зnектрически стнраемое nроrраммируемое постонное ЗУ (3СnnЗУ), а HHorAa  запроrраммированное на предпринии изrотовителе ПЗУ. Как СnnЗУ, так н ЭСnnЗУ спос06ны сохранять инсрормаu.иlO IlрИ- 6лнзнтельно на nрот>кенин 20 лет илн до момента их стирани. Фабрично запроrраммированное ПЗУ запроrраммировано HaBcerAa. СnnЗУ мо>кет 6ыть стерто примерно вплоть до 100 раз, в то BpeM, как 3СnnЗУ мо>кет стиратьс от 10000 до 1000000 раз, в зависимости от Toro, KorAa н кем оно 6ыло нзrотовлено. СnnЗУ исnользуютс у>ке довольно давно. 3ти YCTpOCTBa не06ходимо нзвлекать И3 системы, если ну>кно выполнить их стнрание. СnnЗУ стирается, 6удучи nOMew,eHHbIM под интенсивное ультрасрнолетовое 9БЛУ4ение в те4ении в среднем от 1 О до 20 минут. СП ПЗУ спос06но 06есnе4ИТЬ скорость доступа  4тени пордка около 100 нс. ЭСnnЗУ стираетс злеКТРИ4ески 6ез ero извnе4ени И3 системы. ЭСnnЗУ 4асто назы вают срnзшпамтыо. 3то YCTPOCTBO также спос06но 06еспе4ИТЬ скорость доступа я 4тени пордка OKOnO 100 нс. Основное ero ОТnИ4ие от СnnЗУ заКnlO4ается в том, что BpeM стнрани 3СnnЗУ BneTC HaMHoro 60лее коротким. В типичном случае  3СnnЗУ время CTHpaHH составлет мнллисекун,lJ,Ы, в то BpeM как  СnnЗУ  мину ты. Современные распространенные nрнменени 3СnnЗУ ВКЛlO4аlOТ системны BIOS (6азова система BBoдaBЫBO,lJ,a) в nерсональных компьютерах; срлешнакопнтели USB (имеlOw,ие Ha3BaHH JuтpDrives™, PocketDrives™, PeпDrives™ нли ThuтbDrives™), за меНIOw,ие накопители на rH6KHx маrнитных дисках в 60льшннстве компыоерныыx сис тем, а также аудиоплееры МРЗ. ОЗУ. ОЗУ системы мо>кет 6ыть ли60 стаТИ4еским ОЗУ (СОЗУ), либо динамическим ОЗУ (ДОЗУ). 06а названные типа памти ВЛIOТС разрушаемыми, Т.е. они не 06еспе4ива IOТ сохранени инсрормации после ОТКЛ104ени наnр>кени питани. СО ЗУ сохраняет данные в 4eKax памти, наnр>кение питани на которые подается постоянно. Это делает их 6ыстрыми, но также ведет к зна4ительному расходу моw,ности. YCTpOCTBa СОЗУ 06еспе4иваlOТ BpeM доступа пордка 1 нс н менее, 4ТО делает их ОТЛИ4НЫМИ KaH дндатами на НСПОЛЬЗ0ванне в ка4естве системной памти компыоеров,' еслн закрыть rлаза на BbICOKYIO потре6лемуlO MOW,HOCTb. АОЗУ XpaHT ннсрормацнlO в 4eKax naM тн, которые представлIOТ c060 КОН,lJ,енсаторы. Вследствне Toro, 4ТО конденсатор co xpaHeT инсрормациlO коне4ное BpeM, 4eKH АОЗУ ДОЛ>КНЫ пеРИОДН4ескн перезапи CЫBaTbC с целыо rарантин u.елостностн ннсрормации. npou.ecc пеРИОДН4еско переза- пнси данных в АОЗУ Ha3ЫBaeTC обновлением памтн. АОЗУ 06Ы4НО coxpaHeT инсрор мацнlO на прот>кении от 2 до 4 миллнсекунд, после 4ero ее ну>кно 06НОВJ\1Ъ. 06новле- ние инсрормаu.ни в АОЗУ тре6ует расходовани системноrо 'времени. Кроме Toro, ИН- 
]4 ITpHMeHcHHe микроконтроnnеров РТС] 8 срормация не мо>кет запоминаться и извлекаться ,lJ,а>ке при6лизителыю с TO >ке скоро- CTblO, 4ТО И В СОЗУ. Времена ,lJ,оступа к АОЗУ ле>кат в ,lJ,иапаЗ0Н около от 40 до 50 нс, 13 ТО время как время ,lJ,оступа M СО ЗУ мо>кет ,lJ,остиrать 1 нс и менее. Сеrодня АОЗУ ис- ПОЛЬ3УЮТС в 60JlЬWИХ KOMnblOTepHbIx системах, а СО ЗУ  в малых системах. 31 о 03Ha чает, 4ТО 60ЛЬWИНСПЮ микроконтроллеров не исnользует ДОЗУ, так как 06ъем памяти в них слишком мал. О,lJ,нако технолоrия меняетс и МОЖно надеться, что в скором f3pe мени потре6ляемая MOW,HOCTb СОЗУ СНИ3ИТС настолько, что ЗУ 3Toro типа 6удут ис ПОJlЬЗ0ваться в системах с 60ЛЬWИМ 06ьемом памяти, 4ТО принесет по крайней мерс 50-ти кратное ускорение 6ЫСТРО,lJ,ействия системной памяти зтих систем. BBOДBЪIВOД BBOДBЫBOД системы  3ТО связь ее ЦN с ,lJ,руrимн компыоерамии или JlIOД)МИ. Без BBO,lJ,aBЫBO,lJ,a ЦN мо>кет pewaTb зада4И, О,lJ,нако он не 6У,lJ,ет в состонии предстаf3И1Ъ результат JlIO,lJ,ЯМ или ,lJ,руrим KOMnblO'repaM. Всле,lJ,ствие wирокой l-IOменклвrуры уст- ройств BBO,lJ,a-вы, ВО,lJ,а nO,lJ,КJl104aeMbIX к ЦN, 60Jlьwая 4асть работы микропроцессоров иJlи МНКРОКОНТРОЛJlеров сопржена с орrанизацией взаИМQЦеtmи и ynfЭавленИя (4е- рез nporpaMMHbIe ,lJ,paBepы) YCTpOCTBaMH BBO,lJ,aBЫBoдa КОМпыоteрfОЙ систеМI. Се- rо,lJ,НЯ YCTpOCTBa BBO,lJ,aBЫBO,lJ,a реализуlOТ П04ТИ все воо6ра3ИМЫе за,lJ,Э.чи или срунк,,; u.ии. Большая 4асть зтой книrи посвяw,ена орrаннзаu.ии азаИМО,lJ,еЙ"СtВН мИlфОКОН троллеров с мноrими устройствами BBO,lJ,aBЫBO,lJ,a, а таК>Ке примеН(i,tи\О nporpaMMHbIx ,lJ,райверов ,lJ,Jlя их управления. Сре,lJ,И наи60лее pacnpoCTpaHetiHbIx YCTPOCTB [шода ВЫВО,lJ,а мо>кно назвать клавиаryру, 06еспе4иваlOw,уlO В03МО>кность ВВО,lJ,а инсрормацин\ а так>ке )lКК,lJ,исплен, пре,lJ,назначенные,,lJ,JlЯ вывода ин<рормации. В 06щем (}rta "t)e; 4ТО ПРОИЭВО,lJ,ИТ ИJlИ принимает элеКТРИ4еские СИП-iалы, мо>кет 6ыть ftMf10"l.itre  "'-бivl nblOTepy в ка4естве BHeWHero устройства. Шины Сое,lJ,инения между 6локами, показанными на боок...ехеме компыотеРllOЙ систе мы, называlOТСЯ шинами. Шина  3ТО на60Р ПРОВОДНИКОВ, которые несут ИlIсрормаu.иlO спеЦИСРИ4ескоrо Типа. компыоернаяя система нмеет три wины: (1) WИНУ адреса, (2) WИНУ ,lJ,анных н (3) WИНУ управлени. Wина а,lJ,реса несет aдpecHYIO инсрормаu.иlO, необ- ХО,lJ,ИМУIO ,lJ,JlЯ вы60ра 4ейки памяти нлн 4ейки BBO,lJ,a-вывода, шина данных нссет дaH ные, которые пере,lJ,аlOТСЯ между памятыо или устроствами вводаf3ЬШО,lJ,а и микрокон- троллером, а wина упраВJlения управляет 4тением ли60 записыо памяти или устройств BBO,lJ,aBЫBO,lJ,a. V1MeHHo 6лаrО,lJ,ар ИСПОЛЬЗ0вании Ha3f3aHHbIX трех шин, микроконтрол- лер становитс спосо6ным ВЫПОJlНЯТЬ nporpaMMbI, записанные в памяти системы, а так>ке упраВJlЯТЬ устроствами BBO,lJ,a-ВЫВО,lJ,а, nО,lJ,КЛlO4енными к системе. Шина адреса. Все KOMnblOTepbI имеlOТ WИНУ а,lJ,реса, сиrнальные линии которой П04ТИ BCer,lJ,a 060зна4аlOТСЯ как АО, AI, А2 н Т.,lJ,. Снrнал АО - 3ТО П03Иu.ия caMoro мла,lJ,wеrо раЗрЯ,lJ,а а,lJ,реса, сиrнал АI 3ТО nозиu.и сле,lJ,УIOw,еrо в сторону возрастани раЗрЯ,lJ,а а,lJ,реса и так ,lJ,алее. КОЛИ4ество прово,lJ,ОВ WИНЫ адреса или Сипалов изменяется от KOMnblOTepa к KOMnblOTepy. Например, еслн KOMnblOTep имеет 16-ти разря,lJ,НУIO aдpec HYIO шину (ПрОВО,lJ,ники KOTOpO HYMepYIOTc от АОдо А15), то он мо>кет адресовать 64К памти нли 64 Х 1024 (65536) 4eeK памяти запомннаlOw,е системы. V1спользуемый в KOMnbIOTepHO ,lJ,окументации и литературе символ «К» 0зна4ает 1024 или 210. мы мо>кем опре,lJ,елить КОЛИ4ество а,lJ,ресуемых Я4еек памти, B03Be,lJ, 4ИСЛО 2 в степень, раf3НУЮ КОЛИ4еству ПРОВО,lJ,ников wины а,lJ,реса Т.е. ПОЛУ4ИВ 216 в СЛУ4ае 16-разря,lJ,НО WИНЫ a,lJ, 
rnaBa 1. BBe.u.eHHe в архнтектуру компьютеров 15 реса. 3то 4НСЛО оnре,lJ,елет КОЛН4ество ,lJ,ВОН4НЫХ комбннаu.н (64К) ,lJ,Л СЛУ4а 16 разрядноrо адреса. АналоrН4НЫМ образом, снстема, KOTopa нмеет 20-разр,lJ,НУЮ WHHY а,lJ,реса, адресует 1 м 4eeK naMTH (220). 1 М 4eeK naMTH озна4ает 1 К умно>кенное на 1 К Я4еек нлн 1048576 4eeK. Разр,lJ,НОСТЬ WHHbI адреса колеблется от 12 разрядов (4К) в некоторых мнкроконтроллерах,lJ,О 40 разр,lJ,ОВ (1Т) в nосле,lJ,ННХ 64разрядных MLI1KpO nроцессорах Pentium (EMT64) от срнрмы Intel Corporation. В табл. 1.4 nеречнслены раз рядностн WHHbI адреса н объемы nамятн ДJlя p,lJ,a мнкроnроцессоров н мнкроконтрол леров. Ячекн nамятн HYMepYIOTc с нсnользованнем wестна,lJ,цатнрнчных 4нсел (основа системы счисления равна 16) от Я4екн номер О .0.0 макснмальноrо номера ячейкн ДJlя данной разрядностн WHHbI а,lJ,реса. HanpHMep, 4eKH naMTH 06ъемом 4К, которая нмеет 12-разря,lJ,НУIO aдpecHYIO WHHY, нумеруlOТСЯ от 4eKH nамятн номер 000.0.0 че KLI1 номер FFF в wестнадцатнрН4НО снстеме С4нсленн. Она СО,lJ,ер>кнт 1000 (wecTHa- ,lJ,цаТНРН41юе 4НСЛО) Я4еек nамятн. АналоrН4НЫМ образом, 4eKH naMTH объемом 64К, KOTopa нмеет 16-разря,lJ,НУIO a,lJ,pecHYIO WHHY, HYMepYIOTc от 0000 .0.0 FFFF в wecTHa ,lJ,цатнрнчно снстеме С4нсленн. 3та память СО,lJ,ер>кнт 10000 (wестнадцатнрнчное 4НСЛО) Я4еек naMTH. Anя nре,lJ,ставленн Ka>K,lJ,OrO разряда wестнадцатнрнчноrо адреса Tpe6yeTC 4раЗРЯ,lJ,ное ,lJ,ВОН4ное 4НСЛО. Шестна,lJ,цаТНРН4ные 4нсла 4асто заnнсываlOТ- си с нсnользованнем «Ох» nepe,lJ, 4НСЛОМ нлн 6уквы Н после 4нсла. npHMepaMH такой заnнсн MOryт 6ыть ОхЗА н ЗАН. Таблица 1 .4. Разря,lJ,НОСТЬ адреса н объемы nамятн. Разрядность адреса 10 разрядов 12 разрядов 16 разрядов 20 разрядов ЗО-разрядов Объем памяти Объем памяти в шестнадца Приме тиричной нотации чание Мер Мс6м rMr rM6M Тера Те6м Оета Ое6м Екса Екс6и Примечание: Киби, Меби, rиби, Теби, Пеби и Ексби являются предлааемыми на- именованиями единиц объема памяти 1 К ( 1, О 2 4 ) MnM 2 1 () 4К (4096 MnM 212) . 6 4 К (6 5, 5 3 6 ) MnM 216 1 М (1,048,576) MnM 220 1 G (1,073,741,824) MnM 230 400 1000 1 0000 100000 4000 0000 KMnO Км6м 40 разрядов 50 разрядов 60 разрядов 1 Т ( 1, О 9 9, 511, 6 2 7 , 7 6 6 ) MnM 2 4 О 1 О О О О О О О О О О 1Р (lК* 1 Т) MnM2 50 4 0000 0000 0000 IE (lК*lР) MnM2 60 1000000000000000 Шина данных. WHHa ,lJ,анных KOMnblOTepHo снстемы  3ТО оБЫ4НО ,lJ,вунаnравленна WHHa, KOTopa nepe,lJ,aeT ,lJ,анные Me>K,lJ,Y цn н naMTblO, а TaК)l(e.cHcTeMo BBoдaBЫBoдa. WHpHHa WHHbI ,lJ,анных, лнннн KOTOpO HYMepYIOTc от ОО .0.0 Оп, нзменетс. Как н в случае с адресамн naMTH, нулево разрд WHHbI ,lJ,анных (ОО)  3ТО самый МllадШLl1Й разр,lJ, WHHbI ,lJ,анных. 8-разр,lJ,НЫ KOMnblOTep 06Ы4НО нмеет 8разряднуlO WHHY дан- ных, 16-разря,lJ,НЫ KOMnblOTep оБЫ4НО нмеет 16 разря,lJ,НУIO WHHY ,lJ,анных н Т.,lJ,. В HeKO торых KOMnblOTepax WHHa ,lJ,анных В,lJ,вое wHpe, 4ем разр,lJ,НОСТЬ MaWHHHoro слова ЦП, что нмеет целыо увеЛН4НТЬ скорость ннсрормацнонноrо 06мена. Так, мнкроnроцессор Pentium от срнрмы Intel влетс З2-разр,lJ,НЫМ npou.eccopoM, KOTOpЫ нсnользует 64разр,lJ,НУIO WHHY ,lJ,анных. 
16 ITpHMeHeHHe MHKpOKOHTpOnnepOB PIC18 Шина управления.Ламть н YCTpOCTBa BBoдaBЫBoдa, ПОДКЛlO4енные к MHKpollpou.ec- сору, должны 6ыть 06ъектом управлени. Шина управления выполнет 3ТУ задачу через считыванне снrнала, KOTOPЫ 4асто Ha3ЫBaeTC А9, н запись снrнала, KOTOpЫ 4асто Ha3ЫBaeTC WR. 06ратнте вннманне, что пере4еРКНуТые снмволы (в ne4aTHoM тексте - 4ерта сверху) 03Ha4alOT прнставку "НЕ", Т.е. они YKa3bIBaIOT, что сиrнал 6удет активным в нулевом COCTOHHH. Напрнмер, снrнал RG (С4нтывание) иннциализирует c4HTbIBaHLI1e тоrда, коrда он HaXOДHTC в COCTOHHH лоrН4ескоrо нул. V1ноrда символ # нсnользуетс ДJl указанн Toro, 4ТО снrнал влетс актнвным в нулевом СОСТОНLI1И, как, например, #RD. Коrда мнкроконтроллер нзвлекает команду Н3 naMTH, 011 pa3Mew,aeT адрес пам тн на шнне адреса, затем снrнал C4HTЫBaHH переводнтс в нулевое состоние с тем, 4т06ы ннсрормнровать ЗУ о не06ходнмостн выnолненн операцнн 4TeHH, затем ,lJ,анные nepeHocTc Н3 памтн в MHKponpou.eccop 4ерез шнну данных. nодо6ным же 06раЗ0М аналоrН4ные шаrн ВЫПОЛНIOТС прн выnолненнн операцнн запнсн в памть, задача НСКЛlO4еннем Toro, 4ТО вместо снrнала 4TeHH мнкропроцессор выдает снrнал запнсн. Лю6ые друrне снrналы, передаваемые по шнне уnравленн, ВЛIOТСЯ специсрнческнми дл. кюкдоrо THna мнкропроцессора. Некоторые доnолннтельные сиrналы, передавае мые по WHHe уnравленн, 06ecne4HBalOT ввод прерыванн, а так>ке ВЫnОЛНIOТ ра3ЛН4 ные друrие срункцнн уnравлени, nOMHMo управлени naMTblO и npMoro управления KOMnblOTepHo -CHCTeMO. МИкропроцессор и микроконтроллер . Чарльз Бе66н.цж: постронл CBO KOMnblOTep на основе технолоrнн Toro временн, KOTopa носнла MexaHH4eCKH характер. Ero KOMnblOTep 6ыл сконструнрован с нсполь З0ваннем шестеренок н pbI4aroB. npH зтом механнзмы одоrрасрН4ескоrо THna нсполь З0Валнсь ДJl xpaHeHH 1000 20TH разрдных дeCTH4HЫX 4нсел в naMTH YCTpOCTBa. Ввод-вывод выполнлс 4ерез OTBepCTH, про6нтые в 6умажно ленте. 3тн ранние нден реалнзацнн MexaHH4ecKoro KOMnblOTepa некоторое BpeM npe6bIBaJlH в за6веНLI1И до тех пор, пока в двадцатом столетнн не повнлнсь 60лее современные KOMnblOTepbI. Корпорацн IBM создала целуlO и ндустрн 10 , OCHOBЫBaCb на НСПОЛЬЗ0ванин nep срокарт, которые домнннровалн в KOMnblOTepHbIx прнменених вплоть до середнны BOCbMHдeCTЫX rодов прошлоrо столетн. 3тн персрокарты (которые ew,e называлн Kap тамн Холлернта по нменн repMaHa ХОJlлернта (Herman Hollerith)  основател Kopnopa- цнн IBM) 6ылн мехаНН4ескнмн носнтелмн ннсрормацнн, которые НСnОЛЬЗ0валнсь ДJl реалнзаu.нн BBoдaBЫBoдa как в мехаНН4ескнх ВЫ4нслнтелх 50x rодов, так н в злек тронных KOMnblOTepax 60x rодов nрошлоrо столетн. Раннне механнческне KOMnbIoTe ры 4асто Ha3bIBaJlH С4етнымн MaWHHaMH  онн nporpaMMHpOBaJlHCb с НСПОЛЬЗ0ваннем nРОВОЛ04НЫХ переМЫ4ек. 3тн раннне машнны проложнлн дороry злектронным компыо- терам, которые 4асто называлн "MeHcppeMaMH". MeHcppeMЫ 6ылн дороrНМLI1 и 60ЛЬШНМН, с повленнем ннтеrральных схем онн устарелн. Процесс же полной nо6еды микропроцессоров на MeHcppeMaMH на4алс в 80x rодах прошлоrо столетн. nepBbI мнкропроцессор (4004) 6ыл создан cpHpMO Intel в 1971  3ТО 6ыл 4-разрдны ЦN, KOTOpЫ pa60TaJl на TaКТOBO 4астоте, paBHO 20 кrц, н адресовал naMTb с 4етырех6нтнымн 4eKaMH прн НСnОЛЬЗ0ваннн 12-разрдноrо адреса (4К). т ехнолоrн 6ыстро nроrресснровала н в конце 70x rодов мнкропроцессор срнрмы Intel стал 16разрдным npH 06ъеме naMTH в 1 М н TaКТOBO 4астоте в 6 мrц (.мнкроnроцес- сор 8086). Фнрма Motorola так>ке нзrотавлнвала мнкроnроцессоры н она тоже нмела ycnexH в оБJlастн TeXHOJlOrHH, BbInycTHB 32-разрдны мнкроnроцессор, KOTOpЫ aдpe совм naMTb 06ъемом 16 M6aT, pa60Ta на TaКТOBO 4астоте, paBHO 8 мrц (мнкро- nроцессор 68000). Было совершенно 04евидно, 4ТО Motorola имеет nреимуw,ество, oд 
rnaBa 1. Введение в архитектуру компьютеров 17 нако ей не удалос) добитьс доминируюw,еrо nоло>кеНLI1 на рынке. 3то, вероЯlНО, rlpo изошло по причине Toro, что IBM реwила использовать микропроцессор Intel в свосм персональном компьютере. Архитектура IBM LI1 МLI1кроnроцессоры Intel, блаrОАаря pe шению IBM, оказались на подъеме, микропроцессоры >ке Motorola были использованы в компьютерах Macintosh фирмы Apple, которые не получили TaKoro >ке успеха, как ПК срирмы IBM. НеАавно фирма Apple сообw,ила о том, что в ее новой линии KOMnbIOTepOB будут исnользоватьс микропроцессоры Pentium. Микроконтроллер, который nредставлет с060Й саМОАостаточную компьютерную систему, так>ке был СОЗАан Intel в 1977 как 8разрдное устройство (8048). Он cOAep>Kall микропроцессор, naMTb и обеспечивал возмо>кность подключения к устройствам BBO Аа-вывода. Микроконтроллер был спроеКТLI1рован в расчете на управление оборудова нием, а микропроцессор - как замена ЦN мейнфрейма. Первое широкое nрименение микрок6нrроллеры нашли в точечных матричных nринтерах FX80 фирмы Epson и в кла- виатурах nK IBM. nринтеры FX80 СОЗАаВaIlИСЬ на основе микроконтроллера 8048, что дало впервые возмо>кность поставить на рынок дешевые матричные принтеры. Кnавиа- тура СОАер>кала микросхему универсальноrd nериферийноrо интерфейса 8042 (UPI), которая была BbInyw,eHa в 1977 в качестве микроконтроллера, исnользуемоrо дл счи TbIBaHLI1 символов, вводимых пользователем с клавиатуры. 3то nрименение МИКрОКОII троллера привело к nовлению термина «встроенный контроллер» или «встроенный микропроцессор», потому что комnьютерна CLl1CTeMa была скрыта в APyroM изделии (в Аанном случае  в nринтере) LI1ЛLl1 встроена в Hero. По BHeWHeMY ВИАУ FX80 был nринте ром, XOT внутри он был компьютерной системой. То >ке самое .6ыло справедливо и в отношении клавиатуры  извне кnавиатура IBM была обычной клавиатурой, однако внутренне она была компьютерной .системой. Коrда в конце 80x rOAoB Intel отоwла от ИАеи микроконтроллера и универсально- ro nериферийноrо интерфейса, САелав вь!бор в пользу микропроцессоров, была соз дана срирма Microchip Incorporated, KOTopa реwила занть нишу в области микрокон троллеров в 1989 rOAY. С момента cBoero формироваНLI1, фирма Microchip стала лиАи- рУюw,им nоставw,иком технолоrLl1L11 8разрядных микроконтроллеров. При зтом Аа>ке название выпускаемых elO устройств  PIC (nерLl1ферLl1ЙНЫЙ контроллер интерфейса) было nредло>кено Intel неСКОЛЬКИМLI1 rOAaMLI1 ранее, так >ке как и noxo>Kee наименование устройства UPI (универсальный nерLl1срерLl1ЙНЫЙ интерфейс) 8042. 1.2.Сстемысчсленя V1сnользование микропроцессоров LI1 микроконтроллеров требует xopowero зна ния АВОИЧНОЙ, дестичной и шестнадцатиричной систем Fчислени. в 3ТОМ nодразделе изло>кены основные сведения по 3ТИМ вопросам, nреАназначенные для тех читателей, которые не знакомы с 3ТИМИ CLl1CTeMaMLI1 С4исления. В частности оnисываетс nреобра- зование между деСТLI1ЧНОЙ LI1 ДВОLl14НОЙ CLl1CTeMaMLI1 СЧLl1слений, дестичной LI1 wecTHa АцаТLI1РИ4НО, а так>ке AB0Ll14HO LI1 wестна,о,цаТИРИ4НОЙ c.LI1CTeM.aMLI1 С4L11сления. Цифры Перед тем, как мы будем nре06разовывать 4L11сла из CLl1CTeMbI счислеНLI1 с одним oCHOBaHLI1eM в систему СЧИСJlеНLI1 с ApyrLl1M oCHOBaHLI1eM, He06xoALl1MO nOHTb, что такое цифры LI1 какова их свзь с системой С4L11слеНLI1. В самом начале Hawe ,учебы в школе Mbl узнали, что десятичные числа (ocHOBaHLI1e CLl1CTeMbI счислеНLI1 равно 1 О) записыва- ются с использованием 1 Оти цифр  от О до 9. Первой цифрой в любо системе счи(}- лени BcerAa влетс ноль. 
18 ITpHMeHeHHe MHKpOKOHTpOnnepOB PIC 18 HanpHMep, снстема C4HCJleHH с основан нем 8 (BOCbMHpH4Ha) нсnользует 8 u.исрр  от О до 7; а снстема C4HCJleHH с основан нем 2 (ДBOH4Ha) нсnользует 2 u.HcppbI: О н 1. Еслн основан не снстемы С4нсленн npeBbIwaeT 1 о, то НСnОJlЬ3УЮТС доnолннтельные u.HCPPbI, в ка4естве 0603Ha4eHH которых 6epyTC 6уквы алсравнта, Ha4HHa с А. HanpH мер, снстема C4HCJleHH с основаннем 12 НСnОJlьзует 4нсла от О до 9, а затем А ДJl 1 О н В ДJl 11. 06patHTe вннманне, 4ТО npH основаннн 1 О не НСnОJlьзуетс u.Hcppa «1 о», Т04НО так >ке, как н npH основаннн 8 не НСnОJlьзуетс u.Hcppa сс8». В современных KOMnblOTepax нан60лее pacnpocTpaHeH'bI дeCTH4Ha, ДВОН4ная н wecTHaAu.aTHpH4Ha (основанне 16) снстемы С4нслення. (MHoro JleT тому назад 6bIJla nоnулрна так>ке BOCbMepH4Ha CHC тема С4нсленн.) В данном nодразделе 6удет OnHcaHa кажда Н3 названных снстем С4нсленн. Позиционная нотация nOcJle Toro, как 6у,lJ,уТ nOHTbI u.HcppbI снстемы C4HCJleHH, мо>кно составлть Н3 ннх 60льwне 4HCJla, нсnользу n03Hu.HoHHYlO HOTau.HIO. В на4ально wколе У4ат, 4ТО n03НЦН CJleBa от e,lJ,HHHu. - это разр,lJ, ,lJ,eCTKOB, n03НЦН слева от дeCTKOB  это разрд сотен н Т.д. npHMepoM этоrо может 6ыть ,lJ,еСЯТН4ное 4HCJlO 132: в это 4НСЛО входнт 1 сотня, 3 дeCTKa н 2 еднннцы. Чему не У4ат в на4ально WKOJle, - так это тому, 4ТО кажды разрд 4нсла нмеет вес, ВЫ4нслемы по эксnоненu.нальному закону. Так, разрд eAHHHu. HMe ет вес 100 нлн 1; разрд дeCTKOB нмеет вес, равный 101 нлн 1 о; разрд сотен нмеет вес 102 нлн 100. nоказатель cTeneHH в зна4еннн веса разрда КРНТН4ескн ва>кен ДJl nOHH MaHH 4HCeJl, заnнсанных в снстемах С4нсленн, OTJlH4HbIX от деСТН4НОЙ. n03НЦН сле ва от заnтой, KOTopa Ha3ЫBaeTC ,lJ,еСТН4НОЙ заl1ТОЙ только в дестнчной снстеме С4нсленн, BcerAa BJleTC nознu.ней е,lJ,НННЦ в ЛlO60Й снстеме С4нсленн. HanpHMep, n03Hu.H слева от ДВОН4НОЙ заnто BcerAa 6У,lJ,ет n03Hu.He с весом 2., Т.е. 1; n03Нu.ня CJleBa от ВОСЬМНРН4НОЙ заnтой 6У,lJ,ет нметь вес 8. нлн 1. В кюк.цом СЛУ4ае ЛlO60е 4HC ло, возве,lJ,енное в степень О BCer,lJ,a 6У,lJ,ет равно 1. Вес раЗР,lJ,а CJleBa от раЗр,lJ,а е,lJ,НННЦ Bcer,lJ,a 6удет равен oCHoBaHHIO снстемы C4HCJleHH, возве,lJ,енному в степень 1; в ,lJ,eCTH4HO снстеме это 6У,lJ,ет 1 01 нлн 1 о. В ДВОН4НОЙ снстеме это 6удет 21 нлн 2; а в восьмеРН4НОЙ снстеме  81 HJlH 8. Такнм 06pa 30М, 11 в деСТН4НОЙ снстеме C4HCJleHH 6удет нметь ,lJ,pyroe зна4енне нлн KOJlH4eCTBo eAHHHu., 4ем 11 в ДВОН4НОЙ снстеме C4HCJleHH. AeCTH4Hoe 4НСЛО в данном СЛУ4ае co ставлено Н3 oAHoro дeCTKa nJlIOC e,lJ,HHHu.a н нмеет зна4енне, равное 11 eAHHHu.; в то BpeM как ДВОН4ное чнсло 11 COCTaBJleHO Н3 одной двойкн nJllOc еднннца, 4ТО дает зна- 4енне, равное 3 е,lJ,нннцам. 11 в BOCbMepH4HO снстеме 6удет нметь зна4енне, равное 9 еднннцам. В деСТН4НОЙ снстеме веса разр,lJ,ОВ справа от деСТН4НОЙ заnтой HMelOT OTpH цатеJlьные nоказатеJlН CTeneHH. Первый разр,lJ, справа от деСТН4НОЙ заnто нмеет вес, равный 10-1 нлн 0,1. В ,lJ,BOH4HO снстеме nepBbI разр,lJ, справа от ,lJ,ВОН4НОЙ заn той нмеет вес, paBHЫ 2-1 HJlH 0,5. В 06w,eM СJlучае npHHu.HnbI, npHMeHeMbIe к дeCTH4- ным 4HCJlaM, так>ке npHMeHHMbI ДJl Jl106bIX ,lJ,pyrHx снстем C4HCJleHH. npHMep 1.4 демонстрнрует ,lJ,ВОН4ное 4НСЛО 110.101 (здесь н AaJlee, как н во всех npHMepax, нсnользуетс заnнсь 4HCeJl, npHHTa в анrЛО3Ы4НОЙ лнтераryре, npH KOTO рой в ка4естве раздеJlнтеJl u.еJlОЙ н ,lJ,р06ной 4астн 4HCJla НСnОJlьзуетс не заnтая, а Т04ка (npHM. пер.)) (4асто заnнсываемое, как 110.1012)' Он так>ке nOKa3bIBaeT степень н вес HJlH зна4енне каждоrо раЗр,lJ,а 4HCJla. Дn npe06pa30BaHH ABoH4Horo 4нсла в дec TH4oe cкnaAbIBalOTc веса каждоrо разрда, умно>кенные на зна4ення cooTBeTcTI3YIO W,HX разрдов, в pe3YJlbTaTe cpopMHpyeTC дeCTH4HЫ эквнваJlент. Так, 4НСЛО 110.1012 6удет зквнвалентным дeCTH4HOMY 6.625 (4+2 + 0.5 + 0.125). 06ратнте вннманне, 4ТО 
rnaBa 1. BBe.u.eHHe в ар хн тек туру компьютеров 19 это 6удет сумма 22 (нлн 4) nЛIOС 21 (HJlH 2), однако 20 (ИJlИ 1) не прнбаВJlетс, поскольку в зтой nОЗLl1u.нн нет u.Hcpp. Аробна 4асть 4HCJla формируется из 2.1 (.5) nJlIOC 2-3 (нлн .125), однако под 2-2 (ИЛН .25) цнсрр нет, поэтому .25 не nрнбаВJlетс. Пример 1.4 Степень 22 21 20 2-1 22 2З Вес 4 2 1 .5 .25 .125 Чисnо 1 1 О 1 О 1 Чисnенное 4 + 2 + О + .5 + О + .125 6.625. знаqенме Предnоложнм, что мы хотим npHMeHHТb тот >ке метод nре06разованн к ЧLl1СЛУ, заnLl1сан- НОМУ в wеСТИРН4НО снстеме C4HCJleHH, HanpHMep 25.. npHMep 1.5 показывает зто ЧLl1СЛО, pacnLl1CaHHoe по cTeneHM н весам каждоrо разря.ца. В ,о,анном npHMepe в разряде с весом 61 стонт u.нфра. 3тот разря.о. нмеет зна4енне 12 (2 Х 6) н 5 в ра3РЯ,lJ,е с весом 6., KOTOpЫ дает Зlla- ченне 5 (5 Х 1). Все зна4енне 4HCJla нмеет зна4енне 12 + 5, Т.е. 17. Чнсло справа от деСТLI1ЧНОЙ ТQ4KH равно 2 no,lJ, 6-', 4ТО ,о,ает зна4енне .333 (2 Х .167). СJlе,lJ,овательно, ЧLl1СЛО 25.26 LI1MeeT зна4енне 17.333 в ,lJ,eCTH4HO снстеме. Пример 1.5 Степень 61 60 6-1 Вес 6 1 .167 Чмсnо 2 5 2 Чисnенное знаqение 12 + 5 + .333 17.333 Преобразование в десятичную форму npeAbI,lJ,yw,He npHMepbI npo,lJ,eMOHCтpHpoBa1lH, что .цл nреобразовання LI1З ЛlO60Й CLl1CTe- мы С4нсленн в десятнчнуlO, НУ>КНО CHa4a1la оnре,о,еш1ТЬ веса всех разря.о.ов ЧLl1сла, а затем npo суммнровать веса, умно>кенные на u.нфры 4нсла, с u.елыо nолученн десятнчноrо 3КВLI1валСllта. nредnоло>кнм, что мы хотнм npeo6pa30BaТb восьмеРН4Ное 4НСЛО 125.78 в дестнчную CLl1CTeMY СЧLl1сленн. Дл выnолненн 3Toro nреобразовання CHa4a1la заnнwем веса всех разрядов чнс ла. 3то nоказано в npHMepe 1.6. Зна4енне 125.78 равно 85.875 в ,lJ,естично снстеме счнслеНLI1 нлн, or 1 Х 64 nJllOC 2 Х 8 nJllOC 5 Х 1 плюс 7 Х .125. Пример 1.6 Степень 82 81 80 81 Вес 64 8 1 .125 Чисnо 1 2 5 7 Чмсnенное знаqение 64 + 16 + 5 + .875 == 85.875 Обратнте вннманне, 4ТО вес разр.ца, расnоло>кенноrо слева от разрда еднниц, равен 8. 3то 8 раз по 1. Затем заметьте, 4ТО вес СJlе,lJ,уюw,еrо слева разрда равен 64, нлн 8 раз по 8. Еслн бы в .цанном 4нсле HMeJlC СJlе,lJ,УЮw,н CJleBa разряд, то ero вес 6ыл бы равен 64 умно>кенное на 8, Т.е. 512. Дnя Toro, 4то6ы опре,lJ,елнть слеДУIOw,еrо c'rap- wero раЗр,lJ,а, необхо,lJ,НМО умно>кнть вес TeKyw,ero раЗР,lJ,а на основан не нсnользуе- MO снстемы С4нсленн (в ,lJ,анном СJlучае на 8). Дnя ВЫ4нслення весов разрдов, pac nоло>кенных справа от ,lJ,еСЯТН4НО ТО4КН, ВЫnОJlняется ,lJ,eJleHHe на основанне снстемы СЧLl1сленн. Так, в BOCbMHpH4HO снстеме вес раЗрЯ,lJ,а, CTOW,H HenOcpe,lJ,CTBeHHo cnpa ва от дeCTH4HO ТО4КН, равен 1/8 HJlH .125. Сле.цуюw,н справа разр,lJ, нмеет вес, рав- HЫ .125/8 нлн .015625, что мо>кет быть так>ке заnнсано как 1/64. Так>ке 06paTLI1Te BHLI1 манне на то, 4ТО 4НСЛО нз npHMepa 1.6 мо>кет 6ыть так>ке заnнсано как ,lJ,eCTH4Hoe чнсло ВН,lJ,а 85 7/8. 
20 TIpHMeHeHHe MHKpOKOHTpOnnepOB PIC18 Пример 1.7 показывает ДВОН4ное 4НСЛО 11011.0111, записанное с указанием веса и показателя степени основания снстемы С4исления для каждоrо разряда. Если про- суммировать зти веса, умноженные на соответствуюw,ие, то зна4ение ДВОИ4ноrо числа, преобразованноrо в деСЯТИ4НУЮ систему, будет равно 27.4375. . Пример 1.7 С'I'епень 24 23 22 2 20 2" 22 2З 2 4 Вес 16 8 4 2 1 .5 .25 .125 .062 ЦMpa 1 1 О 1 1 О 1 1 1 Чмсnенное 16 + 8 + О + 2 + 1 + О + .25 + .125 + .0625 27.4375 значенме V1HTepecHo отметить, 4ТО 21 также равно 1/2, 22 равно 1/4 и так далее. Также инте ресно отметнть, 4ТО 24 равно 1/16 нли .0625. Аробная 4асть этоrо 4исла равна 7/16 или .4375 в деСЯТН4НО форме. Обратнте вннманне на то, 4ТО 0111  эти 4ИСЛО 7 в двоичном коде, равное 4ислителю, а самая правая 1 находнтся в разряде с весом 1 /16, COOTBeT ствуlOw,им знаменателю. Аруrие аналоrИ4ные при меры: ДВОИ4ная дро6ная часть .101  зто 5/8, а двоичная дробная 4асть .001101 равна 13/64. ШестнадцаТИРИ4ные 4исла 4асто применяlOТСЯ в компьютерах. В примере 1.8 расписано число 6А.С с указанием весов разрядов. Сумма ero цифр, умноженных на веса разрядов, равна 106.75 илн 106 3/4. Целая 4асть 3Toro 4исла может быть пред ставлена как 6 х 16 плюс 1 О (А) х 1. Аробная же ero 4асть имеет 12 (С) в ка4естве 4ИСЛИ тел и 16 (161) в ка4естве знаменателя, Т.е. равна 12/16 или после упроw,ения 3/4. Пример 1.8 Степень 16:;' 160 161 Вес 16 1 .0625 ЦMpa 6 А С Чмсnенное знаqенме 96 + 10 + .75 = 106.75 Преобразование из десятичной формы nреобразование из деСЯТН4НО системы С4исления в друrуlO систему С4ИСJЮНИЯ выполнить несколько труднее, 4ем преобразование в деСЯТИ4НУlO форму. Аля преобра З0ваllИЯ цело 4асти 4исла в деСЯТИ4НУЮ форму необходнмо делить ero на зна4ение основания системы С4исления. Аля преобразования дробно 4асти необходимо BЫ полнять ее умножение на основан не системы С4исления. Преобразование целой части числа из десятичной формы. Аля преобразования целой 4астн деСЯТН4ноrо 4нсла в HHYIO систему С4нсления нужно последовательно дe лить ее на основанне HOBO снстемы С4нсления н запнсывать остатки в ка4естве зна чаw,их цнфр результата. Алrорнтм TaKoro преобразования имеет следуюw,и вид: 1. nоделнть деСЯТН4ное 4НСЛО на основание HOBO системы С4ИСЛ,НИ. 2. Сохранить остаток (первы остаток будет цнфро, стояw,е в самом младшем зна4аw,ем разряде). 3. Повторять warH 1 н 2 до тех пор, пока 4астное не будет нулевым. Напрнмер, для преобразовання деСЯТИ4ноrо 4нсла 1 О в ДВОИ4НУIO' форму, поде лим ero на 2. Результатом будет 5 с остатком, равным О. nepBbI остаток дает цифру разряда единиц результата (в данном примере  О). Аалее делим 5 на 2. Результатом 
I'naBa 1. BBe.u.eHHe в архнтектуру компьютеров 21 будет 2 с остатком 1.1 6удет цисррой, cTOw,e в разрде с весом 2 (21) pe3YJН)laTa. Продол>каем процесс делени до тех пор, пока 4астное не 6удет нулевым. При мер 1.9 иллюстрирует зтот процесс nре06раЗ0вания. Результат записывается как 10102 снизу вверх. Пример 1.9 22.l..Q. 212 212 и, о OC'l'aToK Ос'еа 'рок OC'l'a'l'OK OC'l'a'l'OK о 1 О 1 pe3YnbTa'l' 1010 Для nре06раЗ0вани деСЯТИ4ноrо 4исnа 10 в ВОСЬМИРИ4НУЮ срорму, nоследова телыю делим ero на 8, как nоказано в примере 1.1 О. ДеСТИ4ное 1 О 6удет равно BOCb меричному 12. . Пример 1.10 811Q Остаток 2 811 Остаток = 1 О pe3YnbTaT 12 nре06раЗ0вание И3 деСТИ4НО в wестнадцаТИРLl14НУЮ систему выполняется дe nением на 16. 3на4ение остатков при зтом мо>кет иметь диаnаЗ0Н от О до 15. Лю60Й остаток в диаnаЗ0не между 1 О LI1 15 затем переводится в 6уквенную срорму с ИСIIOJlЬЗО ванием 6укв от А до Р с целью срормировани wестнадцаТИРИЧIЮl'О числа. Пример 1.11 nоказьшает npe06pa30BalIHe деСТИ4l'юrо числа 109 в wестнадцаТИРИЧi юс 6О. Пример 1.11 1610 Остаток 13 (О) 16 Остаток  6 О Результат 60 Преобразование дробной части десятичноrо числа. nреобразование др06ной час ти десятичноrо 4исла в друrую систему СЧLl1СJlени выnоnняет посредством умно>кеllИЯ Шl значение основани системы С4ислени. Например, ДJ1 nре06раЗ0вания дp06HO 4асти дестичноrо числа в ДВОИ4НУЮ срорму, нужно BbInOJll-IТЬ умно>кение на 2. ПОСJ1е УМlю>кени цела 4асть результата coxpaHeTC в качестве зна4аще цисрры pe3YJ1bТa та, а дp06HЫ остаток вновь YMHO>KaeTC на зна4ение основания системы С4ИСJ1ени. Коrда дp06HЫ остаток становитс HyneBbIM, процесс умно>кения останавливается. 06ратите внимание на то, 4ТО некоторые числа 6есконе411Ы (периодические др06и). Таким 06раЗ0М, остаток при их умно>кении никоrда не 6удет нулевым. АJlrоритм ДJ1Я пре06раЗ0вани дp06HO 4асти дестичноrо 4исла имеет сnедующи вид: 1. YMHO>KLI1Tb др06ную 4асть на oCHOBaHLI1e HOBO системы С4ислени. 2. Сохранить целую 4асть pe3YnbТaTa (даже есnи она нулева) 13 ка4естве цисрры. 06paTLI1Te ВНLI1мание на то, 4ТО первый pe3YnbТaT зarlLl1сываетс непосредственно cnpa ва от точки, раздеnюw,е целую LI1 др06ную 4асть числа. З. nовторЯ1Ъ шаr 1 LI1 2, ИСnОnЬ3У др06ную 4асть wara 2 до тех пор, пока дроБНШI часть не станет равной НУJlЮ. Предположим, 4ТО нам ну>кно npe06pa30BaTb деСЯТИ4ное .125 в ДВОИLIНУЮ СРОРМУ. 3то выполняется УМlю>кением на 2, как nоказано 13 примере 1.12. 06ратите внимание на то, 4ТО процесс умно>кени должен nродол>катьс до тех пор, пока дробный ост'аток IЮ 
22 ITрименение МИКрОКОНТроллеров PIC18 станет равным нулю. ЦеЛ04L11сленные 4aCTLI1 pe3YnbТaToB заnLl1сывается как ЧLl1сnа ДВОLl1Ч HO дp06HO 4асти (0.001 в данном npLl1Mepe). Пример 1.12 .125 х 2 0.25 ЦMpa равна О .25 х 2 0.5 ЦMpa равна О . :! х 2 1 . О Цифра раВНи 1 реЗУЛb'l'ат =о 0.0012 Та же caMa меТО,lJ,нка НСПОJlьзуетс,lJ,Jl npeo6pa30BaHLI1 ,lJ,ро6ной 4aCTLI1 деСЯТLI14- Horo 4L11Cna в ЛlO6уIO снстему С4нсленн. npHMep 1.13 показывает ТУ >ке caMYIO ,lJ,P06HYIO деСТН4НУЮ 4асть .125 нз прнмера 1.12, npe06pa30BaHHYIO в ВОСЬМLI1РLl14НУЮ cLl1cTeMY посредством YMHO>KeHH на 8. Пример 1.13 .125 х 8 1.0 ЦMpa равна 1 резуnьтат = 0.18 npe06pa30BaHLI1e деСТLI14НО дp06HO 4aCTLI1 в wестнадu.аТLI1РLl14НУЮ срорму LI1ЛJlЮ- СТРLl1руется npLl1MepOM 1.14. З,lJ,есь деСТLI14на дp06Ha 4асть .046875 nре06разуется [3 wестнадu.аТLI1рLl14НУIO CLl1CTeMY С4нслеНLI1Я nосnедоватеnьным умножешем ее на 16. 06- paTLI1Te BHLI1MaHLI1e на то, 4ТО .046875 равно шестнадцаТLI1РLl14НОМУ О.ОС. Пример 1.14 .046875 х 16 0.75 ЦMpa равна О .75 Х 16 12.0 ЦMpa равна 12 (С) pe3YnbTaT О,ОС lб Двоичнокодированные шестнадцатиричные числа ДВОLl14НОКОДLl1рованные шестна,lJ,цаТLI1РН4ные 4L11сла (8СН) LI1СnОnЬ3УЮТСЯ для nредставnеНLI1Я шестна.о.u.аТНРLl14НЫХ ,lJ,анных с НСПОЛЬЗ0ваннем ,lJ,BoH4Horo кода. AB0Ll14 НОКОДLl1рованное шестна,lJ,цаТНРН4ное 4НСЛО - это шестнадu.аТLI1РLl14ное 4L11CnO, заnLl1сан- ное так, 4ТО каждая ero цнсрра пре,lJ,ставлена 4-разр,lJ,НЫМ ДВОLl14НЫМ 4L11cnoM. ЗначеНLI1 ЦLl1срр 8СН nоказаны в та6л. 1.5. 06ратнте вннманне на то, 4ТО 4асто мы заnLl1сываем wестнадцаТLI1рLl14ные 4L11CJla как, напрнмер, Ох8А, rде Ох  это СLl1rнал компьютеру, 4ТО сnедуюw,ее даnее 4L11СЛО влетс шестна,о,цаТНРН4НЫМ. ШестнадцаТLI1РLl14ные 4HCJla пре,lJ,ставлIOТС в коде 8СН посредством nре06разо вания каждо LI1X ЦLl1СРРЫ в 8CHKOД С вводом nр06ела nocne каждой КОДLl1рованно циср ры. Пример 1.15 nOKa3bIBaeT шестнадцаТLI1РLl14ное 4L11CnO 2АС, пре06раЗ0ванное в код ВСН. 06ратите внимаНLI1е, 4ТО каждая ДВОН4НОКО,lJ,LI1рованная ЦLl1срра отдеnяетс np06e лом. 
rлава 1. Бве.u.ение в архитектуру компьютеров 23 Таблица 1.5. ABOH4HO-KO,lJ,HpOBaHHЫ wестнадцаТL/1рL/14I1Ы код Шестнадцатиричная цифра О 1 2 3 4 5 6 7 8 9 А В С О Е F Код ВСН 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 Пример 1.15 2АС = 0010 1010 1100 Ha3Ha4eHL/1eM кода 8СН влетс 06eCne4eHL/1e возможности заnL/1СИ ДВОИ4НО BepCHL/1 шестна,lJ,цаТНРН4НЫХ 4L/1сел в срорме, KOTopa может nerKO nрео6ра30выЕ3тьсяя в шестна,lJ,цаТL/1РL/14НУIO СРОРМУ н 06ратно. npL/1Mep 1.16 nOKa3bIBaeT ДВОИ4нокодированное wестна,о,цаТL/1рL/14ное 4L/1СЛО, пре06раЗ0ванное 06ратно в шестнадцаТИРИ411УIO СРОРМУ. Пример 1.16 1000 0011 1101 . 1110 83D.Е Дополнения V1ноrда ,lJ,Jl nредставnеНL/1 отрL/1цатеnьных 4L/1Cen, данные сохранютс в срорме доnолнеНL/1 AflЯ представлеНL/1Я отрL/1цатеJlЬНЫХ данных. npL/1 этом L/1СnОJlЬ3УЮТС две снстемы. Одна нсnользует ,lJ,ополнеНL/1е до OCHOBaHL/1 CL/1CTeMbI C4L/1CneHL/1, а BTopa - допоnнеНL/1е до OCHOBaHL/1 снстемы С4L/1сленн - 1. nepBo nовиnась система, ИСIlОJlЬ З0вавша ,lJ,оnолнеНL/1е .0.0 OCHOBaHL/1 системы С4L/1сnеНL/1Я  1, в KOTOpO IlpL/1 nредставnе HL/1L/1 отрнцательноrо 4нсла Ka)l(,lJ,a ЦL/1срра 4нсла BbI4L/1TaeTC L/13 основани CL/1CTeMbI С4ИС- JleHL/1 МННУС 1 с целыо nOJlY4eHH 3Ha4eHL/1 доnолнеНL/1 .0.0 основat-IL/1Я CL/1CTeMbI C4L/1Cne ни - 1. npHMep 1.17 nOKa3bIBaeT, как nOnY4aeTc ,lJ,OnOnHeHL/1e 8разрядноrо ДВОL/14ноrо 4L/1сла 01001100.0.0 3Ha4eHL/1 OCHOBaHL/1 снстемы С4L/1слеНL/1 ML/1HYC 1 с целью ото6раже- ння ero как ОТРL/1цательноrо 3Ha4eHH. 06ратнте BHL/1MaHHe на то, 4ТО Ka)l(,lJ,a цнсрра 4L/1C Jla BbI4L/1TaeTC Н3 е,lJ,ННL/1ЦЫ AflЯ reHepHpOBaHH ДОПОJlнеНL/1 .0.0 31-1a4еНL/1Я OCHOBal-IL/1 CL/1C темы С4L/1слеНL/1 мннус 1 (еДННL/1ца). 8 данном npL/1Mepe отрL/1цатет)ное 01001100 nред- cTaBneTc как 10110011. Та >ке caMa меТОДL/1ка мо>кет nРL/1меняться для лю60 CL/1CTe мы С4L/1СJlення, как НnЛIOСТРL/1руетс в npL/1Mepe 1.18, в котором доnоnнеНL/1е до nТllадца тн (основанне снстемы С4нслеНL/1 ML/1HYC 1) шестнадцаТL/1РL/14I-юrо числа 5СО ВЫЧИСJlяет- c nOCpe,lJ,cTBoM BbI4L/1TaHL/1 Ka)l(,lJ,o ЦL/1СРРЫ L/13 nтна,о,цатн. 
24 ITpHMeHeHHe MHKpOKOHTpOnnepOB PIC 18 Пример 1.17 ll11 1111 О]ОО 1100  011 СОН Пример 1.18 .15 1.::; 5 с D А 3 2 Сеrодн само по се6е ДОПОJlнеНLI1е до основания системы СLlисления  1 но ис- flOJ1ьзуетс; 0110 исnользуетс только в ка4естве зтаllа на nуrи к flOJ1учению пОfIOЛНОНИ5-1 до основани системы С4ислеНLI1. Дополнение до основания системы СЧИСJ1СНИ5-1 ис nользуетс дn представnеНLI1Я отриu.атеnьных 4L11сел в современных компыт орных системах. (ДоnолнеНLI1е до основания системы С4исления - 1 ИСnОЛЬЗ0валось в раннио дни КОМllыотерно технолоrLl1L11.) Основная nр06лема доnоnнения до ?нования СИСlемы счнслени  1 заКЛЮ4аетс в том, 4ТО при LI1СПОЛЬЗ0вании зтой системы возникаеr два нуля: nоложитеnьный LI1 ОТРLl1цатеnьный; в CLl1CTeMe, LI1СПОЛЬ3УЮЩСЙ ДОflOлноние дО OCIIO вания CLl1CTeMbI С4L11сnеНLI1Я, cyw,ecTByeT только положительный HOnb. Для срормироваНLI1 доnоnнеНLI1 до основшт системы счисnения Сllачала lIaxo ДT допоnнеНLI1е до oCHOBaHLI1 CLl1CTeMbI C4L11CneHLI1 - 1, а затем д06авляют единицу к pe зулыату. Пример 1.19 nOKa3bIBaeT, как 4L11CnO 0100 1 000 nре06разуетс в отрицателыюе значеНLI1е переводом ero в допоnнеНLI1е до двух (OCHoB?HLI1e CLl1CTeMbI СЧLl1сnеНLI1). Пример 1.19 1111 1111  0100 1000 1011 0111 (AononHeHMe АО одноrо) + 1 1011 1000 (Аопоnненме АО АВУХ) Чт06ы у6еДLl1ТЬС в том, 4ТО 0100 1000 явnетс инверСLl1ей (отрицательным зна- чеНLI1ем) 1011 1000, СnОЖLl1М LI1X ДJlя cpOpMLI1pOBaHLI1 8раЗрДI-юrо резулыата. Дешпый разрд OT6paCЫBaeTC и pe3YJlbTaT 6удет HyneM, потому 4ТО 0100 1 000  это ПОЛО>КИ- TenbHoe 72, в то время как 1 011 1 000  зто ОТРLl1цателы-юе 72. Та >ке самая методика примеllима дл лю60 CLl1CTeMbI счисnеНLI1. npLl1Mep 1.20 nоказьшает то, как инверсия шестнадцаТLI1РLl14ноrо 345 наХОДLl1ТС путем пеРВLI14ноrо определения допоnнени даllllО- ro числа до пятнадцаТLI1, а затем д06авnеНLI1 еДLl1НLI1u.ы к результату с целью опредеJ1е IIИ дополнения до шестнадцаТLI1. Как LI1 ранее, eCnLl1 LI1сходное 3-разрядное число 345 д06авить к ero инверСLl1И СВВ, то трехразрядным pe3YnbТaToM 6удет 000. Как и в прс дыдущем ПрLl1мере, 4eTBepTЫ разряд (перенос) OT6paCЫBaeTC. 3то подтrЮР>КДаЕ.У(, Lj П) 345 BJleTC LI1HBepCLl1e СВВ. ДОnОnНLI1теnьная LI1нсрормаЦLl1 о ДОllOЛIЮНИЯХ до одно! О И двух представлена paccMOTpeHLI1eM 4L11Cen со 3HaKaMLI1 в сnедующсм подразделе. Пример 1.20 15 15 15 .з 4 5 (доrrоnнение ДО 15) С в А + 1 (AononHeHMe ДО 16) С В В 
rnaBa 1. BBe.u.eHHe в архнтектуру компьютеров 25 1.3. Компьютерные форматы данных YcneWHoe проrраммироваНL/1е тре6ует nOnHoro nOHL/1MaHL/1 срорматов данных. В данном nодразделе OnL/1CaHbI мноrие WL/1pOKO распространенные компьютерные cpopMa ты данных в той мере, как они исnользуютс в ceMeCTBe микроконтроллеров PIC. ОБЫЧIIО fJ,aHIII::>le rlредставляются в срормате ASCII, как ДВОИ4нокодированные десЯlИЧ IIЫС; числа, целые 4исла со знаком L/1 6ез, а также L/1ноrда как 4L/1Cna с nnаваюw,ей точко (деЙСТLзитеJ1ЬНЫG 4исла). Moryт 6ыть L/1СПОЛЬЗ0ваны L/1 друrL/1е срормы предстаВJlени даНIIЫХ, однако OHL/1 здесь не оnисываютс, поскольку не вnютс столь же wироко pacrlpocTpaHeHHbIML/1. Данные в формате ASCII Данные в срормате ASCII (Американский Стандартный Код для Информационноrо Обмена) представляют аnсраВL/1ТНОЦL/1СРРовые СL/1МВОЛЫ в naMTL/1 комnыотерной систе- мы (см. та6л. 1.6). CTaHдapTHЫ АSСIIкод ВJlяется 76итным кодом, в котором BOCb MO И самый старwий 6ит, исnользуются как 6ит паРL/1тета в некоторых антикварных системах. ECJlL/1 АSСIIданные исnользуютс ДJ1 вывода на nринтер, то нулевое 3Ha4e ние caMoro старшеrо 6ита 6удет 0значать режим аJlсраВИТНОЦL/1СРРОВОЙ ne4aTL/1, а еди ничное  ре>ким rрасрL/1ческо lle4aTL/1. В Ilерсонаnыюм компьютере расwиренны на60Р сL/1мволов ASCII вы6ираетс YCTaHOBKO еДL/1НИЧlюrо сосroНL/1Я caMoro neBoro бита. ТаБJ1. 1.7 показывает расширенны на60Р симвоnов ASCII, L/1СПОnЬ3УЮЩИЙ кодировку Ox80OxFF. CL/1MBOJlbI paCWL/1peHHOro на60ра ASCII 060зна4ают некоторые иностранные 6уквы L/1 знаки nунктуаЦL/1L/1, rpe4eCKL/1e L/1 матемаТL/14еские CL/1MBOnbI, CL/1MBOnbI nсевдоrра срнки L/1 друrL/1е сnеЦL/1аnьные CL/1MBOnbI. 06paTL/1Te внимание на то, 4ТО срактически вид пе4атаемых символов paCWL/1peHHOro на60ра ASCII мо>кет L/1зменяться от nрИlIтера к ПрИlперу. Таблица 1.6. Коды ASCII В'l'орая 4aC'rb ко,Ца 1 я ХО Х1 Х2 Х3 Х4 Х5 Х6 Х7 Х8 Х9 ХА ХВ ХС ХD ХЕ XF 4ac'rb КОАа ОХ NUL SOH STX ЕТХ ЕОТ ENQ АСК BEL BS НТ LF V'I' ]<F СЕ SO Sl 1Х OLE DС1 DС2 ОС3 ОС4 NAK SYN ЕТВ CAN EMS SUJ3 ESC F'S GS 1\S US 2Х SP # $ % & ( ) + > / 3Х О 1 2 3 4 5 6 7 8 9 < > '? 4Х @ А В С О Е F G Н 1 J К L М N О SX Р Q 1\ S Т U V W Х У Z [ \ ] л 6Х а Ь с d е F 9 h i j k 1 m n О 7Х Р q r s t u V w х у z { 1 ПРL/1веденна та6nица символов рассчитана на ИСnОЛЬ30ваllL/1е с Ilринтером 'ВМ ProPrinter, она также соответствует на60рам сnеЦL/1аnьных символов, введенным в БОJ1ЬШИI iCTBO текстовых nроцессоров. Управляющие СL/1МВОЛЫ ASCII, также nере4исnенные в та6лице 1.6, выполняют функции управления в компьютерно системе, включая очистку 3КрШia, СИМВОЛ «шш liaзад», перевод строки и Т.д. Дл ввода управляющих кодов с KOMllbIoTepHo КJ1авиату ры нужно, удерЖL/1ВШl 8 на>катом СОСТОНИL/1 кnaBL/1WY Ctrl (Control), ВВОДL/1ТЬ соответст- ВУЮЩL/1е симвоnы. Так ДJl ввода ОхО1, ну>кно BBeCTL/1 Control-A; а код ОхО2 вводится как ControlB L/1 Т.д. 06paTL/1Te BHL/1MaHL/1e на то, 4ТО Уllравлюw,L/1е коды 4асто ПОЯВJ1ЯЮТСЯ lIа зкране как АА дn Control-A, АВ дn Control-B L/1 Т.д. Также 06paTL/1Te BHL/1MallL/1e на то, LIТO 
26 TIрименение МНКрОКОНТроnлеров PIC18 КОД возврата KapeTKLI1 (СА) в 60JlЬШLl1нстве современных кnaBLI1aryp соответствует Kna BLI1We Enter (Ввод). Ha3Ha4eHLI1eM СLl1мвола СА явnетс возврат курсора LI1nLl1 nе4атаю- w,e rоловкн на JleBOe поле. ApyrLl1M КО,lJ,ОМ, KOTOpЫ 4асто nовлетс во MHorLl1X npo- rpaMMax, BJleTC КО,lJ, переВО,lJ,а строкн (LF), KOTOpЫ nepeMew,aeT курсор BHLI13 на одну строку. npH LI1СПОЛЬЗ0ваННLI1 та6л. 1.6 LI1ЛLl1 1.7 ,lJ,Jl пре06раЗ0ванн алсраВLI1ТНО-ЦLl1СРРОВЫХ LI1nLl1 управлlOw,нх CHMBOJlOB в КО,lJ,Ы ASCII, сна4ала не06ХОДLl1МО наЙТLI1 алсраВLI1ТНО ЦLl1СРРОВО КО,lJ" nO,lJ,Jle>Kaw,H npe06pa30BaHHIO. Затем сле,lJ,ует найтн nepBYIO ЦLl1СРРУ ше- стнадцатнрН4ноrо ASCII-ко,lJ,а. nOcJle этоrо  BTOPYIO цнсрру кода. HanpLl1Mep, заrnавно 6укве А соответствует АSСII-код Ох41, а CTp04HO 6укве а - АSСIIкод Ох61. АSСIIданные 4aw,e Bcero coxpaHIOTc в naMTH npH LI1CnOnb30BaHHLI1 сnеЦLl1ально команды Ассем6лера, KOTopa Ha3ЫBaeTC dec/are byte (Объявить байт) НЛLl1 ОВ, JlLl160 KOMaIlДO ОАТА в сnучае строк. (Ассем6лер - это nporpaMMa, которая LI1спользуетс AflЯ npOrpaMMLI1pOBaHLI1 KOMnblOTepa на ero маШLl1ННОМ 3ЫKe.) Команды ОВ LI1 ОАТА, а так>ке несколько npHMepOB нх HCnOJlb30BaHH с снмволамн ASCII, nРLl1ВО,lJ,ТСЯ в npLl1Mepe 1.21. 06ратнте вннманне, 4ТО Ka)l(,lJ,bI CHMBOJl прн HCnOJlb30BaHHH коман,lJ,Ы ОВ 6ерется в апо стросры (') - HLI1Kor,lJ,a не LI1СПОJlьзуйте каВЫ4КН ("), еСЛLl1 только вы не nрнменяете команду ОАТА. Таблица 1.7. Расшнренные ASCIIKO,lJ,bI в том ВLI1де, как онн ne4aTalOTc на npLl1HTepe 'ВМ ProPrinter. первый второй ХО Х1 х2 ХЗ Х4 Х5 Х6 Х7 Х8 Х9 ХА ХВ ХС ХD ХЕ XF ОХ  . . . ... . . а о . d' !? jI 13 (1- 1Х .  1 11 1 Э - ! т l L.. ... .., 8Х <; Q е а а а а 9 е ё е i i 1 Д А 9Х  ее IE. 6 6 о Q u 9 С О ф € V. Pt f АХ а r 6 u n N о l. ,... ...,  у.. i « » ВХ ..... ! 1  ! 1 I А JI JI J .... ! 1 ;J 1 СХ '( r ".  JL ОХ .IL т L + J i I li . ;= т f rr r . ЕХ (х Р r 1t 1; а J.1 'у Ф в а а 00 , Е n FX а :1: :о!: ::s;; r J AI О J" n 2 . Пример 1.21 DВ 'В' DВ ' r' DВ 'е' DВ 'у' DВ ОхОО DВ 'Brey' , О DАТА "Brey", О DАТА "Barry", О 
rлава 1. Вве.u.ение в архитектуру компьютеров 27 Двоичнокодированные десятичные данные АВОLl14НОКОДLl1рованные ,lJ,eCTH4Hыe (ВСО) ,lJ,анные MoryT coxpaHTbC как в ynaKo BaHHO, так н неупакованно срорме. Упакованные BCO-,lJ,анные coxpaHIOTc в срорме двух ЦLl1СРР на 6aT, унеупакованные BCO-,lJ,анные coxpaHIOTc как одно 4L11CnO на 6aT. ALI1ana30H BCD-ЦLl1срр ле>кнт от 00002.0.0 10012' 4ТО соответствует дeCTH4HЫM 09. He упакованные BCOдaHHыe nocrynalOT от клавиаryры nH60 мало чнсленной KJlaBLI1aTYPbI. Упакованные BCO-,lJ,анные LI1СПОЛЬ3УIOТС в некоторых командах на60ра команд MLI1KpO- nроцессора, BKJlI04a ВСО CnO>KeHLI1e LI1 BbI4L11TaHHe. Ta6n. 1.8 показывает некоторые дeCTH4Hыe 4L11Cna, пре06раЗ0ванные, как в упа KOBaHHYIO, так н в HeynaKoBaHHYIO ВСО-срорму. nРLl1ло>кеНLI1МLI1, которые El TLI1nLl14HOM СJlУ 4ае Tpe6YlOT LI1СПОЛЬЗ0ваНLI1 BCO-,lJ,анных, BJlIOTC локальные ToproBbIe теРМLI1налы, а так>ке n04TLI1 nlO6bIe LI1HbIe YCTpOCTBa, ВЫnОЛНIOw,не MHHLI1MaJlbHoe КОЛLl14ество простых apLl1cpMeTLI14eCKHX операЦLl1Й. Еслн системы Tpe6YlOT выполненн сло>кных apHcpMeTLI14e CKLI1X оnерацн, то BCO-,lJ,анные в ннх HCnOJlb3YIOTC ре,lJ,КО, nOCKonbKY нет npoCToro LI1 эсрсректнвноrо меТО,lJ,а BbInOJlHeHH сло>кных арнсрмеТН4ескнх ВСDопераЦLl1. npLl1Mep 1.22 ,lJ,емонстрнрует то, как CJle,lJ,yeT НСnОЛЬЗ0вать Ассем6лер ,lJ,JlЯ опре- делеНLI1Я как упакованных, так н неупакованных BCO-,lJ,анных. npLl1Mep 1.23 показывает то, как это мО>кнО С,lJ,елать, НСnОЛЬ3У С/С++ н тнпы char нлн byte. Во всех СЛУ4ах He06 ХОДLl1МО npLl1,lJ,ep>KLI1BaTbC соrлашеНLI1 о таком nордке заnНСLI1 данных в памть, npLl1 KO тором nepBbIMLI1 заnLl1сываlOТСЯ мла,о,ШLl1е разрды 4L11сел. Это 0зна4ает, 4ТО Дn сохране- HLI1 в naMTLI1, HanpLl1Mep, 4L11Cna 83, сна4ала ну>кно сохраннть 3, а затем  8. Кроме Toro, 06paTLI1Te BHLI1MaHLI1e на то, 4ТО в CJlY4ae упакованных BCO-,lJ,анных, СLI1МВОЛЫ ОХ (npLl13HaK шестнадцаТНРН4НЫХ 4HCeJl) ,lJ,ол>кны nре,lJ,шествовать ЦLl1сррам с целыо 06еспечеНLI1s-1 ra рантнн Toro, 4ТО ACCeM6Jlep сохранит нменно ВСО-зна4енне, а не ,lJ,eCTH4Hoe 3Ha4eHLI1e в СЛУ4ае упакованных BCO-,lJ,анных. 06ратнте вннманне на то, как 4L11сла сохранIOТСЯ в naMTH по O,lJ,HO цнсрре в 6айте в СЛУ4ае HeynaKoBaHHbIx ,lJ,анных н по две цнсрры в 6aTe в CnY4ae упакованных ,lJ,анных. Пример 1.22 ;HeynaKoBaHHe BCDдaHHe (CHaqana заnисваТСR мnадшие раЗрRД) NUMB1 DВ NUMB2 DВ 3,4,5 7,8 .0npeAenReT qисnо 543 .0nредеnRет qисnо 87 ;YnaKoBaHHe BCDAaHHe (cHaqana заnисваТСR мnаАwие раЗрRД) МОМВ3 DВ МОМВ4 DВ Ох37,Ох34 3,Ох45 .0nредеnRет qисnо 3437 .0nредеnRет qисnо 4503 Таблица 1.8. Упакованные н неупакованные BCOдaHHыe Десятичные 12 623 910 Упакованные 0001 0010 0000 0110 0000 1001 0010 0011 0001 0000 Неупа ков а нные 0000 0001 0000 0010 0000 0110 0000 0010 0000 1001 0000 0001 0000 0011 0000 0000 
28 ITpHMeHeHHe MHKpOKOHTpOnnepOB PIC 18 Пример 1.23 I1 HeynaKoBaHHe II char Numbi char Numb2 BCDAaHHыe (cHa4ana заnмсватся млаАшме раЗРЯА) 3,4, 5; 7, 8; 11 оnреАеnяет чмсnо 543 I1 оnреАеnяет чмсnо 87 I1 11 YnaKoBaIlHe BCD.AaHHыe I1 char Numb3 char Numb4 (сначаnа заnмсватся мnаАшие разрялы) Ох37,Ох34; 3,Ox4S; 11 оnреАеnяет чмсnо 3437 11 оnреАеnяет 4MCnO 4503 Байтовые данные Байтовые данные xpaHTC как в срорме целых чисел без знака, так LI1 в срорме цe лых чисел со знаком. PLl1c. 1.2 LI1nnЮСТРLl1рует как знаковую, так LI1 6еззнаковую срормы 6aTOBЫX цеnых 4L11Cen. Ра3НLI1ца между 3ТLI1МИ cpopMaMLI1 заКnЮ4аетс в весе caMoro ле- Boro разрда. Ero 3Ha4eHLI1e равно 128 дn 6e33HaKoBoro целоrо LI1 MLI1HYC 128 для целоrо со знаком. В срормате цеnоrо со знаком caMЫ левый разряд одновременно явлется как знаковым разрядом 4L11Cna, так LI1 разрдом с весом минус 128. Например, Ох80 представлет 3Ha4eHLI1e 128 как 6e33HaKoBoro 4L11Cna; в ка4естве же числа со знаком 0110 nредставлет 4L11CnO -128. Цеnые 4L11CJla 6ез знака LI1меют ДLl1аnа30Н зна4ени OxOOOxFF (0-255). Цеnые 4L11Cna со знаком имеют диаnаЗ0Н 3Ha4eHLI1  128 до О и до +127. XOT отрLl1цатеnьные 4L11Cna со знаком LI1 nредставnютс таким спос060М, они co хранются в naMTLI1 в срорме доnоnнеНLI1 до двух. Метод оцеНКLI1 4L11Cen со знаком путем ИСПОnЬ30ВШiLl1Я весов n03L11ЦLl1 каждоrо разрда ЯВJ,Jетс HaMHoro 60nee nerKLI1M, 4ем операция нахождеНLI1Я доnоnнеНLI1 до двух 4исnа с цеnыо определеl JИЯ ero значения. 3то ос06енно CnpaBeДJlLl1BO в мире калькуляторов, сконструированных для прor-рамми- стов. Всякий раз, коrда выnолнетс нахождение дополнения до двух числа, знак 3Tor0 числа изменетс с отрицательноrо на поло>кительный ли60 с ПOJю>китеl1Ы IOro lIa о 1 ри цательны. HanpLl1Mep, 4ИСnО 00001 000  зто +8. Ero 01 РИЦaI еJlыюе зна l jсние (8) Haxo дитс посредством оnределени доnоnнени до 2-х 4исла +8. Дтl lfaхо>кnения /J,ОПОЛ нени 4исnа до 2x CHa4ana наХОДLl1ТС ero дополнение до OAIIOIO. ДЛЯ 11 ахо >кде 11 ия дo поnнени 4исла до одноrо, кажды разряд 3Toro числа инвертируется  с IIУl1Я на еди ницу nи60 с единицы на ноль. Как только дополнение до единицы 6удет ссрормироваllО, оnредеnяется доnолнеНLI1е 4L11cna до двух посредством до6авления еДLl1НИЦЫ к ДОПОl1не- нию до одноr-о. Пример 1.24 демонстрирует определение дополнения до двух чисnа с ИСПОЛЬЗ0ванием данной меТОДИКLI1. Пример 1.24 +8 00001000 1111 О 111 (доnолненме АО ощюrо) + 1 -8 11111000 (AononHeIlMe АО АВУХ) 
rnaBa 1. Вве.u.ение в архитектуру компьютеров 29 8 4 2 1  Двоичные веса байтовое значение без знака  128 16 8 4 2 1 ДВОИL1Ifые веса байтовое значение со знаком Рнс. 1.2. Батовые(8-6L11тные)данные Друrо LI1, возможно 60nee npocTo, метод нахождени доnоnнеНLI1Я 4исла до двух заKJlЮ4ается в следующем: 4ИСЛО сна4ала заnLl1сываетс. Далее, прмо под ним, наЧLl1 Ha с npaBoro разрs-ща, оно на4инает nереnLl1сываться вплоть до первой единицы. После ЭТОIО справа налево заПLl1сываетс OCTaBwac 4асть 4исла, однако с инвертированны MLI1 разрдаМLI1. Пример 1.25 ИЛЛЮСТРLl1рует зту методику с тем >ке 4ИСЛОМ, которое ис nOnb30BanOCb в npLl1Mepe 1.24. Пример 1.25 +8 00001000 1000 1111 8 11111000 (заnмсываем чмсnо АО первой 1) (мнвертмруем оставшмеся 6MT) Дл сохранения 86итных данных в naMTLI1 в nporpaMMe на Ассем6лере следует. LI1CnOnb30BaTb команды ОВ LI1nLl1 ОАТА, как в предыдущих npLl1MepaX, ли60 ключевое слово char, как зто nока3а1Ю в ранее nриведенном Ilримере проrраммноrо cpparmeht-а для С/С-Н-. В примере 1.26 nоказано coXpaHeHLI1 в nамти ра3ЛLl14НЫХ срорм 8-6итных чиссл В проrрамме на Ассем6лере. Батовые данные Moryт также сохранться в памяти с ис- nOJlb30BaHLI1eM команды ОАТА LI1JlLl1 ОЕ (06bBneHLI1e данных дn nаМЯТLI1 3СnnЗУ). 06ра- TLI1Te BHLI1MaHLI1e на то, 4ТО в данном npLl1Mepe wестнадцаТLI1рLl14ные 4исла оnределются nресриксом Ох, nредwествуюw,LI1М 4L11СЛУ, а так>ке на то, 4ТО деСТИ4ные 4исnа заnисы- ваются с T04KO, nредwествующе 4L11cny. Пример 1.27 демонстрLl1рует 06ъвлеНLI1е тех >ке 6aTOBЫX данных в nporpaMMe на С/С++. Пример 1.26 ;Батове AaHHe 6ез знака ОАТА1 DАТА2 ОАТА3 ОБ ОБ ОБ .254 Ох87 .71 onpeAeneHMe десятмчноrо 254 onpeAeneHMe шестнаАuаТМРМ4ноrо 87 onpeAeneHMe десятмчноrо 71 Батове AaHHe со знаком 
30 ITpHMeHeHHe МИКрОКОНТролnеров PIC18 DАТА5 DАТА6 DАТА7 DВ DВ DВ .100 OxFF .56 оnредеnение AeCRTMqHOrO 100 оnреАеnение деСRтиqноrо 1 оnредеnение деСRтиqноrо 56 Пример 1.27 11 Батове дaHHe 6ез знака 11 unsigned char Datal unsigned char Data2 unsigned char DaLa3 254; Ох87; 71; 11 оnредеnеНме AeCRTM4Horo 254 11 onpeAeneHMe wecTHaAuaTMpM4Horo 87 11 onpeAeneHMe АеСRтмчноrо 71 11 11 Батове дaHHe со знаком 11 char Data4 char Data5 char Data6 char Data7 -100; +100; -1 ; 56; II оnреАеnение деСRтиqноrо 100 II оnреАеnение AeCRTM4Horo -100 II оnредеnение деСRтиqноrо 1 II оnредеnение АеСRтиqноrо 56 Пословные данные Слово (16 6L11TOB) cpopMLI1pyeTc ,lJ,BYM 6aтaMLI1 данных. МлaдwLl1 6айт Bcerдa coxpaHeT- ся в семействе PIC 18 в 4eKe naMTLI1 с меньшНМ номером, а стаРШLl1Й  в 4eKe с 60nЬШLl1М номером. 3тот мето,lJ, сохранени 4L11сла Ha3ЫBaeTC форматом с обратным порядком байтов. AnbТepHaTLI1BHbI мето,lJ" нспользуемый во всех ,o,pyrнx 4ленах семейства PIC, Ha3ЫBaeTC фор- матом с прямым порядком. npH НСnОЛЬЗ0ваНLI1Н этоro <Рормата 4нсла coxpaHIOTc так, 4ТО Я4ека с меНЬШLl1М номером СО,lJ,ер>кнт стаРШLl1Й 6айт данных. '<t N  Q)   iO   N .... N  :о ID 11) N     сх) .... C\I двоичные веса (а) слово без знака Ох203 Ох202 Ox201 Ох200 Ох НУ 12Н З4Н  старший баЙт  младший байт (Ь) в ячейках памяти Ох200 и Ох20 I записано слово Ox1234 Рис. 1.3. Пословные (16 6нт) ,lJ,анные PLl1c. 1. За показывает веса AfI Ka)l(,lJ,O 6L11TOBO n03НЦLl1L11 слова ,lJ,анных, а pLl1c. 1. ЗЬ nOKa3bIBaeT, как 4L11СЛО 12З4Н заноситс в 4еЙКLI1 naMTLI1 ЗОООН LI1 ЗОО1Н. ЕдLl1НСТlЗеНllая 
rnaBa 1. Вве)].енне в архнтектуру компьютеров 31 раЗНLI1ца между CJlOBOM СО знаком LI1 6еззнаковым CJlOBOM связана с caMO JleBO 6L11TO BO ПОЗLl1ЦLl1е. В 6еззнаково форме caMЫ JleBbI 6нт не связан со знаком н LI1MeeT вес 32768; в форме со знаком ero вес 6У,lJ,ет равен -32768. Как н в CJlY4ae 6aTOBЫX ,lJ,анных со знаком, слово со знаком LI1MeeT форму ,lJ,onOJlHeHLI1 .0.0 ,lJ,ВУХ, Kor,lJ,a оно npe,lJ,CTaBJleT отрLl1цатеJlьное 4L11CJlO. Кроме Toro 06paTLI1Te BHLI1MaHLI1e на то, 4ТО МJlаДWLl1 6aT сохраня eTC в Я4ейке паМТLI1 с меНЬШLl1М адресом (3000Н), а старШLl1  в чеке naMTLI1 с 60ЛЬ WLl1M адресом (3001 Н), eCJlH ре4Ь LI1дет о ceMeCTBe YCTPOCTB PIC18. npLl1Mep 1.28 показывает несколько знаковых LI1 6еззнаковых nOCJlOBHbIX данных, сохраненных в naMTLI1 в рамках nporpaMMbI на AcceM6Jlepe. npLl1Mep .1.29 демонстрLl1РУ ет coXpaHeHLI1e тех >ке 4L11CeJl nроrраммой на С/С++, KOTopa LI1СnОJlьзует KJl104eBOe слово short Дn coXpaHeHLI1 16разр,lJ,НЫХ цеJlЫХ 4L11CeJl. 06paTLI1Te BHLI1MaHLI1e на то, 4ТО команда dec/are word LI1JlLl1 DW на AcceM6Jlepe npLl1Bo,lJ,LI1T к coXpaHeHLI1IO в naMTLI1 слов, а не 6aTOB, как в преДЫ,lJ,уw,LI1Х npLl1Mepax. КомаН,lJ,а ОАТА мо>кет так>ке 6ыть LI1СnОJlьзована Дn опре- ,lJ,eJleHLI1 CJlOBa. npLl1 LI1СПОJlьзоваНLI1L11 KOMnLl1JlTOpa С PIC С18, ,lJ,LI1ректнва int так>ке LI1CnOJlb зуетс Дn 06ЪВJlеНLI1 16раЗр,lJ,ноrо u.eJloro 4L11CJla. Пример 1.28 ;Беззнакове nOCnOBHe AaHHe DАТА1 DАТА2 DАТА3 DW DW DW .2544 Ох87АС .710 ;orrpeAenReT деСRтмqное 2544 ;оnредеnRет wестнадuатмриqное 87АС ;оrrредеnRет AeCRTMqHOe 710 ;Посnовне AaHHe СО знаком DАТА4 DАТА5 DАТА6 DW DW DW .13400 +198 OxFFFF ;оnредеnRет деСRтмqное 13400 ;оnредеnRет деСRтмqное +198 ;оnредеnRет деСRтмqное -1 Прер 1.29 IIDocnoBHe дaHHe 6ез знака II unsigned short Datal = 244; unsigned short Data2 = Ох87АС; unsigned int Data3 = 710; /1 оnредеnRет деСRтиqное 2544 II оnредеnRет wестнадuатмрмqное 87АС II.оnредеnRет деСRтмqное 710 1I I1 Посnовне дaHHe СО знаком I1 short Data4 = 13400; short Data5 = +198; int Data6 -1; int Data? = 3 ; II оnредеnRет деСRтмqное 13400 II оnредеnRет деСRтмqное +198 II оrrредеnRет деСRтмqное 1 II оnредеnRет деСRтмqное +3 Действительные числа AeCTBHTeJlbHbIe 4HCJla LI1Hor,lJ,a BCTpe4aIOTC в npLl1JlO>KeHLI1X  здесь OHLI1 paCCMaT pLl1BaIOTC в CLI1JlY Toro, 4ТО HHor,lJ,a встроенные KOHTpOJlJlepbI ,lJ,OJl>KHbI LI1MeTb деJlО с дeCT BLI1TeJlbHbIMLI1 4L11CJlaMH. AeCTBLI1TeJlbHOe 4HCJlO HJlLl1 4L11CJlO С nJlaBalOw,e T04KO, как ero 
32 TIpHMeHeHHe МНКрОКОНТрОЛJlеров PIC 18 часто называют, состоит L/13 двух частей: MaHTL/1CCbI,  значащей или дробной 'Iac 1 и и экспоненты. Рис. 1.4 показывает как 4байтовую, так L/1 8байтоuую форму дейс 1 L3и 1 elIb ных чисел, как они сохраняются в системах Intel. Обра 1 ите внимание на ю, чro 4байтоuая срорма назьшается срормой ЧL/1сла одинарной rОЧIIОСТИ, а 8бай 1013а>! форма называется срормой ЧL/1сла двойной точности. ПреДСlаШlClIные з/есь формы coxpaHe НL/1Я деЙСТВL/1тельных чисел являются TeML/1 >ке, ко.торые СllеЦИфИlированы С.lандар.том 'EEE754, верСL/1Я 10.0. 3тот стандарт был прин>!т u ка'ICСILЗе С.lаlщаРIНОЙ формы "peд стаuлеНL/1 дествнтельных 4L/1сел праКТL/1чеСКL/1 I3CeML/1 языками 11роrраммироваIlИ>!, а так>ке MHOrHML/1 приклаДНЫМL/1 naKeTaML/1. Данный стандарт так>ке примеНlетс>! npL/1 Ma НИllулироваНИL/1 даННЫМL/1 в аРL/1срметичеСКL/1Х сопроцессорах перСОllальных комIIы(те ров. PL/1c. 1. 4а показывает срорму ЧL/1сла ОДL/1нарной точности, котора>! содер>КL/1Т бит Эllа ка, 8битную экспоненту L/1 24БL/1ТНУЮ дробную часть (Malll иссу). Обра 1. L/1 Т е внимание на то, что в СL/1ЛУ TOIO, что nрL/1ло>кеНL/1Я часто требуют L/1спольэоuаНL/1Я 'lL/1сел с плаuающ(}й Т04КОЙ двойной точности, соответствующая форма так>ке предстаШlCна на рис. 1. 4Ь. Простой аРL/1фмеТL/1чеСКL/1Й ПОДС4ет показывает, что для сохранени>! rзсех назван ных фраrментов данных неоБХОДL/1МО 33 БL/1та. Однако это не .raK  24би IlIая маllтисса содер>КL/1Т подразумеваемый (неяI3НЫЙ) БL/1Т, что позволяет Мсlfписсе 11редсrаШIЯЛ) 24 БL/1та, будучи сохраняемой Bcero в 23 БL/1тах. Неяuный бит  это перuый бит нормаJJИЗО BaHHoro деЙСТВL/1тельноrо ЧL/1сла. ПрL/1 1I0рмаЛL/1заЦL/1И ЧL/1сла, оно пете Iраивается таким обраЗ0М, 4ТО ero значеНL/1е по крайней мере равно еДL/1нице, однако меllЫIЮ 2. HallpL/1 мер, еСЛL/1 12 преобраЗ0вать в ДВОL/14НУЮ срорму (11002)' то после нормализаЦL/1L/1 резуль татом будет: 1.1 х 23. Цела 4асть нормаЛНЗ0ванноrо ЧL/1сла (1) не сохраняется ПрL/1 L/1C ПОЛЬЗ0ваНL/1И 23-БL/1ТНОЙ чаСТL/1 4L/1сла, задающей MalITL/1CCY; 1 наХОДL/1ТСЯ в ,еДL/1НL/1ЧIЮМ "скрытом" БL/1те. Табл. 1.9 nоказьшает срорму этоrо L/1 друrL/1Х чисел одинарной точности. 3кспонента сохраняется в срорме смещенной экспоненты. В форме действитOJН Horo ЧL/1сла одинарной Т04IЮСТL/1 смещеНL/1е равно 127 (Ox7F), а npL/1 ИСПОЛЬЗ0вании фор мы деЙСТВL/1тельноrо 4исла двойной ТОЧНОСТL/1 она равна 1023 (Ox3FF). Значения смещс ния L/1 экспоненты складываютс перед сохранением экспоненты в ссютuетствующей чаСТL/1 ЧL/1сла с плаваюw,ей Т04КОЙ. В предыдущем npL/1MelJt; покаэана экспонента, равна>! 23, Ilредставленна 13 срорме смеw,енной экспоненты, равной 127 -1- 3 or 130 (Ох82) в срорме деЙСТI3L/1тельноrо 4L/1сла ОДL/1нарной ТОЧIЮСТL/1 L/1ЛL/1 как 1026 (Ох402) в форме дей СТВL/1телы-юrо 4L/1сла двойной T04HOCTL/1. 31 ЗА Ш :жспонента 23 22 I . ЖI.НТlJсса о I (а) 63 62 52 51 О [1 экспоне"т, I м.rпнсса I . (Ь) Рис. 1.4. Данные, заданные в срормате с nлаваюw,ей Т04КОЙ: (а)ОДL/1нарнаТ04НОСТЬ,(Ь)двойнаяточность 
rnaBa 1. Вве)].енне в архнтектуру компьютеров 33 Таблица 1.9. AeCTBL/1TeJlbHbIe 4HCJla O,lJ,L/1HapHO T04HOCTL/1 еся- воичное Нормаnизо- Знак CMeeHHaR Мантмсса ТМ4ное ванное 3KCnOHeHTa +12 1100 1.1 х 2 .! О 10000010 10000000 00000000 00000000 -12 1100 1.1 х 23 1 10000010 10000000 00000000 00000000 +100 1100100 1.1001х 26 О 10000101 10010000 00000000 00000000 -1.75 1.11 1.11 х 20 1 01111111 11000000 00000000 00000000 +0.25 0.01 1.0 х 22 О 01111101 00000000 00000000 00000000 +0.0 О О О 00000000 00000000 00000000 00000000 V1MeeTC два L/1CKJlI04eHL/1 L/13 npaBHn занесеНL/1 в памть 4L/1CeJl с nлаваlOw,ей ТОЧ KO. Так, 4L/1СЛО 0.0 coxpaHeTC в форме, все разрды KOTOPO равны НУЛIO. ЧL/1СЛО "бес конечность" coxpaHeTC в форме, все разрды экспоненты KOTOPO L/1MeIOT еДL/1I1L/14ное 3Ha4eHL/1e, а MaHTL/1CCbI - HYJleBoe. Знаковы 6L/1T в зтом CJlY4ae указьшает ЛL/160 nОЛО>КL/1 тельнуlO, ЛL/160 ОТРL/1u.атеJlЬНУЮ 6есконе4НОСТЬ. в с/с++ 4L/1CJla О,lJ,L/1нарной ТО4НОСТН оnре,lJ,еJlЮТС как f/oat, а 4L/1CJla ,lJ,BOHO T04 HOCTL/1 оnре,lJ,еJlЮТС как doubIe, как это nоказано в npL/1Mepe 1.30. Нет ВО3МОЖНОСТL/1 оnредеJlТЬ TaKL/1e 4L/1CJla npL/1 HCnOJlb30BaHL/1L/1 AcceM6Jlepa PIC, eCJlL/1 TOJlbKO, коне4НО, предварL/1теJlЬНО не npeo6pa30BaTb L/1X в nОСJlОВНЫЙ HJlH no6aTOBbI формат BPY4HYIO. KOMnL/1JlTOp CI8 PIC BOCnpHHL/1MaeT как форму f/oat, так и форму doubIe, О,lJ,нако 06а 3TL/1 TL/1na 4L/1CeJl фаКТL/14ескн сохранются н НСnОJlЬ3УЮТС как 32раЗр,lJ,ные 4L/1CJla O,lJ,L/1Hap ной T04HOCTL/1. Пример 1.30 IIествитеnьне чисnа одинарно точности 11 float Nurnbl = 1.234; float Numb2 23.4; float Numb3 = 4.3е2; 11 11 ествитеnьне чисnа ДBOHO точности double Numb4 double Numb5 123.4; -23.4; 
34 Применение МИКрОКОНТролnеров PIC18 IEEE754 s еее ееее е fff ffff fПf ffff ffff ffff ееее ееее Microchip s fff ffff I ffff ffff ffff ffff s = знаковый бит е = экспонента f= мантисса Рис. 1.5. Форматы 4Hcen С nJlaBalOw,e точко Microchip L/1IEEE Microchip L/1сnоnьзует ,lJ,руrой формат ,lJ,Jl 4L/1CeJl с nJlаваюw,е T04KO в КОМПL/1ЛТО ре с 3ЫKa С С18. Рнсунок 1.5 НJlJlюстрнрует разннцу мюкду форматом 4L/1ceJl с nJlaBalO- ще ТО4КОЙ <рнрмы Microchip н <рорматом IEEE. Разннца заKJl104аетс в размещеНL/1И знаКQвоrо бита ЧИСJlа. Эта разннца не оказывает воздеСТВL/1 на ра60ТУ KOMnL/1nTOpa С. 1 .4. Резюме 1. Чарльз Бе66НД)1( L/1з06реJl L/1 C03ДaJl первую ВЫ4L/1СЛL/1теJlЬНУIO CL/1CTeмy  "АНaJlL/1ТL/1чеСКL/1 двнrатеJlЬ". Позднее, Джон <рон HeMaH ycoBepWeHCТВOBaJl apXL/1Teктypy компыоера.. 2. Первым nporpaMMHCToM 6bIJla ABrycTa А,о,а Барон (позднее  rрафL/1Н Лав Jlecc), она заслу>кнnа реnуТаu.ню nepBoro проrраММL/1ста в СL/1ЛУ Toro, 4ТО ПL/1сала npo rpaMMbI AflЯ "Анanнтнческоrо ,lJ,внrатеJlЯ" ЧарJlьза Бе66L/1дж:а. 3. Первый в мнре MHKponpou.eccop - Inte14004, 6bIJl 46L/1THbIM МL/1кропроцессором, npe,lJ,cTaBJlBWHM co60 npOrpaMML/1pyeMbl KOHTpOJlJlep в ML/1KpOCxeMe. Он адресоваJl 4096 4етырехбнтных 4eeK naMTL/1. 4. ЦП ВJlется уnраВJlЮUJ,НМ эnементом комnьютерно CL/1CTeMbl. ЦN BblnOJlHeT перенос ,lJ,анных, BblnOJlHeT простые арнфмеТН4ескне L/1 JlorL/14eCKL/1e onepau.L/1L/1, а так>ке ПРL/1НL/1мает простые peWeHL/1. ЦN BbInOJlHeT nporpaMMbl, сохраненные в заnОМL/1наlO w,e CL/1CTeMe, 4ТО 06eCne4L/1BaeT возможность выполнеНL/1 СJlОЖНЫХ оnераЦL/1 зада4а КОрОТКL/1Й пернод BpeMeHL/1. 
rлава 1. Вве)].енне в архнтектуру компьютеров 35 5. Все компыоерныыe CL/1CTeMbI СО,lJ,ер>КаТ трн ШL/1НЫ, nре,о,назна4енные ,lJ,JlЯ ynравлеНL/1 памятью L/1 ycтpoCTBaML/1 BBoдaBЫBOдa. WL/1Ha адреса L/1cnOJlb3yeTc ,lJ,JlЯ обраw,еНL/1 по сщресу паМЯТL/1 L/1ЛL/1 к устройству BBoдaBЫBOдa. WL/1Ha данных переносит данные между мнкропроцес сором L/1 naMTblO, а так>ке nространством ввода-вывода. WL/1Ha ynpa8JleHH ynpa8JleT naMffiblO L/1 BBOДOMBЫBOДOM, заnраШL/1ва 4TeHL/1e L/1ЛН 3ЭЛL/1СЬ данных. 6. ЧL/1сnа пре06разуlOТС L/1з ЛI060 CL/1cтeMbI C4L/1CJleHL/1 в ,lJ,еСЯТL/14Нyto CL/1cтeMY С4ислеllL/1Я, Y4L/1TbIBa вес каждоrо разряда. Вес разряда, раСПОJlоженноrо непосредственно CJleBa от ТОЧКL/1 nОЗL/1ЦL/10ННО CL/1CTeMbI С4L/1слеНL/1, Bcerдa равен еДННL/1це в n1060 CL/1CTeMe С4L/1слеl-lL/1. Вес раз ряда, раСnОJlоженноrо непосредственно cneBa от nОЗL/1LJ.НL/1 еДННL/1Ц Bcerдa равен основаниlO L/1спользуемой CL/1CTeMbI С4ИСJlеНL/1, умноженному На еДННL/1ЦУ. Вес слеДУIOw,еrо слева разряда определяетс умножеНL/1ем на основанне CL/1cтeMbI С4L/1слеНL/1Я. Вес разряда, располо>кенноrо непосредственно справа от T04KL/1 ПОЗНЦL/10ННОЙ CL/1CTeMbI C4L/1CneHL/1, всеrда опредеJlяется дe JleHL/1eM на OCHOBaHL/1e CL/1CTeMbI C4L/1CJleHH. 7. npe06pa30BaHL/1e цеJlО 4aCTL/1 ,lJ,eCTL/14HOrO 4L/1CJla в Jl106ylO L/1HYIO CL/1CTeMY C4L/1C JleHL/1 ВЫПОJlнетс ,lJ,eJleHL/1eM на oCHOBaHL/1e CL/1CTeMbI С4НСJlеНL/1Я. nре06разоваНL/1е ,lJ,p06HO 4aCTL/1 деСТL/14ноrо 4L/1CJla в Jl106ylO L/1HYIO CL/1CTeMY C4L/1CJleHL/1 BbInOJlHeTC YMHO жеНL/1ем на oCHOBaHL/1e снстемы C4HCJleHH. 8. Шестнaдu.аrnРL/14ные данные пре,lJ,ста8JlIOТС в шестнадцаТL/1РL/14НО <Рорме L/1ЛИ в KO ,lJ,L/1poBKe, называемо ДВOH4HOKOДНpoBaHHЫM wecTHaдu.arnpL/14HbIM кодом (АКШК). А Двоично коднрованное шестнaдu.аТL/1РL/14Ное 4L/1CJlO  ЭТО 4L/1CJlO, которое заnL/1сываетс 4етырехБL/1ТНЫМL/1 ДВОL/14НЫМL/1 4L/1слаМL/1, nредста8JlIOw,L/1МL/1 кажды шестнaдu.aТL/1рL/14НЫ разряд. 9. Код ASCII L/1СnОJlьзуетс Дn XpaHeHL/1 аJlфаВL/1ТНОЦL/1фРОВЫХ ЛL/160 4L/1сленных ,lJ,анных. Код ASCII  3ТО 76L/1THbI КОД; О,lJ,нако, он может L/1MeTb BOCbMO бит, который L/1СnОJlьзуетс Дn paCWL/1peHL/1 на60ра CL/1MBOnOB от 128 до 256 кодов. Код возврата Ka peTKL/1 (Enter) возвраw,ает ne4aTalOw,ylO rOJlOBKY L/1JlL/1 курсор на JleBOe ПОJlе. Ко,lJ, перевода CTpOKL/1 перемеw,ает курсор L/1nL/1 ne4aTalOw,ylO rOJlOBКY ВНL/1З на О,lJ,ну строку. 1 О. ДвОL/14нокоднрованные дecrn4Hыe (,ЦК,Ц) данные L/1HOrдa L/1СnОJlЬЗУIOТ в KOMnblO TepHO CL/1CTeMe Д11 XpaHeHL/1 деCffiL/14НЫХ данных. 3m ,lJ,анные coxpaHIOT JlL/160 в ynaKoBaH HO (две ЦL/1фРЫ на 6aT) JlL/160 в неynакованной <Рорме (о,о,на ЦL/1фра на 6айт). 11. ABoL/14HbIe данные в компьютерных CL/1CTeMaX coxpaHIOTC в форме 6aTOB (8 6L/1TOB) L/1JlL/1 CJlOB (16 6L/1TOB). 3TL/1 данные MOryT 6ыть со знаком L/1ЛL/1 6ез. ОТРL/1цательные 4L/1Cna со знаком всеrда coxpaHIOTC в форме ДОnОJlнеНL/1 до двух. Аанные, ДJ1L/1Ha KOTO рых nревышает 8 6L/1T, Bcer,lJ,a coxpaHIOTC с L/1сnоnьзоваНL/1ем срормата с 06ратным по pДKOM 6aTOB. 12. Формат с nJlaBalOw,e T04KO L/1СnОJlьзуетс в KOMnblOTepHbIx CL/1CTeMaX ДJIЯ xpa HeHL/1 u.eJlbIx, смешанных L/1 ,lJ,ро6ных 4L/1CeJl. Формат с nJlаваlOw,ей T04KO составлется L/1з знака, MaHTL/1CCbI L/13KCnOHeHTbI. 1 З. AL/1peKTL/1BbI AcceM6Jlepa ОВ (06bBL/1Tb 6aT) L/1 DW (06bI3L/1Tb слово) L/1СПОЛЬЗУ IOTC Дn coXpaHeHL/1 6aTOB L/1 CJlOB ,lJ,анных в CL/1CTeMaX naMTL/1. 1.5. Вопросы и задания 1. Кто nOCTpOL/1Jl "aHaJlL/1TL/14eCKL/1 ДВL/1rатеJlЬ"? 2. nepBbI в ML/1pe МL/1кропроцессор 6bIJl создан в 1971 rоду З. Кем 6bIJla rрафL/1Н Лавnесс? 4. Что такое "маШL/1на фон HeMaHa"? 5. KaKa компаНL/1 разра60таJlа nepBbI ML/1KPOKOHTpOJlJlep? 6. Что зна4L/1Т cOKpaw,eHL/1e CISC? 7. Что зна4L/1Т cOKpaw,eHL/1e RISC? 
36 Прнмененне MHKpOKOHTpOnnepOB PIC18 8. АВОLl14НЫЙ 6L11T XpaHLI1T LI1nLl1 9. Компьютерное "К" равно  6aTaM. 10. KOMnblOTepHoe "М" равно К 6aT. 11. Компьютерное "G" равно  М 6aT. 12. Что такое nOJly6aT? 13. На4ертнте 6noKcxeMY KOMnblOTepHo CLl1CTeMbI. 14. nepe4HCJlHTe трн ШLl1НЫ, которые npLl1CyTcTI3YIOT во всех компыоерныыx CLl1CTe мах. 15. KaKa WHHa nepe,lJ,aeT адрес naMTLI1 YCTPOCTBY BBoдaBЫBoдa LI1ЛLl1 naMTLI1? 16. KaKO CLI1rHaJl ynpaBJleHLI1 застаВJlет naMTb ВЫПОЛНLI1ТЬ операЦLl1IО 4TeHLI1? 17. В 4ем заKJlЮ4аетс конu.еnЦLl1 coxpaHeMO nporpaMMbI? 18. В 4ем заKJlЮ4аетс pa3HLI1u.a ме>кду СnnЗУ LI1 3СnnЗУ? 19. ECJlLl1 naMTb LI1MeeT 14-6L11ТНbI а,lJ,рес, CKOJlbKO 4eeK naMTLI1 она может CO,lJ,ep >кать? 20 CKonbKO 4eeK naMTH CO,lJ,ep>KHTC в naMTLI1 06ьемом 4К х 8? 21. Что такое С03У? 22. Какой TLI1n заnОМLI1наlOUJ,еrо устройства ,lJ,OJl>KeH LI1сnоnьзоватьс .o.n XpaHeHLI1 ,lJ,HHaMLI14eCKLI1X ,lJ,анных? 23. ОnLl1ШLl1те Ha3Ha4eHLI1e cne,lJ,YIOw,LI1x ,lJ,LI1peKTLI1B AcceM6nepa: а. ОВ Ь. ОА ТА c.DW 24. OnLl1WHTe назна4енне CJle,lJ,YIOw,LI1x ,lJ,LI1реКТLl1В С/С++: а. char Ь. short с. int d. float е. doubIe 25. ECJlH aдpeCHa WLI1Ha naMTH СО,lJ,ер>кнт указанное даJlее KOnLl14eCTBO ЛLl1НLI1, on pe,lJ,eJlLl1Te KOnLl14eCTBO 4eeK naMTH, которые MOryr 6ыть а,lJ,ресованы. а.12 Ь. 14 С. 16 d.18 8.32 26. nре06разуйте npLl1Be,lJ,eHHbIe ,lJ,aJlee ,lJ,ВОН4ные 4Hcna в ,lJ,eCTLI14HbIe: а.1101.01 Ь.111001.0011 с. 101011.0101 d. 111.0001 27. nР80бразуте npHBe,lJ,eHHbIe ,lJ,anее BOCbMLI1pH4Hble 4L11CJla в ,lJ,еСТLI1чные: а. 234.5 Ь.12.3 с.7767.07 d. 123.45 е.72.72 28. nреобразуте npHBe,lJ,eHHbIe ,lJ,aJlee weCTHaдu.aTHpH4HbIe 4HCJla ,в ,lJ,eCTLI14Hble: а.А3.3 . Ь. 129.С с. АС.ОС 
fnaBa 1. Вве)].енне в архнтектуру компьютеров 37 d. FAB.3 е. ВВ8.0О 29. npeo6pa3YTe СJlеДУIOw,LI1е деСЯТLI14ные цеnые 4L11CJla в ,lJ,B0Ll1411YIO, BOCbMLI1pLl14 HYIO LI1 шестнадu.аТLI1РLl14НУIO формы: а.23 Ь.107 С. 1238 d.92 е.173 30. nрео6разуте СJlе,lJ,уюw,не ,lJ,eCTLI14HbIe 4L11CJla в ,lJ,вончную, ВОСЬМНРН4НУЮ Н ше стнадцаТLI1рLl14НУIO формы: а.О.625 Ь.О.00390625 С. 0.62890625 d.O.75 е.09375 31 . npeo6pa3YTe CJlе,lJ,УЮUJ,Не wecTHaдu.aTHpH4HbIe 4HCJla в ,lJ,BOH4HO КОДLl1рованны wecTHaдu.aTLI1pH4HbI КО,lJ, (ДКWК): а.23 Ь.АО4 с. 34.АО d. ВО32 е. 234.3 32. npeo6pa3YTe СJlе,lJ,УЮUJ,не ,lJ,BOH4HOKO,lJ,HpOBaHHыe WeCTHa,lJ,u.aTHpH4HbIe 4нсла в wecTHaдu.aTHpH4HbIe: а. 11000010 Ь. 0001 0000 1111 1101 с.10111100 d. 0001 0000 е. 100010111010 33. nрео6разуте СJlе,lJ,уюw,не ,lJ,ВОН4ные ЧНСJlа в форму ,lJ,OnOnHeHH .0.0 O,lJ,HOro: а. 1000 1000 Ь.0101 1010 с.01110111 d. 10000000 34. npeo6pa3YTe СJlеДУЮUJ,не ,lJ,ВОН4ные 4HCJla в ФОРМУ ,lJ,OnOJlHeHH до ,lJ,ВУХ: а. 10000001 Ь. 10101100 с.10101111 d. 10000000 35. Как 06ЬВJlЮТС батовые ,lJ,анные npH HCnOJlb30BaHHH ACCeM6Jlepa? 36. nрео6разуте сnе,lJ,УЮЩLl1е CJlOBa в CHMBOJlbHbIe строкн в КО,lJ,нровке ASCII, HC nОJ1ЬЗУ AcceM6Jlep: а. FROG Ь. Arc с. Water d.Well 37. Какнм 6удет KO,lJ,ASCII AfI KJlаВНШLl1 Enter н каково ero назна4енне? 38. V1СnОJlьзуте ДLl1реКТLI1ВУ AcceM6nepa Дn coxpaHeHH в naMTH строкн ASCII- CLI1MBOJlOB "What time is it?" (KOTOpы 4ас?). 
38 ITpHMeHeHHe микроконтроnnеров PIC 18 39. nреобразуте слеДУIOw,LI1е деСТLI14ные 4L11сла в 8разрдные ДВОLl1чные ЧLl1СJla СО знаком: а.+32 Ь. 12 с.+100 d. 92 40. nре06разуте сле,lJ,УIOw,LI1е ,lJ,eCTLI14HbIe 4L11cna в nOCJlOBHbIe ДВОLl1Чllые ЧLl1сла со знаком: а.+1000 Ь.  120 с.+800 d. 3212 41. V1СПОJlьзуте ДLl1реКТLl1ВУ AcceM6nepa Д11 coXpaHeHLI1 в naMTLI1 6аТО[з0rо ЧLl1СJIa 34. 42. Создате 6aToBYIO nepeMeHHYIO с LI1MeHeM Fredl LI1 COXpaHLI1Te в He 4L11СЛО 34 на С/С++. I 43. npO,lJ,eMoHCTpLl1PYTe, как cne,lJ,YIOw,LI1e 16раЗр,lJ,ные шестна,lJ,u.аТLI1РLI14ные 4L11сла coxpaHIOTC в заnОМLI1наlOw,ей CLI1CTeMe (LI1СnОJlьзуте как форму с 06ратным порядком 6aTOB, так LI1 форму С npMbIM nордком 6aTOB): а.Ох1234 Ь.ОхА122 с.ОхВIOО 44. В 4ем заKJl104аетс ра3НLI1ца между форматом с обратным nордком байтов LI1 срорматом с npMbIM nOp,lJ,KoM 6aTOB в CJlY4ae coXpaHeHLI1 4L11сел, nревышаlOw,LI1Х по ДnLl1He восемь разрдов? 45 V1СnОJlьзуйте ДLl1реКТLI1ВУ AcceM6Jlepa Д11 coXpaHeHLI1 в' naMTLI1 wестнадцаТLI1 РLl1чноrо 123А. 46. nре06разуте СJlеДУIOw,LI1е деСТLI14ные 4L11сла как в ynaKoBaHHYlO,TaK LI1 в Heyna KOBaHHYIO АКАФормы: а. 102 Ь.44 с.301 d.1000 47. nре06разуте Cne,lJ,YIOw,LI1e ДВОLl14ные 4L11CJla в дeCTH4Hыe 4L11CJla со знаком: а.10000000 Ь.00110011 с. 10010010 d. 10001001 48. nре06разуте СJlе,lJ,УIOЩLl1е AКA4L11cJla (в nредпоnожеНLI1L11, 4ТО зто упакованные 4L11сла) в деСТLI14ные 4Hcna: а.10001001 Ь.00001001 с.00110010 d.00000001 49. nре06разуте CJle,lJ,YIOw,LI1e ,lJ,eCTLI14HbIe 4L11сла в 4L11сла ОДLl1нарно T04HOCTLI1 с nJlaBalOw,e Т04КОЙ: а. +1.5 Ь.  10.625 с. +100.25 d.  1 200 50. Пре06разуте СJlеДУIOw,LI1е 4L11CJla с плаваlOw,е T04KO ОДLl1нарIlО ТОЧНОСТLI1 13 
fnaBa 1. Вве)].енне в архнтектуру компьютеров 39 формате IEEE754 верснн 10.0 в ,lJ,еСПН4ные ЧНСJlа: а.01000000011000000000000000000000 Ь. 10111111100000000000000000000000 С.О 10000010 10010000000000000000000 51. V1cnonb3YTe V1HTepHeT AflЯ Toro, 4т06ы HanHcaTb краткое со06щенне об одном LI13 НLI1жеnере4L11СJlенных nLl10HepOB в оБJlастн компьютеров: а. ЧарJlЬ3 Бе66L11,lJ,)1( Ь. ABrYCTa А,о,а Барон с. А>Кон фон HeMaH 52. V1СПОJlьзуте V1HTepHeT Дn Toro, 4т06ы HanHcaTb краткое СО06щенне 06 одном LI13 НLI1жеnере4L11СJlенных 3ЫKOB nporpaMMHpoBaHH: а. COBOL Ь. ALGOL с. FORTRAN d.PASCAL 53. V1CnOJlb3YTe V1HTepHeT Дn Toro, 4т06ы HanHcaTb краткое сообw,енне о CBOCT- вах MLI1KpOKOHTponnepoB ceMeCTBa PIC. 
40 ITрнменение МИКрОКОНТроnnеров PIC 18  rЛАВА 2. Архмтектура семейства PIC18 м разработка nporpaMM АО Toro, как nрLl1сryПLl1ТЬ к проrраММLI1роваНLI1IО MLI1KpOKOHTpOJlJlepa LI1ЛLl1 орrаНLI1за ЦLl1L11 [3заLl1МО,lJ,еСТI3L11 С друrLl1МLI1 YCTpoCTBaMLI1, не06ХОДLl1МО nOHTb ero арХLl1тектуру. В дaHHO rJlaBe nредставлетс apXLl1TeKrypa ceMeCTBa МLI1кроконтролnероl3 PIC, при этом осо60е BHLI1MaHLI1e удеJlетс MLI1KpOKOHTpOJlJlepaM ceMeCTBa PIC 18, выпускаемых фLl1р MO Microchip Technology Incorporated. CeMeCTBO PIC 18  зто самое НО130е LI1З семест13 PIC, LI1MelOw,LI1XC на рынке. В дaHHO rJlaBe так>ке nредстаI3JlIOТС вводные сведеllLl1 06 LI1HTerpaJlbHO сре,lJ,е разра60ТКLI1 (IDЕ) Дn MLI1KpOKOHTpOJlJlepOB PIC, а так>ке paCCMaTpLl1 [3aeTC процесс acceM6JlLl1pOBaHLI1/KoMnOHOBKLI1. nOcJle завершеНLI1 LI13Y4eHH дaHHO rJlaBbI вы сможете: 1. OnLl1CaTb BHyTpeHHlO1O apxLl1Teкrypy MLI1KpOKOHTpOJlJlepa PIC LI1 взаLl1модеСТВLI1е ero компонент. 2. AeTaJlbHo OnLl1CaTb cLl1cTeMHYIO apxLl1Teкrypy PICocHoBaHHo МLI1кроnроцессорно CLl1CTeMbI. З. 06bCHLI1Tb назна4еНLI1е каждоrо perLl1CTpa в 0606щенно модеЛLl1 npOrpaMMLI1pO BaHLI1 MLI1KpOKOHTpOJlJlepa. 4. ЗаnроrраММLI1ровать npocTo порт BBoдaBЫBoдa на ocyw,ecTI3JleHLI1e оnераЦLl1 BBoдaBЫBO,lJ,a. 5. V1CnOJlb30BaTb LI1HTerpaJlbHYIO среду разра60ТКLI1 (IDЕ) ДJlЯ проrраММLI1рОl3atlLl1Я MLI1KpOKOHTpOJlJlepOB ceMeCTBa PIC 18. 6. V1MLI1THpOBaTb BbInOnHeHLI1e nporpaMMbI Дn MLI1KpOKOHTpOJlnepa PIC. 7. OnLl1CaTb функu.НОНLI1рованне команд зыка acceM6Jlepa. 8. nOCHLI1Tb npou.ecc AcceM6JlLl1poBaHLI1 LI1 KOMnOHOBKLI1. 2. 1. Архитектура PIC18 ApXLl1TeKrypa PICocHoBaHHo MLI1KpOKOHTpOJlJlepHO CLl1CTeMbI HeCKOJlbKO ОТЛLl1чается от 06w,e KOMnblOTepHo CLl1CTeMbI, paCCMOTpeHHO в rJlaBe 1. ВСJlеДСТВLI1е Toro, что PIC содеРЖLl1Т naMTb н YCTpOCTBa BBO,lJ,aBЫBoдa, nрLl1rодные Дn 60JlЬШLl1нства ПРLl1мене HLI1, MLI1KpOKOHTpOJlJlep PIC  зто просто отдеnьны 6JlOK PICocHoBaHHo CLl1CTeMbI. Дo ПОЛНLI1теJlьна naMTb HJlLl1 ВОЗМОЖНОСТLI1 BBO,lJ,aBЫBO,lJ,a MOryr 6ыть до6авnены в CLl1CTeMY, однако ВО MHorHX сnучах naMTb LI1 ВОЗМОЖНОСТLI1 BBO,lJ,aBЫBO,lJ,a, 06eCne4L11BaeMbIe MLI1K pOKOHTpOJlJlepOM PIC ,lJ,остаТ04НЫ Дn 60JlbWLI1HCTBa npLl1MeHeHH. PLI1c. 2.1 НJlJlЮСТРLl1рует nросryю снстему, KOTopa LI1СnОJlьзует MLI1KpOKOHTpOJlJlep PIC. 3та CLl1CTeMa СО,lJ,ержнт ЖКНН,lJ,LI1катор Дn от06ражеНLI1 LI1нформаu.LI1L11, KJlaBLI1aTYPY Дn ВВО,lJ,а ,lJ,анных, OnTLI14eCKLI1 C4L11TbIBaTeJlb каРТ04ек Дn ВВО,lJ,а LI1нформаЦLl1L11 с карточек LI1 nOCJle,lJ,OBaTeJlbHbI LI1нтерфес с xocT-комnыоеромM Дn выrрузкн ,lJ,анных LI1 заrРУЗКLI1 LI1нформаu.НLI1 в KOHTpOJlJlep. 3та, LI1СnОJlьзуема в ка4естве ПрLl1мера, CLI1CTeMa не содер- ЖLl1Т BHeWHlO1O naMTb, nOMLI1MO naMTLI1, расnоложенно BHyTpLl1 MLI1KpOKOHTponnepa. CLI1C тема в u.eJlOM СО,lJ,ержнт только YCTpOCTBa BBO,lJ,a-вывода LI1 MLI1KpOKOHTpOJlJlep, 4ТО дела- ет ее по BHeWHeMY BLI1,lJ,Y OTJlLl14HO от 6nok-схеМbI компыoерно CLI1CTeMbI, предстаВJlен HO в rJlaBe 1. Однако, eCJlLl1 BbI4epTLI1Tb MLI1KpOKOHTpOnJlep в CTLI1ne pLl1c. 1. 1, то будет два БJlока - О,lJ,НН AfI PIC LI1 O,lJ,LI1H AfI BBO,lJ,aBЫBO,lJ,a. 
rnaBa 2. Архнтектура семейства PIC 18 н разработка проrpамм 41 ЖК -индикатор микроконтроллер PIC оптический считыватель карточек . клаВИЗ1)'ра последовательный интерфейс к хост-компьютеру Рис. 2.1. Простая MHKPOKOHTPOJlJlepho-основанная снстема. Каково назна4енне это пРосто снстемы? Она MorJla 6ы HCnOJlb30BaTbc ДЛ то- ro, 4т06ы, HanpHMep, nОJlучать ннформацнlO от ра604НХ на npoH3BoAcTBe, а так>ке функ- цноннровать как та6еJlНРУlOщне 4асы. Pa604H, nРНХО,lJ,я на ра60ТУ, может вставнть CBOIO ндентнфнкацноннуlO каРТ04КУ в onTH4ecKH c4HTbIBaTeJlb карточек н снстема заре rHcTpHpyeT ero ндентнфнкацнонны номер 4ерез nОСJlедовательны интерфес в yдa JleHHOM KOMnblOTepe хост-снстемы. xoct-комnыоерp затем npoBepHT допустнмость ндентнфнкацнонно каРТ04КН н от06разнт со06щенне "nрннято", со06щенне 06 oWH6Ke HJlH kaKYIO-Jlн60 иную ннформацню на ЖКннднкаторе. 3та снстема содержнт два YCT pOCTBa ввода данных (KJlaBHarypy н onTH4ecKH c4HTbIBaTeJlb каРТ04ек), YCTPOCTBO вывода (ЖК-ннднкатор), н ABYHanpaBJleHHOe YCTPOCTBO ВВО,lJ,а - вывода (nOCJleAOBa- тельны ннтерфес с xoct-комnыоером).. PIC MHKpOKOHTpOJlJlep СО,lJ,ержнт: память AflЯ xpaHeHH nporpaMM н данных, noA KJlЮ4ення YCTPOCTB ввода-вывода, ФОРМНРУlOщне ннтерфес со С4нтывателем карто- 4ек, ЖКннднкатором, KJlaBHarypo, nOCJleAOBaTeJlbHbIM ннтерфесом (внутренним ИН- терфесом контроллера), н также TaMepOM, KOTOpЫ может исnользоватьс в качестве 4асов peaJlbHOrO временн н каJlендаря снстемы. TaKO уровень интеrрации делает мик- pOKOHTpOJlJlep мощным н HeAoporHM средством создання снстем. МИКРОКОIIТРОJlлер PIC стонт Bcero HeCKOJlbKO AOJlJlapOB н может nроrраммнроваться на Ассем6лере, С, БЕЙСV1КЕ HJlH Java. Краткий обзор внутренней архитектуры PIC Теперь, KorAa мы нмеем некоторое npeACTaBJleHHe о мощностн PIC как KOHTpOJl- Jlepa снстемы, мы ДОJlЖНЫ понять BHyTpeHHlO1O структуру этоrо YCTpOCTBa. Как у>ке уnомннэnось, PIC содер>кнт naMTb н u.eHTpaJlbHbI nроцессор. Он так>ке содержнт KOM nOHeHTbI формнровання ннтерфеса ВВО,lJ,а - вывода, не06ходнмые AflЯ управления YCTpOCTBaMH снстемы. npe)l(,lJ,e, 4ем вы сможете nporpaMMHpOBaTb МНКрОКОНТрОЛJlер, не06ходнмо понять ero BHyTpeHHlO1O структуру. 
42 TIpHMeHeHHe MHKpOKOHTpOnnepOB PIC 18 rенерирован тактовых нмпуnьсов порты А ... вво)].а- А ... ... .. вывода памSlТЬ )].анных  I:Q V О  I:Q О о.. t:: 00 памSlТЬ стека 32х21 А ... 1 таЙмеры 21 провод ... .. ие  8-бнтный ЦП А. -"" ... I:Q .. О  .А. I:Q АЦП 16 проводов 1 О 'f о.. r:: 00 памSlТЬ проrрамм после)].о- А ..J-. ватеnь 'j V ные ПортЫ ЭСППЗУ А. ..J-. данных ... I:Q .. О  дpyrнe I:Q пернфе о о.. А. J\. r:: рииные 00 ... .. YCTpOHCT J ва Рис. 2. 2. BHyTpeHH CTpyкrypa микроконтроллеров ceMeCTBa PIC 18 Рис. '2.2 из06ражает ВНуТреннlOЮ архитекryру ceMeCTBa контроллеров PIC 18. 06paTLI1Te внимание, 4ТО эта BHyTpeHH архитекryра nод06на блоксхеме KOMnblOTep HO системы, nоказанно на рнс. 1. 1. Основное ра3ЛИ4не 3ЭКЛlO4ается в том, 4ТО na MTb в PIC разделена в два ра3ЛН4НЫХ раздела - один AflЯ хранени nporpaMMbI, а дру- ro - AflЯ хранения данных. 3та архнтектура Ha3ЫBaeTC rарвардско архитектуро, нзобретенно в 1944 AflЯ ЭJlектромехаНН4ескоrо KOMnblOTepa (Mark 1), разра6отанноrо rовардом Хатавеем AKeHOM, KOTOpЫ в 1947 сказаJl: "Только weCTb злектронных u.иср- ровых KOMnblOTepOB nотребуетс AflЯ Toro, 4то6ы УДОВJlетворить ВЫ4ИСJlнтельные no требностн всех Соединенных WTaTOB." rарвардска архнтектура деJlНТ naMTb системы на два раздеJlа с тем, 4то6ы nOBblcHTb ее зффектнвность. В траднционн'о архнтектуре системы срон HeMaHa данные и команды вы6нраютс 4ерез ry же caMYIO WHHY, 4ТО 4ac то вызывает задержки вски раз, коrда команда маНИr:JУJlирует даннымн, заnисаннымн 
rnaBa 2. Архнтектура семейства PIC18 н разработка проrpамм 43 в nамти. Аанные в nамятн н nOJlY4aeMbIe онт YCTPOCTB BBO,lJ,a-выво,lJ, - 06Ы4НО 8 имеlOТ длину в восемь 6нтов, в то BpeM как команды 4асто HMelOT 60JlbWYlO разрдность. В rарвардско apxHTeкrype, peaJlH30BaHHo в PIC MHKpOKOHTpOJlJlepax, naMTb данных и шины BBoдaBЫBoдa HMelOT разрядность в 8 6нтов, а naMTb nporpaMM нмеет разрд ность в 16 6итов. TaKa орrаннзацн n03ВОJlяет командам вы6нраться И3 nамти npo rpaMMbI в одном u.икnе 4тення HJlH в рамках OДHO оnерацни, 4ТО повышает зфсректив ность системы. 06ратнте вннманне, 4ТО PIC-МНКрОКОнтрОJlJlерbI некоторых семейств ИСnОЛЬЗУlOт 12разрднуlO naMTb nporpaMM, однако здесь рассматриваетс 16разрядна naMTb nporpaMM, реаJlизованная в ceMeCTBe PIC 18. Вследствие Toro, 4ТО naMTb nporpaMM н naMTb данных разделены, вы60рка KO дОВ оnераu.ий nepeKpbIBaeT выполнение команды, 4ТО повышает эффективность микро контроллера. 3тот зсрсрект Ha3ЫBaeTC конвейерным режимом, он ИЛЛlOстрируетс на рисунке 2.3. 06ратите внимание на то, 4ТО во BpeM nepBoro TaKToBoro u.ИКJlа выnолне ния команды, команда 1 И3ВJlекаетс Н3 naMTH, затем во BpeM BToporo тактовоrо цик- ла выnолнени команды команда 2 Н3ВJlекается Н3 nамятн 2 nараJlJlелы-ю с выnолнени ем команды 1. 3то nepeKpblTHe НJlИ KOHBeepHЫ режнм 06ecne4HBaeT то, 4ТО 60JlЬШНН- ство команд ВЫnОЛНlOтс за однн тактовый цикn. nерекрытие нзвле4ени команд из nамти и выnолненн происходит TOJlbKO в снстемах, которые HMelOT раздельнуlO na- MTb nporpaMM н данных, нсnользу rарвардскуlO apxHTeкrypy. Такне MHKponpou.ecco ры, как Pentium от Intel сраКТН4ескн ВНуТренне HCnOJlb3YlOT эry архнтектуру 4ерез кэш данных и кэш nporpaMM, которые nрименIOТС дл BHyTpeHHe реализаu.ии KOHBeep Horo ре>кима и rарвардско архитекryры. Память пporpaMM. naMTb nporpaMM нмеет разрдность, paBHYIO 16 6итов, при зтом Ka>K,lJ,a 4eKa naMTH в 60Jlьшннстве CJlY4aeB содержнт одну nОСЛОВНУIO команду. 06ратите внимание, 4ТО некоторые команды Tpe6YlOT 32 6нта naMTH нлн две nОСJlедо вательные 4eKH naMTH, однако 60JlЬШННСТВО команд BJlIOTC 16-6итными. naMTb nporpaMM делится на ,lJ,ве 4астн: одна 4аС1Ъ  это BHyTpHcxeMHa naMTb nporpaMM, а друrа  это внешн naMTb nporpaMM, которая устанаВJlиваетс в СЛУ4ае не06ходи мости. 06ъем BHyTpHcxeMHO naMTH H3MeHeTC дл раЗЛИ4НЫХ 4ленов ceMeCTBa PIC 18, находясь в диапазоне от 4К дО 128К. ВНуТрнсхемная naMTb nporpaMM  зто ли60 срлзшnамть, KOTopa может MHoroKpaTHo nepenporpaMMHpoBaTbc в ceMeCTBe 18F, либо однократноnроrраммируема naMTb (Onn) в ceMeCTBe 18С. ФлзшnаМЯ1Ь про rpaMM 06Ы4НО nporpaMMHpyeTc с нсnользованнем внешнеrо nporpaMMaTopa, однако во MHorHx верснях MHKpOKOHTpOJlJlepOB она может 6ыть самоnроrраммируемо. Если она влетс самоnроrраммируемо, то YCTPOCTBO 06Ы4НО нмеет 6лок заrрузки, co держаw,н 06Ы4НО nporpaMMY, Ha3bIBaeMYlO заrРУ34НКОМ nporpaMMbl раскруТКИ, которая не стнрается н не nереnроrраммнруется npH nереnроrраммнровании срлзш-nамяти. БОJlее nодр06но caMonporpaMMHpoBaHHe н заrРУ34НК nporpaMMbI раскрУ1'КИ разбира IOTC в rлаве 10. Однократноnроrраммнруемая naMTb со BCX Т04ек зрени аналоrИ4 но сnnзу, за HCКnlO4eHHeM Toro, 4ТО в ее мнкросхеме нет KBapu.eBoro окошка стнрания, в CHJlY 4ero она не может 6ыть nepenporpaMMHpoBaHa. Она nporpaMMHpyeTc только однн раз. Ta6Jl. 2.1 nepe4HCJleT все нмеlOw,неся в HacTow,ee BpeM YCTpOCTBa ceMe- ства PIC 18 с указаннем 06ъема BHyTpeHHe naMTH, нмеlOw,еrося в Ka>K,lJ,o. 
44 TIpHMeHeHHe MHKpOKOHTpOnnepOB PIC 18 о Период Период Период Период : Период тактовой тактовой тактовой тактовой : тактовой частоты 1 частоты 2 частоты 3 частоты 4 : частоты 5 I , О I , Команда Выполнение  I I О О Команда Выполнение о о о , Команда Выполнение Команда Выполнение Рис. 2.3. Конвеерная 06ра60тка коман,lJ, н НХ BbInOJlHeHHe в МНКрОКОНТрОJlлере. Таблица 2.1. 06ьем naMTH npOrpaMM в YCTPOCTBax ceMeCTBa PIC1,8. КОД издеJlИSl 1220, 1230,2220,4220 1320,1330,2320, 2331,4320,4331,6310,6390,8310,8390 2439,4439 242,248,442,2410,2420,2431,2480,4410,4420,4431,,4480, 6410,6490,8410,8490 2455,2539,4455,4539 252,258,452,458,658,858,2510,2520,2550,2580,4510,4520, 4550,6520,65J10,8520,85J10 2515, 2525, 2585, 4515, 4525, 4585, 6525,6527,6585,65J15,8525, 8527,8585,85J15 2610,2620,2680,4610,4620,4680,66J10, 6620,6621,6622,6680, 8620, 8621, 8622, 8680, 86J .10 6627,66J15,8627,86J15 6720, 6722, 67J10, 8720,8722, 87J10 Объем паиSlти в байтах 4К 8К 12К 16К 24К 32К 48К 64К 96К 128К Примечание: Всем UMpOB 0603Ha4eHMRM rrpeAwecTByeT rrpeMKC PIC18F млм PIC18C; YCTpOCTBa PIC18F MMeT nзw-rrаМRТЬ, а yCTpOCTBa PIC18C MMe OЦHO- кратно rrроrрамммруему rraMRTb (ООО). YCTpOCTBa PIC18C601 м PIC18C801 не MMeT BHYTpeHHe rraMRTM rrporpaMM. DaMRTb nроrрамм aApecyeTcR 4ерез 21-раЗРRАНЫ nроrраммны аАрес, COAepa CR в perMCTpe, который Ha3BaeTCR счетчиком команд. В rnaBe 1 B Y3HanM, 4ТО аАрес rraMRTM в 21 раЗрRА (221) MoeT аАресовать 2М rraMRTM. В ceMeCTBe PIC18 rrpOCTpaHCTBO rraMRTM rrроrрамм Ha4MHaeTCR С аАреса ОхОООООО м rrpOCTMpaeTCR АО OxIFFFFF. DpeAnonoMM,. 4ТО AnR McrrOnb30BaHMR в смстеме вы6рано YCTPOCTBO PIC18F4520. ДaHH MMKpOKOHTponnep ммеет 32К rraMRTM rrроrрамм, rrpM зтом rrep Be 32К rraMRTM rrporpaMM, KOTope HyMepyTcR в 6aTax, Ha4MHaTCR С аАреса ОхОООООО м rrpOCTMpaTCR АО адреса Ox007FFF. Мз rnaBbl 1 вы AOnH rrOMHMTb, 4ТО 4К rraMRTM Tpe6YT Ох1000 R4eeK, cneAOBaTenbHO 06ъем rraMRTM 32К тре6ует 32К  4К  8 MnM Ох8000 R4eeK rraMRTM. 
rnaBa 2. Архнтектура семейства PIC 18 н разрабтка nporpaMM 45 OxlFFFFF внешНSlSl naMSlTb проrpамм внутрисхемная память проrpамм OxOOOO18 вектор низкоrrриоритетноrо п ывания вектор высокоприоритетноro п е ывания вектор сброса ОхООООО8 ОхОООООО Рис. 2.4. Карта nамятн nporpaMM ceMeCTBa PIC18. Рнсунок 2.4 HJlJlIOCTpHpyeT структуру памяти nporpaMM. Некоторым нз 4eeK naM тн nOCTaBJleHbI в соответствне важные AfI снстемы зада4Н. OДHO нз такнх выделенных 4eeK nамятн явлетс Я4ека по адресу ОхОООООО, в KOTOpO расположен адрес Beктo p сброса. Адрес вектора с6роса - это тот адрес, по которому nporpaMMa на4ннает BЫ ПОJlНТЬС после .с6роса. nOCKOJlbКY HMeeTC TOJlbKO 8 6aTOB nамятн Me>K,lJ,y это 4e- KO н адресом вектора BbIcoKonpHopHTeTHoro npepbIBaHH, раСnОJlоженном в 4eKe naMTH по адресу ОхООООО8, то 06Ы4НО BbInOJlHeTC переход на друrylO 4eKY nамти AfI nрОДОJlженн BbInOJlHeHH nporpaMMbI от адреса вектора с6роса. 3тот переход 06Ы4НО BbInOJlHeTC OTpa60TKO в nporpaMMe команды бе3УСJlовноrо перехода GOTO. Адреса векторов npepbIBaHH, которые 6удуТ 06СУ>K,lJ,аться в rJlaBe 6, совместно с npe- pЫBaHHMH, YKa3bIBalOT на ТО4КН входа в nамятн nporpaMM nроцедур 06служнвани HH3 KO н BbIcoKonpHopHTeTHbIx npepbIBaHH. Остальна 4асть naMTH nporpaMM доступна для xpaHeHH nporpaMM, а так>ке стаТН4ескнх ,lJ,анных. СтаТН4ескнмн даннымн BJlIOTC pa3JlH4HbIe та6JlНЦЫ н константы, зна4енне которых не нзменяетс,- Они досryпны ДЛ НСnОJlьзованн nporpaMMaMH. Память данных. naMTb данных - это 06Ы4НО СОЗУ нли СО ЗУ И 3СnnЗУ. Память дан- ных (KOTOPYIO нноrда Ha3bIBalOT реrистровым файлом) nредоставлет место Aflя хране- ння ,lJ,анных, которые H3MeHIOTc по мере BbInOJlHeHH nрнложенн н cTHpalOTc (за НСКnlOченнем 3СnnЗУ) nOCJle OTKJlI04eHH ЭJlектроnнтанн снстемы. AocTYn к памяти данных СОЗУ ocyw,ecTBJleTC 4ерез HCnOJlb30BaHHe 12разрдных адресов, n03ToMY MaKCHManbHЫ 06ъем досrynно naMTH равен 3968 6aT с адресами от ОхООО до OxF7F. 
46 . TIpHMeHeHHe MHKpOKOHTpOnnepOB PIC 18 Память данных СО ЗУ так>ке содержит адреса, которые исnользуютс ДЛ nроrрамми ровани сnеu.нальных CPYHKu.H микроконтроллера. Эти специальные функциональные ре/истры (СФР) расположены в диапазоне адресов nамти от OxF80 до OxFFF или за нимаlOТ верхние 128 6aT пространства nамти данных. Некоторые исполнения микро- контроллеров ИСnОЛЬЗУIOТ доnолнительнуlO naMTb данных, nредназна4енную для раз мещени дополнительных СФР. Аруrие 4еки памяти nporpaMM называются общими функциональными ре/истра ми (ОФР), они pa3Mew,eHbI в диаnаЗ0не адресов от ОхООО до OxF7F. ОФР иноrда также называlOТ Я4еками реrистровоrо срайла. Если МИКРОКОНТРОЛJlер PIC содержнт зсnпзу, то память данных ЭСППЗУ aдpecy ется 4ерез сnеu.иальные функцнонаJlьные реrистры в отдельном адресном npocTpaHcT ве, выделенном 3СnnЗУ. 06ъем 3СnnЗУ оnределется кодом исполнения PIC и имеет диапазон от О 6aT до максимanьноrо КОJlИ4ества, paBHoro 1024 6aT. Соrласно Microchip, 4eKa 3СnnЗУ может nерезаnисыватьс вплоть до oAHoro миллиона раз. Я4екн 3СnnЗУ ДОJlЖНЫ HCnOJlb30BaTbc AfI хранени инсрормации, которая не изме HeTC 04ень 4асто. Казалось 6ы, 4ТО возможность перезаписи миллион раз ячеек ЭСnnЗУ nозволет ИСnОJlЬЗ0вать ero ДЛ ЛlO6ых u.еле, однако не следует забывать, что микроконтроллер может функu.ионировать на 4астоте nopAKa 40 Mru., при зтом за He сколько секунд можно nерезаnисать Я4еку зсnnзу MHoro миллионов раз. В табли u.e 2.2 nepe4HCJleHbI pa3JlH4HbIe YCTpOCTBa ceMeCTBa PIC18 с указанием объема ОЗУ ИJlН 3СnnЗУ, ,lJ,OcrynHoro ДЛ хранения данных в Ka>K,lJ,oM из YCTpOCTBe. Память стека. В AOnOJlHeHHe к naMTH nporpaMM, nамти данных СОЗУ, а так>ке паМ>I т'и ЭСnnЗУ, имеется так>ке не60Jlьша 06ъемом 31 х 21 6ит память СОЗУ, которая назьша eTC памятью стека. naMTb стека, как это 6удет 06CY>K,lJ,aTbC в nоследуlOЩИХ nодраз делах, содержит только адреса возврата из срункu.ий. Разрядность стека равна 21 би там, nOCKOJlbКY он раСС4итан на хранение адресов nамти nporpaMM. Поскольку макси мальны 06ъем nамти nporpaMM равен 2М 6aT, то для доступа к He ну>кно ИСnОJII:>30 вать 21 битны адрес, Т.е. стек должен иметь разрдность в 21 бит. Почему 011 имеет rлу6ину в 31 Я4еку? просто Microchip решнла, 4ТО стек iJlубино в 31 AocTaTOtlHO велик дл обесnе4ения ра60ТЫ большинства nРИJlожени. Е,о,инственный способ ИСПОЛЬ30 вать Я4еку стека заКnlO4аетс в вызове функцин. ЕСJlИ срункu.ия вызывает ApyrylO cpYHK u.ИIO, то две 4еки стека 6удуТ ИСnОJlЬЗ0ваться дл хранени адресов возврата. Для ИСnОJlЬЗ0вання всех 4eeK стека нужно 4тобы rJlу6ина MHoroKpaTHbIx вызовов срункци ,lJ,OCTHrJla 31, 4ТО 6ывает KpaHe редко, eCJlH Bo06w,e 6ывает. Фактически единствеllНЫ CJlY4a nереnОJlнени стека может иметь место TorAa, KorAa в nporpaMMe nрисyrствует оши6ка, nриводяw,а к постоянному ВЫЗ0ВУ Функu.и, возврат из которых не отрабаты BaeTC. Рекурси влется единственно возмо>кно nРИ4ИНО 3Toro типа ошибки. BCJleACTBHe 3Toro npH разра60тке рекурсивных nporpaMM зтому вопросу не06ходимо уделть внимание. Код изделия Таблица 2.2. Память данных СОЗУ и ЭСППЗУ в ра3ЛИ4НЫХ исnолнеНLI1ЯХ YCTPOCTB ceMeCTBa 18F Объем ОЗУ в Объем ЭСППЗУ в байтах байтах 1230,1330 1320 2220,2320,4220,4320 2439,4439 2410,4410,6310,6390, 6410,6490, 8310, 8390,8410,8490 242,248,442,448,2331,2420, 2431, 2480, 4331,4420,4431,4480 256 256 512 640 768 128 256 256 256 О 768 256 
lnaBa 2. Архнтектура семейства PIC 18 н разработка проrpамм 47 Код изделия Объем ОЗУ в Объем ЭСППЗУ в байтах байтах 2539,4539 2510,4510 252, 258, 452, 458, 601, 658,801, 858,2520, 2580,4520, 4580 65J10,65J15,66J10,85J10,85J15,86J10 2455, 2550,4455,4550 6520,8520 2585,2680,4585,4680,6585,6680,8585,8680 6525,6620,6621,6720,8525,8620, 8621, 8720 2515, 2610,4515,4610,66J15,67J10,86J15, 87J10 2575,2620,4525,4620,6527,6622,6627, 6722, 8527, 8622,8627,8722 1408 1536 1536 256 О 256 2048 2048 2048 3328 3840 3968 3968 о 256 1024 1024 1024 О 1024 Примечание: Нм ОАНО М3 McrrOnHeHM 18С не COAepMT ЭСDDЗУ. Указанное KOnM4ecTBO R4eeK не BKnqaeT пространство сфр Порты BBoдaBЫBoдa. Порты ввода-вывода HCnOJlb3YIOTC AfI 06ecne4eHH взаимо ,lJ,eCTBH мнкроnроцессора с BHeWHHM мнром. Ka>KДЫ порт ввода-вывода 06Ы4НО нмеет разрдность в 8 6нтов Н может 6ыть заnроrраммнрован как на ввод, так н на BЫ вод ннформацнн. KOJlH4eCTBo 6нтов и портов BBO,lJ,aBЫBoдa КОJlе6лется AflЯ ра3ЛИ4НЫХ YC1POCTB ceMeCTBa PIC18 н в o6w,eM СЛУ4ае оnределетс КОЛИ4еством выводов инте rpanbHo схемы. Ta6JlHu.a 2.3 nере4нслет КОЛН4ество выводов BBoдaBЫBoдa, nрисyr- CTBYIOW,HX в ра3JlИ4НЫХ YCTpOCTBax ceMeCTBa PIC18. В дaHHO та6лнu.е указано коли 4ество 6нтов портов, однако npH nporpaMMHpoBaHHH МНКРОКОНТРОJlлера порты орrани- 3YIOTC как порт А AflЯ первых восьмн 6нтов, порт В AfI СJlедуlOЩИХ восьмн 6итов н так ,lJ,anее. HanpHMep, 18F1320 нмеет TOJlbKO порты А н В. nроrраммнрование портов ввода- вывода BbInOJlHeTC 4ерез сnецнanьные функцнонanьные реrистры, pa3Mew,eHHbIe на вершнне пространства nамятн данных по адресам от ОхР80 до OxFFF. Структура BBoдaBЫBO,lJ,a AfI pa3JlH4HbIX YCTPOCTB рассматриваемоrо ceMeCTBa КОJlе6летс в WHpOKHX npeAeJlax, однако все YCTpOCTBa HMelOT по KpaHe мере порт А н порт В. В первых HeCKOJlbKHX rJlaBaX это KHHrH npHBeAeHbI при меры nporpaMM, ис- nOJlb3YIOW,HX порт А н В. npH npoeeAeHHH эксnернментов с 6аЗ0ВЫМН cpYHKЦHMH ввода- вывода зтнх двух портов peKOMeHдyeTC HCnOJlb30BaTb peanbHYIO naHeJlb разра60Т4ика. То, какую снстему разра60ТКН nporpaMM вы6рать npH nроведенни экспериментов, дол жен решнть npenoAaBaTeJlb. Может 6ыть ИСnОЛЬЗ0вана Л106а нз снстем разра60ТКИ, npeAflaraeMbIX Microchip нлн Л1060 HHO срирмо. В первых rлавах 3TO кннrи npeAno Jlаrается, 4ТО НСnОJlьзуется порт BBO,lJ,aBЫBoдa, оснаw,енный, по KpaHe мере, 4етырь- мя светоднодамн н HeCKOJlbKHMH nереKJl104атеJlЯМН. В nОСJlедуlOЩИХ rлавах 6YAyr ис CJleAOBaTbC AOnOJlHHTeJlbHbIe MOAYJlH BBoдaBЫBoдa как в составе PIC, так и в составе нных yCTpOCTB. Таблица 2.3. nOAКnlO4eHHe портов BBoдaBЫBoдa в pa3JlH4HbIX YCTpOCTBax ceMeCTBa PIC18 Код устройства 1220,1230,1320,1330 2439,2539 258,2331,2431 242,248,252,258,1320,2220 601 С 4439,4539 442, 448, 452, 458, 4220, 4320,4331,4420,4431,4455,4550 Биты портов BBoдaBывoдa 16 21 22 23 31 32 34 
48 ITpHMeHeHHe MHKpOKOHTpOnnepOB PIC18 Код устройства Биты портов вводавьшода 4220,4320,4410,4480,4510,4515,4520,4525,4580,4585,4 36 610,4620, 4680 801 42 6390,6490, 65J10, 65J15, 66J10, 66J15, 67J10 50 658,6520,6620,6720 52 6525,6585,6621,6680 53 6310,6410,6527,6622,6627,6722 54 8390,8490,85J10,86J10,86J15 66 858,8520,8620,8720 68 8525,8585,8621,8680 69 8310,8410,8527,85J15,8622,8627,87J10 70 8722 72 Таблица 2.4. TaMepы в YCTpOCTBax ceMeCTBa PIC18 Код изделия 8БИТНЪlе 16Битныe таймеры 1 2 3 3 С242, С252, С442, С452 1230,1330 2439,2539,4439,4539 242F, 248,252F, 258,448, 452F, 458, 601, 658, 801,858,1220, 1320,2220,2320,2331,2410,2420,2431,2455,2480,2510, 2515,2520,2525,2550,2580,2610,2620,2680,4220,4320, 4331,4410,4420,4431,4455,4480,4510,4515,4520,4525, 4550,4580,4585,4610,4620,4680,6310, 6390, 6410, 6490, 8310,8390,8410,8490 6520,6525,6527,6585, 65J10, 65J15, 662'0,6621,6622,6627, 2 6680, 66J10, 66J15, 6720, 6722,67J10, 8520, 8525,8527,8585, 85J10,85J15, 8620, 8621, 8622, 8627, 8680, 86J10, 86J15, 8720, 8722,87J10 таймеры 3 О О 1 3 V1СnОЛЬЗ0ванне порта AflЯ npoCToro BBoдaBЫBoдa явлется весьма леrко зада- 4e. Реrистр TRISA оnредеJlяет HanpaBJleHHe (ввод илн вывод) AfI Ka)l(,lJ,Oro WTbIpbKa порта А. (TRISA nредназна4ен AflЯ порта А, TRISB - AflЯ порта В, н так далее). Реrистр TRIS порта - это perHCTp наnраВJlення nepeMew,eHH данных порта. После Toro как мик pOKOHTpOJlJlep с6расывается, perHCTpbI TRIS YCTaHaBJlHBaIOTC на onepau.HIO вывода. 3то заw,нw,ает схемы, nОДКnlO4енные к выводам порта ввода-вывода. ЛоrИ4ески ноль 6ита perHCTpa TRISA YCTaHaBJlHBaeT соответствуlOw,и 6нт порта А на вывод ннформа цин, а JlOrH4eCKa еднннца в 6нте yCTaHaBJlHBaeT cooTBeTCTBYIOW,H 6нт порта А на ввод данных. HanpHMep, AfI nporpaMMHpoBaHH 6нтов порта А от О до 3 (этн 6нты 0603Ha4a IOTC от ААО дО АА3) в ка4естве выходных 6нтов, а 6нтов порта А от 4 до 7 (зтн 6нты 060зна4аlOТСЯ от АА4 дО АА7) в ка4естве входных 6итов, в perHCTp TRISA не06ходимо заrрузить OxFO. Как только направление nеремеw,ення данных ДЛ 6итов порта будет запроrрам мировано, досryn к зтому nopry можно осуw,ествлть по ero LI1мени. Реrистр PORTA ис nОJlьзуетс AfI орrаннзацнн ннформаu.ионноrо 06мена с портом А. Например, если в реrистр РОАТА заnнсано значенне Ох28 wтырьки PORTA (если они запроrраммированы как выходные) 6у,lJ,уТ npHHHMaTb данные. АналоrН4НЫМ 06раЗ0М, дл С4итывания данных СО WTbIPbKOB порта А ВЫnОJlняетс С4нтывание реrистра РОАТА. Также явлется воз можным nОJlУ4ИТЬ досryn к одному WTbIPbKY порта А, как это описано в nоследуlOw,их nодразделах, HCnOJlb3Y днректнву PORTAbits языка С. 
rnaBa 2. Архнтектура семейства PIC18 н разработка проrpамм 49 Таймеры. TaMepы nредстаВJlIOТ c060 nporpaMMHpyeMbIe МОДУJlН С4еТ4НКОВ. TaMep мо>кет nОДС4итывать с06ытня н импульсы TaKTOBO 4астоты, он так>ке может ВЫПОЛНЯТI.> целы ряд сервисных функu.и AflЯ nporpaMM. TaMepы 4асто nporpaMMHpYIOTC на OT ра60ТКУ TaMayTa по npOXO>K,lJ,eHHH оnредеJlенноrо KOJlH4eCTBa тактовых импульсов. РаЗЛИ4ные YCTpOCTBa ceMeCTBa PIC HMelOT от двух до nTH TaMepOB. В та6л. 2.4 nepe 4ислены pa3JlH4HbIe YCTpOCTBa ceMeCTBa PIC 18 С указаннем КОJlИ4ества нмеlOw,ихс в НИХ таймеров. TaMepы HCnOJlb3YIOTC в мнкроnроцессорах AflЯ rенерацнн ра3ЛИ4НЫХ с06ыти,  от прерыванн с nеРНОДИ4еско 4aCTOTO до реаJlизаu.нн С4еТ4НКОВ реальноrо времени при определении зна4енн 4астоты HJlH С4ете c06ЫTH. TaMepы также ИСnОЛЬЗУlOтся для rенерировани сиrнаJlОВ AfI друrих YCTPOCTB в системе. БОJlее nодро6но таймеры будут рассматриваться nозже при 06су>кдении BHyrpeHHero ввода-вывода и ero исполь З0вани в раЗЛИ41-1ЫХ nрименених. Друrие внутренние устройства BBoдaBЫBoдa. Pa3JlH4HbIe модели YCTPOCTB семей ства PIC 18 так>ке содержат ДРуrне YCTpOCTBa BBoдaBЫBoдa, которые nроrраммируlOТ ся через сnецнаJlьные функцнонanьные реrистры (СФР). 3ти друrие YCTpOCTBa MorYT BКnlO4aTb анanоrо-цнфровые npe06pa30BaTeJlH (АЦn), wнротноимпульсные (ШV1М) модуляторы, а так>ке nОСJlедоватеJlьные коммуннкацнонные порты pдa ДРуrнх типов. nOCKOJlbKY нам ew,e nредстонт рассмотрение nporpaMMHpoBaHH PIC 18, зти ВНуТренние YCTpOCTBa BBoдaBЫBoдa пока намн ew,e не рассматрнвanись, однако они будyr nод р06но рассмотрены С ИЛJllOстрацне на примерах nозже в это KHHre. В 06w,eM CJlY4ae порты BBoдaBЫBoдa nporpaMMHpYIOTC 4ерез реrистр TRIS. Pe rистр TRIS оnределет HanpaBJleHHe штырьков ввода-ВЫВО,lJ,а (ввод НJlИ вывод) ДЛ дан- Horo порта. Еслн 6нт perHCTpa TRIS YCTaHOBJleH в состоние JlOrH4eCKoro HYJl, то COOT ветствуlOw,и 6нт порта nporpaMMHpyeTc как BЫXOДHO штырек. Если 6ит реrистра TRIS установлен в COCTOHHe JlOrH4eCKo единнu.ы, то соответствуlOw,и 6ит порта nporpaM мируетс как BXOДHO штырек. Ka)l(,lJ,bI порт нмеет CBO реrистр TRIS. Они 060значаlOТ- ся как TRISA AflЯ порта А, TRISB AfI порта В, и так даJlее. Аанные С4итываlOТС нли за- nисываlOТСЯ 4ерез perHCTp РОАТ. npH зтом РОАТА НСnОJlьзуетс AflЯ порта А, РОАТВ исnользуетс AfI порта В н так даJlее. Для вы60ра aHanoroBoro нли цисрровоrо режима ра60ТЫ WTbIpbKa AflЯ аналоrо-u.ифровоrо npe06pa30BaTeJl нсnользуется реrистр ADCON 1, сnецнфнцнруlOw,н, какне WTblPbKH порта А н порта В 6удуТ цнфровыми или аналоrовымн. ПО YMOJl4aHHIO YCTaHaBJlHBaeTC aHanoroBbI режнм работы. 2.2. Модель проrраммирования Перед nроrраммнрованием МИКрОКОНТрОJlJlера не06ходимо 0знакомиться с Ha 60РОМ BHyrpeHHHx фаJlОВЫХ perHcTpoB, досrynных AfI nроrраммиста. Этот набор pe rHCTpoB ynpaBJleT MHKpOKOHTpOJlJlepoM. МНКРОКОНТРОJlлер  это 86HTHoe YCTPOCTBO, поэтому MHorHe perHCTpbl имеlOТ разрдность, paBHYIO 8 JlH60 KpaTHYIO 8. Рис. 2.5 дe монстрнрует 060бw,еннуlO модеJlЬ nроrраммнровання MHKpOKOHTpOJlJlepOB ceMeCTBa PIC18. На нем нз06ражены perHCTpbl, HaH60Jlee 4асто НСnОJlьзуемые npH nроrраммиро ванин 60Jlьшннства команд. На нем не nрнведены все сnецнаJlьные функu.иональные реrистры, которые ocyw,eCTBJlIOT ynpaBJleHHe yCTpOCTBaMH BBoдaBЫBoдa н срункu.и- ми ЦN. 3тн OCTHaJlbHble сnецнаJlьные функu.нонanьные perHCTpbl 6удуТ 06CY>K,lJ,aTbC, Hapдy С YCTpOCTBaMH BBoдaBЫBoдa nозднее в nОСJlедуlOw,нх rJlaBax. 
50 ITpHMcHeHHe MHKpOKOHTpOnnepOB PIC 18 Реrистровый файл Область реrистровоrо файла или память данных, размеw,енная во внутрисхем ном СО зу, представляет собо на60Р 86L11THbIX реrистров 06w,ero назна4ения (РОН), ИСllOльзуемых для хранени динаМИ4еских данных. Как у>ке отмечал ось ранее, различ- ные модели YCTPOCTB ceMeCTBa PIC18 содер>кат раЗЛН4НЫ объем nамти данных, при этом все модели содер>кат, по KpaHe мере, адреса 06w,ero реrистровоrо срала от ОхООО до Ox07F, nлlOС сnеu.иальные срункu.иональные реrистры от OxF80 OxFPP илн 256 байт созу. OxF7F  OxF7E OxF7D   ОхОО4 ОхОО3 ОхОО2 ОхОО! ОхООО реrистровый файл (память данных) OxFEO I OxFE8 I ОХРР4 1 Оxf'f'З ОхРЕА I OxFE9 ОХРЕ2 1 ОхРЕ1 OXFDA I OxFD9 OxFD8 1 реrистр выбора банка памяти аккумулятор старшая часть произведения младшая часть rrpоизвеДения старшая часть реrистра выбора файла младшая часть реrистра выбора файла старшая часть реrистра выбора файла младшая часть реrистра выбора файла основные специальные функциональные реrистры старшая часть реrистра выбора файла младшая часть реrистра выбора файла I реrистр состояния счетчик команд \.. у 8 битов ) \ Примечание Примечание: счетчик команд является внутренним физическим 21-битным реrистром, который не может адресоваться. Рис. 2.5. Обобw,енная модель nроrpаммировани микроконтроллеров ceMeCTBa PIC18 
rnaBa 2. Архнтектура семейства PIC 18 н разработка проrpамм 51 Доступ к реrистровому срайлу осуw,ествлетс 4ерез 12разрядный адрес, 4 старшие разряды KOToporo содержат а,о,рес 6анка памти. Ka)l(,lJ,bI банк памяти данных содержит 256 байтов памти данных. Банк данных О (00002) содержит реrистры от ОхООО до OxOFF, 6анк данных 1 (0001;) СО,lJ,ержит реrистры от Ох100 до OxlFF и Т.д. Во мноrих СЛУ4ах при проrраммировании используlOТС а,о,реса от ОхООО до Ox07F 6анка AaHllbIX О и адреса от OxF80 .0.0 OxPFF 6анка ,lJ,анных 15. 3ти 06ласти памти вместе Ha 3bIBalOTc банком доступа. Банк ,lJ,оступа a,o,pecyeTC 6ез использовани реrистра 6анка данных, n03ToMY доступ к нему из nporpaMMbI осуw,ествлетс леr4е и 60лее зффектив- но. (Названное разделение 6анка ,lJ,оступа может изментьс в различных УСТРОЙСТl.зах семейства PIC18. Так, например, в PIC 18F2480, используlOТС адреса от ОхОО до Ox5F И3 банка данных О и адреса от OxF60 до OxFFP Д1l специальных функциональных реrи стров.) Банк доступа aдpecyeTC с использованием oAHoro 8разрдноrо а,о,реса. Д1I доступа к 4ейкам памти в ОЗУ данных вне 6анка ,lJ,оступа используетс ком6инация 8разрдноrо а,о,реса и 4-раЗР,lJ,ноrо реrистра вы60ра 6анка (РВБ). Например, Д1l адресации 4еки Ох432, а,lJ,рес 6анка 6У,lJ,ет равен 4, а 8-разрдный а,о,рес памяти 6удет равен Ох32. Бит коман,lJ,Ы, KOTOPЫ называетс абитом, вы6ирает 6анк доступа (KorAa а = О) или же 6анк, указываемы реrистром вы60ра 6анка (KorAa а = 1). Как, например, осуществить ,lJ,ocтyn к 4eKe Ох092? Она нахо,lJ,ИТС вне 6анка ,lJ,оступа, позтому единст- BeHHЫ cnoc06 а,lJ,ресовать 4eкy Ох092 заКЛlO4аетс в а,о,ресации ее при реrистре BЫ 60ра 6анка, установленном в О и 8-разр,lJ,НОМ а,о,ресе Ох92 при а-6ите, установленном в 1. Рисунок 2.6 ,lJ,емонстрирует а,lJ,ресациlO 6анка ,lJ,ocтyna и 6анка ,lJ,анных. Специальные функциональные реrистры Специальные функциональные реrистры (СФР) исnользуlOТС Д1lя выполнени цеnоrо pдa специальных за,lJ,а4 в микроконтроллере. Реrистр вы60ра 6анка влетс одним из 3ТИХ специальных срункu.иональных реrистров, при зтом остальные специаль ные функциональные реrистры осуw,ествлIOТ ,lJ,ocтyn к nамти непрмо, coxpaH про изве,lJ,ение после умножени, указыва состоние ВЫХО,lJ,а ко ман,lJ,Ы, аккумулиру ре- зультаты арисрмеТИ4еских и JlоrИ4еских оnераци и a,lJ,pecy 4ейку памяти в проrрам- ме. Все специальные срункциональные размеw,аIOТС на верwине памти данных в 6aH ке доступа. Все специальные срункu.иональные реrистры имеlOТ имена и адреса, - и то и Apyroe может 6ыть использовано Д1l ,lJ,ocтyna к ним. Аккумулятор (WREG). Аккумулятор или, как он 4асто называетс, рабочий реrистр (реrистр W или WREG) nре,lJ,ставлет с060Й 8-разрдный реrистр, доступ к которому осуw,ествлIOТ мноrие коман,lJ,Ы. BepOTHee Bcero, 4ТО 3ТОТ реrистр Ha3ЫBaeTC аккуму- лтором всле,lJ,ствие Toro, 4ТО он пре,lJ,стаВJlет c060 место, в котором аккумулируlOТС результаты мноrих коман,lJ,. Больwинство ЦN СО,lJ,ер>кат аккумултор в ка4естве rлашюrо pa604ero реrистра. В ceMeCTBe PIC18 ра604И реrистр (WREG) размеw,ен в 06ласти спеu.иаJlЬНЫХ срункu.ионаJlЬНЫХ реrистров по а,о,ресу OxFE8. XOT 3ТОМУ реrистру и при свое н а,lJ,рес, мноrие коман,lJ,Ы осуw,ествлIOТ ,lJ,ocтyn к нему 6ез указани а,lJ,реса  по имени или HeBHO в рамках ВЫnОJlнени коман.цы. 3та HeBHa срорма а,о,ресации и есть то, П04ему WREG называетс ра604ИМ реrистром ИJlИ aKКYMYJlTOpOM. Литеральный или непосре,lJ,ственны а,lJ,рес коман,lJ, адресует WREG как 4асть коман,lJ,Ы 6ез не06ходимости специсрицировани ero а,lJ,реса. Мноrие ,lJ,руrие команды так>ке исnользуlOТ реrистр W. 
52 Прнмененне MHKpOKOHTpOnnepOB PIC18 (а) есnи а-бит == О (банк доступа) (ь) есnи абит == 1 (выбор банка) OxFFF ОхР80 Ox07F 8р азрядный а дрес Oxl2 12разрядный адрес perHcTp выбора банка 8разрядный адрес Рис. 2.6. Вы60Р 6анка реrистровоrо срайла Ox012 ОхООО OxFFF ОхЗ2F ОхООО 
rnaBa 2. Архнтектура семейства PIC18 н разработка проrpамм 53 Реrистр выбора банка (BSR). Реrистр вы60ра 6анка (размерность KOToporo равна 4 6ита) ПЛIOС 86итный а,lJ,рес 06ъединIOТСЯ с целыо срормировани 12разрдноrо aд реса памти ,lJ,анных, KOr,lJ,a а-6ит команды нахо,lJ,ИТС в состонии лоrической еДИIIИЦЫ, как 3ТО ИJlЛlOстрируетс на рис. 2.6. 3то nO.3BOJleT осуw,ествлть ,lJ,оступ к ЛlO60МУ реrи- стру в ЛlO60М 6анке nамти ,lJ,анных. ЕСJlИ а-6ит коман,lJ,Ы нахо,lJ,ИТС в СОСТОЯIIИИ лоrиче- cKoro нул, то ,lJ,ocтyn 6У,lJ,ет оrраНИ4ен 6анком ,lJ,ocтyna, который 06Ы41-10 составлется из 4eeK с а,lJ,ресами от ОхООО,lJ,О Ox07F 4eeK от OxF80,lJ,O OxPPF. 8разрядные адреса от ОхОО,lJ,О Ox7F вы6ираlOТ 4еки nамти ,lJ,анных от ОхООО,lJ,О Ox07F, 8разрдные aдpe са от Ох80 .0.0 OxFF вы6ираlOТ 4еки памтн ,lJ,анных от OxF80 .0.0 OxFFF 6анка доступа. 3то описание применимо к стаН,lJ,артному на60РУ ко ман,lJ,. (Если вы6ран расwиренный на60Р команд, 6аllКИ и а6ит не срункu.ИОНИРУIOТ описанным 06разом. Подраздел rла вы 1 О детально описывает расwиренный на60Р ко ман,lJ,. Ао 3Toro момента в тексте дан- ной книrи преДПОllаrаетс, 4ТО ИСПОJlьзуетс CTaHдapTHЫ на60Р команд.) Смотрите рис. 2.7 для описани 6итовой структуры n06атно-ориентированных команд и разме- w,ени а6ита. Также 06ратите внимание на то, 4ТО ,lJ,руrой 6нт, называемый d-6итом или 6итом а,lJ,ресата, вы6ирает, влетс JlИ а,lJ,ресатом коман,lJ,Ы 8разрдный аАрес (KOr,lJ,a d = 1) или реrистр WREG (KOr,lJ,a d = О). 15 10 9 8 7 о код операции 8разрядный адрес памяти данных а-бит а=О  банк доступа а= 1 - использование реrистра выбора банка d-бит d= 1 - адрес памяти данных Рис. 2.7. АВОИ4на 6итова структура коман,lJ,Ы 6aTOBO операции, ИЛЛIOСТРИРУIOw,а месторасположение а6ита. Пример 2.1 ИЛJllOстрирует nepBYIO KOPOTKYIO nосле,lJ,оватеiJьность команд на Я3ЫКС Ассем6лера PIC, которые CKJla,D,bIBaIOT 6 и 2 и coxpaHIOT сумму в реrистре данных 6анка ,lJ,ocтyna по а,lJ,ресу ОхООО. Вспомните, 4ТО зта >ке за,lJ,а4а у>ке рассматривалась в rлаве 1. Как 3ТО BbInOJlHeTc? Во-первых, литераJlьна комаН,lJ,а (MOVLW) помеw,ает Ох06 в WREG. КомаН,lJ,а MOV на самом ,lJ,eJle НИ4еrо не nepeMew,aeT. 3тот сракт nРИВО,lJ,ил в за MeWaTeJlbCTBO на4инаlOw,их nроrраммистов на nрот>кенни мноrих лет. КомаН,lJ,а MOV выполнет KOnV1POBAHV1E. MOV копирует 6 в реrистр W. Буква L в комаН,lJ,е указывает на литерал, а 6уква W указывает реrистр WREG. Сле,lJ,овательно, MOVLW копирует лите- ральное значение в реrистр W. Литеральные команды ИСnОЛЬЗУIOТС TorAa, KorAa про- rpaMMe не06ходима константа известноrо зна4ени. BTopa команда вляетс друrой 
54 TIpHMeHeHHe MHKpOKOHTpOnnepOB PIC 18 литерально командой. Команда ADDLW д06авляет Ох02 (указываетс в команде) к зна- чению Ох06 во WREG с целыо формнрованн суммы Ох08 в perHcTpe W. (06ратите вни мание на то, 4ТО сумма аккумулируется в аккумулторе нли perHcTpe W). V1, наконец, побайтноориентнрованна команда тove (MOVWF) nepeHocHT результат нз perHcTpa W в реrистр памтн данных ОхООО. Буква F в команде MOVWP 060зна4ает 4ейку perHcTpo- Boro файла. 3то 0зна4ает, 4ТО MOVWF KOnHpyeT содержнмое WREG в чеку реrистро- Boro файла, в данном СЛУ4ае 4ейку с адресом ОхОО. Q6paTHTe вниманне на то, что по- сле команды MOVWF указываlOТС два 4нсла. Первое  зто 4ейка perHcTpoBoro срала, а BTopa  а-бит (в данном npHMepe  О, в снлу 4e'ro aдpecyeTC 6анк доступа). В качест- ве альтернативы, может исnользоватьс кnючевое слово ACCESS (пншетс заrлавными буквами) вместо О ДЛ BToporo параметра, как, HanpHMep: MOVWF ОхОО, ACCESS. 3та запись ОТ4етлнво 60лее 4нта6ельна, однако тре6ует 60nьшеrо 06ъема ввода с клавиа туры, в силу 4ero мноrие nporpaMMHcTbI не BBOДT слово ACCESS в проrрамму, а просro BBOДT ноль. Пример 2.1 MOVLW ОхОб ADDLW Ох02 MOVWF ОхОО, О или ;nOMeaeT ОхОб в W ;A06aBnReT Ох02 АО W ;KonMpyeT W AnR AocTyna к perMCTpy 6анка ОхОО APyraR BepCMR С MCnOnb30BaHMeM KnqeBOrO CnOBa ACCESS: MOVLW ОхОб nOMeaeT ОхОб в W ADDLW Ох02 A06aBnReT Ох02 АО W MOVWF ОхОО, ACCESS; KOnMpyeT W AnR AocTyna к perMCTpy 6анка ОхОО Код операции  3ТО код, который ннструктнрует мнкроконтроллер выnолннть Ka кую-то операциlO. В прнмере 2.1, лнтеральные данные Ох06 nOMew,aIOTc во WREG KO дОМ оnерацнн MOVLW. Литеральные данные называlOТС операндом. Операнд нсnоnьзуетс в COOTBeT ствии с кодом оnерацнн. Команда нмеет TOnbKO О,lJ,НН код onepau.HH, однако может как не иметь операнда, так н нметь столько операндов, сколько Tpe6yeTC командой. Предположим, 4ТО НУ>КНО выnолннть ту же оnерацню, 4ТО н в npHMepe 2.1, однако вместо помеw,ени результата в perHcTp ,lJ,анных ОхООО, результат должен 6ыть поме щен в реrистр данных Ох200. А,о,рес Ох200 HaXOДHTC в 6анке 2 naMTH данных. Команд- Ha последовательность, nрнведенна в npHMepe 2.2, выnолнет 3ТУ оnерацнlO посред ством LI1СnОnЬЗ0вани perHcTpa вы60ра 6анка (РВБ) ДЛ адресации 6анка командой MOVLB (перемеw,ение лнтерала в РВБ). 06ратнте вннманне, как второй операllД (a бит) команды MOVWP 060зна4ает perHCTp вы60ра 6анка ДЛ команды вместо 6анка доступа. Вследствие Toro, 4ТО команда 06Ы4НО (по УМОЛ4аннIO) nOMew,aeT данные в чеку 6анка данных, 1 в команде MOVWF ОхОО может onycKaTbc. В ка4естве альтерна- тивы 1 при доступе к 6анку данных может 6ыть НСnОJlьзовано КnlO4eBoe слово BANKED. Все три версин nporpaMMbI pewalOT О,lJ,ну н ту же зада4У. Пример 2.2 MOVLW ОхОб ADDLW Ох02 MOVLB 2 MOVWF ОхОО, 1 или MOVLW ОхОб ;nOMeaeT ОхОб в W ;A06aBnReT Ох02 к W ;заrруает BSR 6анком 2 ;KonMpyeT W в perMCTp AaHHX ОхОО ;6анка 2 MnM аАресует Ох200 MCnOnb3YR KnqeBOe CnOBO BANKED: ;nOMeaeT ОхОб в W 
fnaBa 2. Архнтектура семейства PIC18 н разработка проrpамм 55 ADDLW Ох02 ; A06aBnReT Ох02 к W MOVLB 2 ,заrруает BSR 6анком 2 MOVLF ОхОО, BANKED ;KonMpyeT W в perMCTp AaHHX ОхОО ;6анка 2 MnM аАресует Ох200 МЛИ 6ез указаНМR 6анка MOVLW ОхОб ;nOMeaeT ОхОб в W ADDLW Ох02 ; A06aBnReT Ох02 к W MOVLB 2 ;заrруает BSR 6анком 2 MOVWF ОхОО ;KonMpyeT W to perMcTp AaHHX ОхОО ;6анка 2 MnM аАресует Ох200 в npeAbIAyw,eM подраздеnе 6bInH нзложены вводные CBeдeHH о npoCToM BBoдe выводе. nредnоложнм, 4ТО в HaweM расnорженнн HMeeTC снстема разра60ТКLI1, KOTO pa нмеет два светоднода, nOAКnlO4eHHbIe к 6нтам О н 1 порта А. (3то WTbIPbKLI1 ААО и АА 1 .) 3ада4а заКnlO4аетс в том, 4т06ы nOMeCTHTb О в 6нт О Н 1 в 6нт 1 . 3то BbInonHeTC посредством nporpaMMHpoBaHH perHCTpa ADCON1 на u.ифровые WTbIPbKH, в реrистре TRISA устанавлнваlOТС HYnH в младwнх разрдах О н 1, а затем nepeAaeTc Ох02 в ре- rHCTp РОАТА. npHMep 2.3 показывает cooTBeTCTBYIOW,YIO nоследоватеnьность команд. Дл команды MOVWF 6нт 6анка доступа не тре6уется npH нсnоnьзованин поимеНОl3ан Horo сnеu.нальноrо Функu.нональноrо perHCTpa  TaKoro как TRISA нnи РОАТА. V1M ПО именованноrо perHCTpa должно заnнсыватьс заrлавнымн 6уквами. Пример 2.3 MOVLW Ox7F MOVWF ADCON1 MOVLW ОхОО MOVWF TRISA MOVLW Ох02 MOVWF PORTA ;B6MpaeT AnR портов все UMpOBble штрькм ;nOMeaeT ОхОО в perMcTp наnравленмя порта l\ ;AnR B60pa onepaUMM BBOAa ; nOMeaeT Ох02 в порт А Реrистры произведения. Реrистры riроизведения содержат резуш)тат или IlрОИЗl3е денне после выполненн команды умноженн. Дл nРОН3l3едсни ну>кеll специальны perLl1CTp, н60 nронзведение BcerAa нмеет вдвое 60nьше раЗРАОI3, чем операнды. 3то сnраведлнво даже ДЛ деСТН4НОЙ снстемы  HanpLl1Mep, KorAa 4ИСЛО 5 умно>кается на 5. Резуnьтат 25 нмеет вдвое 60льwе разрдов, 4ем 5. Команда MULLW умножает реrистр W на лнтеральное зна4енне. Поскольку зто 86нтный мнкроконтроллер н пронзведение  ВОСЬМLI1разрдное, то результат 6удет нметь 16 разрдов н 6удет сохранен в perHCTpax PRODL н РАОDН. PerHCTp PRODL храннт младwне 8 6нтов результата (L озна4ает "Iow" (младwне)), а perHCTp РАОDН храннт cTapwHe 8 6нтов результата (Н озна4ает "high" (cTapwHe)). YnoMHyTbIe 4нсла BcerAa 6удуТ 6еззнаковымн, потому 4ТО в на60ре команд мнкроконтроллера ОТСуТствует команда YMHO>KeHH 4нсел семейство знаком. npHMep 2.4 показывает то, как 3 на 1 00 дeCTH4Hoe н как nронзведение coxpaH eTC по адресам Ох010 н Ох011. AeCTH4Hыe 4Hcna в nporpaMMax на Ассем6лерс 060 зна4аlOТС тем, 4ТО нм npeAwecTByeT Т04ка. 06ратнте вннманне на то, что ре3УЛL)тат coxpaHeTC с нсnользованнем формата с 06ратным nopAKoM 6айтов, KorAa младшая 4асть nронзве,lJ,енн сохраняетс в perHCTpe данных Ох01 О, а старша 4асть произведе HH  В perHCTpe данных Ох011. Команды MOVFF KOnHpYIOT результат в LleKH с aдpeca мн Ох01 О н Ох011. Команда MOVFF (nеремещенне perHCTpoBoro файла в реrнстроl3ЫЙ файл) допускает KOnHpoBaHHe лю60rо perHCTpa данных в лю60Й perHCTp данных. Ko манда MOVFF не нсnользует раз6L11енне naMTH на 6анкн. nocne выпоnнени дaHHO nporpaMMbI perHCTp данных Ох010 6удет СО,lJ,ержать Ох2С, а perHcTp данных Ох011 будет содержать Ох01. Ох12С равно 30010' Но rAe же а6ит? Команда MOVFF ЯI3Jlется 
56 TIpHMeHeHHe MHKpOKOHTpOnnepOB PIC18 32-6итовой KOMaHДO, KOTopa не нмеет a6HTa. Вместо 3Toro, она нмеет 6нтовое IlpO странство, достаТ04ное ДЛ xpaHeHH как адресансточннка, так н адресапрнемннка в 32 6L11Tax. А,о,рес нмеет 12 разрдов, n03ToMY только 24 6нта нз 32 НСnОЛЬЗУIOТСЯ ДЛ XpalleHLI1 адресов; oCTanbHbIe 6нты НСnОЛЬЗУlOтс ДЛ xpaHeHH 4HcneHHoro кода опера ции команды. Пример 2.4 MOVLW 3 MULLW .100 MOVFF PRODL, ОхО10 MOVFF PRODH, ОхО11 ;noMeaeT 3 в W ,YMHoaeT на 100 AeCRTMqHOe ;coxpaHReT мnaAWY qaCTb npoM3BeAeHMR в ОхО10 ; coxpaHReT cTapwy qaCTb npOM3BeAeHMR в ОхО11 Реrистры выбора файла (FSR). Реrистры выбора файла используются для косвенной адресации или индексирования naMTH данных. Устройства семейства PIC18 содержат трн perHcTpa вы60ра фала (FSRO, FSR1 н FSR2), ка)l(,lJ,ЫЙ нз которых содержнт 12разрдный адрес nамятн данных. д.л нллюстраu.нн Toro, как ра60тают perHcTpbI FSR, смотрнте npHMep 2.5, в котором ВЫnОЛНIOТСЯ те же onepau.HH, 4ТО н в прнмере 2.4. Разннu.а состонт в том, 4ТО В прнмере 2.5 perHCTp FSRO нндекснрует (адресует) perH- стры данных Ох10 н Ох11. Команда LFSR О, Ох10 заrРV>Kает PSRO зна4еннем Ох10. Bc- кнй раз, KorAa perHcTp вы60ра файла адресует naMTb, операнды INOFO, INOF1 HnLl1 INOF2 НСnОЛЬ3УlOтс в nporpaMMe ДЛ сnеu.нФнu.нрованн косвенных адресов О, 1 HnH 2. (INOFO нсnользует FSRO, INDF1 нспользует FSR1 а INDF2 нсnользует FSR2). КnlOчевое CnOBO POSTINCO (nocTHHKpeMeHTHpoBaHHe FSRO) в команде MOVFP д06авлет eДHHH u.y к FSRO nOCJle ero нсnользованн ДЛ адресацни 4ейкн памтн данных. POSTING 1 ,lJ,06авляет 1 к FSR1, а POSТlNC2 д06авлет 1 к FSR2. Пример 2.5 MOVLW 3 MULLW Охб4 LFSR 0,ОхО10 MOVFF PRODL, POSTINCO MOVFF PRODH, INDFO ;noMeaeT 3 в W ;YMHoaeT на 100 ;аАресует RqeKY ОхО10 qерез FSRO ;coxpaHReT мnaAWY qaCTb rrpoM3BeAeHMR, мнкрементмрует FSRO ;coxpaHReT cTapwy qaCTb npoM3BeAeHMR по аАресу ОхОll Реrистр состояния (SR). Реrистр состояния (SR) ннднцнрует COCTOHHe результата onepau.LI1H. Биты perHCTpa COCTOHH 4асто npoBepIOTC в nporpaMMax после выnолне- HH onepau.HH. Рнс. 2.8 НЛЛlOстрнрует содер>кнмое perHcTpa COCTOHH. Только nTb нз восьмн 6нтов ННДНЦНРУlOт COCTOHHe; онн 060зна4а1OТС как N (отрнu.ательность), OV (nереполненне), Z (ноль), ОС (перенос раЗрЯ,lJ,а) н С (перенос). Бнты состоянн npoBe рютс комаН,lJ,амн условноrо ne ре хода , которые HaH60nee 4асто нсnоnьзуютс ДЛЯ формнрованн KOHCTPYKu.H ifthen-else npH nporpaMMHpoBaHHH, а так>ке ApyrHx про rpaMMHbIx KOHCTPYKЦH. Бнты реrистра COCTOHH 06Ы4НО нзменIOТС в YCTpOCTBax PIC только арнфмеТН4ескнмн н лоrН4ескнмн onepau.HMH. . N (отрицательность)  6нт отрнu.ательностн нмеет зна4енне лоrН4еской 1, еслн резуnьтат арнфмеТН4еско нлн лоrН4еско onepau.HH отрнцателен н значенне лоrН4е CKoro HYn, еслн результат nоложнтелен. · O.V (переполнение) - 6нт nереnолненн нмеет зна4енне лоrН4ескоЙ 1, еслн арнфмеТН4еска onepau.H npHBeJla к nереnолненнlO 8раЗр,lJ,ноrо результата семейст во знаком. 
fnaBa 2. Архнтектура семейства PIC18 н разработка проrpамм 57 432 О перенос О == переноса нет 1 == перенос перенос разряа О == переноса нет 1 == перенос ноnь О == нуnя нет 1 == ноnь nерепоnненне О == nерепоnнення нет 1 == переnоnненне езуnьтат от нцатеnьный 0== резуnьтат поnожнтеnьный 1 == резуnьтат отрнцатеnьный Рис. 2.8. PerHcTp COCTOHH · z (ноль)- 6нт нул HaXOДHTC в COCTOHHH лоrН4еско eAHHHu.bI, еслн результат арнфмеТН4еской ли60 лоrН4еской ,оnерацнн явnетс HyneBbIM. Еслн результат не B летс HyneBbIM, то 6нт HYn HaXOДHTC в состонни лоrН4ескоrо нул. · ОС (перенос разрда) 6нт переноса разрда ннднцнрует nоловннны перенос. Он содержнт перенос нз мnадwей 4астн результата (4 6нта), а так>ке старшей nоловн- ны 6aTa (4 bits) н нсnользуетс TOnbKO командой DAW. . С (перенос) 6нт переноса perHcTpa COCTOHH содержнт пере НОС нз caMoro cTapwero 6нта резуnьтата. Счетчик команд (РС). С4еТ4НК команд, XOT н не явnется непосредственно aдpecye мым, как SR, влется 04ень важным perHcTpoM. С4еТ4НК команд в устройствах семей ства PIC18 nредставлет c060 21разр,lJ,НЫ perHcTp, он адресует следуlOw,уlO 4ейку памтн в naMTH nporpaMM н nозволет Qсуw,ествлять nоследовательны доступ к KO маН,lJ,ам в naMTH nporpaMM. С4еТ4НК команд BneTc С4еТ4НКОМ, однако он не С4нтает коман,lJ,Ы nporpaMMbI. Он С4нтает адреса naMTH, 4т06ы 06ecne4HTb доступ к следуlO w,e команде nporpaMMbI, 4ТО, BepOTHO, и nрнвело к тому, 4ТО он называетс С44етчн- '" ком команд. В некоторых nроцессорах зтот perHcTp называется perHcTpOM адреса KO манды (IAR). Последовательность выполненн команд nporpaMMbI моднфнцнруетс, еслн со- держнмое С4еТ4нка коман,lJ, нзменетс. Дл нзменення СО,lJ,ержнмоrо С4еТ4нка команд комаН,lJ,а GOTO нлн комаН,lJ,а условноrо перехода заноснт новое зна4енне в С4еТ4НК ко- манд, 4ТО npHBO,lJ,HT к нзмененнlO после,lJ,овательностн выnолненн команд nporpaMMbI. Функu.нн CALL н REТURN так>ке нзменIOТ СО,lJ,ержнмое С4еТ4нка коман,lJ,. Функu.н CALL nOMew,aeT адрес возврата (адрес коман,lJ,Ы, cne,lJ,YIOw,e непосре,lJ,ственно после CALL) в стек, а затем выполняет команду GOTO. Функu.н RETURN нзвлекает адрес возврата нз стека н nOMew,aeT ero в С4етчнк коман,lJ,. 3то npHBoAHT к тому, 4ТО слеДУIOw,е выполн eTC команда, следуюw,ая непосредственно после CALL. 
58 ITpHMeHeHHe MHKpOKOHTpOnnepOB PIC18 2.3. Интеrррованная CCTeMa разработк (IDE) npe>K,lJ,e, 4ем ABHraTbC ,lJ,аnьше, нам не06ходимо ознакомнтьс с интеrрирован ной снстемой разра60ТКН ДЛ мнкроконтроnлеров PIC. IDЕ позволет осуw,ествлть разра60ТКУ н HanHcaHHe nporpaMM как на 3ЫKe Ассем6лера, так и на 3ЫKe С. Она TaK >ке nозволет выыnолнть тестнрованне н имнтаu.ию выпоnнени проrрамм с ИСnОЛЬ30- ваннем ннструментальных средств отладкн, BКnlO4eHHbIx в IDЕ. MLI1KPOKOHTponnep может проrраммироватьс, еслн nporpaMMaTop nOAKnlO4eH к IDЕ лн60 схемно 3МУJlироватьс, есnи к IDЕ nОДКЛlO4ен змултор. IDЕ - зто заКОН4енна снстема разра60ТКН проrрамм ДЛ мнкроконтроллеров PIC, она может СЛУЖLl1ТЬ так>ке прекрасным средством 06Y4eHLI1 ввнду HHTerpHpoBaHHbIx в нее возможностей отладкн. J/:;_;yt\ ' i/:i?'.'.'.'.' ........................... ....... ........ ..f5..........Ii.....i........;;.......j.:.....:...._.B:.:'.;:..;:i..:.:.II.i_)....i........:g.;....1..:.;.: .. 1> tti.IT...........m..... "МPf АВ ЮС vl. 10 ' (C:\Progtdm filf!s\Мkrщ:hij)\.МРАSМ Suit!!\l СlJ1рlаlе\ОIJjс(:Л1 З201mj)().<JSm.J .:....._...'.-..........-..........,'..............,........'....,..,-.............'.-.'....'.............,'....,..........-..,'.......'-.-.-..-..................,........'.....-..-.'..'..,'..-..............'...-...........'..............-..'.................................-....-...........,'......_.......-..,.....,'..,...........,'.-..-',.-.................--'.........-..,......'...-............-..-.,......-........-.........,....-.........,....-,._.........,-....-,................ JIIOyf f JIIOyff JIIOyf f 1....t.fie B$]"I!iM .B3R till.lG  твкр . 'RJC S!ArUZT!!.fI.F ,S;:AfUS ;r&surQ BZI:. rеq:tst.фt ;rez<;QI:E: "l:Qt"kirl<:f re:gi:!lter ;re$'t.orQ З-!А!'US: :rel.}:1ztEX' ; 't 1.: ,*1V* *?f'1'*W", *  *'tr 't'* 't* **..:t $''1t*:t '''t:t :t-" '* *,:! 1t :\-* '* "-4 *.. s''t * :t b":t  1.: *-./1.-__ '* f:' ,,-1) '* $'-);:! *  1."1,-* ; 5't..&.rt f;t f a1.r1. р.rr;tiуЭ,ts. ; !Ъ'с': .tJ,,i:.fA. Vl'(,,!:a1ta. ..Q':1 lS ').1if,;::efl к,ак&. !l:s.in: .,.,.* %&a.in c:c-dli! gli!2= ht!!'t'E' *'** J'I!IDvlw 3 -й..1." Ох64 l.tsr О < Ох 10 JIIOvff ..t>OI:>!., 90S! хисо 1II8Ovft PMDH, rNDJO "" а.). t: ; lJU1;o '''f&.i. t, ; 't'**'X"'t':1' *'?('v't' :oe-1t,.... 't"*1V't;':t....7C''t;"t:1I'''''*'t'1';'.,..'t''** *«''''''',,*'t.: *''t''* 3'-.IC''''' :tw*,**"f"'" '" $'",1< **1t''t':+-"t: t«'*"'""1!'S""'W* ;Iп.! 01 prC>9'ra:<.. IJID Рис. 2.9. Сннмок зкрана IDЕдл мнкроконтролnеров PIC Обзор IDE Рис. 2.9 демонстрнрует сннмок зкрана IDЕ ДЛ мнкроконтроллеров PIC, KOTopa может 6ыть 6есnлатно выrружена по адресу http://www.microchip.com. 3тот Windows- 6азнрованный ннтерфейс леrко НСПОЛЬЗ0вать для созданн н отладкн nporpaMM. Так>ке являетс возможным нмнтнровать выnолненне проrрамм в nK прн nOMow,H нмитатора, KOTOpЫ влетс 4acTblO IDЕ. Кроме Toro MOryr нсnользоватьс аппаратные 3YnTo ры, уnравлемые от IDЕ н 06ecne4HBalOw,He 60лее T04HYlO HMHTau.HIO в масшта6е реаль- Horo временн. Ал нсnользованн IDЕ ДЛ созданн npoeKTa первый шаr заключаетс в вы60ре микроконтроллера, нсnользуемоrо в проекте, по ero ТLI1ПУ. 3то выnолнетс w,en4KoM на 
fnaBa 2. Архнтектура семейства PIC18 н разработка проrpамм 59 П03НЦLl1Н Configure (Конфнrурнровать) в MeHlO, HMelOw,eMc в BepXHe 4астн зкрана IDE. Далее ну>кно w,елкнyrь на nознцнн Select Device . . . (Вы60Р YCTpOCTBa) в nовившем- c развора4иваюw,емс MeHIO. Теперь на зкране pa3BepHeTC дналоrовое окно, пока- занное на рнс 2.10. Вы6ернте MHKpOKoHTponnep, который 6удет НСnОJlьзоватьс в TeKY w,eM проекте LI1З cnHcKa устройств. 3тн действн сконфнrурнруlOТ IDE на тот тнп микро- контроллера, который 6удет нсnользоваться в npoeKTe,  онн должны 6ЫПJ выполнены ПР8)кде Bcero, 4т06ы 06еспе4НТЬ nравнльную ра60ТУ IDЕ. Ew,e несколько waroB Tpe6YIOTc ДЛ выnолнеНLI1 попной нннцналнзацнн IDE. Так, найднте н w,елкннте на nознцнн Project (nроект) MeHIO н вы6ернте nОЗНЦНIO Project Wizard (Мастер nроектов) в развора4нваlOw,емс MeHIO. nоявнтся диалоrовое окно, nоказанное на рнсунке 2.11. Рис. 2.10. Вы60Р мнкроконтроллера ДЛ IDE. в окне мастера nроектов w,елкннте на кнопке Next (Аалее). nOBHTC дналоrовое окно, nоказанное на рнс. 2. 12. OnTb вы6ернте мнкроконтроnлер, KOTOPЫ 6удет LI1C nользоватьс в nроекте. 3то, коне4НО, нзБЫТ04на оnерацн, однако все же не06ходи мо вновь указать мнкроконтроллер в MeHIO Device Select (Вы60Р устройства). На слеДУIOw,ем ware дналоrа (см. рнс. 2.13) не06ходнмо вы6рать на60Р ИНСТРУ ментальных средств, который 6удет нспользоватьс npH Р,азра60тке nporpaMMHoro 06ecne4eHH мнкроконтроллера. В данном СЛУ4ае вы6рана nознцн Microchip MPASM Toolsuite (На60Р HHCTpYMeHTanbHbIX средств Microchip MPASM), 06ecne4H- ваюw,а возможность разра60ТКН ДЛЯ nроекта проrрамм на зыке AcceM6nepa (см. рнс. 2.13). MPASM - это ассем6лер от фнрмы Microchip AfI YCTPOCTB PIC. V1H,lJ,H цнруемые HaHMeHOBaHH nyTe фалов ДОЛ>КНЫ 6ыть корректными  онн не HY)I(,lJ,aIOTc в моднфнкацнн, еслн IDE 6ыла nравнльно установлена. 
60 ITpHMeHeHHe MHKpOKOHTpOnnepOB PIC18 Тм wizard helps уои create and configure а new MPLA8 project. Т о continue, click Next. Рис. 2.11. Окно мастера npoeKToB IDЕ , ?: у " Projcct Wildrd . :;1 Step Оne: S elect а device . '*' /. Рис. 2.12. Вы60Р мнкроконтроллера 
rnaBa 2. Архнтектура семейства PIC18 н разработка проrpамм 61 PrQject Wizard L J Step т wo: Select а language tool$uite . '... .' " Рис. 2.13. MeHIO вы60ра комплекта ннструментanьных средств Projct Wjzard IJ Step Three: N ате yoUf project 11 Рис. 2.14. MeHIO нменн nроекта 
62 TIpHMeHeHHe MHKpOKOHTpOnnepOB PIC18 Следуюw,ее дналоrовое окно заnрашнвает HM npoeKTa н nyrH фаnов, как э ro по казано на рнс. 2.14. Задате HM nроекта, которое onHcbIBaeT npoeKT, разра6атывае- мый вам н в текуw,нй момент временн. Последннй н нан60лее сложный war свзан с вы60РОМ срайnов компоновw,ика ДJl микроконтроллера, а так>ке вы60РОМ файла wа6лона проrраммы, чт06ы nporpaMMa моrла 6ыть HanHcaHa. Рнс. 2.15 демонстрнрует снимок зкрана ДJ1 AaHHoro ПОСJlеднеlО этапа настройкн IDЕ на разра60ТКУ nporpaMM ДJl текщеrо npoeKTa. Для ВЫПОЛllени этоrо найднте KaTanor с' именем Microchip; HaH60nee BepOTHO, 4ТО он расположен в каталоrе Program Files на днске С. OTKpOTe в каталоrе Microchip папку с именем MPASM Suite (комплект ннструментальных средств MPASM). В зтой папке найдите во вло>кенной папке Object folder (Папка 06ъектов) срайn ша6лона ДЛ МНКрОКОНТрОJ\лера, исnоnьзуемоrо в npoeKTe. 3тот файn должен нметь HM тнпа, напрнмер, 1320tmpo.asm, 4ТО соответствует СЛУ4аю, KorAa в npoeKTe нсnоnьзуется мнкроконтроллер 18F1320 ввнду ero ннзкой стонмостн (менее 3x долларов). Щеnкннте на LI1MeHH фала н д06aBb те ero в cnHcoK, w,enKHYB на кнопке Add (А06авнть). Теперь OTKpOTe папку LKR н HaДH- те в He файnы KOMnoHoBw,HKa для BbI6paHHoro мнкроконтроллера. В данном СЛУ4ае два Н3 3TLI1X сралов  18f1320.1 kr н 18t1320i.lkr д06авлIOТС в cnHcOK срайлов компоновкн ДЛ МLI1кроконтроллера 18F1320. Как только все трн cpana 6удут пере4нслены в окошке списка cpanoB, отметьте nереКnlO4ателн Add to project check Ьох (A06aBLI1Tb в KOH троnьный cnHcoK npoeKTa), cTow,He p,lJ,OM с каждым нменем файла, а затем w,enKHHTe на кнопке Next (Аалее). nовится nocneAHee дналоrовое окно, на котором 6удет кнопка Finish (Заверwнть). Щелкннте на 3TO кнопке ДЛ созданн npoeKTa  н новый npoeKT 6удет ycnewHo создан. pft}ject WiZaI'd . " ,п> > >; '. Step Four: Add an,y existing fes to 'уОШ project 11 Рис. 2.15. Вы60Р сралов KOMnoHOBw,HKa н срайла wаблона npoeKTa 
fnaBa 2. Архнтектура семейства PIC18 н разработка проrpамм 63 ,  . "МШ.J\В тЕ "11.10 о.... .... ...._. ......... ..... ._.....:...:.....................-. ....._....... .... ........;..,.;...;.;. '..:..................................;....._.............:.:....... ffi1It!rt@I;'.191::'..r'lpi, .....,.....................'................-.......................................... ....-............ ...,. . .. . . . .... . ...... . .. . . . .. . . . .. . .'.',... . .. . .......-.._..-.............. . ................-..'.. . .. . . . ......... . .. . .... . ..... . . . . . . . .. . .'-. . ... . . . . . . . ,... . . . . . .. . ...,. . . . . . .. . .. . . . . . . .. . . .. . . . . . ..... . о., ""Н__" _,_ .. '" ,_......., ._, .. _ ... .. ..;.......;,..,.;,..........,......,.,................... .......'......M......'..................,....,......,....................................................n. ,..,.........,......., . .. 8 Myfirst.mcp 8 Source Files 132Otmpo.asm нмder F'es Object Files . Libr ary Files 8 . Linker Scripts 18f1320.lJQ 1бf 1 Э2Oi.1I<r Ot:herFiles Рис. 2.16. MeHIO файлов npoeKTa Дn Toro, 4т06ы посмотреть на wа6nонный nроrраммный код (файл wа6лона), вставленный мастером npoeKTa, w,елкннте на nознu.нн View (Внд) MeHlO, а затем вы6е- рнте n03НЦНIO Project (npoeKT). Рнс. 2.16 показывает зкран, который nOBHTc, KorAa вы w,еЛКНLI1те на nознu.нн Project (npoeKT) развора4нваlOw,еrося меню Project (npoeKT). в зтом не60ЛЬWОМ окне 6удуТ от06ражены файлы, которые BКnlO4eHbI в nроект. На ,lJ,aH ном 3Tane нан60лее ннтересным 6удет файл HcxoAHoro текста, который влетс wa6 лоном, нсnользованным в снстеме. Дn просмотра 3Toro файла ABa>K,lJ,bI w,enKHHTe 1.la именн файла,  в зтом npHMepe на нменн "1320tmpo asm". Ка.залось 6ы, зто 04ень трудно  создать npoeKT н разра60тать ero nporpaMMHoe 06ecne4eHHe, однако cyw,ecT BYIOT простые warH, КОТОрЫХ нужно nрндерживатьс  н КОЛН4ество ннформацнн, кото- PYIO не06хо,lJ,НМО ввестн, зна4нтельно COKpaTHTC. Как TOnbKo вы разра60таете несколь ко nporpaMM, зтн warH станут ДJl вас естественнымн. Пример 2.6 показывает лнстинr файла wа6лона проекта. Больwа 4асть Toro, 4ТО имеетс в данном файnе на данном 3Tane 6удет ДJl вас «тайной за ceMblO nе4атми», О,lJ,нако позже 6удет все 06ЪCHeHO. Аанный nроrраммный текст содержнт 06шнрные комментарнн, которые OnLl1CbIBalOT назна4енне Ka>K,lJ,O сеКЦНLI1, а так>ке некоторые ко- манды, которые не06ходнмы ДJl настройкн 6азовых nporpaMM PIC. Снмвол Т04КН с заnято озна4ает KOMMeHTapH н все, что следует после этоrо снмвола до конца строкн не reHepHpyeT HHKaKoro кода. ФаКТН4ескн 60nьша 4асть 3Toro npHMepa влетс npo сто KOMMeHTapHMH. 
64 ITpHMeHeHHe MHKpoKoHTponnepoB PIC18 Пример 2.6 ;***************************************************************************** Этот an npeACTaBnReT c060 6a30B ша6nон С03Аанмя l1epeMeaeMoro КОАа acceM6nepa AnR PIC18F1320. Скопмруте зтот фаn в KaTanor вашеrо npoeKTa м МОАмфиuмруте ero в CnY4ae не06ХОАММОСТМ. C03AaTe npoeKT, MCnOnb3YR UPLINK в KaqeCTBe R3KOBoro среАства C03AaHMR шестнаАuаТМРМ4ноrо ana. 06aBbTe в npoeKT ЭТОТ an м фаn 18F1320.LKR Архмтектура IC18FXXXX AOnYCKaeT конфмrурмрованме АВУХ npepBaHM. aHH ша6nонн КОА HanMcaH в paCqeTe на уровнм npMopMTeTa npepBaHM. Орм зтом 6мт IPEN perMCTpa RCON AoneH 6Tb YCTaHoBneH AnR разреwеНМR MCnOnb30BaHMR уровней npepblBaHM. ECnM 6мт IPEN 6УАет OCTaBneH в YCTaHaBnMBaeMOM AnR Hero по YM0nqaHM HyneBoM COCTORHMM ТО, TOnbKO вектор npepBaHMR по аАресу ОхО08 6УАет MCnOnb30BaTbCR, а nepeMeHHe WREG_TEMP, BSRTEMP м STATUSTEMP не 6УАУТ ИСnОnЬЗ0ваТЬСR Смотрмте РУКОВОАСТВО ПОnЬЗ0ватеnR AnR n0nyqeHMR AOnOnHMTenbHO мнформаuмм по CBOCTBaM acceM6nepa м KOMnOHOBKa Смотрмте TeXHMqeCKMe cneUMMKaUMM PIC18F1220/1320 AnR n0nyqeHMR AOnOnHMTenbHO MHopMaUMM 06 архмтектуре м на60ре комаНА ;***************************************************************************** Имя ana: aTa: BepcMR ana: Автор: KOMnaHMR: ;***************************************************************************** Tpe6yeMe an: P18F1320.INC 18F1320.LKR LIST P=18F1320, F=INHX32 iAMpeKTMBa onpeAeneHMR npoueccopa м opMaTa фала #include <P18F1320.INC> ;onpeAeneHMe npoueccopho-орментмрованнх nepeMeHHX ;***************************************************************************** Бмт KOHMrypaUMM MpeKTMBa CONFIG onpeAenReT AaHHe конфмrурмроваНМR внутрм фаnа .ASM. Меткм, cneAye nocne AMpeKTMB, onpeAeneH в ane P18F1320.INC. TeXHMqeCKMe сnеuмфмкаuмм PIC18F1220/1320 ра3ЪRСНRТ функuмм 6мтов конфмrураuмм. Мзменмте HMecneAye строкм так, qT06 онм COOTBeTCTBOBanM BaweMY rrpMnoeHM. CONFIG _CONFIG1H, IESOOFFlH & FSCM_OFFlH & HS OSC 1Н CONFIG _CONFIG2L, _BOROFF_2L & PWRT OFF2L CONFIG _CONFIG2H, _WDT_OFF2H CONFIG _CONFIG3H, MCLRE OFF_3H 
rnaBa 2. Архнтектура семейства PIC18 н разработка nporpaMM 65 CONFIG CONFIG CONFIG CONFIG CONFI G CONFIG CONFIG _CONFIG4L, _CONFIG5L,  CONF'IG5H, _CONFIG6L, CONPIG6H, CONFIG7L,  CONFIG7H, DEBUG OFF 4L СРО OFF 5L &   - СРВ OFF 5Н & - - - WRTO OFF 6L &  -  WRTC OFF 6Н & EBTRO OFF 7L & -   EBTRB OFF 7Н - -- & LVP OFF 4L & CPl OFF 5L    СРD OFF 5Н    WRTl OFF 6L   - WRTBOFF6H Sc EBTRl OFF 7L -   STVR OFF 4L    WRTDOFF6H ;***************************************************************************** OnpeAeneHMe nepeMeHHblx Эти nepeMeHHble не06ХОАИМЫ топько, есnи МСnОnЬЗУТСR низкоnриоритетне nрерываНИR Боnьwе nеремеиных MoeT nонаА06ИТЬСR ДnR coxpaHeHMR Аруrих спеuиаnьнх ункuионаnьных perMcTpoB, исnоnьзуех в nОАnроrраммах 06сnуиваНИR npepBaHM. ОDАТА WREG ТЕМР RES 1 ;ПеременнаR в ОЗУ AnR icoxpaHeHMR контекста STATUS ТЕМР RES 1 ;ПеременнаR в ОЗУ AnR icoxpaHeHMR контекста BSR ТЕМР RES 1; ПеременнаR в ОЗУ AnR ;coxpaHeHMR контекста UDATA ACS EXAMPLE RES 1 ;npMMep nepeMeHHo в ОЗУ iдостуnа ;***************************************************************************** aHHe ЭСDПЗУ ЗАесь onpeAenRTCR Аанные, rroAneae nроrраммированм в ЭСDПЗУ ОАТА EEPROM СОDЕ DЕ OxfOOOOO "Test Data",0,1,2,3,4,5 ;***************************************************************************** iBeKTop с6роса ; Этот код HaqHeT BblrronHRTbcR rrocne с6роса. RESET VECTOR СОDЕ ОхОООО goto Main ;ПереХОА на заrrуск iOcHoBHoro parMeHTa КОАа i***************************************************** ************************ iBeKTop BcoKorrpMopMTeTHoro rrpepBaHMR Этот КОА HaqHeT BrronHRTbcR rrocne вознмкновеНМR BblcoKorrpMopMTeTHoro rrpepblBaHMR nM60 в cnyqae вознмкновеНМR rrрерываИМR, KorAa rrpMopMTeT rrpepBaHM не разреwены HI INT VECTOR СОDЕ ОхОО08 bra Highint irrереход на rrодrrроrрамму i 06ра60ТКМ BblcoKorrpMopMTeTHoro rrpepblBaHMR ;***************************************************************************** ; Вектор нмзкоnрмормтетноrо rrpepBaHMR 
66 Прнмененне MHKpOKOHTpOnnepOB PIC 18 Этот КОА HaqHeT BblnOnHRTbCR nocne B03HMKHOBeHMR HM3KOnpMopMTeTHoro npepblBaHMR ДaHH КОА MoeT 6ыть YAaneH, eCnM HM3KonpMopMTeTHe npepBaHMR не MCnOnb3YTCR LOWINT_VECTOR СОDЕ Ox0018 bra Lowint; nepexOA на nOAnporpaMMY ; 06ра60ТКМ HM3KonpMopMTeTHoro npepBaHMR ;***************************************************************************** DOAnporpaMMa 06ра60ТКМ BCOKOnpMopMTeTHoro nрерыванмя 3Аесь nOMeaeTCR nporpaMMHbl КОА 06ра60ТКМ BCOKonpMopMTeTHoro npepblBaHMR СОDЕ Highint: *** CAa nepexOAMT КОА 06ра60ТКМ BblCOKonpMopMTeTHoro ; npepBaHMR retfie FAST ;***************************************************************************** DOAnporpaMMa 06ра60ТКМ HM3KonpMopMTeTHoro npepBaHMR 3Аесь nOMeaeTCR nporpaMMHbl КОА 06ра60ТКМ HM3KonpMopMTeTHoro npepblBaHMR aHH КОА MoeT 6ыть YAaneH, eCnM HM3KonpMopMTeTHe npepblBaHMR не МСnОnЬЗУТСR Lowint: movff movff STATUS,STATUSTEMP WREG,WREG_TEMP ;coxpaHeHMR perMcTpa COCTORHMR ;сохраненме pa60qero perMcTpa movff BSR,BSR_TEMP icoxpaHeHMe perMCTpa BSR *** CAa nереходмт КОА 06ра60ТКМ нмзкоrrрмормтетноrо npepBaHMR *** movff movff movff retfie BSR TEMP,BSR ; сохраненме perMcTpa BSR wreg_temp,WREG ;BOCCTaHOBneHMe pa60qero perMCTpa STATUS_TEMP,STATUS ;BOCCTaHOBneHMe perMcTpa COCTORHMR ;3arrYCK rnaBHo nporpaMM ; CAa nOMeaeTCR КОА rnaBHo nporpa Main: *** CAa nepexoAMT КОА rnaBHo rrporpaM *** ;KoHeu nроrрамм END nepBbIMH ,lJ,BYM сраКТН4ескнмн коман,lJ,НЫМН строкамн BJleTC ,lJ,нректнва LIST н оператор #include. Днректнва LIST ннсрормнрует acceM6Jlep о том, tпо ,lJ,aHHЫ MHKpO KOHTpOJlJlep (Р) нмеет THn 18F1 320, а AfI сраЙJlа вы6ран 32-6HTHЫ wестнадцатнрН4НЫ срорма Intel, который НСnОJlьзуетс AfI coxpaHeHH nporpaMMbI, сформнрованно после KOMnHJlu.HH н KOMnoHoBKH nporpaMMbI на ACCeM6Jlepe. WестнадцатнрНtlНЫ фал HC nОJlьзуетс AfI nporpaMMHpoBaHH naMTH nporpaMM ВНуТрн мнкроконтроллера PIC. BTopa ceKЦH nporpaMMHoro КО,lJ,а KOHcpHrypHpyeT мнкроконтроллер. Соответст- вуюw,не 6нты 6у,lJ,уТ рассмотрены позже. На зтом 3Tane нас устронт конфнryрацня ЮЕ, устанавлнваемая по YMOJl4aнHIO, - она noдxo,lJ,HT AfI MHorHX nрнмененнй. 
fnaBa 2. Архнтектура семейства PIC 18 н разработка nporpaMM 67 СлеДУIOw,а секцня nporpaMMHoro КО,lJ,а оnре,lJ,еJlяет Jlю6ые nОJlьзоватеJlьскне ne ременные н cooTBeTcTBYIOw,He 4eKH nамятн, а так>ке Jl106bIe ,lJ,анные, nодле>каw,не со- xpaHeHHIO в зсnnзу. в данном CJlY4ae в эсnnзу 6У,lJ,ет заноснтьс CHMBOJlbHa строка "Test Data" (Тестовые данные), за KOTOpO 6у,lJ,уТ CJle,lJ,OBaTb 4HCJla О, 1,2, 3,4 н 5. BcnoM ннте, 4ТО зсnnзу НСnОJlьзуется для coxpaHeHH nOJlYnOCTOHHbIX ,lJ,анных, которые H3 меняlOТСЯ от СЛУ4ая к СЛУ4аlO. 3тн nолуnостоянные ,lJ,анные сохраняlOТСЯ н nocJle снятн злектроnнтання. Нан60лее важно 4acTblO npHBe,lJ,eHHoro nporpaMMHoro кода ЯВJlяется устаНОlЗка вектора с6роса по а,lJ,ресу ОхОООО. BcnoMHHTe, 4ТО МНКРОКОНТРОJlлер на4ннает BbInOJ1 HTb nporpaMMY с адреса ОхОООО. Так>ке npHnoMHHTe, 4ТО HMeIOTc только 8 батоlЗ па MTH ме>кДУ адресом вектора с6роса н адресом вектора BbIcoKonpHopHTeTHoro npepbI- BaHH. ПО 3TO npH4HHe комаН,lJ,а GOTO 06Ы4НО размеw,ается по адресу вектора сброса. Е,о,ннственная OCHOBHa nporpaMMa в этом npHMepe nРО,lJ,ОJlжает выnолнться по метке Main. КомаН,lJ,а GOTO нзменет COCTOHHe С4еТ4нка коман,lJ" устанаВJ1нва ero на адрес меткн Main с тем, 4то6ы nporpaMMa MOrJla nРО,lJ,ОJlжать BbInOJlHTbC по 3TO метке. Об ратнте вннманне на то, 4ТО в ,lJ,анном CJlY4ae по метке Main нет HHKaKoro nporpaMMHoro КО,lJ,а, а HMeeTC просто KOMMeHTapH, rJlacw,H: ***З,lJ,есь BBO,lJ,HTC код rлаlЗНО npo rpaMMbI***. Пример пporpaMMbI. Теперь, KOr,lJ,a Wa6JlOH nроекта ото6ражаетс на зкране IDE, He 06хо,lJ,НМО nOMecTHTb HeKOTOpы nporpaMMHbI КО,lJ, в секцнlO Main wа6лона с тем, чтобы узнать, как nporpaMMHpoBaTb MHKpOKOHTpOJlJlep н НСnОJlьзовать IDE дЛЯ теСТНРОlЗання nporpaMM. Заменнте строку Main (;***З,lJ,есь BBO,lJ,HTC КО,lJ, rJlaBHO nporpaMMbI***) nporpaMM ным КО,lJ,ОМ на зыке ACCeM6Jlepa, nоказанным в npHMepe 2.7. Эта nporpaMMa деJlает не так уж MHoro ра60ТЫ, О,lJ,нако она срормнрует ОСНОВУ nOHHMaHH Toro, как нужно HCnOJlb зовать IDE ДЛ TeCTHpOBaHH nporpaMMbI. Пример 2.7 MOVLW ОхО1 ADOLW Ох02 Wait: GOTO Wait iзаrрузка ОхО1 В W ;A06aBneHMe Ох02 к W ;3Аесь ВХОА В 6eCKOHeqH UMKn nporpaMMa нз npHMepa 2.7 заrРV>Kает perHCTp W JlHTepanOM ОхО 1, а затем nрнбав ляет к нему Jlнтерал Ох02. An Toro, 4то6ы УВН,lJ,еть 3ТУ nporpaMMY в ,lJ,eCTBHH, введнте КО,lJ, нз npHMepa 2.7 в Wa6JlOH npoeKTa по метке Main, заменнв KOMMeHTapH ***здесь BBO,lJ,HTC КО,lJ, rJlaBHO nporpaMMbI***. Как TOJlbKO зтн строка КО,lJ,а 6у,lJ,уТ введены в ша6- лон nроекта, w,eJlKHHTe на nознu.нн Project (nроект) MeHIO. nOcJle 3Toro w,eJlKHHTe на познцнн Build AII (Компоновать все) рзвора4нваlOw,еrос CnHCKa, KOTOpЫ nOBHTc. Опu.н Build AII (Компоновать все) nрео6разует nporpaMMY на языке AcceM6Jlepa в npo- rpaMMY в 4нсленных MaWHHHbIx КО,lJ,ах, KOTopa называется 06ъeКТHO nporpaMMo. 3ТУ nporpaMMY MHKpOKOHTpOJlJlep может BbInOJlHHTb. Аanее w,eJlKHHTe на nознu.нн View (8н,lJ,) , а затем w,елкннте на nознцнн Special Function Registers (СnецнаJlьные функ ционаJlьные perHcTpbI). Ha,lJ,HTe perHcTp W (WREG) по а,lJ,ресу ОхРЕ8. Щелкннте на no знu.нн MeHIO Debugger (OTJlaд4HK), а затем вы6ернте nОЗНЦНIO MPLAB SIM. (Смотрнте сннмок зкрана на рнс. 2.17.) MPLAB S/M  3ТО nporpaMMa, KOTopa нмнтнрует MHKpO KOHTpOJlJlep PIC на nK. An nowaroBoro запуска nporpaMMbI нажмнте функцнональнуlO клавнwу F7 KJlaBHarypbI HJlH w,eJlKHHTe на нконке, paCnOJlO>KeHHO непосредственно сnраlЗа от зеJlено ,lJ,BOHO CTpeJlKH, KOTopa называетс Step into (War Bnepe,lJ,). nOcJle кюкдоrо wara зеJlена CTpeJlKa 6У,lJ,ет nepeMew,aTbC вннз по nporpaMMe, показывая Т04- 
68 TIpHMeHeHHe MHKpOKOHTpOnnepOB PIC 18 ное место ВЫnОJlнення nporpaMMbI. СО,lJ,ержнмое perHCTpa WREG так>ке нзменется по мере ВЫnОJlнения nporpaMMbI. An nOBTopHoro запуска nporpaMMbI w,eJlKHHTe на желто иконке, раСnОJlоженно справа от зеJlено ,lJ,BOHO CTpeJlKH, н nporpaMMa на4нет BЫ nОJlНЯТЬСЯ CHa4aJla, 4то6ы можно 6bIJlo nрОСJlеднть ее BbInOJlHeHHe вновь. Обратнте вниманне на то, 4ТО nporpaMMa BbInOJlHeTC в nK н не нужно НСnОJlьзовать микрокон троллер для Toro, 4т06ы НЗУ4НТЬ ACCeM6Jlep HJlH то, как нужно nporpaMMHpoBaTb микро контроллер nибо ,lJ,а>ке освонть отла,lJ,КУ npHnO>KeHH. MPLAB SIM (нмитатор) имнтнруе1 мнкроконтролnер на nK. Средн ,lJ,pyrHx cpYHKЦH 3Toro нмнтатора мо>кно назвать выпоn ненне трасснровання коман,lJ, (4ерез MeHIO View (Вн,lJ,)), а так>ке npH НСnОЛЬЗ0ванни пор- тов BBO,lJ,a-вывода npqcMoTp ,lJ,анных BBO,lJ,aBЫBO,lJ,a 4ерез n03НЦНIO Logic Analyzer (Ло rH4eCKH анаJlнзатор) MeHIO View (Вн,lJ,). ',;;, f'1yFirst.nк:p ;:ii 5otJ'ce Fies 1 З2Otmpo.asm Нeader RIeS Object FIeS Lbrary FIeS ; LЛker Scripts I ef 1 З20.1kt 18fIЭ2Ol.Ь other Fies )lJYLV OxOl U.L1f OxOZ 90" lIs.it ,..... as.:l.n code goes here ...... IND Рис. 2.17. Сннмок зкрана AflЯ npHMepa 2.6 н окна cneu.HaJlbHbIX срункцнональных perHCTpoB. 
rnaBa 2. Архнтектура семейства PIC 18 н разработка nporpaMM 69 Переное прораммы в микроконтроллер An переноса nporpaMMbI в MHKpOKOHTpOJlJlep нео6хо,lJ,НМО НСnОJlьзовать npo rpaMMaTOp. Некоторые РIС186азнрованные ,lJ,eMOHcTpau.HOHHbIe naHeJlH MHKpOKOHTpOJl JlepOB СО,lJ,ержат nporpaMMY, npe,lJ,Ha3Ha4eHHYlO AflЯ выrрузкн nporpaMMHoro 06ecne4e HH н nporpaMMHpOBaHH MHKpOKOHTpOJlJlepOB. Фнрма Microchip nред,лаrает u.елы ря,lJ, nporpaMMaTopOB, которые MOryr nporpaMMHpOBaTb MHorHe YCTpOCTBa ceMeCTBa PIC18. IDЕ nордержнвает CJle,lJ,YIOw,He nporpaMMaTopbI: PICSTART plus, ICO 2, РМ 3 н РАОМАТЕ 11. АоnолннтеJlЬНО, MHoro дРуrнх nporpaMMaTopOB, которые так>ке nporpaM MHPYIOT сnnзу, зсnnзу н ДРуrне мнкроконтроллеры, 06Ы4НО досrynны. Еслн нмеется О,lJ,НН Н3 IDЕnордержнваемых nporpaMMaTopOB, то IDЕ может ynpaBJlTb нм н nporpaM мнровать MHKpOKOHTpOJlJlep HenOCpe,lJ,CTBeHHO нз IDЕ. Рис. 2.18. РаскрываlOw,ееся MeHIO nporpaMMHpOBaHH нз IDЕ Как только nporpaMMa скомпонована н ОТJlажена в IDЕ, Bы6HpaeTC nporpaMMaTOp дnя Toro, 4то6ы nepe,lJ,aTb wестнадцатерН4НЫ фаJl в МНКрОКОНТрОJlлер. БОJlЫ..i.Jннство проrрамматоров nроверяет, npaBHJlbHO JlH nporpaMMHpyeTc nporpaMMa в мнкрокон- троЛJlере. Этот У4е6ннк не nbITaeTc 06ЪCHTb ра60ТУ Jl106oro KOHKpeTHoro nporpaMMa П)J>а. ДOKYMeHTaЦH н nporpaMMHoe 06ecne4eHHe AfI nporpaMMHpOBaHH MHKpOKOH тpoJlJlepa nOCTaBJleTC С nporpaMMaTopOM, н за,lJ,а4а nроrраммнровання MHKpOKOH троЛJlера BbInOJlHeTC 04ень просто. npH НСnОJlьзованнн O,lJ,Horo нз IDЕ-nордержнваемых nporpaMMaTopOB, после кон- фиryрнрованн nporpaMMHpOBaHHe, проверка, н тому nO,lJ,06HbIe функцнн BbInOJlHIOTC через развора4нваlOщнес MeHIO nознцн rJlaBHOro MeHIO IDЕ. Рнс. 2.18 НJlЛlOстрнрует такое pacKpbIBalOw,eec MeHIO AfI СJlУ4ая, Kor,lJ,a nporpaMMaTop уже установлен н nод I11Ю4ен к xoct-nк. ECJlH nордержнваемы IDЕ nporpaMMaTOp ОТСуТствует, то шестнадца repH4HbI 06ъeКТHЫ cpaJl должен 6ыть nepe,lJ,aH в нмеlOw,нся nporpamma-rор, а затем заrpужатьс в мнкроконтроллер. 
70 TIpHMeHeHHe MHKpOKOHTpOnnepOB PIC 18 2.4. Язык Ассемблера, nporpaMMa «ассемблер» и компоновщик nре>кде, 4ем ассемБJlер 6У,lJ,ет НЗУ4ен н зсрсректнвно НСnОJlьзован AfI nporpaMMH ровани, ну>кно освонть HeKOTOPYIO 6азнснуIO HHcpopMau.HIO относнтельно ассемблера н KOMnoHOBw,HKa nporpaMM. 3тот nО,lJ,раЗ,lJ,еJl 06ЪCHeT pOnb зтнх ннструментальных средств в разработке снстем, н OnHcbIBaeT 6a3HCHЫ сннтаксис Ассемблера. Ассемблер и компоновщик ACCeM6Jlep  зто nporpaMMa, KOTopa nре06разовывает ассем6лер (СНМВОЛЫIЫ MaWHHHbI КО,lJ,) нз HCXO,lJ,Horo фала в 4HCJleHHbI машннны КО,lJ, н сохраняет ero в объ- ектном фаJlе. Как н Jl1060 цn, MHKpOKOHTpOJlJlep nOHHMaeT только 4HCJleHHbI машнн ный код. БОJlЬШННСТВО nporpaMM acceM6Jlepa BbInOJlHIOT nре06разованне НСХОДI-юrо cpaJla в 06ъeКТHЫ cpaJl за ,lJ,ва npoxo,lJ,a 4ерез HCXO,lJ,HЫ фаJl. nepBbI npOXO,lJ, reHepH рует таБJlНЦУ CHMBOJlOB, KOTopa СО,lJ,ержнт Ka)l(,lJ,YIO метку н ее а,о,рес в nporpaMMe. nep- BЫ npoxo,lJ, также Hw,eT OWH6KH ВВО,lJ,а, называемые сннтаКСН4ескнмн oWH6KaMH, н co обw,ает О ННХ nOCpe,lJ,CTBOM co06w,eHH 06 oWH6Kax. BTOpO npoXO,lJ, выnолнетс, eCJlH не 06наружено ннкакнх OWH60K в те4еннн nepBoro npoxo,lJ,a. В те4енне 3Toro BToporo npoxo,lJ,a нзвлекаlOТСЯ а,о,реса нз та6JlНЦЫ CHMBOJlOB н КО,lJ,Ы Ka)l(,lJ,O коман,lJ,Ы CPOpMHPYIOT объектнуlO nporpaMMY на 4HCJleHHOM MaWHHHOM зыке. V1CXO,lJ,HbI cpaJl ДJl acceM6Jlepa  зто 06Ы4НО cpaJl, KOTOpЫ НСnОJlьзует pacWH ренне cpaJla .asm; 06ъектный cpaJl, сrенернрованный ассем6лером, 06Ы4НО нмеет расшнренне .0. V1MeHa cpaJlOB ,lJ,ОJlЖНЫ соответствовать cOrJlaWeHHM, npHHTbIM в one paЦHOHHO снстеме. В 60Jlьшннстве CJlY4aeB НС:nОJlьзуетс onepau.HoHHa снстема Windows, в CHJlY 4ero в нменах cpaJlOB можно НСnОJlьзовать n04TH Jl106bIe CHMBOJlbI, за НСКЛlO4еннем несколькнх cneu.HaJlbHbIX. 06ъeКТHЫ cpaJl 06Ы4НО не нмеет формы HC nолннтеJlьноrо фала. V1СnОJlннтельны nporpaMMHbI cpaJl - зто 06Ы4НО cpaJl, nред Ha3Ha4eHHЫ для заrрузкн в MHKpOKOHTpOJlJlep н HMelOw,H wестна,lJ,цатнрН4НЫ срормат Intel. 3тот сраЙJl 06Ы4НО reHepHpyeTc ,lJ,Pyro nporpaMMO, называемо KOMnOHOBw,H- ком. nporpaMMa KOMnoHOBw,HKa 06ъe,lJ,HHeT HeCKOJlbKO 06ъектных фалов AfI языков AcceM6Jlepa н С в О,lJ,НН HCnOJlHeMbI cpaJl. В CJlY4ae MHKpOKOHTpOJlJlepa PIC зтот HCnOJl HeMЫ cpaJl 06Ы4НО нмеет weCTHa,lJ,u.aTepH4HbI формат Intel, нсnользуемы 13 PIC- nporpaMMaTope, н 4асто нмеет расшнренне .hex. KOMnoHoBw,HK также допускает \HC nОJlьзованне в nроцессе KOMnOHOBKH 6H6JlHOTe4HbIx фаJlОВ (.Iib) н сралов cцeHapH KOMnoHoBw,HKa (.Ikr). KOMnoHoBw,HK так>ке reHepHpyeT cpaJl .coff (06W,H срормат 06ъект- Horo cpaJla) н cpaJl .cod (CHMBOJlbHbI н OTJla,o,04HbI cpaJl) ДЛ снстемы разра60ТКН н nроцесса OTJla,o,KH. В ,lJ,OnOJlHeHHe к фаJlам .coff н .cod, rенернруется cpaJl .Ist (nOJlHbI срал лнстннrа nporpaMMbI), KOTOpЫ p,lJ,OM от06ражает как снмвольны, так н 4нслен ный код nporpaMMbI; IDЕ нмеет ,lJ,ocTYn к зтому cpaJlY JlHCTHHra, от06ражая ero npH ДH зассемБJlнрованнн 4ерез MeHIO View (Вн,lJ,). Aocryn к зтнм сралам 06Ы4НО выполняется нзнyrрн IDЕ н онн, как npaBHJlO, не НСnОJlЬЗУIOТС НН,lJ,НВН,lJ,уально. Ааже nporpaMMaTOp, KOTOpЫ НСnОJlьзует .hex фаJl, 06Ы4НО ynpaBJleTC нзlDЕ. Операторы языка Ассемблера Строкн acceM6JlepHOrO ко.ца называютс операторами. Оператор СО,lJ,ержнт 4eТblpe раЗJlН4НЫХ HHcpopMau.HOHHbIX nOJl: метка, КО,lJ, оnерацнн, операн.ц н KOMMeHTapH. Метка co держнт CHMBOJlbHbI ащ:>ес памяти, по которому оператор может 6ыть ащ:>есован нз Jl1060ro места nporpaMMbI. Так, оператор GOTO Main, раСnОJlоженны по ащ:>есу вектора с6роса, ссылается на метку, размеw,еннyto в .цpyroM месте nporpaMMbI. Ко,lJ, оnерацнн СО,lJ,ержнт KO 
rnaBa 2. Архнтектура семейства PIC18 н разработка nporpaMM 71 ман,lJ,У ассем6лера HJlH AIi1ректнву, которая ynpaBJleT pa60TO мнкроконтромера, acceM6Jle ра нлн nporpaMMbI КОМПОНОВLЩ'1ка. CJlOBO GOTO в GOTO Main ЯВJlетс прнмером KO,D,a one рацнн. OnepaН,lJ,  это JlнтерЭ11, адрес pernCтpoBoro cpaJla HJlH HeKOTopa .цруrая HHcpopMa u.ия, HCnOJlb3yeMa КО,lJ,ОМ операu.нн ДЛ ВЫПОJlнення зада4Н. В Операторе GOTO Main, слово Main - зто OnepaH,lJ" нсnользуемый КО,lJ,ОМ onepau.HH GOTO. nOJle KOMMeHTapH не06затель НО, 06Ы4НО ОНО указывает HeKOTOPYlO HHcpopMau.н1O о nporpaMMe HJlH же HCnOJlb3yeTc ДЛ TOro, 4т06ы Н,lJ,ентнсрнцнровать секu.ню KO,D,a. Комментарнн ,lJ,OJl>KНbI Ha4HHaTbC CHMBOJlOM Т04КН С заnто. Рнс. 2.19 НJlЛlOстрнрует строку ко,о,а С ннформацней в каждом nOJle onepa тора зыка AcceM6Jlepa. Метка. Метка 06Ы4НО npOCTaBJleTC TOJlbKO в строках КО,lJ,а, на которые HMeIOTC Ссыл- кн в какнхлнбо нных местах nporpaMMbI. Метка может COCTOTb нз Jl106bIx CHMBOJlOB, за HCКnlO4eHHeM зарезервнрованных лексем THna КО,lJ,ОВ оnерацн HJlH нмен perHCTpol3. Метка ,lJ,олжна Ha4aTbC С 6уквы (AZ) HJlH С CHMBOJla nодчеркнванн, как, HanpHMep Start. Метка может СО,lJ,ержать Jl1060 CHMBOJl, цнсрnу, CHMBOJl nО,lJ,4еркнвання Jlнбо CHM BOn BonpOCHTeJlbHOrO знака. Меткн 06Ы4НО закаН4нваlOТС ,lJ,воеТ04нем, НО зто не 06за TeJlbHO. Та6л. 2.5 показывает HeCKOJlbKO срорм ,lJ,OnYCTHMbIX меток зыка Ассем6лера. метка Start КО,lJ, onepau.HH MOVLW OnepaH,lJ, KOMMeHTapH ОХОО заrРV>Kает perHcTp WREG значеннем ОхОО Рис. 2.19. Оператор зыка ACCeM6Jlepa Таблица 2.5. npHMepbI меток. Пример метки КоМментарий опустимаR метка оnустимаR метка НеАоnустимаR метка ввмду HanMqMR CMMBona & HeAorrYCTMMaR метка, rroCKonbKY метка AOnHa HaqMHaTbCR С 6YKB nM60 симвоnа rrOAqepKMBaHMR onYCTMMaR метка HeAonYCTMMaR метка, потому qTO addlw преАстаВnRет c060 КОА onepaUMM START: Start Start&Stop: 4Ме: StartStop?: Addlw: КОД операции. nOJle КО,lJ,а onepau.HH ,lJ,OJl>KHO СО,lJ,ержать ,lJ,OnYCTHMbI КОД оnерацнн MHK pOKOHTpOJlJlepa. nOJle КО,lJ,а onepau.HH может также СО,lJ,ержать директиву, которая npeA- CTaBJleT c060 сnецнаJlЬНУIO коман,lJ,У AfI acceM6Jlepa НJlИ KOMnoHonw,HKa. nOJle кода onepau.HH может также СО,lJ,ерЖать нмя макроса. Макрос  зто rpynna коман,lJ,Ю npeABa pHTeJlbHO onpe,lJ,eJleHHa nОJlьзоватеJlем н Н,lJ,ентнсрнu.нруемая YHHKaJlbHO JleKCeMO нлн именем. Ко,lJ, оnерацнн может nнсаться как С ИСnОJlьзов.С1ннем СТр04НЫХ, так н заrлавных букв, О,lJ,нако в 60JlbWe 4астн зтой KHHrH HCnOJlb3YIOT'C заrJlавные 6уквы, 4т06ы нз6е жать oWH60K в np04TeHHH 6уквы "1" н u.исрры "1". Так, напрйМер, npH НСnОJlьзованнн СТР04НЫХ 6укв комаН,lJ,а movlw может 6ыть неверно nрочнтана как mov1w, в то BpeM как MOVLWTPY,lJ,HO СПуТать С MOV1W. IDЕ НСnОJlьзует WPHCPT "курьер" npH от06раженнн npo- rpaMMbI, а в зтом wрнфте CTp04Ha 6уква I н цнфра 1 О,lJ,ннаковы. ПО 3TO npH4HHe npH НСnОJlьзованнн СТР04НЫХ 6укв вместе С u.HcppaMH OWH6KH прочтенн 6у,lJ,уТ 06Ы4НЫМ BJleHHeM. 
72 Прнмененне MHKpOKOHтpOnnepOB PIC 18 Операнд. поле операнда указывает ннсрормаLJ.L4Ю, с KOTOPO ,lJ,oJl>KНa ра60тать onepau.H, за ,lJ,a8aeM КО,lJ,ОМ onepaLJ.L4H. Оно размещаеТCfl справа от ко,о,а оnерсщнн н может 6ыть пустым либо СО,lJ,ер>кэть Jlю6ое 4HCJlO nOJle, раздеJlенных заnтымн. Ta6JlHцa 2.6 ,lJ,емонстрнрует не- сколько коман,о" которые НСnОJlЬ3уюТ pa3JlH4Hoe KOJlH4ecтвO операндов. Комментарий. KOMMeHTapH  это все, что Ha4HHaeTC с CHM80Jla Т04КН с заnто. Все, 4ТО CJle,lJ,yeT nOCJle CHMBOJla Т04КН с заnто, HrHopHpyeTc .0.0 конца строкн. Каждая строка KOMMeHTapH ,lJ,ОJlжна Ha4HHaTbC CHMBOJlOM Т04КН с заnто, поскольку 13 Ас- сем6лере нет cnoc06a nРО,lJ,ОJlженн KOMMeHTapH 8 HeCKOJlbKHX строках, как зто воз- можно В ,lJ,pyrHx зыках. Xopowa nрактнка nporpaMMHp08aHH связана с KOMMeHTHpo ваннем ceKu.H nporpaMMHoro КО,lJ,а, а не OT,lJ,eJlbHbIX коман,lJ,. Так>ке xopowe npaKTHKo Я8лется раЗ,lJ,еJlенне ceKu.H КО,lJ,а по KpaHe мере O,lJ,HO nYCTO CTpOKO. Xopowa nрактнка комментнровання н nроrраммнровання может 6ыть nРОНЛЛlOСТРНР08ана уже рассмотренным намн npHMepoM 2.6. 06ратнте вннманне на то, 4ТО Ka>Kдa nporpaMM ная секu.ня в нем OT,lJ,eJleHa от ,lJ,pyrHx nYCTbIMH н KOMMeHTapHMH с НСnОJlьзованнем CHM 80JlOB точкн С запятой. Это важно, nOCKOJlbKY язык ACCeM6Jlepa неnрозра4ен н KOMMeH тарнн nOMoralOT понять значенне nporpaMMHoro КО,lJ,а. Директивы ДиреКТИВbI - этн сnецнаJlьные коман,lJ,Ы acceM6Jlepy, которые MoryT от06ражаться, а MOryт н не от06ражаться на MawHHHbI КО,lJ,. Анректнвы KJlaCCHcpHu.HPYIOTC по нх cpYHK u.HM Н 06ъсняются В это KHHre в соответствнн с нх срункцнонаJlЬНЫМН rpynnaMH. Ce 4ас мы рассмотрнм не все ,lJ,нректнвы, - некоторые I:1з ннх 6уДуТ рассмотрены позже. В 3ТОМ nО,lJ,раЗ,lJ,еJlе мы рассмотрнм ,lJ,нректнвы, которые HaH60Jlee 4асто НСnОJlЬЗУIOТС npH nporpaMMHpOBaHHH. Таблица 2.6. npHMepbI onepaH,lJ,08 некоторых комаllД Код операции с операндами Комментарий RETURN MOVLW ОхОО MOVFF OxlO,Oxll DЕ 1, 2, 4 , 6, 9 CALL HomeET Оrrеранд отсутствует ОАМН orrepaHA (ОхОО) Ba оrrеранда (OxlO М Ox11) HeCKOnbKO orrepaHAoB ОДМН оrrеранд Таблица 2.7. Анректнвы 06ъектных cpaJlOB Директива ACCESS OVR СОDЕ СОDЕРАСК EXTERN GLOBAL IDATA IDATA ACS UDATA UDATA ACS ОDАТА OVR Комментарий Оверnеный достуrr к озу 06ъектноrо фаnа Haqano 6noKa rrроrраммноrо КОАа Haqano yrraKoBaHHoro 6noKa КОАа 06ЪRВnRет, qTO метка orrpeAeneHa в каком-то ApyroM nроrраммном модуnе 06ЪRВnRет, qTO метка AocTyrrHa ApyrMM nроrраммным МОАУЛRМ Наqинает ceKUM дaHHX мнмuмаnмзаuмм Наqинает секци дaHHX мнмuмаnмзаuим в озу AocTyna Наqинает ceKЦM дaHHX мнмuиаnмзацим Наqинает секци Аанных мниuиаnизаuии достуrrа Наqинает ceKUM оверnейнх дaHHX мниuмаnмзаuмм 
rnaBa 2. Архнтектура семейства PIC18 н разработка nporpaMM 73 Директивы объектноrо файла ynpaBJlIOT тем, как acceM6Jlep reHepHpyeT КО,lJ, в 06ъ ектном фале. 06ратнтесь, вновь, к npHMepy 2.6, н 06ратнте вннманне на то, 4ТО HeKO торые ,lJ,нректнвы ynpaBJlIOT cnoc060M, которым создаетс 06ъeKTHЫ cpaJl. Ta6Jl. 2.7 nepe4HCJleT MHorHe нз ,lJ,нректнв 06ъектноrо cpaJla. HaH60Jlee 06Ы4НЫМН ,lJ,нректнвамн 06ъектноrо фаJlа BJlIOTC ,lJ,нректнвы СООЕ, UDATA н UDATAACS. Анректнва СООЕ onpe,lJ,eJleT раЗJlН4ные секцнн nporpaMMHoro КО,lJ,а. Метка в ,lJ,анном CJlY4ae 6У,lJ,ет нменем ceKu.HH nporpaMMHoro КО,lJ,а, OnepaH,lJ,  зто a6COJlIOTHbI адрес секцнн nporpaMMHoro КО,lJ,а. HanpHMep, 4т06ы nOMecTHTb код по aд ресу вектора с6роса, НСnОJlьзуте оператор RESET _ VECTOR СООЕ ОхОООО, как зто no казано в npHMepe 2.6. 3та днректнва ннсрормнрует ассем6лер о том, 4ТО вектор с6роса Ha4HHaeTC по адресу nporpaMMbI ОхОООО. ECJlH ,lJ,нректнва СООЕ нсnользуетс 6ез MeT кн лн60 операнда, то Tor,lJ,a ceKЦHe КО,lJ,а 06Ы4НО 6У,lJ,ет OCHOBHO текст nporpaMMbI н acceM6Jlep сам onpe,lJ,eJleT адрес. npHMep 2.8 показывает то, как ,lJ,нректнва СООЕ MO жет НСnОJlьзоватьс в снстеме npH разра60тке nporpaMM. Пример 2.8 RESETS HERE GOTO HIGH INT GOTO LOW INT СОDЕ ОхОООО Му Stuff СОDЕ ОхОО08 HighInterrupt СОDЕ ОхОО18 ;rro С6росу rrepeXOA CAa ;всокоnрморитетное npepblBaHMe ;HM3KonpMopMTeTHoe npepBaHMe GOTO LowInterrupt СОDЕ ;КОА 6ез nреАваритеnьно onpeAeneHHoro аАреса HighInterrupt: ; **** CAa заНОСМТСR КОА 06ра60ТКМ BblCOKonpMopMTeTHoro npepBaHMR **** Lowlnterrupt: **** CAa заНОСМТСR КОА 06ра60ТКМ нмзкоrrрмормтетноrо npepBaHMR **** MyStuff: **** CAa заНОСМТСR КОА rrрмnоеНИR **** ЕНD ;KOHeu фаnа Анректнвы UDATA н UDATAACS резервнруlOТ пространство в nамятн данных для переменных. nporpaMMbI HaMHoro Jler4e 4нта1OТСЯ, eCJlH в ннх меткн, а не 4нслоые aд реса НСnОJlЬЗУIOТС д,л H,lJ,eHTHcpHЦHpOBaHH адресов naMTH ,lJ,анных. nOCMOTpHTe вновь прнмер 2.6 н 06ратнте вннманне на то, 4ТО 06JlaCTb naMTH зарезервнрована AflЯ трех переменных ,lJ,HpeКТHBO UDATA. Эта 06JlaCTb Ha4HHaeTC по адресу perHCTpa ,lJ,анных ОхО80, кроме Toro 06JlaCTb naMTH д,ля O,lJ,HO nepeMeHHo оnре,lJ,елена ,lJ,HpeKTHBO UDATAACS. Эта 06JlaCTb на4ннается по адресу perHcTpa ,lJ,анных ОхООО. Не за6ывате, что память 6анка ,lJ,ocryna (ACS в ,lJ,нректнве) HaXO,lJ,HTC по адресам perHCTpoB от ОхООО ДО Ox7F. Остальна 4асть 6анка ,lJ,OcTyna СО,lJ,ержнт спецнаJlьные срункцнональные perH- стры, размещенные по адресам от OxF80 .0.0 OxFFF, как зто оnре,lJ,елено ,lJ,HpeКТHBO UDATA. Анректнвы IDАТА н IDATAACS nохожн на ,lJ,нректнвы UDATA н UDATAACS, за HC КЛЮ4еннем Toro, 4ТО онн НСnОJlЬЗУIOТС AfI нннцналнзацнн naMTH ,lJ,аннымн вместо резервнрованн пространства naMTH. Microchip отме4ает, 4ТО ,lJ,нректнвы IDАТА н IDATAACS MOryT не CPYHKu.HoHHpoBaTb корректно в CJlY4ae НСnОJlьзованн 3MYJlTopa. ПО это npH4HHe онн не ,lJ,ОJlЖНЫ НСnОJlьзоватьс AfI нннцнаJlнзацнн ,lJ,анных. Еслн вам He оБХО,lJ,нмо разместнть ,lJ,анные в памтн, наnншнте nporpaMMHbI КО,lJ" KOTOpЫ нннциа лнзнрует ,lJ,анные. Днректнва СООЕ так>ке НСnОJlьзуетс AflЯ нннцнаJlнзаu.нн naMTH ,lJ,анных эсnnзу, как nоказано в npHMepe 2.6. npH сохраненнн ,lJ,анных в зсnnзу нсnользуте 
74 TIpHMeHeHHe MHKpOKOHTpOnnepOB PIC 18 адреса от OxFOOOOO, как nоказано в npHMepe 2.9. У6е,lJ,нтесь в том, 4ТО вы НСnОJlьзуете ,lJ,нректнву IDЕ AfI сохранення ,lJ,анных в 3СnnЗУ, как 06 зтом rOBOpHJlOCb в rJlaBe 1. 06 ратнте вннманне на то, 4ТО адрес OxFOOOOO не ЯВJlяется а,lJ,ресом в naMTH nporpaMM, он так>ке не BJleTC реальным адресом 3СnnЗУ. 3то а,lJ,рес, KOTOpЫ снrналнзнрует IDЕ, 4ТО 3ТО данные AflЯ ЭСnnЗУ  н HH4ero 60Jlbwe. Пример 2.9 EEPROM МЕМ СОDЕ OxFOOOOO DЕ "This is for my EEPROM!", О ;HyneBaR строка CcTMnR Директивы управления. ДиреКТИВbI управления BJlIOTC cJle,lJ,YIOw,e HaH60Jlee pac npocTpaHeHHO rpynno ,lJ,нректнв ACCeM6Jlepa, которые ynpaBJlIOT acceM6JlepOM, а так>ке, н Hor,lJ,a, н nроцессом компоновкн. HaH60Jlee pacnpocTpaHeHHbIMH ВЛlOтся CJle ,lJ,УlOщне ynpaBJlIOw,He ,lJ,нректнвы: #include, end, processor, equ н set. Ta6Jl. 2.8 nepe 4НСJlяет ,lJ,нректнвы уnраВJlення MHKpOKOHTpOJlJlepOB PIC. Не все ,lJ,нректнвы ynpaBJleHH рассмотрены З,lJ,есь, а TOJlbKO те, которые наи60лее 4асто НСnОJlЬЗУIOТС npH nporpaMMHpOBaHHH. БОJlее nOJlHOe OnHcaHHe ,lJ,нректнв ynpaB JleHH, не рассмотренных в ,lJ,aHHO KHHre, 06paw,aTecb к ,lJ,окументацнн на Ассемблер MPASM, которая размеw,ена на caTe срнрмы Microchip. Анректнва #include BKJl104aeT cpaJlbI КО,lJ,ОВ, 4асто называемые cpaJlaMH заrолов ков, зыка С. npHMep 2.6 показывает npHMep ее НСnОЛЬЗ0вання, KOr,lJ,a она nрнменяется AfI ,lJ,06aBJleHH СО,lJ,ержнмоrо cpaJla P18F1320.INC к JlHCTHHry КО,lJ,ОВ. ФаJl P18P1320.INC  3ТО BKJl104aeMbI фаJl, KOTOpЫ содержнт ннсрормацнlO (в ОСНОl3ном, 3ТО ,lJ,нректнвы equ), KOTopa onpe,lJ,eJleT консрнrурацнlO PIC18P1 320 н ero perHCTp013, а так>ке СО,lJ,ержнт друrylO ннсрормацнlO о MHKpOKOHTpOJlJlepe. Анректнва end, XOT 3ТО н может nоказаться ннтунтнвно CHЫM, ,lJ,олжна nOMe w,аться в конце фала nporpaMMbI. ECJlH 3Toro не сделать, то cpaJl не будет ассемблн- pOBaTbC. Не nOMew,aTe ,lJ,нректнву end во BKJl104aeMbI срал, нбо в зтом СЛУ4ае про u.ecc ассем6лнрованн, называемы построеннем, останоl3НТС в конце I3KJlI04aeMoro cpaJla. Анректнва end ВJlется CHrHaJlOM acceM6Jlepy заверwнть процесс ассемблнро вання, n03ToMY HH4ero, 4ТО СJlедует nOCJle 3TO ,lJ,нректнвы, не БУ,lJ,ет охва4ено зтнм про цессом. Анректнва processor, KOTopa Н,lJ,ентнфнцнрует npou.eccop, нсnользуется с фа лом nроекта,  она может НСnОJlьзоватьс, а может н не НСnОЛЬЗQ[3аТЬС 13 зтом срале. ECJlH THn npou.eccopa вы6ран в ceKu.HH консрнryрнровання IDЕ, то нет не06ходимостн I3KJl104aTb 3ТУ ,lJ,нректнву в cpaJl nporpaMMbI. Во MHorHX СJlУ4аях ,lJ,нректнва processor не BKJlI04aeTC в cpaJl nporpaMMbI. Анректнва equ HJlH ,lJ,нректнва 3KBHBaJleHTHOCTH YCTaHaBJlHBaeT зквнвanенТlIOСТЬ зна4ення нлн меткн друrо метке. Еслн вы npocMOTpHTe О,lJ,НН нз cpaJlOI3 заrОJlОI3КОI3, nре,lJ,оставляемых IDЕ, то сможете заметнть, 4ТО в ннх HCnOnb3YIOTc MHoro днректн13 equ, nрнравннваlOЩНХ а,lJ,реса СФР меткам. HanpHMep, WREG npHpal3HHl3aeTC OxFES, n03ToMyWREG может 6ыть НСnОJlьзован в nporpaMMe по нменн, а не по номеру. ФаJlЫ BKJlI04eHH н ,lJ,нректнвы equ ,lJ,елаlOТ nporpaMMbI на зыке ACCeM6Jlepa 60Jlee JlerKHMH AflЯ HanHcaHH н np04TeHH. 
rnaBa 2. Архнтектура семейства PIC18 н разработка проrpамм 75 Таблица 2.8. Днректнвы ynpaBJleHH Директива #define #include #undefine Constant End Equ Org Processor Radix Set Variable Комментарий OnpeAenReT текстовое замеенме меткм BKnqaeT МСХОАНЫЙ an YAanReT замеенме меткм OnpeAenReT cMMBonbHY константу KOHeu nporpaM (не06ХОАмма) Ормравнмвает константу 3аАает HaqanO 6noKa B6MpaeT TMn npoueccopa Спеuммuмрует мсnоnьзуемое по YM0nqaHM основанме CMCTe CqMCneHMR OnpeAenReT nepeMeHHY AcceM6nepa OnpeAenReT CMMBonbHY nepeMeHHY Таблица 2.9. nеречень ,lJ,нректнв Директива error errorlevel list messg nolist page space subtitle title Комментарий BAaeT co06eHMe 06 ошм6ке 3аАает уровень co06eHMR 06 ошм6ке YCTaHaBnMBaeT TMn npoueccopa м BxoAHoro ana, а Tae MHe мсhоnьзуеме по YM0nqaHM знаqеНМR AnR nроrраммноrо nMCTMHra 3аАает nOnb30BaTenbCKoe co06eHMe OTKnqaeT nMcTMHr ВВОАМТ HOBY CTP?HMUY nMcTMHra BCTaBnReT nYCTY строку в nMCTMHr CneUMMUMpyeT nОАзаrоnовок nporpaM CneUMMUMpyeT названме rrporpa Днректнва set нсnользуетс AfI установкн метки, эквнвалентно зна4еннlO, KOTO рое может 6ыть нзменено позже nocpe,lJ,CTBOM HOBO установки зна4енн это же меlКИ. Днректнва set нсnользуетс менее 4асто при nроrраммированнн, 4ем ,lJ,нректнва equ, прн этом по ,lJ,eCTBHIO она похожа на ,lJ,нректнву equ. Директива List. Днректнва list nре,lJ,назна4ена AfI уnравленн npou.eccoM cpopMHpOBa НИ лнстннrа. Та6л. 2.9 nере4нслет HMelOw,Hec ,lJ,нректнвы ynpaBJleHH JlHCTHHrOM. Сре,lJ,Н всех этнх ,lJ,нректнв 4aw,e Bcero НСnОJlьзуетс ,lJ,нректнва list. Днректнва list ynpaB ляет 06W,HM npou.eccoM cpopMHpOBaHH JlHCTHHra AfI выбранноrо MHKponpou.eccopa. Повлетс co06w,eHHe, как в npHMepe 2.6, в котором в ка4естве THna npou.eccopa AfI лнстннrа YCTaHOBJleHO P=18F1320, а F=INHX32 BbI6HpaeTTHn BbIXO,lJ,HOrO срала. В ,lJ,анном npHMepe BЫXO,lJ,HO cpaJl нмеет 32-разр,lJ,НЫ weCTHaдu.aTHpH4HbI срорма Intel. Директивы управления данными. Днректнвы уnравленн ,lJ,аннымн, которые onHcbIBalOT данные, nОВЛlOтс в nporpaMMax во MHorHX местах. Онн, nOBH,lJ,HMOMY, ВЛlOтс HaH более нсnользуемым THnoM ,lJ,нректнв ACCeM6Jlepa. MHorHe нз ннх 6ыли onHcaHbI в rлаве 1 npH оnре,lJ,еленнн ,lJ,анных, некоторые OnHCbIBaIOTc З,lJ,есь. Днректнвы уnравленн даннымн в 06w,eM СЛУ4ае onpe,lJ,eJlIOT THn данных. Смотрнте Ta6Jl. 2.10, в KOTOpO ne pe4HCJleHbI ,lJ,нректнвы ynpaBJleHH ,lJ,аннымн 
76 ITpHMeHeHHe MHKpOKOHTpOnnepOB PIC 18 Таблица 2.10. Днрективы уnравленн даннымн Директива badram badrom config config . idloca maxram maxrom cblock da data db de dt dw endc fill res Комментарий MAeHTMMUMPyeT нереаnмзованное ОЗУ MAeHTMMUMpyeT нереаnмзованное DЗУ YCTaHaBnMBaeT 6MT KOHMrypMpoBaHMR npoueccopa YCTaHaBnMBaeT 6MT KOHMrYPMpoBaHMR npoueccopa в ceMeCTBe PIC18 YCTaHaBnMBaeT знаqенме RqeeK naMRTM MAeHTMMKaUMM npoueccopa YCTaHaBnMBaeT MaKcMManbH 06ъем ОЗУ YCTaHaBnMBaeT MaKcMManbH 06ъем DЗУ OnpeAenReT 6noK nOCTORHHX AaHHX CoxpaHReT строкм в naMRTM nporpaMM (PIC12/16) СОЗАает qMCneHHe м TeKCTOBe AaHHe OnpeAenReT 6aT OnpeAenReT AaHHe ЭСDDЗУ OnpeAenReT Ta6nMU (PIC16/12) OnpeAenReT cnoBa Заверwает 6noK aBTOMaTMqeCKMX констант ЗаnОnНRет naMRTb константамм Резервмрует naMRTb HaH60Jlee 4асто НСnОJlьзуемымн ,lJ,нректнвамн ynpaBJleHH ,lJ,аннымн в ceMeCTBe PIC 18 BJlIOTC: db, de, dw н res, как это onHCbIBaJlOCb в rnaBe 1. E.o.HHCTBeHHO друrо 4асто НСnОJlьзуемо днректнвой ynpaBJleHH ,lJ,аннымн в nporpaMMo PIC 18 влетс ,lJ,нректнва config. Не nyтaTe ,lJ,нректнву _config с ДHpeKTHBO) config. Директнва config может НСnОJlьзоватьс в ceMeCTBe PIC 18 так, как это nоказано в npHMepe 2.6. 3та ,lJ,H ректнва устанавлнвает KOHcpHrypau.HIO MHKponpou.eccopa AfI nроекта. 3тн 6иты и нх CPYHKu.HH раз6нраlOТС в nосле,lJ,УIOw,нх раЗ,lJ,елах это KHHrH. 2.5. Резюме 1. Архнтектура PIC нсnользует rapBap,lJ,cкylO apXHTeкrypy, раЗ,lJ,ел naMTb npo rpaMM н naMTb ,lJ,анных. Назна4еннем ,lJ,aHHO архнтектуры влетс 60лее зсрсректив ное BbInOJlHeHHe nporpaMM. 2. PIC  это caMO,lJ,OCTaT04Ha KOMnblOTepHa снстема, cO,lJ,ep>Kaw,a naMTb н уст  pOCTBa BBO,lJ,aBЫBO,lJ,a. 3то сннжает стонмость реаJlнзацнн снстем. 3. naMTb nporpaMM, ,lJ,ocТYnHa в PIC, нмеет 06ъем от 4К 6aT .0.0 128К 6aT, в за внснмостн от YCTpOCTBa ,lJ,aHHoro ceMeCTBa, BbI6paHHoro AfI реалнзацнн nрнложени. Всле,lJ,ствне Toro, 4ТО 60JlbWHHCTBO коман,lJ, нмеет AflHHY в ,lJ,ва 6aTa, это 06есnе4ивает возможность ИСnОJlьзованн в nporpaMMax от 2К .0.0 64К коман,lJ,. Bc naMTb nporpaMM ,lJ,oCТYnHa 4ерез 21-разр,lJ,НУIO aдpecau.HIO. 4. naMTb nporpaMM opraHH30BaHa в perHCTpOBbI срал. Bc naMTb ,lJ,анных нмеет разр,lJ,НОСТЬ в 8 6нт Н нзмен'етс по 06ъему от 256 .0.0 3840 6aT nJlIOC ,lJ,оnолннтеJlьные 128 6aT AfI сnеu.нальных срункu.нональных perHcTpoB. Bc naMTb ,lJ,анных a,lJ,pecyeTC 4ерез 12-разр,lJ,НЫ адрес. 5. Сnецнальные СРункu.нональные perHCTpbI (СФР) НСnОЛЬЗУIOТС как pa604H pe rHCTp (W); AfI СО,lJ,ер>канне nронзве,lJ,енн nOCJle YMHO>KeHH (perHCTpbI nронзведенн); и M KOCBeHHO aдpecau.HH perHCTpoB ,lJ,анных 4ерез perHCTpbI вы60ра сралов (FSR), 6и тов COCTOHH В perHCTpe COCTOHH, а так>ке С4еТ4нка коман,lJ, AfI nросле>кнвани хода выnолненн nporpaMMbI. V1MeeTC так>ке MHoro ,lJ,pyrHx СФР, нсnользуемых,lJ,Jl уnравле ния YCTpOCTBaMH BBO,lJ,aBЫBO,lJ,a МНКрОКОНТрОЛJlера, как это 6удет 06CY)I(ДaTbC в no 
rnaBa 2. Архнтектура семейства PIC 18 н разработка проrpамм 77 сле,lJ,УIOw,их rлавах. 6. Направление nepeMew,eHH ,lJ,анных AfI порта BBO,lJ,a-ВЫВО,lJ,а nporpaMMHpyeTc 4ерез perHCTp TRIS порта, npH этом лоrН4еска 1 nporpaMMHpyeT cooTBeTcTBYIOW,H 6нт как вход, а О  как ВЫХО,lJ,. порт А НСnОJlьзует TRISA, порт В НСnОJlьзует TRISB н Т.,lJ,. 7. Аанные C4HTbIBaIOTC лн60 заnнсываlOТС 4ерез WTbIPbKH BBO,lJ,aBЫBO,lJ,a, HC nользу perHcTp РОАТА AfI perHcTpa А нлн РОАТВ AfI порта В. 8. Снстема разра60ТКИ nporpaMM, нсnользуема ДЛ rенернровани nporpaMM AflЯ микроконтроллеров PIC, называетс HHTerpHpoBaHHo cpe,lJ,O разра60ТКН ИJlН IDЕ. IDЕ предоставляет редактор AfI ВВО,lJ,а nporpaMMHoro КО,lJ,а, доступ к nporpaMMaTopy AfI nporpaMMHpoBaHH кода в МНКРОКОНТРОЛJlер PIC, ,lJ,ocтyn к ВНуТрнсхемному эмул тору, а так>ке ,lJ,OCTYn к нмнтатору, nОЗВОЛIOw,ему выnолнть эмулu.ИIO nporpaMMbI на персональном KOMnblOTepe. 9. IDЕ нннu.налнзнруетс AfI HOBoro npoena noCpe,lJ,CTBoM вы60ра THna npou.ec сора нз MeHIO ConfigurejSelect Device (КонсрнryрироватьjВы6рать YCTPOCTBO), а TaK же noCpe,lJ,CTBoM запуска мастера npoenoB  cooTBeTCTBYIOw,a nознu.н HaXOДHTC в развора4нваlOw,емс MeHIO nознu.нн rJlaBHoro MeHIO Project (npoeKT). 10. Оператор зыка Ассем6лера COCTaBJleH нз 4етырех nоле: метка, КО,lJ, опера- цин, onepaH,lJ, н KOMMeHTapH. 11. поле меткн  это C\I1MВOnbНbI адрес naмяIVI, npe,DJ-ia3Нa4eННbIе ,lJJlЯ и.центифнu.ированн я-JeЙЮtI naмяIVI. Меткэ,D,OЛ>KНa нCПOJlЬЗОВаТЬСЯТOJlЬКО, еслн Я4еЙка,D,OЛ>KНa а,ОРеСОВаТЬСЯ и3 nporpaмMbl. 12. Поле кода оnерацин СО,lJ,ержит команду мнкроконтроллера HJlH .циректнву acceM6Jle ра. Код оnераu,ин дает комаНду микраКОнтрОJlЛеру BbInOJlHHТb kakylO-лн60 оnераu,иlO. 13. Поле операнда содержит ннсрормациlO, нсnользуемую кодом оnераu,ии ДJl выnолнени ICOман,ЦЫ. Операндом может 6ьпь HM реrистра, адрес ОЗУ данных, 4HCJleHHoe зна4ение и Т.Д. 14. Поле KOMMeHTapH не 06pa6aTЫBaeTC acceM6JlepOM, О,lJ,нако оно npe,lJ,oCTaB ляет nporpaMMHCТY мето,lJ, KOMMeHTHpOBaHH 6JlOKOB КО,lJ,а с тем, 4т06ы nporpaMMa стала более 4ита6еJlЬНО. 15. Анректнва  это комаН,lJ,а ассем6леру HJlH KOMnOHOBw,HKY, KOTopa 4асто не re- нернрует никаких КО,lJ,ОВ В naMTH nporpaMM лн60 naMTH ,lJ,анных. Днректнвы ynpow,alOT зада4У HanHcaHH nporpaMMbI. 2.6. Вопросы и задания 1. На рисунке 2.1 мнкроконтроллерна снстема не СО,lJ,ержнт naMTH. r,lJ,e разме щена в He naMTb MHKPOKOHTpOJlJlepa? 2. Что такое rapBap,lJ,CKa архнтектура? 3. Сравннте rapBap,lJ,CKYIO архнтектуру с apXHTeктypo срон HeMaHa. 4. Что такое KOHBeepHa 06ра60тка ннсрормацнн н как она nOBbIwaeT эсрсректнв ность BbInOJlHeHH nporpaMMbI? 5. naMTb nporpaMM нмеет разр,lJ,НОСТЬ B6HTOB. 6. naMTb ,lJ,анных нмеет разр,lJ,НОСТЬ B6HTOB. 7. Что такое nepBbI н nосле,lJ,НН а,lJ,реса В naMTH nporpaMM PIC? 8. Что такое nepBbI н nосле,lJ,НН а,lJ,реса В naMTH ,lJ,анных 9. naMTb nporpaMM НСnОJlьзует адрес В разр,lJ,ОВ В ceMeCTBe PIC 18. 10. Адрес ,lJ,анных в ceMeCTBe Р1С18 BJleTC  разр,lJ,НЫМ а,lJ,ресом. 11. В 4ем разннu.а М8>КДУ 18F cepHe PIC н 18С cepHe PIC? 12. ECJlH HMeeTC 3СПnЗУ в Р1С18, r,lJ,e оно расположено н как a,lJ,pecyeTC? 13. Еслн PIC18F6620 НСnОJlьзуетс npH разра60тке снстемы, ero адреса nамти nporpaMM на4инаlOТС с  н закаН4иваlOТС . 14. Еслн PIC18F442 НСnОJlьзуетс npH разра60тке системы, ero адреса nамти nporpaMM Ha4HHaIOTC с  н закаН4нваlOТС . 15. Сколько WeCTHa,lJ,u.aTHpH4HbIX 4eeK naMTH СО,lJ,ержнт naMTb на 12К? 
78 ITpHMeHeHHe MHKpOKOHTpOnnepOB PIC 18 16. Если 06ласть 16К nамти Ha4HHaeTC по адресу nамти npOl-рамм ОхОО4000, каким 6У,lJ,ет nOCJle,lJ,HH а,lJ,рес это 06ластн? 17. Какнмн 6у,lJ,уТ на4альны и nосле,lJ,НИ а,lJ,реса naMTH ,lJ,анных в мнкроконтрол- лере 18F452 PIC? 18. r,lJ,e HaXO,lJ,TC perHCTpbI, которые nроrраммируlOТ YCTpOCTBa ввода вывода CLI1CTeMbI? 19. r,lJ,e в naMTH ,lJ,анных HaXO,lJ,TC сnецнальные срункциональные реrнстры 1.3 МНКРОКОНТРОЛJlере PIC? 20. Каково назна4енне pa604ero perHcTpa? 21 . Что такое aKKYMYJlTOp? 22. r,lJ,e раСnОJlожен perHcTp W в мнкроконтроллере PIC? 23. KaKYIO 4асть naMTH PIC 4асто называlOТ perHcTpoBbIM сралом? 24. Каково назна4енне трех perHCTpOB вы60ра сралов в PIC? 25. Каково назна4енне perHCTpoB вы60ра 6анка n04eMY он не06ходнм? 26. r,lJ,e нужно смотреть  не nронзоwел JlH перенос после сложенн? 27. Каково назна4енн 6ита В perHCTpa состони? 28. Что такое perHCTpbI TRIS? 29. Как реrистр ТА1 SB nporpaMMHpyeTc на вы60Р оnерацнн вывода ДЛ 6ито1.3 порта В от О .0.0 2 оnерацнн ВВО,lJ,а AfI WTbIPbKOB ОТ 3 .0.0 7 порта В? 30. Как 4НСЛО Ох33 nepe,lJ,aeTC на WTbIPbKH порта А, еслн порт А заnроrраммиро ван как порт ВЫВО,lJ,а? 31. n04eMY HMeeTC на60Р perHcTpoB AfI nронзве,lJ,енн и r,lJ,e зтн реrистры? 32. CKOJlbKO 86HTHЫX perHCTpoB СО,lJ,ержат С4еТ4НК коман,lJ,? 33. Каково назна4енне С4еТ4нка коман,lJ, н n04eMY он называетс С4еТ4НКОМ? 34. Что такое IDE? 35. KaкylO ннсрормаu.иlO СО,lJ,ержнт cpaJl Wa6JlOHa МНКРОКОНТРОЛJlера? 36. IDE нсnользуетс при разра601;ке nporpaMM, а какне нные зада4Н она может выnолнть ? 37. Что такое мастер nроекта н n04eMY он не06хо,lJ,НМ? 38. Что такое имнтатор? 39. Какне 4етыре 4астн оператора Ассем6лера вы знаете н каково нх назна4енне? 40. В ннжеnрнве,lJ,енных операторах AcceM6Jlepa Н,lJ,ентнсрнu.ируте nол операторов: а. Start: GOTO Heaven Ь. ADDLW Ох29 ;addaOx29 с. Loopy 1: MOVFFWREG, Ох145 ;nepeMew,eHHe 41. Какне Н3 сле,lJ,УIOw,нх меток BJlIOTC ,lJ,onYCTHMbIMH? а. 2РАА Ь. FARAWAY с. FAR_A_WAY d. FarAWay 42. Что такое npou.ecc ассем6лнрованн? 43. Что такое исхо,lJ,НЫ cpaJl? 44. Что такое 06ъeKTHЫ cpaJl? 45. Каково назначенне KOMnoHoBw,HKa? 46. Что такое .Ikr -сраJl? 47. Каково назна4енне ,lJ,нректнвы UDATA? 48. Каково назна4енне ,lJ,нректнвы СООЕ? 49. Анректнва ОЕ нсnользуетс AfI размеw,енн ,lJ,анных в . 50. Что ,lJ,елает ,lJ,нректнва СООЕ Ох1 ООО? 51 . ,lJ,n 4ero в nроекте НСnОJlьзуетс ,lJ,нректнва LIST? 52. Что ,lJ,eJlaeT оператор ОАТА1 RES 2? 53. Что делает комаН,lJ,а GOTO? 
rnaBa 3. Набор коман)]. семейства PIC18 79 rлава з. Набор комаНА семейства PIC18 3то О,lJ,на нз нан60лее важных rлав во Bce это KHHre. В He разъснетс cpYHK u.HoHHpoBaHHe коман,lJ, нз на60ра коман,lJ, мнкроконтроллеров ceMeCTBa PIC18. XOT npH nроrраммнрованни 04ень 4асто НСnОЛЬЗУlOтс зыкн nporpaMMHpoBaHH BbICOKoro ypOBH THna С, важно nOHHMaTb ра60ТУ Ka)l(,lJ,o коман,lJ,Ы, nOCKOJlbКY npH этом ЛУ4wе no- нимаетс ра60та МНКРОКОНТРОJlлера в целом. 3та rJlaBa также ,lJ,емонстрирует оrрани- 4eHH мнкроконтроллера. Ka)l(,lJ,a комаН,lJ,а нлн rpynna команд в ,lJ,aHHO rлаве nредставлетс с ИСnОJlьзова ннем не60ЛЬWНХ nрнложенн, которые Moryт 6ыть вве,lJ,ены н выполнены в IDЕ. 3то no зволет иссле,lJ,овать ра60ТУ коман,lJ, н ЛУ4wе ее nOHTb 6лаrО,lJ,ар нмнтатору IDЕ. В 3TO rлаве развнваlOТС MHorHe Н,lJ,еи н концеnu.нн, которые у>Ке рассматрнвалнсь в rла вах 1 н 2. Как только 6У,lJ,ет nOHT на60Р коман,lJ" в nосле,lJ,УIOw,нх rлавах 6у,lJ,УТ paCCMOT рены nрнложенн, которые ВЫnОЛНlOт ,lJ,ocтyn к YCTpOCTBaM BBO,lJ,a-ВЫВО,lJ,а. nOcJle НЗУ4енн ,lJ,aHHO rлавы вы сможете: 1. OnHcbIBaTb срункцноннрованне режнмов адресацнн, HMelOw,Hxc в микрокон троллере. 2. Аетально OnHCbIBaTb ра60ТУ Ka>K,lJ,O коман,lJ,Ы нз на60ра команд мнкроконтрол лера. 3. Разра6атывать н нмнтировать BbInOJlHeHHe короткнх nporpaMM, НСnОJlЬЗУ IDЕ. 4. Описывать процесс nporpaMMHpoBaHH с НСnОJlьзованнем nporpaMMHbIx KOHCT рукцн . 5. V1сnользовать KOCBeHHYIO адресаu.нlO npH доступе к naMTH данных. 6. V1сnользовать Ta6JlH4HYlO адресацнlO npH ,lJ,ocтyne к naMTH nporpaMM. 7. reHepHpoBaTb н нсnользовать в nporpaMMe макроnоследователы,IOСТН. 3. 1. Литеральные команды nepe,lJ, тем, как нсnользовать коман,lJ,Ы в nporpaMMe, не06хо,lJ,НМО nOHTb режимы адресацнн, которые MOryr нсnользоватьс этнмн комаН,lJ,амн. ДaHHЫ nО,lJ,раЗ,lJ,ел разъ- яснет раЗЛН4ные режнмы aдpeCau.HH, ,lJ,ocТYnHbIe в мнкроконтроллерах ceMeCTBe PIC18, а также cooTBeTcTBYIOw,ee npHMeHeHHe коман,lJ, с нсnользованнем зыка Ассем6- пера. Литеральные команды Лнтеральна aдpecaЦH  это, nовнднмому, caMЫ леrки AflЯ nонимани THn aд pecau.HH, поэтому рассмотрнм ero первым. Лнтерал  это константа, TaKa как 4ИСЛО или ASCIICHMBOJl. БОJlЬWННСТВО нз коман,lJ, с JlHTepaJlbHO a,lJ,pecaЦHe pa60TalOT с pa60 чим perHcTpoM WREG. В Ta6Jl. 3.1 все ,lJ,ocТYnHbIe лнтеральные.'коман,lJ,Ы, HMelOw,Hec в наборе коман,lJ, ceMeCTBa PIC18. Больwннство лнтеральных коман,lJ, НСnОЛЬЗУlOт BTOpO бат 16-тн разр,lJ,НО коман,lJ,Ы AfI xpaHeHH Jlнтеральных ,lJ,анных. ECJlH вам He06XOДH мы 60лее ,lJ,етальные CBe,lJ,eHH относнтельно 4нсленных MaWHHHbIx КО,lJ,ОВ ко ман,lJ" пожа- луйста, 06paw,aTecb к nРНJlоженнlO А, в котором nере4нслены все команды в срормате численноrо MaWHHHoro кода совместно с ,lJ,Pyro nолезно HHcpopMaЦHe о них. 
80 ITpHMeHeHHe MHKpoKoHTponnepoB PIC 18 Таблица з. 1. ЛитераJlьные команды Код Операнд 1 Операнд 2 Примеры Комментарий операции ADDLW Лмтераn ADDLW Ох20 06aBnReT Ох20 к W ADDLW.100 06aBnReT 100 к W ANDLW Лмтераn ANDLW OxOF М OxOF с W ANDLW 15 М 15 деся'rмчноrо С W ANDLW М ABOMqIlOl'O 00001111 С W ObOOOOl 111 IORLW Лмтераn IORLW Ох80 BKn4aee ЮIИ Ох80 С W IORLW 1 BKnqaee J1ЛИ 1 С W LFSR Номер Лмтераn LFSR 0,Ох123 ЗаI'руае'l' FSH.O Ох123 peI'MCTpa FSR LSFR2,Ox10 ЗаI'руает FSR2 Ох010 MOVLB Лмтераn MOVLB 2 ЗаI'руает 2 в BSR MOVLB О ЗаI'руает О в BSR MOVLW Лмтераn MOVLW 3 ЗаI'руает 3 в W MOVLW Ох34 ЗаI'руает Ох34 в W MULLW Лмтераn MULLW .100 YMHoaeT W на 100 MULLW 2 YMHoaeT W на 2 RETLW Лмтераn RETLW 2 Возврат npM W = 2 RETLW Ох2А Возврат W Ох2А SUBLW Лмтераn SUBLW 5 B4MTaHMe W мз 5 SUBLW.19 BqMTaHMe W мз 19 XORLW Лмтераn XORLW 4 МСКn4мтеnьноеJ1ЛМ 4 С W XORLW oxf'O Мскnюqмтеnьное-J1ЛМ OxFO С W 06ратнте вннманне (см. та6л. 3.1), 4ТО HMeeTC не так MHoro лнтеральных коман,lJ" которые CJle,lJ,yeT НЗУ4НТЬ. Первые трн 6уквы 60льwннства лнтеральных команд указы BalOT оnерацнlO, выnолнемуlO KOMaH,lJ,O. Как отме4алось в rлаве 1, ЦN может выnол HTb только несколько onepau.H: АОО (сложенне), AND (лоrН4еское V1), 10R (ВКЛI04аlO w,ee V1ЛV1), MOV (KonHpoBaHHe), MUL (умноженне), SUB (ВЫ4нтанне) и ХОА (HCКnI04H тельное ОА). nOCJle,lJ,HHe ,lJ,ве 6уквы КО,lJ,а onepau.HH ,lJ,alOT ,lJ,ОnОJlннтельнуlO инсрормациlO о команде. HanpHMep, 6уква L указывает на лнтерал, а 6уква W указывает на perHCTp WREG. 3то озна4ает, 4ТО комаН,lJ,а ADDLW CKJla,lJ,bIBaeT JlHTepaJlbHbI операнд С СО,lJ,ержн мы м реrистра WREG. Е,о,ннственнымн комаН,lJ,амн, которые не nРИ,lJ,ерживаlOТС 3TO схемы, ВЛlOтс коман,lJ,Ы LFSR н MOVLB. КомаН,lJ,а LFSR заrружает литерал (06ычно а,lJ,рес perHCTpoBoro срала) в О,lJ,НН нз трех perHCTpoB вы60ра срала FSR, используемых ДЛ KOCBeHHO aдpecau.HH naMTH ,lJ,анных. КомаН,lJ,а MOVLB заrру>Кает perHCTp вы60ра 6анка (BSR) 4НСЛОМ между О, AfI 6анка 0,.0.0 15, AfI 6анка 15. В МНКРОКОНТРОJlлерах PIC на60Р арнсрмеТН4ескнх н лоrН4ескнх коман,lJ, не BJleT c полным. Так, комаН,lJ,а деJlенн в мнкроконтроллерах ceMeCTBa PIC не реалнзована, О,lJ,нако команда умноженн реалнзована. Еслн в снстеме не06хо,lJ,НМО выnолннть де1lе нне, то нужно реалнзовать nporpaMMHoe 06ecne4eHHe, которое peWHT эту зада4У. В 06w,eM СЛУ4ае арнсрмеТН4ескне н лоrН4ескне оnераu.ии нзменIOТ состоянне 6нтов perHCTpa COCTOHH. V1CKJlI04eHHeM влетс команда умноженн, которая не OKa зывает HHKaKoro влннн на 6нты perHCTpa COCTOHH. (BcnoMHHTe, 4ТО 6иты perHCTpa COCTOHH HrpalOT важнуlO роль, nOCKOJlbKY МНКРОКОНТРОJlлер НСnОJlьзует их при nРИII тнн решенн). ,lJ,n НЛJllOстраu.нн нзмененн 6нтов perHCTpa состони может 6ыть BЫ nолнена npoCTa nporpaMMa, nоказанна в npHMepe 3.1. 3та nporpaMMa не BbInOJlHeT столь уж MHoro ра60ТЫ, О,lJ,нако однако содержимое perHCTpa COCTOHH нзменетс 
fnaBa 3. Набор коман)]. семейства PIC 18 81 после выnолненн коман,lJ,Ы ADDLW. В этом npHMepe nporpaMMbI Ox7F nepeMew,aeTC в реrистр WREG KOMaH,lJ,O MOVLW, а затем ,lJ,06aBJleTC 1 к perHCTPY WREG KOMaH,lJ,O ADDLW ДЛ rенерировани суммы, paBHO Ох80, в perHCTpe WREG. Обратнте вннмание на то, как AfI заверwенн nporpaMMbI нсnользуетс комаН,lJ,а GOTO. Всле,lJ,ствие Toro, 4ТО e,lJ,HHCTBeHHa Bew,b, KOTOPYIO выnолнет МНКрОКОНТрОJlлер, заKJl104ается в постоян- ном нзвле4еннн н BbInOJlHeHHH коман,lJ, nporpaMMbI, то TaKa хнтрость, как «GOTO Stop» иноr,lJ,а нсnользуетс AfI заверwенн nporpaMMbI. В ремьном снстемном nporpaMM ном 06ecne4eHHe нет не06хо,lJ,НМОСТН нсnользовать эту YJlOBKY, nOCKOJlbKY 60ЛЬШННСТВО оnерацнонных систем pa60TalOT в режнме HenpepbIBHoro ЦНKJlа по своему нзна4aJlЬНО МУ замыслу. ECJlH операцнонна снстема OCTaHOBHTC, то это npHBe,lJ,eT к сратальной oWH6Ke выnолнення nporpaMMbI. Пример 3.1 MOVLW Ox7F ;Заrрузка w Ox7F ADDLW 1 A06aBneHMe 1 к W stop: GOTO Stop ;stop here nOMeCTHTe этот npOCTO npHMep в wа6лонны cpaJl IDЕ (нсnользуте срал nри мера 2. 6 нз rJlaBbI 2) в ceKu.H 10 , KOTopa нмеет метку Main. npH выnолненнн это npo rpaMMbI от06разнте СО,lJ,ержнмое cneu.HaJlbHbIX срункu.нональных perHCTpOB в MeHIO View (Ви,lJ,) н 06ратнте вннманне на то, что реrистр WREG (по адресу OxFE8) СО,lJ,ержнт Ох80, а реrистр COCTOHH СО,lJ,ержнт Ох1А. Дn просмотра сnеu.ИaJlЬНЫХ CPYHKu.HOHaJlbHbIX perH стров заnустнте nporpaMMY, а затем остановите ее перед просмотром СО,lJ,ержнмоrо Cneu.HaJlbHbIX CPYHKu.HoHaJlbHbIX perHCTpOB. Еслн вы nOCMOTpHTe в ННЖНIOIO 4асть экрана, то УВН,lJ,нте, 4ТО там от06ражаетс СО,lJ,ержнмое perHCTpa W, совместно с ,lJ,Pyro nолез HO HHcpopMau.He. ECJlH вы не остановнте BbInOJlHeHHe nporpaMMbI, то не сможете уви деть nравнльные зна4енн perHCTpOB npH нсnользованни нмнтатора. V1MHTaTOp OTO бра>Кает 06новленнуIO HHcpopMau.HIO TOJlbKO Tor,lJ,a, Kor,lJ,a nporpaMMa остановлена. Зна4енне OxlA в perHCTpe СОСТОЯНН rOBopHT нам о том, 4ТО результат отриu.ате- лен, потому 4ТО 6нт отрнu.ательноrо результата (N) HaXO,lJ,HTC в состонни лоrИ4еское еднннu.ы. Зна4енне Ох80 HJlH 1000 00002 В perHCTpe WREG BJleTC, коне4НО, отрица тельным. BCnOMHHTe, 4ТО самые npaBbIe nTb бнтов perHCTpa COCTOHH СО,lJ,ержат HH дикаторы, О,lJ,ННМ нз которых BJleTC бнт oTpHu.aTeJlbHOrO результата. 3тнмн 6нтамн ЯВJlIOТС N, OV, С, ОС н Z CJleBa направо, Ha4HHa от бнтовой nознu.нн 4. При зна4енни perHCTpa COCTOHH, равном ох1А, N = 1, OV = 1, С = О, ОС = 1 н Z = О. Такое состоние nepe4HCJleHHbIX perHCTpoB 0значает, 4ТО pe3YJlbTaT oTpHu.aTeJleH, HMeJlO место Ilереnол ненне perHCTpa W, переноса не БЫJlО, HMeJl место перенос раЗр,lJ,а nолу6ата, Т.е. no- ловннны перенос. nереnолненне ВОЗННKJlО в этом npHMepe BCJle,lJ,CTBHe Toro, 4ТО +1 (Ох01) 6bIJla дo бавлена к +127 (Ox7F), а реЗУJlьтат равен 128 (Ох80). Макснммьное nоложнтельное число, которое nOMew,aeTC в восьмнразрдном perHCTpe, равно +121 (Ox7F), а макси- MaJlbHOe oTpHu.aTeJlbHOe 4НСЛО равно  128 (Ох80). ECJlH ЛlOба нз названных веЛН4НН npeBbIweHa, то в реЗУJlьтате возннкнет nepenOJlHeHHe. YCJlOBHe nepenOJlHeHH OTHOCHTC только к 4нслам со знаком. ECJlH 4HCJla в ,lJ,анном примере рассматрнвать как 6еззнако- вые, то Ох80, 4ТО равно 6ез знака 128, будет корректным и бнты N н OV perHcTpa co CTOHH не 6у,lJ,УТ нметь HHKaKoro 3Ha4eHH ,lJ,Л pe3YJlbTaTa 6еззнаково оnерацнн. Рис. 3.1 ИЛЛlOстрнрует onepau.HIO СJlоженн (см. npHMep 3.1) и меСТОnОJlожение ,lJ,ВУХ битов переноса. 
82 ITpHMeHeHHe MHKpOKOHTpOnnepOB РI С 18 Пример 3.2 MOVLW 6 ;nеремещает 6 в W SUBLW 5 ;BqMTaeT W ( 6) М3 5 Stop: GOTO Stop Kor,lJ,a вЫnолнетс ВЫ4нтанне, то 6нты COCTOHH переноса (С) н nоловинноrо переноса (ОС) perHCTpa COCTOHH сраКТН4ескн СО,lJ,ержат HHcpopMau.HIO о занмствова ннн (О = занмствованне, 1 = нет занмствованн). Еслн nporpaMMa по npHMepy 3.2 6удет выполнена, то результатом 6У,lJ,ет OxFF в perHCTpe WREG, а perHcTp состонин 6У,lJ,ет СО,lJ,ержать зна4енне, равное Ох10. КомаН,lJ,а SUBLW ВЫ4нтает содержнмое реrистра WREG нз JlитераJlьноrо зна4енн. СОЗ,lJ,аетс вnе4атленне, 4ТО эта onepau.H ВЫnОJlняет c в 06ратном nOp,lJ,Ke  так оно н есть: 06ратнте вннмание на то, как выnолнетс one- раu.и BЫ4HTaHH в этом мнкроконтроллере. В этом СЛУ4ае 6 BЫ4HTaeTC нз 5 н реЗУJlЬ- тат 6удет отриu.ательно e,lJ,HHHu.e нлн OxFF. PerHCTp COCTOHH 6У,lJ,ет иметь еднннu.ы как в 6нте С, так н в 6нте ОС. 3то озна4ает, 4ТО npH выnолненн ,lJ,aHHO оnерацнн BЫ4H TaHH 6ыло не06хо,lJ,НМО занмствованне, как nоказано на рнс. 3.2. с  о 1 1 1 О О О О ОС  + 1 1 1 1 О О О 1 1 О О О О О О О Рис. 3. 1. COCTOHHe 6нтов С н ОС в ХО,lJ,е onepau.HH сложенн по npHMepy 3.1. О==заимствование С ос s. 0000 0010 0000 0011 1 1 1 1 1 1 1 1 Рис. 3.2. Состоянне бнтов С н ОС в ходе onepau.HH сложенн по npHMepy 3.2. Литеральные лоrические команды. V1MeIOTC трн лоrН4ескне лнтеРaJlьные HHCTPYK u.HH: AND (V1), 10R (ВKJllOчающее V1ЛV1) н ХОА (V1СKJlючаlOщее V1ЛV1). Та6лнu.а нстннностн ДЛ всех трех оnераu.нй nоказана на рнсунке 3.3. 3тн onepau.HH ВЫnОЛНIOТС на n06HT HO основе (бнт за бнтом) npH выnолненнн nporpaMMbI. Onepau.H AND 4асто НСnОJlЬЗУ eTC ДЛ выБОР04НО установкн одноrо лнбо 60льwеrо 4нсла 6нтов в HOJlb, потому 4ТО npH выnолненнн onepau.HH v1 с нулем результат BCer,lJ,a 6удет нулевым. Оnераu.и BKJlIO 4alOw,ero V1ЛV1 (IOR) 4асто нсnользуетс ДЛ Bы60p04HO установкн O,lJ,Horo лн60 60ЛЬ- шеrо 4нсла 6нтов в е,lJ,НННЦУ, потому 4ТО npH выnолненнн onepau.HH BKJl104alOw,ero V1ЛV1 с единице реЗУJlьтат BCer,lJ,a 6удет е,lJ,ИНН4НЫМ. Оnерацн HCKJl104alOw,ero V1ЛV1 (ХОА) ce 
rnaBa 3. Набор кома н)]. семейства PIC18 83 лектнвно инвертнрует О,lJ,НН JlH60 HeCKOJlbKO 6нтов Н3 HYJl В e,lJ,HHHu.y, Jlнбо нз e,lJ,HHHu.bI в HOJlb, norOMY 4ТО npH выnолненнн onepau.HH HCKJl104alOw,ero ИЛV1 e,lJ,HHHu.bI с какнм лн60 onepaH,lJ,OM, результатом 6У,lJ,ет HHBepCH этоrо операнда. 3тн трн сракта так>ке НЛЛlOст РИРУlOтс на рнс. 3.3, npH зтом Х нсnользуетс AfI nре,lJ,ставленн Jl1060ro 4HCJla; npH меры nоказываlOТ, как этн onepau.HH МО,lJ,исрнu.НРУlOт 4HCJlO Х. и (Т=А.В) А в Т о о о о ] о ] о о 1 1 1 ХХХХ ХХХХ и 000011]1 0000 ХХХХ Включающее ИЛИ (Т=А+В) А В Т о о о о 1 1 1 О 1 1 1 1 хххх ХХХХ IOR О О О О 1 1 1 ] ХХХХ 1111 Исключаюее ИЛИ (Т==А<:ВВ) А В Т о о о о 1 I 1 О 1 1 1 О ХХХХ ХХХХ XOR О О О О 1 1 1 1 ХХХХ ХХХХ Рис. 3.3. Onepau.H V1, BKJl104alOw,ee V1ЛV1 н HCKJl104alOw,ee V1ЛV1 nре,lJ,nОЛОЖНМ, 4ТО cHтyau.H требует, 4т06ы крание JleBbIe ,lJ,ва 6нта (6нт О и 1) pe rистра WREG ,lJ,ОJlЖНЫ 6ыть установлены в 1, а биты 6 н 7 ,lJ,ОJlЖНЫ 6ыть c6poweHbI в О. Это BbInOJlHeTC nOCpe,lJ,CTBOM HCnOJlb30BaHH коман,lJ,Ы AND, 04Hw,alOw,e 6нты О н 1, а так>ке коман,lJ,Ы ЮR, устанаВJlнваlOw,ей е,lJ,ННН4ное COCTOHHe 6нтов 6 н 7. В при мере 3.3 
84 ITpHMeHeHHe MHKpOKOHTpOnnepOB PIC 18 nриводитс не60льwа nporpaMMa, ВЫnОЛНIOw,а эту за,lJ,а4У. В ,lJ,анном СЛУ4ае perHcTp WREG nре>кде Bcero заrружаетс тестовым зна4еннем OxIF. Если nporpaMMa выполн ется под управленнем IDЕ, то СО,lJ,ержнмое perHcTpa WREG нзменетс на ОхОС. Пример 3.3 MOVLW ANDLW IORLW OxIF OxFC ОхСО ;OqMCTKa 6мтов О м 1 ;установка 6мтов 6 м 7 Stop: GOTO Stop в сле,lJ,УIOw,ем npHMepe Tpe6yeTC, 4т06ы самые левые три 6ита perHcTpa W 6ЫJlН ннвертнрованы. 3то BbInOJlHeTC с нсnользованнем onepau.HH ХОА с лнтерanЫ-lЫМ зна 4ением ОхЕО (1110 0000), 4ТО npHBo,lJ,HT к HHBepTHpoBaHHIO KpaHHX левых трех 6итов perHCTpa W. npHMep 3.4 показывает TeCToBYIO nporpaMMY, KoТbpa ннвертирует самые левые TpLl16HTa зна4енн Ох90 (1001 0000). РеЗУJlьтатом влетс Ох70 (0111 0000). Пример 3.4 MOVLW Ох90 XORLW ОхЕО Stop: GOTO Stop ;мнвертмрует neBe 3 6мта Еслн сравннвать 4астоту НСnОJlьзованн всех лоrН4ескнх коман,lJ" то комаН,lJ,а AND 4aw,e Bcero нсnользуетс AfI nporpaMMHpoBaHH MaCKHpOBaHH 6нтов perHCTpoB. Ha при мер, nреДnОJlОЖНМ, 4ТО perHCTp WREG СО,lJ,ержнт 4НСЛО ох4А, не06хо,lJ,НМЫ только 4етыре самых KpaHHX npaBbIx 6ита (А). Как выnолннть маскнрованне 4етырех левых 6итов? Команда ANDLW OxOF сотрет 4 в Ox4F, ссрормнровав ОхОА в ка4естве результа та. АналоrН4НЫМ 06разом, еслн Tpe6YIOTC только 4етыре самых левых 6нта 4, можно использовать коман,lJ,У ANDLWOxFO, CTHpalOw,ylO самые npaBbIe 4 н оставлlOw,уlO Ох40 в perHcTpe W. 3.2. Битовые команды Намн 6bIJlH рассмотрены JlorH4eCKHe оnерацнн. В ,lJ,анном nО,lJ,раЗ,lJ,еле рассматри BaIOTC 6нтовые onepau.HH. 3тн оnерацнн устанавлнваlOТ, c6paCbIBalOT н nереКЛlO4аlOТ COCTOHHe только o,lJ,Horo ОТ,lJ,ельноrо 6нта, в то BpeM как коман,lJ,Ы AND, 10R н ХОА, B лсь 6aTOBЫMH комаН,lJ,амн, MOryr нзменть COCTOHHe как О,lJ,НО, так н несколькнх 6H тов. Та6л. 3.2 nере4нслет 6нтовые команды, реаJlнзованные в ceMeCTBe PIC. Мноrие nримененн мнкроконтроллеров Tpe6YIOT нсnользованн 6нтовых коман,lJ, ,lJ,л уnравле HH и тестированн в nporpaMMe oT,lJ,eJlbHbIX 6нтов. 3то ос06енно сnраведлнво npH срормированнн интерсреса н ynpaBJleHHH YCTpOCTBaMH BBO,lJ,aBЫBO,lJ,a. А-6нт (см. та6л. 3.2) не06хо,lJ,НМ только то r,lJ,a , Kor,lJ,a npH nроrраммироваllНИ на AcceM6Jlepe 4HCJleHHbI адрес perHcTpoBoro cpaJla нсnользуетс в комаН,lJ,е ДЛ сnецн cpHЦHpOBaHH лн60 6анка досrynа, лн60 perHCTpa вы60ра 6анка. Еслн комаН,lJ,а 06paw,a eTC к perHCTpy по ero нменн JlH60 по нменн 4eKH naMTH вместо 4нсленноrо адреса, то а-6нт в nporpaMMe не НСnОJlьзуетс. 06ратнте вннманне на то, 4ТО в Ta6Jl. 3.2 а6ит не Cneu.HcpHu.HpyeTc, Kor,lJ,a в ка4естве onepaH,lJ,a 1 НСnОJlьзуетс perHcTp WREG. Ас- сем6лер ,lJ,остаТ04НО «ннтеллекryаJlен» AfI TOfO, 4т06ы знать, 4ТО 6анк ,lJ,ocтyna  это то место, r,lJ,e расположен perHCTp WREG, поэтому а-6нт не влетс не06хо,lJ,НМЫМ в KO мандах, которые HMeHYIOT KOHKpeTHЫ perHcTp,  TaKO как WREG. 
fnaBa 3. Набор коман)]. семейства PIC18 85 Таблица 3.2. Бнтовые команды Команда Операнд 1 Операнд2 ОперандЗ Примеры Комментарий BCF PerMCTp Бмт N! а-6мт BCFWREG,7 С6расывает 6мт 7 pePMC'l' ра W BCF Ох10, 1,0 C6paCBaeT 6мт 1 perMcTpa 6анка AocTyna Ох10 BCF Ох10, 1, C6paCBaeT 6мт 1 6анка ACCESS AocTyna BSF PerMcTp Бмт N! a6MT BSFWREG, 1 YCTaHaBnMBaeT 6мт 1 ре-- rMCTpa W BTFSC PerMcTp Бмт N! a6MT BTFSC WREG, 2 ECnM 6и'.r 2 W равен О, ']'0 nponycK cneAYlOe команды BTFSS PerMcTp Бмт N! a6MT BTFSS WREG, 7 ECnM 6мт "7 W равен 1, '1'0 npOnYCK сnедуей KOMaHA BTG PerMCTp Бмт N! a6MT BTG WREG, 4 DepeKn4eHMe (MHBep'l'MpO ванме) 6мта 4 реrистра W An НJlЛlOстрацнн коман,lJ, BCF (04нстка 6нта F) н BSF (установка 6нта F), npLl1 мер 3.3 6ыл npe06pa30BaH в npHMep 3.5 с НСnОЛЬЗ0ваннем 6нтовых коман,lJ, вместо KO ман,lJ, ANDLW н 10RLW. Еслн этн npHMepbI сравннть, то мо>кно отметнть, 4ТО npHMep 3.5 Jlеrче nOHHMaeTC, XOT разннцы в pe3YJlbTaTe нет. Me)l(,lJ,Y этнмн прнмерамн есть He CKonbKO отлнчн; О,lJ,НО нз ннх заКJl104аетс в том, 4ТО 6нтовые коман,lJ,Ы не MO,lJ,HcpHЦH PYIOT perHCTp COCTOHH, вместе с тем коман,lJ,Ы ANDLW н 10RLW MO,lJ,HcpHu.HPYIOT perLl1CTp COCTOHH. Кроме Toro, поскольку H3MeHIOTC COCTOHH пар 6L11TOB, то две 6L11TOBbIe коман,lJ,Ы не06хо,lJ,НМЫ AfI с6роса нлн установкн ,lJ,ВУХ 6нтов. An МО,lJ,нсрнкацнн COCTO- ни несколькнх 6нтов 60лее эсрсректнвно 6У,lJ,ет НСnОЛЬЗ0вать коман,lJ,Ы ANDLW н 10RLW. Пример З.5 MOVLW BCF' BCF BSF BSF GOTO Stop: Ох1Р WREG, О WREG, 1 WREG, 6 WREG, 7 Stop ;с6рос 6мта О ;с6рос 6мта 1 ;установка 6мта 6 ;установка 6мта 7 npHMep 3.6 нсnользует условные 6нтовые команды ДЛЯ установкн 6нта О perHCTpa WREG только Tor,o,a, Kor,o,a 6нт 7 равен О. Команда BTFSS (6нтовое тестнрованне perHCTpa фала н nponYCK в случае установкн) тестнрует 6нт 7 perHcTpa WREG н еслн он в е,lJ,НННЧНОМ COCTOHHH, то сле,lJ,уюw,а команда (BCF) nponycKaeTc. Еслн 6нт 7 perHcTpa WREG HaxO,lJ,HTC в нулевом COCTOHHH, то Tor,o,a коман,о,а BCF выnолнет н устанавлнваетс нулевое значе ние зтоro 6нта. An KOнтpoJl этоro процесс нсnользуте IDЕ н ее нмнтатор. V1сnользуте раЗJlН4ные 3Ha4eHH ДЛ коман,lJ,Ы MOVLW,  такне как Ox7F н OxFF. Пример З.6 MOVLW BTFSS BCF GOTO Ox7F WREG, 7 WREG, О Stop ;заrрузка тестовых данных ;04мстка 6мта О Stop: 
86 ITpHMeHeHHe MHKpOKOHTpOnnepOB PIC 18 nре,lJ,nОЛО>КНМ, 4ТО нам не06ХО,lJ,нма nporpaMMa, KOTOPYIO мы 6ы MorJlH НСnОЛЬЗ0 вать С naHeJlblO PICDEM2 PLUS н KOTopa 6ы от06ра>кала Ох05 на свеТО,lJ,НО,lJ,ах, nO,lJ,КnIO 4енных к 6нтам от О .0.0 3 порта В, KOr,lJ,a кнопка, nO,lJ,КnI04eHHa к 6нту 4 порта А не Ha>Ka та. nporpaMMa ,lJ,ол>кна от06ра>кать Ох03, KOr,lJ,a кнопка на>ката. На>катне KHonKH reHepH рует лоrнческн О, в npoTHBHOM СЛУ4ае reHepHpyeTc лоrН4еска 1. npHMep 3.7 110казы вает nporpaMMY, KOTopa выnолнет Эry за,lJ,а4У. Еслн нсnользуетс друrая дeMOHCTpa u.L/10HHa nанель то порты BBO,lJ,a-ВЫВО,lJ,а н nознцнн 6нтов He06xo,lJ,L/1MO откоррокr.L/1роваrъ ДЛ KOHKpeTHO nанелн. порты BBO,lJ,aBЫBO,lJ,a a,lJ,peCYIOTC как РОАТА и РОАТВ при Ilере даче ,lJ,анных. Наnравленне переноса ,lJ,анных AfI 6L/1Ta порта nроrраммнруется Ila выход посредством pa3Mew,eHH нул в cooTBeTCTBYIOw,eM 6нте perHCTpa TRISA ЮIН TRISB, а на вход  nOCpe,lJ,CTBoM размеw,енн 1 в соответствуюw,ем 6нте perHCTpa TRISA нлн TRISB. PerHCTp ADCON 1 nporpaMMHpyeTc на <рункцноннрованне цн<рровых штырьков разме щеНL/1ем Ox7F в perHCTpe ADCON 1 лн60 как аналоrовх штырьков размеw,еннем ОхОО в perHCTp ADCON 1. 06ратнте вннманне на то, 4ТО <рункцноннрованне н cooTBeTCTBYIOw,He значенн заrрузкн perHcTpa ADCON 1 H3MeHIOTC AfI pa3JlH4HbIX 4ленов ceMeCTBa PIC18. Рассматрнваемые 3,lJ,есь nporpaMMbI HanHcaHbI AfI мнкроконтроллера PIC 18F1320. Еслн нсnользуетс ,lJ,pyro мнкроконтроллер, то cooTBeTCTBYIOw,He значе HH MOryr 6ыть ,lJ,pyrHMH, JlH60 perHCTp ADCON 1 мо>кет не НСnОЛЬЗ0ватьс Bo06w,e. Пример 3.7 Main: MOVLW Ox7F MOVWF ADCONl MOVLW ОхОО MOVWF TRISB MOVLW OxFF MOVWF TRISA Main1: MOVLW Ох05 BTFSS PORTA, О MOVLW ОхО3 MOVWF PORTB GOTO Main1 ;06ЪRвnенме всех ПОрТОВ UMpOBM ;rropT В 06ЪRВnRеТСR выходом irropT А 06ЪRВnRеТСR входом ;OCHOBHO nporpaMMH UMKn ;npOBepKa COCTORHMR KHOnKM ;М npOnYCK 3TO команды, eCnM кнопка oTnyeHa ;мзмененме COCTORHMR порта В м свеТОДМОАОВ irrOBTOp ЕСЛL/1 комаН,lJ,а а,lJ,ресует 6нты perHCTpa COCTOHH, то 4асто нсnользуетс HM ДЛ адресаЦL/1Н KOHKpeTHOrO 6нта . HanpHMep, AfI с6роса 6нта переноса нсnользуетс KO маН,lJ,а BCF STATUS, С вместо BCF STATUS,2. 3.3. Байтовые команды Батовые коман,lJ,Ы наи60Jlее мноro4нсленны как в на60ре команд, так н в nporpaMMax. Батовые коман,lJ,Ы 06есnе4нвают возмо>кность НСnОЛЬЗ0ванн в nporpaMMax nepeMeHHbIx .цанных, в то BpeM как JlHTepanbHbIe коман,lJ,Ы 06ecne4HBalOT вОзмО>кность НСnОЛЬЗ0ванн в nporpaMMax nOCTOHHbIX .цанных. В ТИПИ4НОМ cnyчае 6aTOBыe команды HCnOJlb3YlOT perHCTp W, а так>ке 4eкy perHcтpoBoro <райла AflЯ выnолнення како-лн60 оnераu.ин. Ta6JlHu.a 3.1 nере4нслет все 6aTOBыe коман,lJ,Ы с O,lJ,НHM JlH60 ,lJ,Вyм npHMepaMH на команду. Боnьшннст во L/1З зтнк команд HMelOT трн onepaн.цa: первым 06Ы4НО ВJleTC 4eKO perHCTpoBoro <pa- 
rnaBa 3. Набор кома н)]. семейства PIC18 87 ла, BTOPO оnре,lJ,елет 4еку-nрнемннк, а Tpeтн вы6нрает 6анк ,lJ,ocryna HJlH 6анк perHcTpo Boro срала, задаваемы perнcTpoM вы60ра 6анка (BSR). Еслн второй операн,lJ, (d6HT) равен О, то чейкоnрнемннком 6У,lJ,ет perHcTp WREG, а еслн BTOpO onepaH,lJ, равен 1, то чекой npLl1eMHLI1KOM 6У,lJ,ет 4eKa perHcTpoBoro фала. Еслн третнй onepaH,lJ, (a6HT) 6удет равен НУЛIO, то Tor,o,a 6анк ,lJ,ocтyna 6У,lJ,ет НСnОЛЬЗ0ватьс как местоnоло>кенне perLl1CTpOBOro срала (06ычно OxOOO-Ох07F н OxPSO-ОхFFF), а еслн он 6У,lJ,ет равен е,lJ,нннце, то TOr,lJ,a 6анк, onpe ,lJ,елемы BSF, 6У,lJ,ет НСnОЛЬЗ0ватьс в ка4естве месторасnоло>кенн perHcTpoBoro срала. А-6нт Tpe6yeTC TOJlbKO npH aдpecau.нH perHcTpa фала по номеру; еслн ,lJ,ocryn 6У,lJ,ет ocyw,e СТВJlЯТЬС по метке, то а-6нт не 6У,lJ,ет НСnОЛЬЗ0ватьс в команде. ПО УМОЛ4аннIO а = 1. D-БLl1Т не06хо,lJ,НМ только ,lJ,Jl размеw,енн результата onepau.HH в perHcTp WREG; по умолчаннlO d = 1. На 3ЫKe Ассем6лера 6уква W нли F HCnOJlb3YIOTC ,lJ,Jl указанн не06хо,lJ,НМОСТН нс- nОЛЬЗ0ванн d-6нта. Некоторые npHMepbI этоrо nрнводятс в Ta6Jl. 3.3. nредnоло>кнм, 4ТО ,lJ,ва 16разрядных чнсла складываIOТС, CPOpMHPy 16разряднуlO сумму. Ао этоrо nО,lJ,раздеJlа эту onepau.н1O 6ыло BbInOJlHIt1Тb довольно тру.цно, о.цнако 6лаrо,о,а- p тому, 4ТО средн 6aTOBЫX команд нмеется коман.ца CnO>KetM с переносом, сейчас можно 60Jlee леrко складывать.о.ва 4Hcna, которые нмеют 60льше, 4ем 8 разрядов. npHMep 3.8 пока- зывает короткую nporpaMMY, KOTopa складывает 16-разрядное чнcnо, расnоло>кенное в чей ках 6анка ,lJ,ocryna с адресамн Ох1 О н Ох11, с 16-раз.цным 4НСЛОМ, расnоло>кенным в 4eKax 6анка ,lJ,ocryna с aдpecaMLI1 Ох12 н Ох13. 06а этн 4нсла xpaHтc с НСnОJlьзованнем срормата с 06ратным порядком 6айтов, Kor,o,a мnа.цшая 4асть 4Hcna xpaHLI1TC в 4eKe с MeHbWHM номе- ром. Pe3YJlbТaT этоro 16разрядноrо сло>кенн сохранется в чеках 6анка ДОСlуnа Ох14 н Ох15. nporpaMMa кa>KeTC cnншком ,lJ,JlHHHO, о.цнако ее 4асть, KOTopa выnолнет соБСТВG/1l1O сло>кенне (nосле,lJ,нне шесть коман,lJ,) весьма коротка. 06ратнте BHLI1MaHHe на то, как складыва IOTC мnа.цшне 6aTЫ, а затем складываlOТС cтapWHe баты с переносом. V1сnользу зту MeTO ДНКУ, мою складывать 4Hcna Л1060 ,lJ,JlHHbI. Рнс. 3.4 ,lJ,емонстрнрует работу nporpaMMbI, а так>ке то, как нсnользуетс пере нос npH срормнрованнн 16-разрядно суммы. Таблица 3.3. Батовые команды Комама Оnерандl Оnеранд2 OnepaHA3 Opммep Комментармй AODWF perMcTp d6MT а-6мт ADDWF Ox10,W,0 СкnаАРшает W М R4ейку 6анка доступа Ох10, coxpaHReT резуnьтат в W ADDWFOx-10, F,O CкnaдывaeT W М R4eKY банка..' доступа Ох10, coxpaHReT резуnьтат в Rчеке 6анка AOCTyna Ох10 AODWFC perмcTp d-6MT a6MT ADDWFC Ох10,0,0 СкnаАРшает W с переносом с R4eKo 6анка AocTyna Ох10, coxpaHReT pe3YnbTaT в W ADDWFCOx-10, 1, 1 CкnaдывaeT WREG с переносом М Rчеку 6анка BSR Ох10, coxpaHReT резуnьтат в R4e ке 6анка BSR Ох10 ANDWF perмCTp d6MT а-6мт ANDWF Ох10, О, 1 М W с o 6анка Aocтyna Ох10, coxpaHReT резуnьтат в W CLRF perMcTp а-6мт CLRFWREG C6paBaeT W в ОхОО CLRF Ох10, ACCESS 04ищает R4eKY 6анка AOCTY па Ох10 в ОхОО CLRF ВОВ 04ищает R4eKY ВОВ COMF perмcTp d-6MT a6MT COMFWREG ononHeHMe W до 1 COMF Ох10,0,0 ononHeHMe АО еАМНМЦЫ R4e ки 6анка доступа Ох10 
88 ITpHMeHeHHe MHKpoKoHTponnepoB рте 18 КомаНАа Оnерандl Оnеранд2 Оnеранд3 CPFSEQ perMCTp A6MT CPr'SGT perMCTp a6MT CPFSLT perMCTp абмт DECF perмCTp dбит a6MT DECFSZ perMCTp dбмт a6MT DCFSNZ perMCTp dбмт а-6мт INCF perMCTp d6MT a6MT INCFSZ perMCTp d6MT а-6мт INFSNZ perMCTp d-бмт a6MT IORWF perMCTp d6MT a6MT MOVF perMCTp d6MT a6MT МОVП' perMCTp perмCTp source destination MOVWF perMCTp а6ит KorrмpoBaHMe W в R4eKY 6aH ка доступа Ох10 Dр:имер COMF Ох10, 1, 1 CPFSEQ Ох10,0 CPFSEQOxH, 1 CPFSGT Ох12,0 CPFSLT Ох13, 1 DECFWREG DECF Ох10, 0,0 DECF Ох10,1,0 DECFSZ WREG DCFNSZOx10, 1,0 INCFWREG INCF Ох10, 0,0 INCFSZ WREG INFSNZ WREG IORWF Ох10,0,0 MOVF Ох10,0,0 МOVFF WREG, Ох130 MOVWF Ох10,0 KoммeHTapM оnоnненме до eAМHMI.1,bI R4e км 6анка BSR Ох10 Сравненме W с Я4еко 6аllка доступа Ох10 м nponYCK cne-' Аующе команды, ecnм есть равенство Сравненме W с R4eKo 6анка BSR Ох11 м проnуск cneA e KOMaHAPl, естм есть pa венство Сравненме W с Я4еко 6анка BSR Ох12 м nponYCK сnед' e команды, еслм coдep мое R4екм 6анка доступа Ох12 Боnьwе, 4ем WREG Сравненме W с R4eKo 6анка ВSR Ох13 м пропуск cneA e команды, ecnм coдep мое Rчекм 6анка ДОС'l'упа Ох13 MeHbwe, 4ем WREG Taнмe 1 мз W Выqитанме 1 мз R4екм 6анка AOCTyna Ох10 м сохраненме резуnьта'l'а в R4eKe 6анка доступа Ох10 Taнмe 1 мз R4екм 6аllка Аоступа Ох10 м сохраненме резуnьтата в Я4еке 6анка доступа Ох10 eKpeMeHTмpOBaHMe W м про пуск сnеде команды, ecnм резуnьтат HyneBo eкpeмeHTмpOBaHMe R4екм 6анка AocTyna OxIC м npo- пуск сnедующе команды, ecnм резуnьтат не равен О Мнкрементмрованме W. Мнкрементмрованме Я4екм 6анка доступа Ох10 Мнкрементмрованме W м eCnM резуnьтат равен HY, npo пуск cnедующе команды. Мнкрементмрованме W м eCnM резуnьта'l' не равен нул, nponycK сnедующе команды В4ающееИЛИ W С R4eKo 6анка доступа м сохраненме резуnьтата в R4eKe 6анка доступа Ох10 Копированме R4ейки 6анка доступа Ох10 в W Копированме W в Rчеку Ox130 
fnaBa 3. Набор коман)]. семейства PIC18 Комама Оnерандl Оnеранд2 МULWF perMCTp a6MT NEGF RLCF RLNCF RRCF RRNCF SETF SUBFW8 SUBWF SUВWFB SWAPF TSTFSZ XORWF perMCTp perMCTp perMcTp perMcTp perMcTp perMCTp perMCTp реrистр perMcTp реrистр реrистр реrистр а6ит d-6MT d6MT d6MT d6MT a6MT d-6MT d6MT d6MT d-6MT d-6MT d6MT Оnеранд3 Пр:имер МULWF Ох10,0 а-6мт NEGF WREG RLCF WREG 89 комментармй YMHoeнмe W на Rчейку 6анка AocTyna Ох10 м сохраненме nромзвеАеНМR в PRODL м PRODH оnonненме до 2 (oтpмuaнмe) w Цикnмческий сдвмr BneBO W С переносом Цикnмчески сдвмr BneBo W 6ез переноса Цикnмческмй CABMr вправо W С пере носом Цикnмческ:ий CABMr вправо W 6ез пере носа Заrрузка OxFF в W Заrpузка OxFF в R4eKY 6aH ка доступа Oxl1 BTaнмe с заимствованмем Rчеки 6анка доступа Охl0 мз W м сохраненме резуnь'rа. та в Rчеке 6анка доступа Ох10 BTaнмe W мз Rчеки 6анка достynа Охl0 м сохраненме резуnьтата в Rчеке 6анка AocTyna Ох10 ВыtrnTaнмe W м заимствованме мз Rчеки 6анка naMRTM Ох10 м сохраненме резуnьтата в Rчеке 6анка доступа Ох10 Своnинr nony6aToB в W DponycK сnедующе KOMa, ecnм W равен HY МскnающееИЛИ W с R4eKo 6анка доступа Ох10 м coxpa ненме резуnьтата в Rчеке 6анка доступа Ох10  ...;. Oxll Охl0 0000 0001 1 1 1 1 1 1 1 1 Ox13 Ox12 + 0000 0010 I I 0000 О 011 OxlS Ox14 0000 0100 I I 0000 0010 Рис. 3.4. npHMep 16-раЗр,lJ,ноrо сло>кенн. a6MT RLNCF WREG a6MT RRCF WREG а-6мт RRNCF WREG SETF WREG SETF Ох11, ACCESS а-6мт SUBFWB Ох10, 0,0 a6MT SUBWF Ох10,0,0 а-6мт SUВWFB Ох10,0,0 a6MT SWAPF WREG TSTFSZ WREG a6MT XORWF Ох10,0,0 с 
90 ITpHMeHeHHe MHKpOKOHTpOnnepOB PIC18 Пример З.8 MOVLW OxFF MOVWF Ох10 MOVLW ОхО1 MOVWF' Ох11 MOVLW Ох03 MOVWF Ох12 MOVLW Ох02 MOVWF Ox13 MOVF Ох10, W, ACCESS ADDWF Ох12, W, ACCESS MOVWF Ох14 MOVF Ох11, W, ACCESS ADDWFC Ох13, W, ACCESS MOVWF Ох15 Stop: GOTO Stop ;сохраненме OxOIFF ;в Ох10 м Ох11 ;сохраненме Ох0203 ; в Ох12 м Ox13 ;cnoeHMe Ох10 м Ох12 ;сохраненме резуnьтата в Ох14 ;cnoeHMe Ох11 м Ох13 с переносом ;сохраненме pe3YnbTaTa в Ох15 HaMHoro 60лее 4HTa6eJlbHa н леrка в HanHcaHHH BepCH это nporpaMMbI npHBe дена в npHMepe 3.9. Разннца между npHMepoM 3.8 н npHMepoM 3.9 заКЛlOчаетс в том, что ДЛ оnре,lJ,еленн чеек naMTH нсnользуетс ассем6лер, KOTOPЫ делает неНУЖI/ЫМ НСnОЛЬЗ0ванне всех OnepaH,lJ,OB, нсnользованных в npHMepe 3.8. 06ласть UDATA у>ке оnре,lJ,елена в ша6лоне nporpaMMbI н ceKЦH nporpaMMbI по npHMepy 3.9 ,lJ,06авлетс к wа6лону 6ез ,lJ,оnолннтельно ,lJ,нректнвы UDATA (nользовательскне ,lJ,анные). ECJlH ,lJ,ан- ные ,lJ,ол>кны 6ыть pa3Mew,eHbI в 6анке ,lJ,ocryna, то ,lJ,нректнва UDATAACS nepe,lJ, коман- ,lJ,амн RES (резервнровать naMTb). 3то 06ecne4HBaeT возмо>кность вы60ра Toro, r,lJ,e данные 6у,lJ,уТ coxpaHTbC. Аанные, сохраненные в 6анке досrynа, 06ычно нзвлекаlOТС быстрее, поскольку perHcTp вы60ра 6анка не ,lJ,ол>кен HHHu.HaJIH3HpoBaTbc адресом 6анка. Пример З.9 ОDАТА NumIL RES 1 NumlH RES 1 Num2L RES 1 Num2H RES 1 AnsL RES 1 AnsH RES 1 Main: MOVLW Oxff MOVWF NumIL MOVLW Ох01 MOVWF NumlH MOVLW Ох03 MOVWF Num2L MOVLW Ох02 MOVWF Num2H nepeMeHHe, зарезервмрованные по мменм 1-3 ООАТА coxpaHReTc OxOIff в Numi coxpaHReT Ох0203 в Num2 
rnaBa 3. Набор коман)]. семейства PIC 18. 91 MOVF NumIL ADDWF Num2H, W MOVWF AnsL MOVF NumlH ADDWFC Num2H, W MOVWF AnsH 3top: GOTO Stop CKnaAЫBaeT мnадwме 4астм coxpaHReT pe3YnbTaT AnsL ;cKnaABaeT CTapWMe 4астм с переносом ; coxpaHReT резуnьтат в AnsH An выnолненн 16-раЗР,lJ,ноrо BЫ4HTaHH, nporpaMMa по npHMepy 3.9 МО,lJ,НСРН- ЦHpyeTC noCpe,lJ,CTBOM замены коман,lJ, ADDFW н ADDWFC комаН,lJ,амн SUBFW н SUBWFB. Кроме Toro, 4eKH onepaH,lJ,OB реrистровоrо срала ,lJ,олжны 6ыть нзменены ВВН,lJ,У cno с06а, которым ра60тает оnерацн ВЫ4итанн. КомаН,lJ,а BЫ4HTaHH всеrда ВЫЧLl1тает WREG LI13 4eKLI1 perHcTpOBoro <рала, указанно в комаН,lJ,е. npLl1Mep 3.1 О демонстрLl1Ру ет 16-раЗр,lJ,ное вычнтанне. AaHHЫ npHMep НСnОJlьзует те >ке самые оnре,lJ,елеНLI1 дaH ных, что н npHMep 3.9. Пример 3.10 MOVLW OxFF MOVWF NumIL MOVLW ОхО1 MOVWF NumlH MOVLW Ох03 MOVWF Num2L MOVLW Ох02 OVW Num2H MOVF NumIL SUBWF Num2H, W MOVWF AnsL MOVF NumlH SUBWFB Num2H, W MOVWF AnsH Stop: GOTO Stop ;coxpaHReT OxOIFF ;В Num1 ;coxpaHReT Ох0203 ;в Num2 ;B4MTaeT мnaAWMe 4астм ; coxpaHReT pe3YnbTaT AnsL ;B4MTaeT CTapWMe 4астм с заммствованмем ;coxpaHReT резуnьтат в AnsH Циклический сдвиr. На60Р коман,lJ, ceMeCTBa PIC 18 BКnlO4aeT четыре 6aTOBЫX KO ман,lJ,Ы ЦНКnLl14ескоrо C,lJ,BHra. Баты C,lJ,BHraIOTC вправо HJlH влево С переносом, ЛLl1бо 6ез переноса. Рнс. 3.5 НЛJllOстрнрует этн 4етыре коман,lJ,Ы ЦНКnН4ескоrо C,lJ,BHra. О,lJ,НН Н3 мето,lJ,ОВ YMHO>KeHH лн60 ,lJ,еленн свзан С ЦНКnН4еСКLI1М C,lJ,BLI1rOM ЧLl1сел. ECJlH 4НСЛО ЦНKJlН4ескн C,lJ,BHraeTC влево С нулем, nOMew,aeMbIM в самый nравый раз P,lJ" то это зна4НТ, 4ТО 4НСЛО YMHO>KaeTC на коэсрсрнцнент, paBHЫ 2. АнаJlоrLl1ЧНЫМ 06 раЗ0М, eCJlLl1 4HCJlO ЦHКnH4eCKH C,lJ,BHraeTC вправо С нулем, nOMew,aeMbIM в самый левы разр,lJ" то это 3Ha4L11T, 4ТО 4НСЛО ,lJ,eJlHTC на коэсрсрнцнент, paBHЫ 2. An ,lJ,eJleHH се- 
92 ITpHMeHeHHe MHKpOKOHTpOnnepOB PIC 18 MeCTBO знаком на ,lJ,ва 6L11T знака ЦLl1КnLl1чеСКLI1 С,lJ,ВLI1rается в самый левы БLl11 результата. Однако, еслн 4НСЛО мо>кет 6ыть умно>кено, лн60 nО,lJ,елеllО на ,lJ,ва, то оно может 6ыть nО,lJ,елено лн60 умножено на ЛlO60е ЧНСJlО. HanpHMep, ДЛ YMHO>KeHH на 5 (nTb равно 4х nлlOС Ix HJlH 1012)' нужно УМНОЖLl1ТI ЧНСJlО на 4 (,lJ,ва ЦLl1КnН4ескнх C,lJ,BHra влево), а затем A06aBLI1Tb к реЗУJlьтату нсходное 4НСЛО. 3та оnераци НЛЛlOстрнруетс npHMepoM 3.11. 3тот npHMep умножает тестовое ЧНСJ10 4, HaXO,lJ,w,eec во WREG, на коэсрсрнцнент 5 н OCTaBJleT результат, paВllbI 20, во WREG. 3та nporpaMMa срункцноннрует корректно, О,lJ,нако комаН,lJ,а умноженн, BXOД- w,a в состав на60ра коман,lJ, PIC, BJleTC 60лее эсрсректнвно. Смотрнте ry же npo rpaMMY, НСnОЛЬ3УIOw,уlO коман,lJ,У MULWP в npHMepe 3.12. Так>ке 06ратнте ШILl1манне в зтой nporpaMMe, как 04Hw,aeTC 6нт переноса npH нсnользованнн команды BCF. n RRNCF h r1 RLNCF  С rtl1 RRCF h С  RLCF h Рис. 3.5. Четыре комс1н,lJ,Ы ЦНКnН4ескоrо C,lJ,BHra Пример 3.11 UDATA ACS Num RES 1 ;perMCTp в 06naCTM доступа UDATA Main: MOVLW 4 ;эаrруэка TeCTOBoro 3Ha4eHMR MOVWF Num ;сохраненме 1х по аАресу Ох10 BCF STATUS, О ;с6рос переноса RLCF WREG ;WREG х 2 BCF STATUS, О RLCF WREG ; WREG х 4 ADDWF Num, О ;WREG х 5 Stop: GOTO Stop 
fnaBa 3. Набор коман)]. семейства PIC18 93 Пример 3.12 ОDАТА ACS Num RES Main: 1 MOVLW 5 MOVWF NUM MOVLW 4 MULWF NUM MOVFF PRODL, WREG Stop: GOTO Stop perMCTp в 06nacTM Аоступа UDATA ;сохраненме 5 в Ох10 ;заrрузка TecToBoro зна4еНМR ;YMHoeHMe на 5 ;занесенме 8-раЗРRдноrо nромзведеНМR во WREG Еслн нужно выnолннть ,lJ,еленне на степень 2, ТО это ,lJ,OCTHraeTC C,lJ,BHrOM 4нсла вправо. npLl1 HCnOJlb30BaHLI1H коман,lJ,Ы ЦНКnН4ескоrо C,lJ,BHra C,lJ,BLI1r вправо выполнетс no- сре,lJ,СТВОМ npe,lJ,BapHTeJlbHO 04НСТКН срлаrа переноса, за которым сле,lJ,ует комаН,lJ,а RRCF. nре,lJ,nОЛО>КНМ, нам ну>кно nоделнть СО,lJ,ержнмое perHCTpa WREG на 8. 3то ,lJ,ОСТН- raeTC посредством трех C,lJ,BHrOB вправо, как это nоказано B.npHMepe 3.13. 06ратнте вннманне, 4ТО резуль тат окруrлетс после Toro, как 06нару>кено B03HHKHOBeHLI1e nepe носа после nосле,lJ,неrо ЦНКnН4ескоrо C,lJ,BHra вправо. Бнт переноса TeCTHpyeTC н ко- манда npOnYCKa по нулlO нсnользуетс AfI npOnYCKa коман,lJ,Ы INCF (ннкремент) в CJlY чае, еслн перенос влетс нулевым. В ,lJ,анном случае 100 деСТН41-юе ,lJ,елнтс на 8 н результат, paBHbl 12.5 OCTaeTC во WREG как 13 (oKpyrJleHHOe 12.5). Больше ннсрорма- ЦНН н nporpaMMbI AfI ,lJ,еленн npHBO,lJ,TC в rлаве 4 в форме npHMepOB nporpafv1M на зыке Ассем6лера. Пример 3.13 MOVLW .100 BCF STATUS, О RRCF WREG BCF STATUS, О RRCF WREG BCF STATUS, О RRCF' WREG BTFSC STATUS, О INCF WREG Stop: GOTO Stop ;заrрузка во WREG 100 AeCRTM4Hoe ;деnенме на 8 ;oKpyrneHMe резуnьтата An НЛJllOстрацнн ра60ТЫ коман,lJ, ЦНKJlН4ескоrо C,lJ,BHra на ,lJ,eMOHCTpaЦHOHHO na- нелн,  TaKO как PICDEM2 PLUS, сле,lJ,ует nре,lJ,варнтельно заnроrраммнровать порт В как BЫXO,lJ,HO порт, а порт А  как BXOДHO порт. npHBe,lJ,eHHbI ,lJ,алее nporpaMMHbI npH- мер в случаном nOp,lJ,Ke вы6нрает О,lJ,НН из четырех свето,lJ,НОДОВ, nO,lJ,КnlO4eHHbIx к nop ry В, KOr,lJ,a oTnyw,eHa кнопка, nO,lJ,COe,lJ,HHeHHa к штырьку 4 порта А. An BbInOJlHeHH этоrо в npHMepe 3. 14 нсnользуетс комаН,lJ,а ЦНКnН4ескоrо CABHra 6ез переноса. В ,lJ,ан- ном примере npH на>катнн KHOnKH 6у,lJ,уТ CBeTHTbC все CBeTO,lJ,LI1 0.0. а , а npH ее OTnYCKaHLI1H только О,lJ,НН свето,lJ,НО,lJ, 6У,lJ,ет BКn104aTbc в случаном nOp,lJ,Ke. 
94 ITpHMeHeHHe MHKpOKOHTpOnnepOB PIC 18 Пример 3.14 Main: MOVLW ОхОО MOVWF TRISB MOVLW OxFF MOVWF TRISA MOVLW Ох11 MOVWF PORTB Main1: BTFSS PORTA, 4 RLNCF PORTB ;nроrрамммрованме портов А м В ;заnуск порта В по Ох11 ;UMKnM4eCKM CABMr, eCnM кнопка HaaTa GOTO Main1 ;noBTopeHMe 3.4. Команды уnравленмя выnолненмем nporpaMMbI и косвеннаяаАресация nepe,lJ, тем, как прнсrynнть к реальному nporpaMMHpoBaHHlO, нам сле,lJ,ует L/1ЗУЧНТЬ команды уnравленн выполненнем nporpaMMbI. В ,lJ,анном nО,lJ,разделе рассмотрены коман,lJ,Ы уnравленн nporpaMMo, nрИВО,lJ,тс так>ке ,lJ,оnолннтеЛЫlые npL/1MepbI, ВЫI10Л HIOw,He простые за,о,а4И. Коман,lJ,Ы уnравленн выnолнеНL/1ем nporpaMMbI MO,lJ,HcpHu.HPy IOт наnравленне nере,lJ,а4И уnравленн в nporpaMM 4ерез условные nepexo,lJ,bI н вызовы <pYHKЦH. Онн так>ке nре,lJ,оставлIOТ некоторую степень контрол на,о, HeKOTOpbIML/1 внуТ- ренннмн <pYHKЦHMH мнкроконтроллера. Так>ке рассмотрена KOCBeHHa a,o,pecau.H че рез perHcTpbI вы60ра <ралов (FSRO, FSR1 н FSR2). Ta6Jl. 3.4 НЛЛlOстрнрует команды уnравленн выполненнем nporpaMMbI, ,lJ,OcrynHbIe мнкроконтроллерам ceMeCTBa PIC18. КомаН,lJ,а GOTO y>t<e нсnользовanась в nporpaMMax, О,lJ,нако .0.0 снх пор она не раз 6нралась достаТ04НО ,lJ,eTaJlbHo. GOTO  это З2раЗР,lJ,на комаН,lJ,а, KOTopa мо>кет BЫ nолнть nepexo,lJ, на ЛlO6ую 4eKY naMTH nporpaMM. КомаН,lJ,а ВАА (nocToHHbI пере- ход), KOTopa так>ке выnолнет 6езусловны nepexo,lJ" представляет собо 16-разр,lJ,НУIO команду, днаnазон nepexo,lJ,a в KOTOPO оrраНИ4ен. КомаН,lJ,а ВАА coдep ЖL/1Т 11-раЗР,lJ,ное чнсло, которое влетс не адресом, а npHpaw,eHHeM а,о,реса. 3то npHpaw,eHHe нлн смещение, как ero часто Ha3bIBalOT, nозволет ВАА осуw,ествлть ne- рехо,lJ, в nporpaMMe Bnepe,lJ, на paCCTOHHe вплоть .0.0 1024 байтов от а,lJ,реса слеДУIOw,е команды в nporpaMMe лн60 наза,lJ, вплоть до  1 024 6aT от а,о,реса слеДУIOw,ей KOMaH ды в nporpaMMe. 3тот TL/1n nepexo,lJ,a 4асто Ha3bIBalOT относитеЛЬНblМ переходом, no скольку зта команда нннцнаЛL/1знрует nepexo,lJ, в соответствнн с указанным значеннем cMew,eHH вне завнснмостн от Toro, в каком месте naMTH она располо>кена. Все ко- ман,lJ,Ы условноrо nepexo,lJ,a L/1СnОЛЬ3УIOТ <рорму а,о,ресацнн со cMew,eHHeM, однако в HL/1X нсnользуетс ew,e 60Jlee KOpOTKH ,lJ,Hana30H перехода  от +127 до 128 бат, ОТСЧL/1ТЫ Ba от а,lJ,реса сле,lJ,УIOw,е команды nporpaMMbI. npH4HHO такнх оrраннченн влетс оrраНН4ение КОЛН4ества 6нтов, ,lJ,OcrynHbIx в комаН,lJ,е AfI a,o,pecau.HH naMTH. KOMallAY GOTO 4асто Ha3bIBalOT a6COJllOTHbIM nepeXO,lJ,OM, nOCKOJlbKY адрес перехода в He вл eTC <рнкснрованным нли а6сол1OТНЫМ. Коман,lJ,У ВАА н коман,lJ,У условноrо перехода часто Ha3bIBalOT комаН,lJ,амн относительноrо перехода , потому что а,lJ,рес nepexo,lJ,a оп ределетс OTHOCHTeJlbHbIM а,о,ресом команды nepexo,lJ,a в naMTH nporpaMM. 
rnaBa 3. Набор коман)]. семейства PIC18 95 Примеры Таблица 3.4. Коман,lJ,Ы уnраВJlення BbInOJlHeHHeM nporpaMMbJ. Комментарий Операнд Операнд Команда 1 2 ВС п1 BN п1 BNC n1 BNN п1 BNOV п1 BNZ п1 BOV п1 Ш<'А п2 BZ п1 CALL п3 CLRWDT DAW GOTO п3 NOP РОР ВС AGAIN BNWOW BNC FLOP BNN POSITIVE BNOV BIG BNZ MORE BOV NOW BRA WINK BZ BOSTON CALL НОМЕ CLRWDT DAW GOTO ERIE NOP РОР S PUSH PUSH RCALL п2 RCALL 6 RESET RE'I'FIE S RESET RETFIE 1 RETLW L RETLW 6 RETURN S RETURN 1 SLEEP SLEEP ОереХОА к AGAIN eCnM перенос равен ОереХОА к WOW eCnM отрмuателен ОереХОА к FLOP eCnM перенос равен О ОереХОА к POSITIVE еслм не OTpMuaTeneH ОереХОА к BIG eCnM нет nepenOnHeHMR ОереХОА к MORE eCnM нет HYnR ОереХОА к NOW еслм nepenonHeHMe Безусnовный nepexoA к WINK ОереХОА к BOSTON eCnM HOnb B30B YHKUMM С мменем НОМЕ С6рос CTopoeBoro TaMepa eCRTM4HaR nOACTpOKa COAepMMoro WREG Безусnовньщ nepeXOA к ERIE Нет onepaUMM M3Bne4eHMe аАреса возврата М3 вершмны стека 3анесенме аАреса возврата в вершмну стека Относмтеnьный CALL по аАресу С4еТ4МК кома нА + 2 + 2 * 6 BnepeA по nроrрамме DporpaMMH с6рЬС Возврат М3 npepBaHMR С теневьшм perM страмм, заrруенньшм в perMCTp м раз решеннм npepBaHMRMM Возврат М3 YHKUMM СО зна4енмем 6 во WREG Возврат М3 YHKUMM с TeHeBM perMCT рамм, заrруеннм в perMCTp. ВХОА в peMM 6e3AeCTBMR Примечания: п1 = 8разрядное смещение, п2  11  разрядное смещение, пЗ = 21 разрядный абсолютный адрес, s  теневой бит, 1  8разрядньm литерал. Мноrие Н3 коман,lJ, уnравленн HCnOJlb3YIOTC AfI реаJlизаu.ин nporpaMMHbIX KOH CTPYKu.H, COCTaBJlIOw,HX cTpOHTeJlbHbIe 6JlOKH nporpaMM. 3тнми конструкu.ИЯМLI1 ЯВЛЯlOт ся CJle,lJ,YIOw,He KOHCTPYKu.HH: «if-then-else» (Еслнтоина4е), «repeatuntil» (nовторять пока) «<dowhile» (,lJ,eJlaTbnoKa) нлн «dofor» (,lJ,елаТЬAfI условн)), «while» (пока) н срункu.и . Коман,lJ,Ы CALL н REТURN HCnOJlb3YIOTC AfI C03,lJ,aHH CPYHKu.H нлн nO,lJ,npOrpaMM, НСnОJlьзуемых в nporpaMMe. КомаН,lJ,а CALL заноснт а,lJ,рес В03IЗрата во ВНуТренннй npo rpaMMHbI стек, а затем BbJnOJlHeT onepau.HIO GOTO по а,lJ,ресу nамти, указанному IЗ OnepaH,lJ,e коман,lJ,Ы CALL. КомаН,lJ,а RETURN выnолнет возврат И3 СРункu.LI1И,  точно так >ке, как она это ,lJ,eJlaeT в 3ЫKe С. Что комаН,lJ,а RETURN ,lJ,елает сраКТИ4ескн  так зто И3 влекает а,о,рес возврата Н3 nporpaMMHoro стека н заноснт ero в С4еТ4НК коман,lJ,. Коман- ,lJ,а CALL НСnОJlьзуетс AfI ВЫЗ0ва CPYHKu.HH, а REТURN нсnользуетс AfI возврата Н3 срункu.ин. КомаН,lJ,а RETURN BCer,lJ,a B03Bpaw,aeT уnраВJlение КО М аН,lJ,е, сле,lJ,УIOw,е Heno сре,lJ,ственно nocJle caMO nOCJleAНe коман,lJ,Ы CALL. Коман,lJ,Ы PUSH н РОР так>ке ocyw,ecTBJlIOT ,lJ,ocryn к nporpaMMHoMY стеку микро KOHTpOJlJlepa. КомаН,lJ,а PUSH НСnОJlьзуетс AfI nре,lJ,варнтельно заrрузкн а,о,реса 1З03 врата, paBHoro РС (С4еТ4НК коман,lJ,) + 2 в nporpaMMHbI стек, а комаН,lJ,а РОР ИСnОЛЬ3У 
96 TIpHMeHeHHe MHKpOKOHTpOnnepOB PIC 18 ется AfI H3BJle4eHH а,lJ,реса возврата Н3 стека. 06е этн коман,lJ,Ы ,lJ,ОЛ>КНЫ НСnОJlьзовать- . C С OCTOpO>KHOCTblO. КомаН,lJ,а NOP не BbInOJlHeT a6COJllOTHO HH4ero, за HCKJl104eHHeM Toro, 4ТО на нее раСХО,lJ,уется О,lJ,НН KOMaH,lJ,HЫ u.HKJl. КомаН,lJ,а NOP HHOr,lJ,a НСnОJlьзуетс npH отра60тке временных задер>кек на О,lJ,НН KOMaH,lJ,HЫ u.HKJl. NOP так>ке ,lJ,о6авлетс к некоторым комаН,lJ,ам acceM6JlepOM. КомаН,lJ,а RETLW НСnОJlьзуетс AfI возврата Н3 срункu.ни С perLl1CTpOM WREG, за rpY>KeHHbIM OnepaH,lJ,OM коман,lJ,Ы RETLW. Она нсnользуетс в некоторых nporpaMMax на AcceM6Jlepe AfI возврата 3Ha4eHH срункцнн. иначе да HarpeB охлаждение Рис. 3.6. KOHcTpYKu.H "ifthenelse" ПроrwpаММНЪJе КОНСТРУКЦИИ Проrраммные КОНСТРУКЦИИ - это CTpOHTeJlbHbIe 6JlOKH nporpaMMHpOBaHH  их He 06хо,lJ,НМО 06су,lJ,НТЬ С тем, 4то6ы nporpaMMbI, которые вы 6У,lJ,ете nHcaTb, 6bIJlH эсрсрек. тнвнымн. nepBa KOHCTPYKu.H, KOTOPYIO мы раз6ерем  это KOHCTPYKu.H "ifthenelse" (еслнтонна4е). Рнс. З.6 HJlJlIOCTpHpyeT 06w,ylO срорму это конструкцнн. 06ратнте вннманне на вопрос, (см. рнс. З.6). Он 3ВУ4нт как: "В комнате >карко?". ЕСJlИ в комнате >карко, то nporpaMMa nepeXO,lJ,HT на 6JlOK КО,lJ,ОВ, 06ecne4HBalOw,Hx nOHH >кенне TeMepaTYpы в комнате, нна4е (т.е. в npOTHBHOM CJlY4ae) BbInOJlHeTC HarpeB. 3та KOHCTPYKЦH НСnОJlьзуетс TOr,lJ,a, KOr,lJ,a в nporpaMMe за,lJ,аетс каКО-Jlн60 вопрос. БJlОК КО,lJ,а, назна4еннем KOToporo BJleTC заданне вопроса, HJlJlIOCTpHpyeTc в npHMe ре З.15. AaHHЫ npHMep тестнрует perHCTp 6анка ,lJ,ocryna Ох1 О на наЛН4не зна4ени, paBHoro 4. ECJlH СО,lJ,ер>кнмое этоrо perHCTpa равно 4, то по адресу Ох10 заноснтся 6. ECJlH это не так, то по а,lJ,ресу Ох10 заноснтс 9. 
rnaBa 3. Набор коман)]. семейства PIC18 97 Пример 3.15 MOVLW 4 SUBWF Ох10, О BNZ NOPE MOVLW 6 ВМ DONE1 ;eCnM не 4 ;eCnM 4 NOPE: MOVLW 9 DONE1 MOVWF Ох10 ;заnмсь 6 MnM 9 nре,lJ,ПОЛОЖИМ, 4ТО нам ну>кно npe06pa30BaTb 4L11сла от ОхОО до OxOF 130 WREG из шестна,lJ,u.атиричноrо КО,lJ,а в КО,lJ, ASCII. Цнсрры ASCII Jle>KaT в ,lJ,Hana30lle ОТ Ох30 до Ох39, а 6уквы от А .0.0 F соответствуют значеНИJ1М ОТ Ох41 до Ох46. Дл выполнени 3Toro npe 06pa30BaHLI1 Ох30 nриБВSJlетс к wестнар,цаtЩjИ4НОЙ цифре (OxOOOx09) LI1 Ох37 nри- 6авлется к шестна,lJ,u.аТИРН4НО 6укве (OxOA-ОхОF). К-онэтрукu.и "if" (еСЛLl1), LI1ЛЛIOСТ РLl1руемая прнмером 3.16, ИСnОJlьзуетс AfI ВЫnОJlнення Этой простой ЭS,lJ,а4И. В зтом примере BbInOJlHere npH6aBJleHHe значенн Ох30, а затем, Ьли результат является MeHbWHM, 4еМ Ох3А, ,lJ,06аВJlется еще семерка AfI npe06pa30BaHLI1 бук. ДaHHЫ nри мер ,цл обесnе4еНLI1Я срункцноннровония nporpSMMbI нсnользует ,lJ,ве временные flчейки в perHcTpOBOM cpaJle данных. Хотя 06ЫIВJlення этнх ячеек в ,lJ,анном npHMepe не npLl1Be AeHbl, они опре,lJ,еляюtся е исndЛЬЗ0ванием RES 1 в сеl<.ЦИИ UDATA ИСХО,lJ,ноrо срайла. КомаН,lJ,а CPFSGT в\)\hолнет сравненне cO,lJ,ep>KLI1MOrO Temp2 (Ох3А) с W LI1 еСЛLl1 Тетр2 60льше, 4ем W,.команда ADDLW nроnускается. Пример 3.16 ADDLW Ох30 MOVWF Temp1 MOVLW Ох3А MOVWF Temp2 MOVFF Temp1, WREG CPFSGT Temp2 ADDLW Ох07 ;А06ав.nяет Ох30 ;npOnYCK AnR ОТ О АО 9 ;TOnbKO AnR 3А nM60 60nbwe ИмееТОf1 еЩ0 более KOpOTKH, хотя LI1 менее nрозра4НЫЙ, метод выполнения Ha 3BaHHoro преобрgЗОlЗ8НИf1 - он ИJlJlIOСТРLl1руется npLl1MepOM 3.17. В нем для выполнения npe(jOpa30BaHH ИСnОJ1ьэуется КОмаН,lJ,а DAW в HeMHoro He06Ы4HO манере. Команда DAW nре,lJ,наЗН84ена ,цля nepeUOAa 4ИСJlа во WREG в ,lJ,BOH4HOKO,lJ,LI1pOBaHHYIO ,lJ,еСТLI1ЧНУIO (ДКД) форму nocJle BbInOJlHeHH ДКДСJlо>кенн. Она BbInOJlHeT это nOCpe,lJ,CTBOM oцeH .. кн 3Ha4eHLI1 MJla,lJ,Wero пьлу6ата н eCJlH оно BJleTC 60JlЬШНМ, 4ем 9 HJlLl1 установлен DСбнт (6нт nOJlOBHHHOro переноса), то ВЫnОJlняетс ,lJ,06aBJleHHe 6. Она так>ке оu.енива- ет cTapWH nOJly6aT н eCJlH он ВJlется 60JlbWHM, 4ем 9 HJlH установлен 6ит С (6L11T ne реноса), то BbInOJlHeTC ,lJ,06aBJleHHe Ох60. Это npHBO,lJ,HT к тому, 4ТО pe3YJlbTaT 6У,lJ,ет равен от Ох30,lJ,О Ох39 ДЛ 4HCeJl н от Ох40,lJ,О Ох45 AfI 6укв. Как мО>кно в Н,lJ,еть , резуль таты AfI букв MeHbwe на SНИЦУ, 4ем не06ХО,lJ,нмые корректные зна4ения, позтому ПРLl1меllяется комаН,lJ,а BTFSC (тестированне 6L11Ta LI1 npOnYc"K, если с6рошен) ,цля npo BepKLI1 6нта 6 результата. Бит 6 с6расывается для шестнадu.аТLI1РLl1ЧНЫХ чисел и устанаIЗ ливается для wестнадu.аТНРИ4НЫХ 6VKB. После команды BTFSC выполняется команда LI1нкрементирования WREG только AflЯ зна4ений от Ох40 до Ох45 с целыо reHepHpOBat IИЯ корректных зна4ени ,цл 6укв  от Ох41 ,lJ,оОх46. 
98 ITpHMeHeHHe MHKpOKOHTpOnnepOB PIC 18 Пример з. 1 7 ADDLW Ох30 DAW BTF'SC WREG, 6 lNCJT WREG ХОТЯ 3ТО L/1 эсрсреКТL/1ВНО, О,lJ,нако, возмо>кно, 60Jlee СРУНКЦL/10нальным 6У,lJ,ет nOMec- TL/1Tb зry оnераЦL/11О в СРУНКЦL/11О. Функцин 4асто ИСnОJlЬ3УIOТСЯ AflЯ снижения TpyдoeMKO стн наnL/1СШIН nporpaMM. npL/1Mep 3.18 nOKa3bIBaeT, как OcpOpML/1Tb nporpaMMY, COIJ1aCIIO примеру 3.17, в срун кu.и 10 , Ha3bIBaeMYIO Hex2ASCII, 4ТО влетс У,lJ,ачным L/1MeHeM для зтой СРункu.ин. Bcer,lJ,a старайтесь называть CPYHKu.L/11O так, чт06ы ее L/1M OTpa>KaJJO ра60ТУ СРУНКЦИL/1 . 3та срУНКЦL/1 Hex2ASCII nре06разует WecTHa,lJ,u.aTHpH4HbIe u.HcppbI 130 WREG в ASCIIu.L/1cppbI во WREG. Пример 3 .18 ;*** ФУНКUМR npe06pa30BaHMR weCTHaAuaTMpMqHOrO opMaTa в opMaT ASCI *** ;Оре06раЗ0ванме npaBoro nony6aTa во WREG в ASCIIKOA во WREG Hex2ASCII: ANDLW OxOF ADDLW Ох30 DAW BTFSC WREG, 6 INCF WREG RETURN ;***rnaBHaR nporpaMMa *** Main: Stop: MOVLW Ох5с MOVWF ASC II Н CALL Hex2ASCII MOVWF ASC II L MOVFF ASCII_H, WREG SWAPF WREG CALL Hex2ASCII MOVWF ASCII Н ВМ Stop ;OqMCTKa cTapwero nony6aTa ;npe06pa30BaHMe в ASCII ;заrрузка TeCTOBX AaHHX ;nре06разованме MnaAwero nony6aTa ;сохраненме ero в ASCII L ;nonY4eHMe CTapwero rrony6aTa ;nре06разованме ero в ASCII ;сохраненме в ASCIIH КомаН,lJ,а CALL nOMew,aeT а,о,рес возврата во ВНуТренни стек (32х21), а затем от- ра6атывает nepeXO,lJ, по a6COJllOTHOMY а,о,ресу CPYHKu.HH, KOTopa в ,lJ,анном случае назы BaeTC Hex2ASCII. Адрес возврата Bcer,lJ,a указывает на коман,lJ,У, которая CJle,lJ,yeT Heno сре,lJ,ственно после CALL. ECJlH B3Tb nepBYIO коман,lJ,У CALL в npHBe,lJ,eHHO nporpaMMe, то а,о,ресом возврата 6У,lJ,ет а,о,рес Я4екн nамятн, CO,lJ,ep>Kaw,e коман,lJ,У MOVWF ASCII.L. BCKL/1 раз, KOr,lJ,a BCTpe4aeTC комаН,lJ,а REТURN, МНКРОКОНТРОJlлер L/1звлекает caMЫ nOCJle,lJ,HH а,lJ,рес возврата Н3 стека н BbInOJlHeT nepeXO,lJ, по этому а,о,ресу. BCJle,lJ,CTBL/1e Toro, 4ТО стек COCTOL/1T Н3 3 1 4eKH, BJlO>KeHHe ВЫЗ0ВОВ CPYHKu.H мо>кет ВЫIlОЛНТЬСЯ на rJly6L/1HY BnJlOTb .0.0 31. 06ратнте вннмание, 4ТО 60JlЬШННСТВО nporpaMM НСnОЛЬ3УIOТ Bce ro HeCKOJlbKO ячеек стека. 
rnaBa 3. Набор коман)]. семейства PIC18 99 V1MeeTC ,lJ,ва THna коман,lJ, возврата: обычна у>ке оnнсанная комаН,lJ,а возврата (RETURN) LI1 ,lJ,Pyra комаН,lJ,а (RETURN 1), KOTopa называетс быстрым возвратом, 11O скольку хотя она LI1 не 6ыстрее 06bI4Horo REТURN, О,lJ,нако она aBToMaTH4eCKLI1 BOCCTaHaB nHBaeT зна4енне perLl1CTpOB WREG, STATUS н BSR. Дn НСnОJlЬЗ0вання это CPYHКlJ,LI1L11 BOCCTaHOBJleHH, СРУНКЦLl1Я ,lJ,ОЛ>кна 6ыть вызвана коман,lJ,ОЙ CALL SUBROUTINE, 1. CALL со вторым параметром, равным 1, автомаТН4ескн сохраняет perHCTpbI WREG, STATUS и BSR во ВНуТренннх скрытых теневых perHCTpax. КомаН,lJ,а RETURN 1 H3BJleKaeT даllные И3 ЭТLI1Х теневых perHCTpOB. Друrнм THnOM возврата ВJlется комаН,lJ,а RETLW. Так, KO маН,lJ,а RETLW 6 B03Bpaw,aeT ynpaBJleHHe BbI3bIBalOw,e nporpaMMe, О,lJ,нако так>ке заllОСНТ 6 в perHcTp WREG прн возврате. БОJlЬШННСТВО CPYHKu.H HCnOJlb3YIOT пару команд CALL н RETURN. npHMep 3.19 HJ1JlIOCTpLl1pyeT то, как nHweTC HOBa срункu.ия, Ha3BaHHa Hex2ASC, которая нсnользует вло>кенны ВЫЗ0В CPYHKu.HH Hex2ASCII. Функu.LI1 Hex2ASCII BЫ3ЫBa eTC cpYHKЦHe Hex2ASC ,lJ,ва раза, 4ТО тре6ует О,lJ,НУ 4eKY стека ДflЯ а,о,реса возврата для Hex2ASC н ew,e О,lJ,НУ - AflЯ Hex2ASCII. nporpaMMa CTaJla 60Jlee Llнта6елы.lO ВСJlедст вне HCnOJlb30BaHH HOBO срун Ku.H Н , KOTopa nре06разует nOJlHOCTblO 6айт. E,o,LI1HCTBeH НЫМН perHCTpaMH, которые НСnОJlьзует эта nporpaMMa, ВJlIOТСЯ реrистры WREG, ASCIIL н ASCIIH. nporpaMMa так>ке npH своем BbInOJlHeHHH НСnОJlьзует ,lJ,ва YPOBH CTe ка. О,lJ,ННМ Н3 cnoc060B YJlY4weHH это nporpaMMbI BJleTC возврат ,lJ,ВУХ СLI1МВОЛОВ ASCII в perHCTpax PRODL н РАООН. БJlаrО,lJ,ар этому npH npe06pa30BaHHH не 6удуr LI1C rЮJ1ЬЗ0ватьс perHCTpbI 06w,ero Ha3Ha4eHH, это XOPOwo - так как perHCTpbI 06w,ero Ha значенн часто 6bIBalOT в ,lJ,ecpHu.HTe. Пример 3.19 ;*************ФУНКUМR Hex2ASCII *********** ; мсnоnьзует 1 уровень стека ;мсnоnьзует WREG ; nре06разует npa rrony6 во WREG из weстнaдu.атерич:ноro формата в ASCIIKOA ;******************************************** :iex2ASCII : ANDLW ADDLW DAW BTFSC INCF RETURN ;************ ФУНКUМR Hex2ASC ************** OxOF Ох30 ;мзоnмрует мnаАWМЙ rrолубат WREG, 6 WREG мсnоnьзует 2 ypOBHR стека мсrrоnьзует WREG, ASCII_L и ASCII_H мсnоnьзует Hex2ASCII nре06разует 6aT во WREG мз wecTHaAuaTMpMqHOrO opMaTa в opMaT ASCII npM 3ТОМ ASCIIL COAepMT caMY npaBY ASCII-UMPY а ASCIIH COAepMT caMY neBY ASCII  UМФРУ ;******************************************** nex2ASC: MOVWF CALL MOVWF ASCII Н Hex2ASCII ASCII L ;nре06разует мnаАWМЙ nony6aT 
100 ITpHMeHeHHe MHKpOKOHTpOnnepOB PIC18 MOVFF SWAPF CALL MOVWF RETURN ;**************rnaBHaR Main: MOVLW Ох5с CALL Hex2ASC Stop: ВМ Stop ASCII Н, WREG WREG Hex2ASCII ASCII Н ;BnOnHReT CBOnnMHr nony6aToB ;npe06pa3yeT старшм nony6aT nроrрамма ****************** ;заrруает TeCTOBe AaHHe ;nре06разует rrOnHOCTb 6aT в opMaT ЛSСIJ KOHCTPYKu.LI1 "repeatuntil" (nовторять,lJ,О тех пор, пока) повторяет оnераЦLl1IО cpLl1K CLI1pOBaHHoe KOJlH4eCTBO раз JlH60 .0.0 тех пор, пока 6удет cnpaBeAflLl1BO некое условие. Рнс. 3.7 НJlЛlOстрнрует KOHCTPYKu.HIO "repeat-until". npe,lJ,nOJlO>KHM, 4ТО perHCTpbI naMTH ,lJ,анных С адресамн от Ох10,lJ,О Ох28 c6pacы BaIOTC nроrраммой в COCTOHHe ОхОО. 3то мо>кет 6ыть BbInOJlHeHO nOCpe,lJ,CTBOM нсnоль З0ваНLI1Я HeCKOJlbKHX коман,lJ, MOVWF. О,lJ,нако 60Jlee ЭJlеrантны cnoc06 заKJllOчается в НСПОJlЬЗ0ваннн косвенной aдpecau.HH совместно с KOHCTPYKu.He "repeatuntil". ЦLl1КЛ 6У,lJ,ет nовторться Ох 19 раз, coxpaH Ох 19 HYJle в ОХ 19 ра3ЛН4НЫХ 4eKax perHCTpOBO ro cpaJla. V1MeeTC Ох19 4eeK ме>кду Ох1 О н Ох28 (разность nJlIOC 1). npLl1Mep 3.20 nOKa зывает nporpaMMY, KOTopa pewaeT эту зада4У. Пример 3.20 LFSR О, Охl0 MOVLW Ох19 Loop: BRA CLRE' DECFSZ Loop Stop: BRA ;адрес Охl0 через FSRO ;заrрузка WREG счетчиком POSTINCO WREG ;очистка ячейки и инкрементирование указателя ;декрементирование счетчика, пропуск ВНА, если О ;повтор цикла до тех пор, пока WREG не станет ; нулевым Stop Таблица 3.5. ДетаJlН KOCBeHHO адрссаЦLl1L11 Мнемоника операндов INDFO INDFl INDF2 POSТDEC POSTINC PREINC PLUSW Комментарий Пример MOVFF WREG, INDFO KOnMpyeT WREG в R4eKY naMRTM, KOCBeH но aApecyeMY FSRO Мнкрементмрует COAepMoe R4eKM naMR тм, aApecyeMO FSR1 KOnMpyeT WREG в R4eKY naMRTM, KOCBeH но aApecyeMY FSR2 KOnMpyeT WREG в R4eKY naMRTM, KOCBeH но aApecyeMY FSRO, а затем B4MTaeT 1 мз FSRO KOnMpyeT COAepMMoe R4eKM naMRTM, aApecyeMO FSRO, в R4eKY naMRTM, aд pecyeMY FSR1, а затем BnOnHReT AeK рементмрованме как FSRO, так м FSR1 04MaeT RqeKY rraMRTM, адресуемую FSR2, а затем мнкрементмрует FSR2 Мнкрементмрует FSR1, а затем AeKpeMeH тмрует COAepMMoe R4eKM naMRTM, Te nepb aApecyeMO FSR1 Мнкрементмрует COAepMMoe R4eKM naMR тм, aApecyeMO FSRO + WREG INCF INDF1 MOVWF INDF2 MOVWF POSTDECO MOVFF POSTDECO, POSTDEC1 CLRF POSTINC2 DECF PREINC1 INCF PLUSWO 
rnaBa 3. Набор коман)]. семейства PIC18 10 I Выполнение какойто операции Нет Да Рис. З.7. KOHCTPYKu.H "repeat-until" Косвенная адресация Прнмер 3.21 влетс первым npHMepoM НСnОЛЬЗ0ванн косвенной адресацнн. Микроконтроллер нмеет трн perHCTpa, которые нсnользуютс ДJl косвенной aдpeca цин 4eeK naMTH. 3тн perHcTpbI Ha3bIBaIOTC perHcTpaMH вы60ра фала (FSRO, FSR1 и FSR2). ПО некоторым npH4HHaM еДVIнственной коман,о,ой, которая нсnользует FSR в качестве OIlepa.-ща, вляетс кома.-ща LFSR, KOTopa нсnользует Д11 занесенн адреса 4eKH nамя- п1 файла .цанных в FSR. Все дpyrne коман,о,ы, ВЫnОЛНIOw.не адресацнlO 4ерез perHCTp вы60- ра фаJlа, НСnОЛЬ3УlOт дpyrHe мнеМОНН4ескне 0603Ha4eHH. В та6л. 3.5 nepe4HCJleHbI мне- МОНН4ескне 0603Ha4eHH н нх функu.нн В СЛУ4ае npHMeHeHH зтнх мнемоннческнх 060 зна4еннй к косвенной a,D,peCau.HH 4ерез perHcTpbI FSR. ,дn НЛЛlOстраu.ни возмо>кностей зтнх косвенных операндов, nреДnОJlО>КНМ, tHO блок данных по a,D,peCaM naMTH ,lJ,анных от Ох1 О до Ох32 дол>кен 6ыть сло>кен с 6локом .цанных, расnоло>кенным по a,D,pecaM naMTH данных от Ох40 .0.0 Ох62. Ка>кдый 6лок co дер>кнт Ох23 4eeK naMTH. CooTBeTCTBYIOw,a nporpaMMa тре6ует орrаннзаu.нн цнкла, выnолнемоrо Ох23 раза, она так>ке тре6ует НСnОЛЬЗ0ванн косвенной адресаu.нн ДЛ досrynа к 06енм 06ластм naMTH данных с НСnОЛЬЗ0ваннем двух perHcTpoB вы60ра фалов (FSRO н FSR1). nporpaMMa, ВЫnОЛНIOw,а зry зада4У, nрнведена в npHMe- ре 3.22. 06ратнте вннманне на то, как нсnользуетс perHcTp 5 в ка4естве С4еТ4нка npH проrраммнрованнн ЦНKJlа. 
102 ITpHMeHeHHe мнкроконтроnnеров PIC18 Пример 3.21 LFSR О, Ох10 LFSR 1, Ох40 MOVLW Ох23 MOVWF 5 Loop: Stop: MOVF ADDWF DECFSZ BRA ВМ POSTINCO, О POSTINC1 5 Loop Stop ;aApecaUMR Ох10 4ерез FSRO ;aApecaUMR Ох40 4ерез FSR1 ;rronY4eHMe Ох23 AnR С4ета ;сохранение С4еТ4ика в R4eKe 5 ;rronY4eHMe R4eKM 6noKa 1 во WREG ;cnoeHMe WREG с R4eKo 6noKa 2 ;Аекрементмрованме С4еТ4мка ;rrporoH UMKna Ох23 раза nре,lJ,nОЛО>КНМ, 4ТО в naMTH CO,lJ,ep>KHTC ннформацн, nОЛУ4еllная ОТ HeKOTOpOrO внешнеrо устройства н nporpaMMa ,lJ,ол>кна просмотреть память данных на предмет Ha JlH4H вхшкденн 4нсла ОхОО. CooTBeTCTBYIOw,a та6лнu.а расnоло>кена по адресам от Ох20 до Ох5А. Аанная та6лнu.а нмеет длнну, paBHYIO Ох3В 4eKaM. Еслн 4НСЛО ОхОО 6у- дет 06нару>кено, то nporpaMMa nрО,lJ,ол>кнт выnолнтьс по метке Foundlt, а еслн зто 4НСЛО 06нару>кено не БУ,lJ,ет, то nporpaMMa nрО,lJ,ол>кнт свое выnолненне по метке NotFound. Пример 3.22 LFSR О, Ох20 MOVLW Ох3В MOVWF 5 Loop: MOVLW ОхОD SUBWF POSTINCO, О BZ FoundIt DECFSZ 5 ВМ Loop NotFound: **** ;aApecaUMR Ох20 4ерез FSRO ;заrрузка WREG зна4енмем ОхОD ;ecnM наЙАено ;rrpoBepKa счетчмка на ;неравенство нул КОА AnR сnучаR, KorAa ОхОD не HaдeHO **** Foundlt: **** КОА AnR cnY4aR, KorAa ОхОD HaAeHO **** Stop: ВМ Stop Последне npOrpaMMHO KOHCTPYKЦHe влетс KOHCTPYKu.H "while" (до тех пор, пока), KOTopa нллюстрнруетс рнс. 3.8. nре,lJ,nОЛО>КНМ, 4ТО npHMep 3.22 nерепнсан с НСnОЛЬЗ0ваннем KOHCTPYKu.HH while вместо KOHCTPYKu.HH repeat-until. В зтом npHMepe- nOHCK ОхОО nOBTopeTc .0.0 тех пор, пока С4еТ4НК не станет нулевым. ,дn выполненн 3TO зада4Н,lJ,Jl всех 4eeK, зна4енне С4етчнка ,lJ,ол>кно увеЛН4нватьс на 1. npHMep 3.23 НЛЛlOстрнрует HOBYIO nporpaMMY, НСnОЛЬ3УIOw,УIO KOHCTpYKu.HIO while. 
rnaBa 3. Набор коман)]. семейства PIC 18 103 Пример 3.23 LFSR О, Ох20 MOVLW ОхЗС MOVWF 5 =..оор: DCFSNZ 5 вм NoU;'ound MOVLW ОхОD SUBWF POSTINCO, О I3NZ Loop FoundIt: aApecaUMR Ох20 4ерез FSRO ;rrpoBepKa С4еТ4мка ;АО тех пор, rrOKa С4еТ4МК неНlевой ;eCnM 4MCno ee не HaAeHO **** КОА, eCnM ОхОD HaAeHO **** otFound: **** КОА, eCnM ОхОD не HaAeHO **** 3LOp: ВМ Stop Нет Выnоnнение нужной операцин Да { ;  Рис. 3.8. KOHCTPYKu.H "While" Еслн сравннть два прнведенные npHMepa, то мо>кно заметнть, 4ТО сраКТН4ескн изменнлось только место pa3Mew,eHH команды дeKpeMeHTHpOBaHH С4еТ4нка. В Bep снн nporpaMMbI, НСnОЛЬ3УIOw,ей KOHCTpYKu.HIO repeatuntil по npHMepy 3.22, проверка после дeKpeMeHTHpOBaHH - зто nоследн проверка ЦHкna, а в npHMepe 3.23, проверка после дeKpeMeHTHpOBaHH  зто nepBa проверка u.Hкna. Во всем остаJlЫЮМ nрнведен ные nporpaMMbI nOXO>KH, 4ТО в верснн nporpaMMbI с KOHCTpYKu.He while LI1СnОJlьзуется знаt/енне С4еТ4нка, которое на еднннu.у 60льше, 4ем в верснн с конструкцней repeat until, nРН4ННОЙ 4ero влетс то в nporpaMMe с KOHCTpYKu.He while декрементнроваНLI1е выnолнетс сна4ала. Нн однн Н3 рассмотренных BapLl1aHTOB не LI1MeeT HLI1KaKLI1X 06ъeK тивных npeHMyw,eCTB перед ДРуrнм. 
104 ITримененне MHKpOKOHTpOnnepOB PIC18 3.5. Табличные команды ИмеlOТСЯ две та6ЛLl14ные команды: TBLRD (та6ЛН4ное C4L11TblВaHHe) н TBLWТ (Ta6 JlLl1чна заnнсь). 3тн Ta6JlH4HbIe команды nepeMew,alOT ннсрормаЦLl1IО мюкду flамятъlO прorраММJ KOTopa вляетс неразрушаемо naMTblO, н nамlыо данных, которая яв ляется разрушаемой naMTblO. Та6лнu.ы, которые НСnОЛЬ3УIOТС совместно с ПрОIрамм HbIMLI1 кодамн, н MOryr, СJlедовательно, xpaHHTbC в nамятн nporpaMM, в случае He06xo ДLl1МОСТLI1 nереносятс ДJl нх НСnОЛЬЗ0вання в naMTb данных. Команда та6ЛLl1LllIOrо СЧLl1 TbIBaHLI1 C4L11TbIBaeT данные нз naMTH nporpaMM н coxpaHeT нх в памтн данных. Ko манда та6ЛLl14НО заnнсн С4нтывает данные нз naMTH данных н заnнсывает нх в naMTb nporpaMM. Та6ЛНL/ное С4нтыванне с4нтыlзетT naMTb nporpaMM, а та6лнчна заnнсь осуществлет заnнсь в naMTb nporpaMM. 06ратнте BHHMaHLI1e на то, 4ТО та6Jlнчная за I1НСЬ в памть проrрамм невозмо>кна в мнкроконтроллерах нсnолнення отр (ceMeCTBO 18С). Мнкроконтроллер дол>кен нметь срлзшnамть ДJl Toro, 4т06ы 6ыла ВОЗМО>Кllа запнсь в naMTb nporpaMM. V1сnолненне мнкроконтроллеров отр не нмеет срJl3Ш памтн. Команда TBLRD* Таблица 3.6. Та6ЛИ L IНЬЮ команды TBLWТ* TBLRD*+ TBLWТ*+ TBLRD* TBLWТ* TBLRD+* TBLWТ+* Комментарий aHHыe nepeHOCRTCR М3 naMRTM nporpaMM в TABLAT, та6ЛМ4НЫ указа Tenb не M3MeHReTCR aHHe rrepeHOCRTCR М3 TABLAT В rraMRTb Tenb не M3MeHReTCR aHHe nepeHOCRTCR М3 rraMRTM rrporpaMM Tenb затем MHKpeMeHTMpyeTcR aHHыe rrepeHOCRTCR М3 TABLAT В naMRTb Tenb затем MHKpeMeHTMpyeTcR aHHыe nepeHOCRTCR М3 rraMRTM nporpaMM Tenb затем AeKpeMeHTMpyeTcR aHHe nepeHOCRTCR М3 TABLAT В naMRTb Tenb затем АекрементируеТСR Та6nИ4Н указатеnь MHKpeMeHTMpyeTcR, М3 naMRTM nporpaMM в TABLAT Ta6nM4H указатеnь мнкрементируеТСR, затем Аанные переI!ОСЯТСЯ И3 TABLAT В rraMRTb nроrрамм nporpaMM, 'l'абnмqн ука за. в TABLAT, табnмчн указа nporpaMM, 'rаБJIМ4НЫ указа в TABLAT, 'l'аБJIМЧНЫ указа nporpaMM, 'l'а6ЛМ4НЫ указа , затем Аанные nереносятсн Та6ЛН4ные команды НСnОЛЬ3УlOТ указатель (называемы Ta6JlH4HbIM указателем) (TBLPTR) ДJl доступа к naMTH nporpaMM. Та6ЛН4НЫЙ указатель pa3Mew,eH в 06ластн SFR, он нмеет трн 6aTa в ДJlHHY н мо>кет содер>кать 21-разрдный адрес. PerLl1CTp TBLPTRL содер>кнт 8 младшнх 6нтов, perHcTp TBLPTRH содер>кнт слеДУIOw,не по стар- ШLl1НСТВУ 8 6нтов, а perHcTp TBLPTRU  самые старшне 8 6нтов адреса в nамятн npo rpaMM. nереда4а данных выnолнетс 4ерез perHCTp TABLAT в лн60 Н3 naMTH npo rpaMM. Варнанты команд та6ЛН4IЮ заnнсн н C4HTЫBaHH НЛЛIOСТРНРУIOТС та6лнu.е 3.6. 3тн варнанты доnускаlOТ ннкрементнрованне нлн декрементнрованне та6ЛН4ноrо ука- зател до лн60 после та6ЛН4ноrо C4HTЫBaHH нлн заnнсн. Декрементнрованне перед та6JlLl14НОЙ заnнсыо нлн С4нтываннем не доnускаетс. Однн Н3 nере4нсленных BapHaH тов зтнх команд не ннкрементнрует н не декрементнрует та6ЛН4НЫЙ указатель. Та6ЛН4 ное счнтыванне лн60 заnнсь nepeMew,aeT 8-разрдное 4НСЛО ме>кду Я4еко nамя I-H nporpaMM, aдpecyeMO perHcTpoM та6ЛН4ноrо указател (TBLPTR) н сnеu.нальным СРУIIКЦLl10нальным perHCTpoM, называемым perHCTpoM срнксацнн Ta6JlHu.IзI (TABLAT). 
rnaBa 3. Набор коман)]. семейства PIC 18 105 Табличное считывание. Табличный указатель (TBLPTR) (21 разрдны адрес н 22й разрд ДЛ адресацнн 06ластн конфнryрацнн) н perHCTp фнксаu.нн та6ЛLl1ЦЫ (ТАВLAТ) (8-разр,lJ,НЫЙ perHcTp) размеw,ены в ceKu.HH SFR naMTH данных. 06ласть памятн IIpO rpaMM ле>кнт в днаnазоне адресов от ОхОООООО до Ох1 FFFFF, а 06ласть KOHcpHrypau.HH HaXOALl1TC в днаnазоне адресов от ОхЗООООО до Ox30FFFF. nредnоло>кнм, что нам He06 ходнмо nре06разовать 4НСЛО в днаnазоне ме>кду О н 9 нз кода ВСD (ДКД) (3 7 -сеrмеНТНbI код ДJl oT06pa>KeHH 3Toro 4нсла на cerMeHToM светоднодном чнслен 110М HHДHKaTope.,дn выnолненн 3Toro nре06разованн 06Ы4НО НСnОЛЬ3УlOТ nOLl1CKO(3YIO rаблнu.у. Всле,lJ,ствне Toro, 4ТО naMTb данных относнтелы-ю невелнка н нмеет ALl1llaMLI1l/ HYIO npHpoAY, nOHcKoBa та6лиu.а xpaHHTC в naMTH nporpaMM, KOTopa нмеет значн тепьны объем н нмеет cTaTH4ecKYlO npHpoAY. npH coXpaHeHLI1L11 1l0Ll1CKOBO таБЛLl1ЦЫ в паМЯТLI1 nporpaMM зта та6nнца CTaHOBHTC nocToHHO. BcerAa, KorAa l-/еоБХОДLl1МО ис пользовать nOHcKoBYIO таблнu.у, cooTBeTcTBYIOw,He 4ейкн КОnНРУIOТСЯ (3 naMTb данных И3 naMTH nporpaMM с НСnОЛЬЗ0ваннем команды таБЛНl/ноrо С4НТЫВalШЯ. Как зто (3ы nолНетс? nре>кде Bcero nOHCKOBa таблнца coxpaHeTC в naMTH nporpaMM, нсnоль 3Y 6лок nporpaMMHbIx кодов, nоказанны в npHMepe 3.24. Пример 3.24 ;-************* 7cerMeHTHaR nOMCKOBaR та6nмца **************** :ABLE7 CODEPACK Ox1FFO :'00k7: db Ох06 ; О db Ох5Ь ; 1 db Ох79 ; 2 db Ox4F ; 3 db Ох66 ; 4 db Ох6D ;5 db Ох7D ;6 db Ох07 ; 7 db Ox7F ; 8 db ОхЗF ; 9 nOHCKoBa та6лнu.а по npHMepy 3.24 расnолаrаетс перед rла(Зно nporpaMMo, непосредственно перед оператором RESEТ_VECTOR1 СООЕ ОхОООО в фале ша6лона;> Она оnределетс после nОЛЬЗ0вательскнх данных н данных зсnnзу. Важно LI1СПОЛЬ30 вать днректнву СООЕ_РАСК ДЛ coxpaHeHH в naMTH nporpaMM бато(З в срорме двух 6aTOB на слово. KorAa комаН,lJ,а TBLRD осуw,ествлет доступ к naMTH nporpaMM, она адресует 6aTЫ naMTH nporpaMM, n03ToMY та6лнu.а дол>кна 6ыть упакована n06айтно (3 СЛУ4ае 6aTOBO та6лнu.ы. Чнсла в та6лнu.е за,lJ,аlOТ 6нты, не06ХО,lJ,нмые ДJl реалнзаu.ин 7-сеrментноrо КО,lJ,а, как зто НЛЛlOстрнруетс рнс. 3.9. CerMeHTbI nOMe4eHbI 6уквамн  от а до g, а лоrН4еска 1 в данном npHMepe озна- чает све4енне cerMeHTa. Еслн, HanpHMep, Ох66 nepe,lJ,aeTc на ЖК-ннднкатор, то BКnIO чатс cerMeHTbI Ь, с, f н g, OT06pa>Ka u.нфру 4 на ЖК-НН,lJ,нкаторе. Та6лнu.а содер>кнт (3се 7-сеrмеНТНbIе коды в 4нсленном nopAKe, как зто НЛЛlOстрнруетс npHMepoM 3.24. npo rpaMMa, осуw,еСТВЛIOw,а ,lJ,ocryn к 3TO таблнu.е, показана в npHMepe 3.25. НаLl1болое зффектнвный cnoc06 nОЛУ4енн кода нз таблнu.ы заKJl104аетс в НСnОJlьзо(3аНИLl1 одной команды TBLRD, KOTopa осуw,ествлет AOCryn к 4eKe nOHcKoBO та6ЛLl1ЦЫ, соответст- ВУIOw,ей ну>кному коду. Перва команда а,lJ,ресует та6лнu.у Look7 nосредст(Зом заl-РУЗКLI1 в ТВ LPTR Look7. В данном СЛУ4ае HanHcaHa функu.н, осуw,еСТВЛIOw,а ,lJ,ocryn к Ta6JlHu.e н ВЫnОЛНIOw,а nре06разованне нз коднровкн ВСО в 7 cerMeHTHbI код. V1CnOllb30BaH 
106 ITpHMeHeHHe MHKpOKOHTpOnnepOB РI С 18 HЫ ДЛ 3KCnepHMeHTOB MHKponpou.eccop нмел 4К naMTH npOrpaMM, n03TOMY та6лнu.а 6ыла nOMew,eHa в 4ейкн naMTH npOrpaMM в днаnа30не адресов от Ох1 FFO дО Ох1 FF9 n06JlH30CTH от вершнны naMTH nporpaMM. Байт таблицы g f е d с Ь а о о о о о 1 1 о " == ОДИН Рисунок З.9. 7 -сеrмеНТНbI 4НСЛОВО ннднкатор Пример 3.25 ;********** в 7cerMeHTH КОА ************************ мсnоnьзует 1 уровень стека AaHHX мсnоnьзует WREG, TABPTR м TABLAT AOCTYn К Ta6nMue rro аАресам от OxlFFO АО Ox1FF9 nре06разует WREG М3 ВСD в 7-сеrментн КОА 7cerMeHTH КОА B03BpaaeTCR во WREG T07seg: ANDLW ADDLW MOVWF MOVLW MOVWF MOVLW MOVWF OxOF OxFO TBLPTRL OxlF TBLPTRH О TBLPTRU ;04мстка CTapwero nony6aTa ;reHepMpOBaHMe аАреса та6nиц TBLRD* MOVFF ;nOnY4eHMe 7cerMeHTHoro КОАа TABLAT, WREG RETURN 3та >ке методнка мо>кет 6ыть нсnользована ДЛ выnолненн ДОСlуnа к JlI060MY TH ny фнкснрованной та6лнu.ы в naMTH npOrpaMM, npH условнн, 4ТО та6лнu.а coxpaHeTC в 4eKe, KOTopa леrко моднФнu.нруетс nре06разуемым 4НСЛОМ. Д,л НЛЛlOстраu.нн 3TO ro, nредnоло>кнм, 4ТО та6лнu.а нспользуетс ДJl npe06pa30BaHH шестнадu.аТНРН4НЫХ кодов в коды ASCII вместо метода, НСnОЛЬЗ0ванноrо 8 npHMepe 3.16. Вне BCKoro co MHeHH, метод, отра>каемый npHMepoM 3.16, HaMHoro КОр04е н rораздо 60лее зффектн вен, одна вместе с тем зто nре06разованне может 6ыть так>ке реаЛНЗ0вано с нсnользо 
rnaBa 3. Набор коман)]. семейства PIC 18 107 ваннем та6лнцы. Смотрнте npHMep 3.26 ДJl ознакомленн с соотвеТСТВУIOw,ей nOHCKO BO таблнu.е н nроrраммой, осуw,еСТВЛIOw,ей nреобраЗ0ванне. 3та функu.н 6ыла Ha звана Hex2ASCII, - точно так >ке, как н функu.н Н3 npHMepa 3.18, nOCKOJlbKY она выnолн ет Т04НО ту >ке зада4У. Пример 3.26 ;************** ПомсковаR та6nиuа ASCII **************** TABLE7 СОDЕ РАСК OxlFFO HexASC DВ Ох30, Ох31, Ох32, Ох3З DВ Ох34, Ох35, Ох36, Ох37 DВ Ох38, Ох39, Ох41, Ох42 DВ Ох43, Ох44, Ох45, Ох46 ;********** Hex2ASCII ************************ мсnоnьзует 1 уровень стека Аанных мсnоnьзует WREG, TABPTR м TABLAT AOCTYn к Ta6nMue по аАресам от Ox1FFO АО Ox1FFF nре06разует WREG М3 wестнаАuаТМРИ4ноrо в ASCIIKOA ASCIIKOA B03BpaaeTCR во WREG Hex2ASCII: ANDLW OxOF ADDLW . MOVWF MOVLW MOVWF MOVLW MOVWF TBLRD* MOVFF RETURN ;04мстка cTapwero rrony6aTa ;reHepMpoBaHMe аАреса Ta6nMUЫ OxFO TBLPTRL OxlF TBLPTRH О TBLPTRU ;rrOnY4eHMe ASCIIKoAa TABLAT, WREG Табличная запись. Onepau.H та6ЛН4НО заnнсн мо>кет оказаться pHCKOBaHHO. Ha npHMep, еслн во BpeM выnолненн заnнсн в naMTb nporpaMM nронзодет сброс, 1б 3ТО мо>кет npHBeCTH к разрушеннlO ,lJ,анных. Еслн 3ТО возмо>кно, то следует нсnользо вать какойлн60 мето,lJ, вернфнкаu.нн заnнсн ,lJ,анных. О,lJ,нако возмо>кно 3ТО не всеrда. MoryT ВОЗННКНуТь н друrне nр06лемы, свзанные с та6ЛН4НО заnнсыо' - коrда, HanpLl1 мер, во BpeM заnнсн nРОНЗ0йдет с60Й злектроnнтанн лн60 не 6удуТ заnреw,ены пре . pЫBaHH. По зтнм npH4HHaM та6ЛН4на заnнсь 6удет 06cy>кдaTbC n03>Ke, коrда ynoM НуТые вопросы 6удуТ npOaHaJ1H3HpoBaHbI. Однн Н3 методов вернфнкаu.нн заnнсн данных заKJl104аетс в заnнсн данных в две отдельные та6лнu.ы. Ka>Kдa та6лнu.а также содер>кнт 6айт С4еТ4нка. Коrда выnолнетс заnнсь в та6лнu.у, то 6aT С4еТ4нка HHKpeMeHTHpyeTC. При сохраненнн Ta6JlHu.bI она заnнсываетс С ннкрементнрованным зна4еннем С4еТ4нка. Затем заnнсываетс Apyra та6лнu.а так>ке с ннкрементнрованным зна4еннем С4еТ4нка. Еслн пронзодет c60, то зтн две та6лнu.ы не 6у,lJ,уТ соответствовать друr друrу, 6aTЫ С4еТ4НКОВ так>ке 6удуТ раз- нымн. Восстановленне после c60 в ,lJ,анном СЛУ4ае 6удет заКnlOчатьс в откате к Ta6JlLl1 u.e, содер>каw,е меньшее зна4енне С4еТ4нка. XOT 3ТО н не nолна nроu.едура BOCCTa новленн от c60, все >ке оно nозволет 06нару>КНТЬ ошн6ку н ВЫnОЛl-fНТЬ необходнмы откат. 
108 ITpHMeHeHHe MHKpOKOHTpOnnepOB PIC 18 Команда та6лнчно заnнсн нсnользуетс в rлаве 1 О, в nporpaMMe заrруЗ t /нка для заnнсн ннсрормацнн в naMTb nporpaMM. Едннственное npHMeHeHHe та6ЛНЧIIО заПLl1СН заКJllОчаетс в заnнсн ннформаu.нн в naMTb nporpaMM нлн в perHCTpbI КОllсрнryраЦLl1Н. 3.6. Макропоследовательности Макропоследовательности нлн макросы  зто rpYnnbI комаllД, которые pa60TalOT так >ке, как н Функu.нн, однако ОТСуТствует CB3b ДJl 06paw,eHH к макроnоследоватеJ\Ь ностн нлн ДJl возврата Н3 нее. Второе ОТЛН4не заКnlO4аетс в том, 4ТО команды, BXO дw,не в состав макроса, вставлIOТС в nporpaMMY вскнй раз, коrда HMeeTC вызов 3Toro макроса. Определение маХРОСОБ Макросу npHcBaHBaeTc HM, за которым следует слово МАСАО, после KOTOpOlO следует Л1060 параметр, связанны с зтнм макросом. npHMep 3.27 НЛЛlOстрнрует on ре,lJ,еленный ДJl ассем6лера макрос, который C,lJ,BHraeT параметр "what" влево. Метка "what" называетс замещаемым параметром. BCKH раз, KOr,lJ,a команды макроса нс- nОЛЬЗУIOТС в nporpaMMe, метка "what" замеw,аетс параметром, указанным справа от нменн макроса. В зтом npHMepe макрос, названный ShiftL, нсnользуетс два>кды н вся KH раз параметр "what" замеw,аетс WREG. Пример 3.27 ShiftL МACRO what ;макрос и мменем ShiftL ADDWF what endm ;Макрос ShiftL мсnоnьзуеТСR 2 раза MOVLW 1 ShiftL WREG ;исnоnьзует макрос AnR WREG ShiftL WREG ; мсrrоnьзует макрос AnR WREG В npHMepe 3.18 nоказана nporpaMMa, KOTopa нсnользует фУНКЦНIO ДJl nре06разова IIH нз шестнадu.аТНРН4ноrо формата в формат ASCII. npHMep 3.28 показывает ту >ке caMYIO nporpaMMY, однако вместо НСnОЛЬЗ0ванн функu.нн Д11 npe06pa30BaHH нз шестнадu.атн- РН41.юrо формата в формат ASCII нсnользуетс макрос. ECnH зтн два npHMepa сраш-/нть, то мо>кно YBltlДeTb, 4ТО ме>кду ннмн не столь уж. 60льша pa3HHu.a. Функцн завершается KOMaH дo return, а макрос - командой ENDM. ENDM не вноснт HHкaKoro ко.ца в nporpaMMY, в то Bpe M как REТURN вставлет ОДНУ команду. Макрос на ОДНУ команду КОро4е, 4ем Функu.н. В rлавно nporpaMMe функu.н BЫ3ЫBaeTC ДВа>КДЫ, макрос также BЫ3ЫBaeTC два>КДЫ. Коrда BЫ3ЫBaeTC функu.н, команда CALL тре6ует ДВУХ машннных слов Д11 cBoero pa3Mew,eHH, а npH ВЫЗ0ве макроса доnолннтеЛЫ-iые машннные cnoBa Bo06w,e не нуж.ны. V13 ЛНСlинrа по npHMepy 3.28 вндно, 4ТО команды макроса вставлIOТС в проrрамму два раза - по одному на Ka>K,lJ,Oe обраw,енне к макросу. 
lnaBa 3. Набор коман)]. семейства PIC 18 109 Пример 3.28 ;*** Макрос npe06pa30BaHMR мз wecTHaAuaTMpMqHOrO opMaTa в opMaT ASCII *** Пре06разует npaB nony6aT WREG в opMaT КОАа ASCII, B03BpeMoro во WREG Hex2ASCII MACRO ANDLW OxOF ADDLW ОхЗО DAW BTFSC WREG, 6 INCF WREG ENDM ;04мстка npaBoro nоnубата ;nреобразованме ero в ЛSСII ;*** Main program *** Main: MOVLW Ох5с ;заrрузка TeCTOBX Аанных MOVWF ASCII Н Hex2ASCII ;rrре06раЗ0вание мnaAWero nony6aTa MOVWF ASCII L ;сохраненме ero в ASCII L MOVFF SWAPF ASCIIH, WREG WREG ;nonY4eHMe cTapwero nоnу6айта Hex2ASCII ;npe06pa30BaHMe ero в ASCII MOVWF ASC 1 1 Н ;сохраненме ero в ASCII Н Stop: GOTO STOP , I':""ot. Еслн вы скомnилнруете зтот npHMep, то nOHTb cnoc06, которым макрос отобра >KaeTC в лнстннrе комnнлu.нн nporpaMMbI, мо>кет nоказатьс вам трудным делом. В зтом лнстннrе Ka>Kдa команда макроса nовлетс ,lJ,ва>кды С раЗЛН4НЫМН несме>кнымн · адресамн. Однако, еслн вы мысленно nepeMeCTHTe Ka>KAYIO команду макроса на COOT BeTCTBYIOw,ee ей место в nporpaMMe, то все станет на свон места. То, n04eMY команды макросов npHBoATC в лнстннrе нменно такнм 06раЗ0М - зто заrадка. 3.7. Резюме 1. Лнтеральные команды n03ВОЛЯlOт НСnОJlьзоваlше IlнтераЛЫ-IЫХ HJlLl1 nОСТОЯНllЫХ данных, в основном с perHCTpoM WREG. ЛLl1тераJlьные команды нсrюльзуlOТ коды onepa u.H, - такне как MOVLW нлн ADDLW, npH зтом первые трн 6уквы обозначаlOТ оnераЦLl1Ю, а nоследнне ,lJ,ве  06ъект onepau.HH (L = лнтераJl, W = WREG). При 3ТОМ команда ADOLW добавляет лнтеральные данные к WREG. HanpHMep, команда ADDLW 6 добавляет 6 к WREG. 
11 О ITpHMeHeHHe MHKpOKOHTpOnnepOB PIC 18 2. V1MeIOTc так>ке друrне лнтерanЫ-iые команды: ВЫ4нтанне (SUBLW), ВКJIЮ4аlO w,ee ИЛV1 (IORLW), НСКЛlO4нтеJlьное V1ЛV1 (XORLW), v1 (ANDLW), а так>ке УМIЮ>КСННС (MULLW). Имеетс так>ке лнтеральны возврат нз nроu.едуры (RETLW), KOTOPЫ 1103130- JleT возвраw,ать JlHTepaJl во WREG. З. Две Jlнтеральные команды не нсnользуют WREG. 3то команды MOVLB н LFSR, которые заrру>каlOТ perHCTp вы60ра 6анка (BSR) L/1ЛН perL/1CTp вы60ра срала (FSRO, FSR1, or FSR2) лнтеральнымн даннымн. 4. Бнтовые команды 06ecne4HBalOT возмо>кность с6роса отдельных бнтов (BCF), установкн (BSF) нлн nepeКnlO4eHH (BTG). 3то 06есnечнвает nOJlHbI контроль над co CTOHHeM всех 6нтов в ЛlO60М месте naMTH данных, BКnI04a сnеu.нальные cpYHKЦHO нальные perHcTpbI. 5. Друrнмн 6нтовымн командамн ВЛlOтс BTFSC н BTFSS, которые npoBepIOT COCTOHHe 6нта н nponYCKalOT следуlOw,уlO команду, еслн 6нт лн60 с6рошен (BTFSC), лн60 установлен (BTFSS). 6. Батовых коман,lJ, 60льше, 4ем команд какоrолн60 HHoro THna. Все оtlн рабо TalOT с 6aTOBЫMH даннымн. Cnoc06, которым 0603Ha4a1OTC зтн команды, указывает на то, как ра60тает зта комаН,lJ,а. HanpHMep, команда ADDWF д06аВJlяет 6aT L/13 WREG к 4eKe perHCTpoBoro файла нлн >ке содер>кнмое 4eKH perHcTpoBor"O срала к coдcp >кнмому perHCTpa WREG. Наnравленне onepau.HH мо>кет Bы6HpaTbC. 7. Данные адресуlOТС посредством нсnользованн номера perHCTpa НJlН >ке KOC венно 4ерез указатель, расnоло>кенны в perHCTpe вы60ра фала (FSR). Еслн нсnользу eTC FSR, то OnepaH,lJ,aMH ДJl косвенной a,lJ,pecau.HH ВЛlOтс INDFO, INDF1 н INDF2. Так>ке досrynными ДJl косвенной адресаu.нн naMTH ВЛlOтс POSТlNCO, POSТlNC1 н POSТlNC2, а так>ке PREINCO, PREINC1 н PREINC2. 'PLUSWO, PLUSW1 н PLUSW2 MOryr так>ке L/1сnользоватьс для сло>кенн WREG с perHCTpOM FSR. 8. Команды уnравленн n03ВОЛlOт осуw,ествлть проверку условн, а затем, OC HOBЫBaCb на результатах 3TO npoBepKH, выnолнть переход к друrой CeKu.HH nporpaM- мы. 3тн команды 4асто реалнзуlOТ оператор if (еслн) . 9Лроrраммные KOHCTPYKu.HH BJlIOTC стронтелы !ымн БJlокамн nporpaMMHpoBa HH. HaH60Jlee 4асто НСnОЛЬЗУlOтс слеДУIOw,не nporpaMMHbIe КОНСТРУКЦL/1L/1: ifttlCпCJSC, repeatuпtil, while, а так>ке Функu.нн. 10. Та6ЛН4ные команды 06есnечнваlOТ досryn к naMTH nporpaMM. ПамТI) про rpaMM C4HTЫBaeTC С НСnОЛЬЗ0ваннем команды та6ЛL/14lюrо чтення (TBLRD) н заnнсыва eTC с НСnОЛЬЗ0ваннем команды та6ЛН4НОЙ заnнсн (TBLWR). 11. Данные в naMTH nporpaMM адресуlOТС С НСnОЛЬЗ0ваннем perHCTpa TBLPTR, а nepCHoCTC ,lJ,анные всеrда 4ерез perHCTp TABLAT. 12. nOHCKoBbIe та6лнu.ы 4асто НСnОЛЬ3УlOтс ДJl nре06разованн данных нз oд HO формы В друrуlO. 1 З. Макроnоследовательностн НСnОЛЬ3УlOтс в nporpaMMax ДJl nовышенн нх скоростн работы, однако 06Ы4НО онн Tpe6YlOT 60льшеrо 06ъема пространства nамятн, 4ем зквнвалентные функu.нн. 3.8. Вопросы и задания 1. Что такое лнтеральные данные? 2. С какнм perHCTpoM МНКРОКОНТРОЛJlера 06Ы4НО pa60TalOT лнтеральные KOMall ды? З. Что делает команда AODLW? 4.Вы6ернте ЛL/1тераJlЬНУIO коман,lJ,У для ВЫnОJ1нення кюкдо нз СЛСДУIOw,L/1Х задач: 
rnaBa 3. Набор коман)]. семейства PIC18 111 а. поместнть Ох34 в perHcTp WREG Ь. д06авнть 3 к perHcTpy WREG с. выполннть операu.нlO BKJl104alOw,ero V1ЛV1,цл 6 н содер>кнмоrо perHcTpa WREG d. заrрузнть 2 в perHcTp вы60ра 6анка е. OTHTb от О содер>кнмое perHcTpa WREG 5. nOCHHTe, 4ТО делаlOТ слеДУIOw,не лнтеральные команды: а. MOVLWOx6A Ь. XORLW 4 с. LFSR Ох123 d. MULLW.10 е. MOVLB 2 6. Напншнте KOPOTKYIO последовательность команд, KOTopa заrру>кает 3 во WREG, затем д06авляет 9 н, HaKoHeu., выполнет операu.нlO ВKJlючаlOw,еrо V1ЛV1 ,цл co дер>кнмоrо WREG н лнтерала 5. 7. Напншнте KOPOTКYIO последовательность команд, KOTopa помеw,ает OxOF во WREG, а затем 04Hw,aeT два самых правых 6нта, устанавлнвает самый левый 6нт, а за тем ннвертнрует 6HTOBYlO познu.НIO 5, НСnОЛЬ3У только лнтеральные команды ,цл pe шенн это зада4Н. 8. Вы6ернте 6HTOBYlO команду, KOTopa: а. 04Hw,aeT 6HTOBYlO познu.НIO 2 perHcTpa WREG Ь. Устанавлнвает 6HTOBYlO познu.НIO 3 perHcTpa 6анка досryпа Ох11 с. nepeKJl104aeT 6HTOBYlO познu.НIO 3 perHcTpa банка досryпа Ох1А d. Устанавлнвает реrнстровый 6нт COCTOHH пере носа е. 04Hw,aeT 6нт N perHcTpa COCTOHH 9. Что делает команда BTFSC? 10. Что делает команда BTFSS? 11.Напншнте последовательность команд, НСПОЛЬ3У только 6нтовые н лн repaJlb- ные команды, KOTopa выnолннть прн6авленне 1 к содер>кнмому perHcTpa WREG, еСJ1Н 6нт переноса perHcTpa COCTOHH HaXOДHTC в еДННН4НОМ COCTOHHH 1 . 12. Какне 4eKH perHCTpOBoro срала содер>кнт 6анк досryпа? 1 З. 06ЪCHHTe, как проrрамма ПОЛУ4ает досryп к 4ейке perHCTpOBoro срала Ох200? . 14. В 4ем заKJl104аетс pa3HHu.a мюкду 6айтовым сло>кеннем н лнтеральным сло- >кеннем? 15. Опнwнте, 4ТО делает кюкда Н3 следуlOw,нх команд: а. MOVFFWREG, Ох10 Ь. ADDWF Ох20, О с. ADDWF Ох20, 1, 1 d. DECF ОхЗ4 е. INCF ОхЗ4, 1 16. Напншнте KOPOTKYIO проrрамму, KOTopa coxpaHeT Ох5А в 4eKax 6анка дoc тупа Ох1 О, Ох20 н ОхЗО. 17. Напншнте KOPOTKYIO проrрамму, KOTopa ду6лнрует содер>кнмое 4eKH банка досryпа Ох12. 18. Напншнте KOPOTKYIO последовательность команд, KOTopa В031ЮДНТ в квадрат содер>кнмое perHcTpa WREG. 19. KaKa 6aTOBa команда выполнет сложен не с У4етом бнта состояння пере- носа? 20. rде находнтся HHcpopMau.H о занмствованнн после выполнеllНЯ ВЫ4нтаIlНЯ? 21. Что делает команда SETF? 
112 ITpHMeHeHHe MHKpOKOHTpOnnepOB PIC 18 22. Напншнте KOPOTKYIO последовательность команд, KOTopa добавлет 24разрдное 4НСЛО, находw,еес в 4eKax Ох10, Ох11 н Ох12 к 24разрядному чнслу, находw,еес в 4eKax ох20, Ох21 н Ох22. Чнсла xpaHTbC в срормате с 06ратным no pДKOM 6айтов. Результат coxpaHeTC в 4ейках Ох20, Ох21 н Ох22, ЛlOьые переllОСЫ ме>кду 6айтамн ДОЛ>КНЫ Y4HTЫBaTbC. 23. 06ЪCHHTe, как FSRO нспользуетс ДЛ KOCBeHHO адресацнн 4ейкн памятн u Л1060 команде. 24. Что делает команда DCFSNZ? 25. Напнwнте последовательность команд, KOTopa умножает содер>кнмое perH стра WREG на десять. Вы не ДОЛ>КНЫ НСПОЛЬЗ0вать команду YMHO>KeHH. 26. д,л 4ero служнт операнд POSTINC1? 27. Как ПОЛУ4НТЬ дополненне до двух perHcTpa WREG? 28. Как ПОЛУ4НТЬ дополненне до еднннu.ы perHcTpa WREG? 29. Что делает команда ВАА? 30. Сравннте н протнвопоставьте команды ВАА н GOTO. . 31. Команда BNZ выполнет относнтельный лн60 а6солlOТНЫ переход? 32. Каков днапаЗ0Н адресов, в пределах KOToporo команда BZ мо>кет выnолнть переход в проrрамме? 33. Наnншнте KOPOTКYIO проrрамму, KOTopa pa3Mew,aeT Ох12 в 06ласть nамятн 6анка досryпа от ОхОО до Ох22. 34. Контрольна сумма представлет с060Й сумму (прн от6расыоаннн переllО- соо) всех 4нсел 6лока памтн. Напншнте проrрамму, которая reHepHpyeT 8разрднуlO КОНТРОЛЬНУIO сумму ДЛ содер>кнмоrо 6анка памтн О (от ОхОО до OxFF) н coxpalleT ее BoWREG. 35. Как pa60TalOT команды CALL н RETURN? 36. Как нспользуетс стек CPYHKu.HMH CALL н RETURN? 37. Напнwнте срунKu.H10, KOTopa срормнрует 16разрднуlO КОНТРОЛЬНУIO сумму ДЛЯ всех 4eeK 6анка памтн О. 3та контрольна сумма дол>кна 6ыть сохранена u perH страх PRODL н РАООН в срормате с 06ратным расположеннем 6aTOO, поскольку one pau.H YMHO>KeHH не выполнлась. 38. 06ЪCHHTe, как в прнмере 3.17 выполнетс пре06раЗ0ваllне Н3 шеСТlЩLща ТНРН41-юrо кода в код ASCII. 39. Что такое та6лнчные команды? 40. Напншнте CPYHKu.H 10 , KOTopa осуw,ествляет доступ к таблнце простых чнсел с u.елыо определенн Toro, влетс лн 4НСЛО простым нлн нет. 8pa3PMHoe проверяе- мое 4НСЛО передаетс это CPYHKu.HH 4ерез WREG. Та6лнu.а дол>кна содер>кать простые чнсла uплоть до 251. Еслн 4НСЛО влетс простым, то дол>кна OTpa6aTЫBaTbC комаllда RETURN с установленным в 1 6нтом переноса, а еслн нет  то дол>кна OTpa6aTЫBaTbC команда RETURN с 6нтом переноса, c6poweHHbIM вО. 41. Как определетс макропоследовательность? 42. Каков расход памтн прн ВЫЗ0ве макропоследовательностн? 43. Напншнте макрос, KOTOPЫ сдвнrает 8-раЗрЯДllое содер>кнмое ЛlO60rо perH- стра вправо на однн разрд. (npH сдвнrе вправо помеw,ается ноль u caMЫ левый 6нт результата). 
rnaBa 4. ITporpaMMHpoBaHHe На Slзыке Ассембnера 113 rлава 4. Проrрамммрованме на языке Ассемблера Ce4ac, после Toro, как вы Н3У4НЛН u.елый pд команд PIC, вы мо>кете нх ДOCTa точно эсрсректнвно нсnользоuать в короткнх nporpaMMax. Однако, вам необходнмо У3- нать 60льше относнтельно проrраммнрованн на 3ЫKe Ассем6лера. Вместе с тем, если вы nрндете к выводу, 4ТО проrраммнрованне на 3ЫKe Ассемблера окажетс для оас слишком СЛО>кНЫМ, то вы смо>кете перетн к НСnОЛЬЗ0ваннIO 3ЫKa nporpaMMHpo вания С npH разработке nporpaMM Д1l YCTPOCTB PIC. Еслн вы уже решнлн, 4ТО будете создавать npoenbI в основном на С, то можете проnустнть эry rлаву н nерети lIeno средственно к нзученнlO rлавы 5. Матернал, KOTOpЫ вы уже нзучнлн в rлаве 3, является достаТ04НЫМ, 4т06ы делать 60ЛЬШУlO 4асть не06ходнмых вставок на Ассемблере в npo rpaMMax на С. В дaHHO rлаве представлены некоторые алrорнтмы н проrраммы на Асссмблере,  онн предназна4ены Д1l проrраммнстов, pa60TalOw,Hx с 3ЫKOM Ассем6лера. MHorHe И3 этнх алrорнтмов так>ке paccMaTpHBalOTc в не06ходнмых СЛУ4ах так>ке и rлаве 5 npH И3У4еннн nporpaMMHpoBaHH на 3ЫKe С. Самым лучшнм подходом в данном СЛУ4ае 6удет Н3У4енне 06енх rлав  как rлавы 4, так н rлавы 5. В зтой rлаве нзлаrаетс важный матернал,  он позволнт вам развнть 3HaHH об Ассемблере, которые ЕЗы уже имеете. После завершенн H3Y4eHH дaHHO rлавы вы сможете: 1. nHcaTb nporpaMMbI, работаlOw,не со стеком данных. 2. nHcaTb проrраммы, НСПОЛЬ3УIOw,не 04ередь. З. nHcaTb проrраммы, ВЫnОЛНIOw,не деленне н умно>кенне 4нсел. 4. Маннпулнровать ,lJ,BOH4HOKOДHpOBaHHЫMH дестнчнымн (ВСО) чнсламн, HC nользу сло>кеНl;-1е н ВЫ4нтанне. 5. Осуw,ествлть двунаправленное пре06раЗ0ванне ме>кДУ ДВОН4НЫМН и BCO 4нсламн. 6. Формнроuать проrраммнуlO BpeMeHHYIO задер>кку 4. 1. Структуры стека и очереди 04ередн н стекн  3ТО ,lJ,ве структуры данных, которые НСnОЛЬ3УIOТС во MHorHx nporpaMMax с u.елыо решенн ра3ЛН4НЫХ зада4. 04ередь храннт данные по nрннu.ипу "первым воwел  первым вышел", KOTOpЫ 4асто Ha3bIBalOT npHHu.HnoM FIFO. Стек xpa'.. ннт данные по прннu.нпу "первым вошел - последннм вышел", KOTOpЫ 4асто называют nрннu.нпом LIFO. 04ередь - это 6усрер, KOTOpЫ 4асто нспользуетс ме>кду внешнимн YCTpOCTBaMH ввода-вывода н мнкроконтроллером. Стек 4асто нсnользуется Д1l Bpe MeHHoro н эсрсректнвноrо xpaHeHH данных в памтн. HanpHMep, С4еТ4НК команд coxpa HeTC в стеке как адрес возврата Н3 CPYHKu.HH. Блаrодаря стеку, ВЫЗ0ВЫ срункu.нй MoryT вкладыватьс. 06су>кдаемые здесь стекн П03ВОЛIOТ храннть данные в срорме отдеnьно ro стека в naMTH данных. Стек данных Фнрма Microchip не пошла пока по nyrH аппаратно реалнзаu.нн стека данных. Вместе с тем, мо>кно 6ыло 6ы предnоло>кнть, 4ТО он cyw,ecTByeT, поскольку имеются команды PUSH (Занестн в стек) н РОР (V1звле4Ь Н3 стека). Однако назна4енне команд PUSH н РОР не свзано с сохраненнем лн60 нзвле4еннем данных Н3 стека данных,  анн НСnОЛЬ3УIOТС Д1l занесенн содер>кнмоrо С4еТ4нка команд + 2 в проrраммны стек, а команда РОР нзвлекает адрес возврата Н3 проrраммноrо стека. 
114 Прнмененне MHKpOKOHTpOnnepOB PIC18 Стек данных  это хорошее место Д1l BpeMeHHoro coxpaHeHH данных BHyrpH ФУIIКЦНЙ либо нных прнкладных проrрамм. Стек данных вляетс ннтеrралыюй частыо комnнлтора 3ЫKa С. Еслн содер>кнмое всех perHcTpoB сохранется в стеке BIlYIPH ФУIIКu.ин, то эта CPYHKu.H CTaHOBHTC прозра4НО Д1l проrраммы, которая ее нспользу ет. 3та nрозра4НОСТЬ 06еспе4нвает возмо>кность НСnОЛЬЗ0ванн ЛОКaIlЫIЫХ перемен ных с локально областыо дeCTBH в cpYHKЦHX на 3ЫKe С. CoxpalleHHe perHcTpoB BHyrpH CPYHKu.HH предотвраw,ает с60н. д,л созданн стека данных проrрамме lIужеll указатель на 06ласть памтн данных, а так>ке метод занесенн н Н3ВJЮ4ення AallllbIx Н3 стека данных. PerHcTp FSR2, KOTOpЫ может прнментьс в качестве указателя стека, нспользуетс в прнмере 4.1 Д1l адресацнн 06ластн naMTH, KOTopa может ра60ТЭIЪ как стек данных. д,л занесенн данных в стек мы 6удет нспользшзать срорму KOCBellllO адресаu.нн POSTDEC2, а Д1l нзвле4енн данных Н3 стека  срорму KocoeHHO адресацнн PREINC2 ШеСТllадu.ать 6aTOB naMTH, зарезервнрованных под стек данных, 06есnечнuаlOТ возмо>кность cpopMHpOBaHH стека, достаТ04ноrо по rлу6нне ДЛЯ 60ЛЫllНIIства про rpaMM. Стек данных эсрсректнвно MHoroKpaTHo нсnользует одну н ту же 06ласть памятн ,lJ,анных. Как только данные помеw,аIOТС в стек данных, стек увеЛН4нuаетс в размерах в наnравленнн, cooTBeTcTBYIOw,eM YMeHbweHHIO адресов памтн, а по мере Toro, как дall ные нзвлекаlOТС Н3 стека, он "C>KHMaeTC" по направленнlO возрастаllНЯ адресов f1амя тн. Занесенне HHcpopMau.HH в стек Ha3bIBalOT "заталкнваннем" данных в стек, а нзuле4е нне данных Н3 стека  нх "выталкнваннем". npHMep 4.1 НЛЛlOстрнрует нннu.налнзаu.нlO указател стека, а так>ке команды, заносw,не данные в стек н нзвлекаlOw,не нх Н3 Hero. Стек определетс в ceKu.HH UDATAACS нлн UDATA как Stack RES 16. Л106а 06ласть может НСnОЛЬЗ0ватьс прн том >ке временн досryП,а вонду НСПОЛЬЗ0вання FSR2. nop док данных в стеке данных peBepCHpyeTC; стек данных ра60тает по прннu.нпу FILO (первым uошел, последннм вышел) как 6ycpepHЫ масснв. В npHMepe 4.1 в стек rlOMe w,aeTC 2, затем З. Коrда данные нзвлекаlOТС Н3 стека, перво нзuлекается 3, затем 2. Пример 4.1 ОDАТА ACS Stack RES .16 LFSR 2, Stack + .15 ;иниuиаnмзаUИR указатеnR стека ; (аАрес BepWMH стека) ;nporpaMMH КОА, rrомеща в стек Ава qисnеннх знаqеНИR MOVLW MOVWF MOVLW MOVWF 2 POSTDEC2 3 POSTDEC2 ;занесение в стек 2 ; занесенме в стек 3 **** вrrоnнение Аруrих Аестви ****** rrроrраммныli КОА, извnека мз стека Ава qисnеннх знаqеНИR MOVF MOVF PREINC2, О PREINC2, О ;мзвnеqение из стека 3 iизвnеqение И3 стека 2 
rnaBa 4. Проrpаммнрованне на Slзыке Ассембnера 115 Теперь, коrда мы nОНЯJlИ ценность стека, нам сле,lJ,ует НСПОJlьзовать ero в про rpaMMax ДЛ BpeMeHHoro хранения ,lJ,анных. Во мноrих npHMepax, прнведенных в OCTaB шеся 4астн это rлавы, преДnОJlаrаетс, 4ТО в ка4естве указателя стека данных нс- ПОJ1ьзуетс FSR2, а стек ,lJ,анных нмеет rлу6нну в 16 6айтов. nредполо>ким, 4ТО прнмер 4.1 nереписан такнм образом, 4ТО он ВЫnОJlняет пре- 06раЗ0ванне 6айта во WREG в двухразрядное чнсло ASCII, возвраw,аемое в ASC"L н ASCIIH. npHMep 4.2 иллюстрирует Эry, уже рассмотренную нами ранее, <рункцнlO (Hex2ASC). Единственна Bew,b, которая нзмеННJlась с тех пор, коrда Эry <рункцню мы назывanн Hex2ASCII, вляетс исnользованне ячеек памяти ASCIIL н ASCIIH. Стек нс- пользуетс ДЛ coxpaHeHH содер>кнмоrо perHcTpa WREG перед пре06разованнем н восстановленн ero нз стека после nре06раЗ0вання. Едннственнымн perHcTpaMH оне Функu.нн Hex2ASC, содер>кимое которых нзменетс, явлютс 4eKH perHcTpouoro файла ASC"L н ASCIIH. Прииер 4.2 ;AaHHe В nаМRТИ Аанных MyData UDATA_ACS Stack RES .16 ASCII L RES 1 ASCII Н RES 1 ;опреАеЛRет, rrpOCTpaHCTBO стека ;размещает младшую часть ASCIIKoAa ;размещает старwую часть ASCIIKoAa ;************* ФУНКЦИR Hex2ASCII *********** использует l' уровень проrраммноrо стека исnоnьзует 2 ypOBHR стека Аанных исnоnьзует WREG nре06разует nравый rrолубат WREG из wестнаАuатириqно КОАИРОВКИ в КОД ASCII, возврааемый в стеке Аанных ;******************************************** Hex2ASCII : ANDLW ADDLW DAW BTFSC INCF RETURN OxOF Ох30 ;изолмрует младши полубат . , :l WREG, 6 WREG ;************ ФУНКUИR Hex2ASC ************** использует 2 ypOBHR проrраммноrо стека исrrользует 1 Rчеку стека Аанных использует Hex2ASCII использует ASCIIL и ASCII_H nреобразует бат во WREG мз wecTHaAuaTMpMqHO КОАИРОВКИ в КОА ASCII, результаты возвращаЮТСR в ASCII L и ASCII Н  - ;******************************************** 
116 TIpHMeHeHHe MHKpOKOHTpOnnepOB PIC 18 Hex2ASC: MOVFF CALL MOVFF MOVFF MOVFF SWAPF CALL MOVFF MOVFF RETURN WREG, POSTDEC2 Hex2ASCII WREG, ASCII_ L PREINC2, WREG WREG, POSTDEC2 WREG Hex2ASCII WREG, ASCII Н PREINC2, WREG ;занесенме WREG В стек (сохраненме Wl\EG) ;npe06pa30BaHMe MnaAero nony6aTa ;n0nyqeHMe WREG ;noBTopHoe занесенме WREG В стек ;cBonnMHr nony6aToB ;npe06pa30BaHMe cTapero nony6aTa ;M3Bne4eHMe WREG М3 стека ;************** rnaBHaR nporpaMMa ****************** Иnnстрмрует B30B YHKUMM Hex2ASC nре06разует Ох5с В ASCII, nepeAaeT pe3YnbTaT В ASCII L (Ох43) м В ASCII Н (Ох35) Main: ;eCnM В nporpaMMe мсnоnьзуеТСR стек, то он AoneH ;npeABapMTenbHo MHMUManM3MpoBaTbcR м TOnbKo ОАМН раз LFSR 2, Stack+.15 ;мнмuмаnмзаUМR указатеnR стека MOVLW Ох5с ;заrрузка TeCTOBX AaHHX CALL Hex2ASC ;npe06pa30BaHMe Bcero 6aTa В ASCII ;резуnьтат nOMeaTcR В стек AaHHX ;********* 3Аесь HaxoAMTcR npoAoneHMe nроrрамм ********** Stop: ВМ Stop Очередь 04ередыо 4асто Ha3bIBalOT 6ycpepHYlO 06ласть памтн. 04ередь coxpaHeT пордок заноснмых в нее данных. 04ередн 4асто pa3Mew,aIOTc ме>кду YCTpOCTBaMH ввода- вывода н проrраммо. 04ередь ра60тает как 6усрер, поэтому данные не TepIOTC. В ОТЛН4не от стека данных, Д1l ра60ТЫ с 04ередыо не06ходнмо НСnОЛЬЗ0вать два указа тел. Однн указатель адресует 4eKY, в KOTOPYIO данные заностс в 04ередь, а друrо указатель адресует 4eKY, Н3 KOTOpO данные нзвлекаlOТС Н3 04ередн. Дол>кны pacno 3HaBaTbC два COCTOHH 04ередн: очередь пуста н очередь заполнена. Коrда 04ередь пуста, 06а указател адресуlOТ одну н ry >ке 4eKY памтн. Коrда 04ередь заполнена, то указатель выхода адресует на одну 4eкy нн>ке от указател входа. 04ередь  это KPy rOBa 06ласть памтн, KOTopa повторно нспользует одну н ту >ке 06ласть памтн, aHa лоrнчно тому, как это пронсходнт в СЛУ4ае стека. Одна 4eKa над BepWHHO 04ередн  это перва 4eKa 04ередн. Указателн дол>кны переKJl104атьс с BepWHHbI 04ередн на ее caMYIO HH>KHIOIO 4eKY, коrда указатель HHKpeMeHTHpyeTC 4ерез KOHeu. 04ередн. Прииер 4.3 ОDАТА ACS ; 6CTpaR naMR'rb Queue QEntry QExit RES .16 RES 1 RES 1 ;04ереАЬ ;указатеnь ВХОАа ;указатеnь BXOAa 
rnaBa 4. TIporpaMMHpoBaHHe на Slзыке Ассембnера 117 ОDАТА Stack RES .16 ;стек ;cneAye KOA pa3MeaTcR в ceKUMM nporpaMM СОDЕ ;AnR мнмuмаnмзаuмм OqepeAM MOVLW MOVFF MOVFF Queue ;мнмuмаnмзаUМR WREG, QEntry WREG, QExi.t npHMep 4.3 показывает, как зарезервнровать 16 6aTOB nамятн данных под оче- редь 2 6aTa под указателн, адреСУIOw,не 04ередь. nредnолаrаетс, что очередь 6удет ceKЦHe памтн, KOTopa по 06ъему не nередет 256-батовуlO rраннцу н размещена ннже Ox07F 6анке досryпа памтн данных, еслн зто возможно. д,л Toro, 4т06ы это cдe лать, разместнте 06ъвленне 04ередн в на4але ceKu.HH UDATAACS проrраммы. Секu.и досrynа к данным нсnоnьзуетс Д1l 04ередн, поскольку она адресуется одннм 8 разрдным адресом н не требует НСnОЛЬЗ0ванн perHcTpa вы60ра банка. Еслн также нсnользуетс стек, поместнте ero 06ъвленне в на4але ceKu.HH UDATA. д,ля Toro, 4тобы 04ередь 6ыла срункцнонально, нужно нсnользоuать дое CPYHKu.HH: одну Д1l эанесеllИ данных в 04ередь н друrуlO  Д1l нзвле4енн данных Н3 04ередн. 3тн CPYHKu.HH Ha3UatlbI PutQ н GetQ в npHMepe 4.4. С u.елыо достнженн нх макснмально B03MO>KHO стеllенн прозра4НОСТН, так>ке нспользуетс структура стека с perHCTpoM FSR2, pa60TalOw,HM как указатель стека. Функu.н PutQ coxpaHeT содер>кнмое perHcTpa WREG [3 04ередн, а функu.н GetQ нзвлекает данные Н3 04ередн н B03Bpaw,aeT нх во WREG. В обенх Ha3BaH ных CPYHKu.HX 6нт переноса perHCTpa COCTOHH указывает на ошн6ку, еслн С = 1 при воз[3рате н на oTcyrcTBHe oWH6KH, еслн прн возврате С = О. в прнмере 4.4 ошибка cpYHK u.HH PutQ 0зна4ает заполненне 04ередн, а ошн6ка CPYHKu.HH GetQ 0зна4ает, 4ТО очередь пуста. д,л нннu.налнзаu.нн 04ередн, у6еднтесь в том, 4ТО CPYHKu.HH QEntry н QExit с aдpe самн 04ередн, как показано в прнмере. Пример 4.4 **************** PutQ ********************** .' мсnоnьзует 1 уровень nроrраммноrо стека мсnоnьзует 3 ypOBHR стека AaHHX, aApecyeMX FSR2 coxpaHReT WREG в оqереАИ npM возврате С 1, eCnM OqepeAb заnоnнена PutQ: MOVFF MOVFF MOVFF MOVF'F MOVLW MOVWF MOVF MOVLW SUBWF BNZ FSROL, POSTDEC2 E'SROH, POSTDEC2 WREG, POSTDEC2 QEntry, FSROL О FSROH POSTINCO, О Queue+.16 FSROL, О PutQ1 ;занесенме в стек FSRO м WREG 
118 Прнмененне МНКрОКОНТроnлеров PIC 18 MOVLW MOVFF PutQ1: MOVF SUBWt BNZ SE'l'F MOVFF ВМ PutQ2: MOVF MOVFF MOVFF MOVFF CLRF РutQЗ: MOVFF MOVFF RETURN Queue WREG, FSROL QEntry, О FSROL, О PutQ2 S'I'ATUS, О PREINC2, WREG РutQЗ QEntry, О FSROL, QEntry WREG, FSROL PREINC2, INDFO STATUS, О PREINC2, FSROH PREINC2, FSROL ;проверка на заполнение ;если попна, то ;оqистка стека ;сохранение Аанных оqереАИ ;выrрузка стека ;**************** GetQ ********************** использует 1 уровень проrраммноrо стека использует 3 ypOBHR стека Аанных, аАресуемых FSR2 извnекает WREG из очереАМ rrри возврате С = 1, если очереАЬ пуста GetQ: MOVF SUBWF BNZ SETF RETURN GetQl: MOVFF MOVFF MOVFF MOVLW MOVWF MOVFF MOVFF MOVLW SUBWF BNZ MOVLW MOVFF GetQ2: MOVFF MOVFF MOVFF CLRF RETURN QEntry, О QExit, О GetQl STATUS, О FSROL, POSTDEC2 FSROH, POSTDEC2 QExit, FSROL О FSROH POSTINCO, POSTDEC2 FSROL, QExit Queue+.16 FSROL, О GetQ2 Queue WREG, QExit PREINC2, WREG PREINC2, FSROH PREINC2, FSROL STATUS, О ;npOBepKa на пустоту ;есnи rrYCTa iзанесение FSRO в стек ;занесение в стек Аанных мз оqереАИ iКОНТРОЛЬ rраниu ;выrрузка МЗ стека данных очереАИ и FSRO 
rnaBa 4. ITроrраммированне на Slзыке Лссембnера 119 04ередь нан60лее полезна прн орrаннзаu.нн взанмодествн МНКрОКОIIТрОJlJюра с внешннмн YCTpOCTBaMH. Аанные с BHeWHero YCTpOCTBa BBoдaOЫBoдa 3ШЮСЯ1СЯ в очередь н сохраllЯIOТС в ней. Коrда мнкроконтроллер будет rOToB к npHeMY даIlНЫХ, 01\ извлекает данные Н3 04ередн. 04ередь nредостаuляет меlОД 6усрернзаu.ии даllНЫХ ОТ. внешнеrо YCTpOCTBa на нх nyrH к мнкроконтроллеру. Напрнмер, KlIaBHaTypa может 'IOД КЛlO4атьс к мнкроконтроллеру 4ерез порты BBoдaOЫBoдa. Некоторые маШНIIНСТКН MOryr настолько быстро вводнть ннформаu.нlO с KJlaBHarypbI, что МНКРОКОНТРОJlлер Mor бы потерть 4асть данных, выnолн ДРуrне зада4Н. Очередь предотuращает потерю lCакнхлн60 данных, ос06енно в СЛУ4ах, коrда 06ра60тка входных данных nронзводнтся в режнме прерыванн, KOTOPЫ 6удет рассмотрен поз>ке. 4.2. Сложные арифметческие операц 3тот подраздел не рассматрнвает НС4ерпываlOw,е сло>кные арнфметическне Оllе pau.HH; однако алrорнтмы н методы, рассматрнваемые в нем, коне41Ю >ке, вляютс СЛО>КIIЫМН ДЛ мнкроконтроллеров, которые не YMelOT выnолнть оnераu.иlO делення. Такнм 06раЗ0М, дallHЫ подраздел рассматрнвает то, как ну>кно пнсать проrраммы .для выполненн деленн н YMHO>KeHH 4нсел, nревосходw,нх по разрядностн 8 разрядоu, ДЛ BCOapHcpMeTHKH, а так>ке ДЛ выnолненн ДРуrнх арнсрмеТН4ескнх оnерацн, KOTO рые сло>кны ДЛ выполненн мнкроконтроллерамн PIC. ВСDарифме.тика Встроенные снстемы 4асто НСnОЛЬ3УIOт ВСD-4нсла, по npH4HHe U03МОЖllOСТН бы cтporo npe06pa30BaHH ме>кду ДВОН4НЫМН н ВСD4нсламн. YCTpOCTBa отобра>кеllНЯ часто требуlOТ данные лн60 в ВСО, лн60 в ASCIIcpopMaTax. Е.тJ.ИIIСlвеIIl1a51 ра311ица Me>K ду ВСО н ASCII заKJllOчаетс в нanН4НН cMew,eHH, paBHoro ОхЗО. Pa311Hu.a ме>кду двоич- ным срорматом н ВСО HaMHoro 60лее сло>кна, тре6уя реаJlизаu.нн аЛIоритма, lIеобхо димоrо ДЛ пре06раЗ0вання ме>кду ннмн. Например, ВО3Ьмем ДВОН4ное 4НСЛО 11 111 О 1000 (ОхЗЕ8). Есть лн простой спос06 преоораЗ0вать ОхЗЕ8 в 1 000 дестнчное лнбо 0001 000000000000 в упакованном BCOcpopMaTe? Коне4НО же, cnoc06 есть, ОДllако он тре6ует ДЛ CBoe реалнзаu.ни зна4нтельноrо расхода проu.ессорноrо оременн н BЫ.;' ПОJlнення операций Д6Jlення, которые 4асто недосrynны для встроенных nрнложеllН, напнсаllНЫХ на 3ЫKe Ассем6лера, в снлу 4ero 4нсла 4асто oCTalOTc в BCOcpopMaTe. ВСО сложение и вычиание д,л выполнення прео6раЗ0вання прн BCO сло>кеннн предусмотрена спеu.наJlЬ Ha команда, называемая командой дeCTH4HO HaCTpOKH WREG (DAW). Команда DAW корректнрует результат ВСDупакованноrо (две u.HcppbI на 6aT) СJlожеIlНЯ. 3та комаllда явлетс He06XOДHMO вследствие Toro, 4ТО мнкроконтроллер складыuает только Д130 И4ные 4нсла. Команда DAW BbInOJlHeT показанные дanее проверкн после сложення упакованных ВСD4нсел во WREG с u.елыо KoppeKu.HH суммы для ПОЛУ4енн доnустнмо ro ВСD4нсла во WREG. (Уделнте вннманне тому, чт06ы Пр04есть сообщення завода изrотовнтел относнтельно нспользуемоrо вамн микроконтроллера, потому что одна И3 BepCH мнкроконтролnера нмеет пр06лемы с выполненнем KOMallДbI DAW. no внднмому в одном Н3 нсполненн мнкроконтроллера ДЛ правнлы-юrо ВЫllOлнення KO манды DAW nредварнтельно не06ходнмо с6роснть 6нт переноса. В данном подразделе 
120 TIpHMeHeHHe микроконтроnnеров PIC 18 мы будем nредnолаrать, 4ТО команда DAW корректно CPYHKu.HoHHpyeT во всех HCrlOJ1He HHX микроконтроллеров.) V1TaK, команда выnолнет сnеДУIOw,ее: 1. Еслн caMЫ правы nолу6ат WREG 60льше, 4ем 9 нлн 6нт ОС = 1, то д06авл ет Ох06. 2. Еслн caMЫ левы nолу6ат WREG больше, 4ем 9 нлн 6нт С = 1, то добаUJ1яет Ох60 Команда DAW добавлет ОхОО, Ох06, Ох60 нлн Ох66 к WREG Д1l коррекцнн резуль- тата после сложенн 4нсел в упакованном BCOcpopMaTe. Еслн результат 60Jlьше, чем 100 ВСО, то 6нт переноса (С) устанавлнваетс Д1l ннднкаu.нн разряда сотен резулыа- та. Следовательно, еслн 6удyr сло>кены 99 ВСО н 05 ВСО, то результатом 6удет 04 ВСО с установленным в еднннu.у бнтом С, НН,lJ,нu.НРУlOщнм наЛН4не сотнн в реЗУllьтате после BbInOJlHeHH команды DAW. nредпоnо>кнм, 4ТО 4разрдное упакованное ВСD4НСЛО в perHcTpax срайла дoc тупа Ох1 О н Ох11 CYMMHpyeTC с 4разрдным упакованным ВСD4НСЛОМ в perHcTpax срайла досryпа Ох20 н Ох21. nporpaMMa, показанна в прнмере 4.5, решает зту зада4У. Обратите вннманне на то, 4ТО перенос после сложенн 6aTOB Ох1 О н Ох20 прн6авлет c к результаry сло>кенн Ох11 с Ох21 с НСnОЛЬЗ0ваннем команды сложенн с перено- сом. Введнте nporpaMMY в IDЕ н выполннте ее с несколькнмн ра3ЛН4НЫМН ВСD4нсламн в perHcTpax Д1l H3Y4eHH Toro, как ра60тает эта nporpaMMa. Так>ке 06ратнте вннмание на то, 4ТО еслн KOHe4HЫ пере нос 6удет равен лоrН4еско, то Ох01 6удет заIЮСНТЬС в Я4еку Ох22, ннднu.нРу разрд 10000 результата. Пример 4.5 Main: MOVF Ох10, О ADDWF Ох20, О DAW MOVWF Ох20 MOVF Ох11, О ADDWFC Ох21, О DAW MOVWF Ох21 CLRF Ох22 BTFSC STATUS, О INCF Ох22 Stop: ВМ Stop iA06aBneHMe Ох10 к Ох20 ;npe06pa30BaHMe в BCD-opMaT ;сnоение с переносом Ох11 с Ох21 ; npe06pa30BaHMe в BCD-opMaT ;no nocneAHeMY переносу nредnоло>кнм, 4ТО CKJlaдbIBaIOTC 4разрдные неупакованные ВСD4нсла. nep вое 4НСЛО coxpaHeTC в 4eKax от Ох1 О до Ох1 3, а второе  в 4eKax от Ох20 до Ох2З, при этом Ох24 содер>кнт разрд 10000 результата. HeynaKoBaHHoe ВСD-4НСЛО coxpaH eTC как О,lJ,на u.Hcppa на 6aT. Поскольку Д1l cpopMHpOBaHH суммы ну>кно ВЫllОЛНН1Ъ 4етыре оnерацнн сло>кенн, KOCBeHHa адресаu.и будет наНЛУ4ШНМ выбором при HanH саннн дaHHO проrраммы, как это показано в npHMepe 4.6. AaHHa nporpaMMa мо>кет CKJlaдbIBaTb неупакованные ВСD4нсла ЛlO60Й разрдностн посредством изменени 3Ha4eHH С4еТ4нка. nporpaMMa CKJlaдbIBaeT одновременно два НЗ0лнрованных HeynaKo ванных 4Hcna н, еслн pe3YnbTaT равен Ох1 О нлн 60льше после выnолненн команды DAW, nporpaMMa удалет Ох10 KOMaHДO ANDLW OxOF, 4ТО coxpaHeT 6нт состоння пе 
rnaBa 4. ITporpaMMHpOBaHHe на SlзЫке Ассембnера 121 реноса. Команда ANDLW изменет только биты cpJlarOB нулевоrо LI1 отриu.ателыюrо pe зультатов. Пример 4.6 ain: LFSR О, Ох10 ;аАресаЦМR qMCen LFSR 1, Ох20 MOVLW 4 ;заrрузка CqeTqMKa MOVWF Ох30 BCF STATUS, О ;OqMCTKa С =..оор: MOVF POSTINCO, О ADDWFC INDF1, О DAW BTFSC WREG, 4 BSF STATUS, О ;eCnM сумма от 10 АО 18 ANDLW OxOF ;YAaneHMe 10 MOVWF POSTINC1 DECFSZ Ох30 ;UMKn BRA Loop CLRF INDF1 BTFSC STATUS, О INCF INDF1 Stop: BRA Stop Однако, как выnолнетс ВЫ4итание ВСD-4исел, если ОТСуТствует комаl-ща DAW ДЛЯ ВЫ4итани? Команда DAW срункu.ионирует корректно только ДЛ ВСDсложени. ВСDВЫ4итание выnолнетс посредством сложени с дополнением. Например, еСJlИ 123 ВЫ4итаетс И3 391, то правильное зна4енне разности nOJlY4aeTc в результате сло жени доnолнени 4исла 123 до дeCTH с 4НСЛОМ 391. дополнение до дести Д1l 4исла 123 равно 877. 877 плюс 391 даст 1268. Перенос (nоказанный как 1,000) OT6paCЫBaeT н результатом 6удет 268,  правильное зна4енне разности. Рис. 4.1 иллюстрирует nOJlY чение доnолнени 4исла 123 до 10. Было 6ы неплохо написать срункu.ию, KOTopa складывает или ВЫ4итает ynaKoBaH ные ВСD4исла лю60 размерностн. Возможно ли 3ТО? Аа, npHMep 4.7 иллюстрирует такую срункu.ию. AaHHa срункu.и имеет 4етыре параметра ВЫЗ0ва, которые должны 6ыть предварительно заrружены ДЛ Toro, 4т06ы зта срункu.и срункu.ионировала KOp ректно. Параметрами ВЫЗ0ва влютс: адрес 4исла 1 (FSRO), адрес 4исла 2 (FSR1), при зтом результат заnисываетс поверх 4исла 1; размерность 4исел в 6айтах (PRODL), а так>ке зна4ение ОхОО (ДЛ сложени) или Ох9А (ДЛ ВЫ4итани) в РАООН. 06ратите внимание, 4ТО в случае ВЫ4итани 4ИСЛО 1 ВЫ4итаетс И3 4исла 2. 
122 Прнмененне МНКроКОНТроnлеров PIC 18 999 123 876  дополнение до 9 + 1 877 ..............дополнение до 1 О OR 99А 123 877 дополнение до 1 О  Рис. 4. 1 . Аополненне .0.0 ,lJ,eCTH Пример 4.7 ;*************** ФУНКUМR SubAdd *************** мспоnьзует 1 уровень проrраммноrо стека мспоnьзует 2 ypOBHR стека дaHHX мсnоnьзует FSRO, FSR1, PRODL м PRODH Скnадвает/вqмтает упакованное BCDqMCnO, адресуемое FSRO к nM60 мз qMCna, адресуемоrо FSR1. Резуnьтат замеает qисnо в FSRO. Параметры вызова: FSRO = адрес number1 м резуnьтат FSR1 = адрес number2 PRODL KOnMqeCTBO 6aTOB каждом qMCne PRODH = ОхОО (cnoeHMe) or Ох9А (BqMTaHMe) SubAdd: MOVFF MOVFF WREG, POSTDEC2 TABLAT, POSTDEC2 ;занесенме в стек WREG ;занесенме в стек TABLAT BCF SubAdd1 : MOVFF MOVF STATUS, О ;с6рос переноса STATUS, ТАвит POSTINCO, О TSTFSZ PRODH SUBWF PRODH, О MOVFF ADDWFC DAW MOVWF MOVLW TABLAT, STATUS POSTINC1, О POSTINC2 Ох99 
rnaBa 4. Проrpаммнрование на Slзыке Ассембnера 123 TSTFSZ PRODH MOVWF PRODH DECFSZ PRODL ВRЛ SubAdd1 MOVFF PREINC2, TABLAT MOVFF PREINC2, WREG ;M3Bne4eHMe И3 стека TABLAT ;извлеqение мз стека WREG H.ETURN Умножение PaCCMaTpHBaeMЫ на60Р коман,lJ, ВКJlЮ4ает команду умноженн, однако днаl1азон ее ,lJ,eCTBH orpaliH4eH выполненнем 8ра3ря,lJ,ноrо умноження. Однако 6ывают случан, коrда нужно выnолннть умноженне 4нсел 60льшей разрядностн. Как только вы поймете алrорнтм умноження., то сможете nHcaTb проrраммы, выnолняюw,не умноженне 4нсел лю60Й разрдностн. Умноженне в ,lJ,вончной снстеме  зто после,lJ,овательность СДl3нrоl3 и onepau.H сложення. ДaHHЫ aJlrOpHTM тре6ует сохранення пронзве,lJ,енн, которое имеет вдвое 60льше разрядов, чем множнмое н множнтель. HanpHMep, 16раЗр,lJ,lIое умножение тре6ует nОЛУ4енн 32разрдноrо пронзве,lJ,ення. nporpaMMHbI алrоритм ВЫIIОЛllени 16раЗрЯДllоrо 6e33HaKoBoro сложени может 6ыть OnHcaH следующим обраЗ0М: . 1. С6рос 2раЗРЯ,lJ,ноrо пронзве,lJ,енн. 2. C,lJ,BHr множнтел вправо. 3. Еслн установлен 6нт пере носа, сложнть множнмое с результатом nрОН3lзсде tfи. 4. Еслн множнтель равен О, то завершнть BbIrlOJlHellHe CPYIIKu.HH. 5. C,lJ,BHr множнмоrо влево на О,lJ,ну nознu.ню 6. nOBTOpHTb шаrн от 2.0.0 5. 3тот aJlrOpHTM умноження ра60тает TOJlbKO с 6еззнаковымн 4нсламн, он ЮIJ1ЮСТ рируетс nроrраммой по npHMepy 4.8. В зтом прнмере 16разрядны множнтеш, псре дaeTC CPYHKu.HH 4ерез 4ейку памятн данных, адресуемую FSRO, 16разрядное МIIОЖИ мое HaXOДHTC 13 LleKe, aдpecyeMO FSR1, а 4eKa, предна31-1a4еНllaЯ ДJ1 хранения 32-' раЗрДlюrо пронзве,lJ,ения, aдpecyeTC FSR2. 3та CPYHKu.H мо>кет 6ыть МОДНСРиu.НрОl3а на такнм 06раЗ0М, 4ТО прн НСnОЛЬЗ0ваннн Toro же aJlrOpHTMa 6удет выполняться YMHO женне чнсел лю60 разр,lJ,НОСТН. Прииер 4.8 ;******************* ФУНКUМR MUL16 ******************** мспользует 2 ypOBHR проrраммноrо стека мсnоnьзует WREG, FSRO, FSR1, FSR2, TABLAT, PRODL м PRODH мсnоnьзует ункuим АddЗ2 м Shift YMJ\oae'l' coдepMMoe яqекм FSR1 на COAepMMoe Rчекм FSRO, coxpaHReT pe3YnbTaT в FSR2 16-раЗРRдное 4ИСnО х 16раЗрRдное 4MCnO > 32раЗрRДНЫ резуnьтат MUL16 : 
124 ITpHMeHeHHe MHKpoKoHTponnepoB PIC 18 MOVLW 3 MUL16a: CLRF ОЕСЕ' BNN MOVLW С LIr MOVl,W Сl,Ю;" MUL16b: MOVLW ННСЕ' RRCF BNC CALL MUL16c: CALL MOVF IORWF BNZ RETURN PLUSW2 WREG MUL16a 3 PI,USW] 7 РIЛSW] 1 PLUSWO lNDFO MUL16c Add32 Shift PLUSWO, О INDFO, О MUL16b ;OqMCTKa nромзвеАеНМR ;очмстка 2 6aTOB MHOMMoro ;CABMr MHoMTenR вправо ;eCnM нет переноса ;npM6aBMTb MHOMMoe к nромзвеАенм ;CABMr MHOMoro BneBO ;eCnM MHoMTenb не равен О ;*************** ФУНКUМR Add32 Add32: MOVFF MOVFF BCF MOVLW MOVWF Add32a: MOVF' ADDWF'C DECF'SZ BRA MOVFF MOVFF RETURN FSR2L, PRODH FSR1L, PRODL STATUS, О 4 TABLAT POSTINC1, О POSTINC2 TABLAT Add32a РНОDН, FSR2L PRODL, FSR1L ******************** ;**************** ФУНКUМR Shift ************* Shift: MOVFF BCF MOVLW Shift1: RLCF DECFSZ ВНА MOVF'F' RETURN FSR1L, РНОDН STATUS, О 4 POSTINC1 WREG Shiftl РЕООН, FSR1L 3та СРункu.и леrко модисрнu.ируетс ДЛ умножени 4L11сел ЛlOбо разрдности, однако, если зада4а заКnЮ4аетс в выполнении 16-разрдноrо умножени, то ее следу 
rnaBa 4. ITporpaMMHpOBaHHe на языке Ассембnера 125 ет решать посредством 4x KpaTHoro выnолнени команды MULWF с u.еJН)Ю ПОЛУ4ения 16разрдноrо произведени в аnsЗаnsО по следуюw,ему алrоритму: 1. УМIЮ>КИТЬ младшие байты и поместить реЗУJlьтат в ansO, ans1. 2. Умножить старшие байты и Ilоместить результат в ans2, апsЗ. З. Выполнить пере крестное умножение младшеrо байта nepBoro or18ранда со старшим байтом BToporo операнда, nри6авить произведение к ans1, ans2, апsЗ. 4. Выполнить перекрестное умножение мла.цшеrо байта BToporo операнда со старшим 6айтом nepBoro операнда, nрибавить nроизведение к ans1, ans2, апsЗ. 3тот npou.ecc иллюстрнруетс nримером 4.9, соответствуюw,ая nporpaMMa ro раздо КОр04е, 4ем срункци, nоказанна в при мере 4.8. 3та срункu.и использует множи- тель, aдpecyeMЫ FSRO, и множимое, адресуемое FSR1, при зтом Ilроизведение aдpe суется FSR2. Пример 4.9 так>ке выnолнетс 6ыстрее и требует MeHbwe nамти, 4ем пример 4.8. Пример 4.9 :У****************** Функuмя MUL16f ***************** исnоnьзует 1 уровень стека мсnоnьзует WREG, PRODL, PRODH, TABLAT, FSRO, FSR1, FSR2 16'раЗРRАное 6еззнаковое YMHoeHMe. COAepMMoe RqeKM, aApecyeMO FSRO, YMHoaeTCR на COAepMMoe RqeKM, aApecyeMO FSR1, pe3YnbTaT nOMeaeTCR в RqeKY, aApecyeMY FSR2 "".";ul6f : MOVF INDFO, О MULWF INDF1 MOVt't PRODI" lNDF2 MOVLW 1 MOVIF PRODH, PLUSW2 MOVFF FSR1 L, TABLAT MOVF PLUSWO,O MULWF PREINC1 MOVLW 2 MOVFF PRODL, PLUSW2 MOVLW 3 MOVFF PRODH, PLUSW2 МОVП' TABLAT, FSR1L MOVFF FSRlI, , TABLAT MOVJ INDtO , О MUI"WE' PH,EINC1 МОVП' 'l'ABLAT, rSR1L MOVFF FSR2L, TABLAT MOVF PRODL, О ADDWF PREINC2 MOVF PRODH, О ADDWFC PREINC2 CLRF WREG ADDWFC PREINC2 MOVE'F TABLAT, FSR2L MOVF PREINCO, О MULWF INDF1 
126 Прнмененне MHKpOKOHTpOnnepOB PICI8 MOVE' ADDWF MOVF ADDWC CLHF ADDWFC H.ETURN PRODL, О PREINC2 РНООН, О Pl"\EINC2 Wl\EG PREINC2 Деление к сожалению, команды делени в наборе команд PIC нет. Однако cyw,ecTBye'. co ответствующи алrоритм, который можно ИСnОЛЬЗ0вать в СJ1У4ае нео6ходнмости BЫ ПОЛllения операu.ии деJlени. Аеление  зто оnерацн, противоположная умножеllИlO, поэтому при rенераu.ии частноrо вместо сдвиrа вправо нужно НСПОJlЬЭОВЮЪ СДIЗИI IЗле во, а вместо СJ10ження  ВЫ4нтанне. Явлетс 06Ы4НЫМ делить делнмое ДBOHO раз pIДHOCTH и reHepHpoBaTb цеЛО4нсленное частное н u.еЛО4нсленны остаток. HarlpHMep, еслн 22 nоделнть на 5, то 4астным 6удет 4, а остатком  2. nрнводнмый далее аяrоритм ,lJ,елнт беззнаковое 16раЗрЯ,lJ,ное чнсло на 6еззнаковое 8разрдное 4HCJlO, npH зтом как 4астное, так остаток 6удут 6еззнаковымн 8разряднымн чнсламн. 1 . Сдвинуть делимое н 4астное влево на однн разрд. 2. Сравннть самые cTapwHe 8 разрдов делнмоrо с делнтелем и, если они 60ЛЬ ше, чем делнтель, Bbl4ecTb делнтель Н3 самых cTapWHX восьми разрядов делнмоrо, 110- cJle 4ero инкрементировать 4астное. З. Повторить war 2 восемь раз. 4. Остатком 6удут самые старшие 8 разрдовделнмоrо. Дл НЛЛlOстраu.ии выnолнени делени, срУliКu.ия, nоказаНllая в Ilрнмере 4.10, дe лит содержимое PRODL и РАООН на содержимое ТАВ LAT , nомеща частное в PRODL, а остаток  в РАООН после возврата И3 срункu.ии. Пример 4.10 ;***************** ФУНКUМR Div ******************* мсnоnьзует ОАМН уровень nporpaMMHoro стека МСПОJ1ьзует WREG, Pl\ODL, РНОDН, TABLAT, TBLPTRL м TBLPTRH Частное B03BpaaeTcR в PRODL, а остаток  в PRODH TABLAT npeABapMTenbHo заrруаеТСR AenMTeneM PRODL м РНОDН npeABapMTenbHO заrруаеТСR Аеnммьш Div: MOVLW 8 MOVFF WREG, TBLP'I'RL Divl : BCF STATUS, О RLCF TBLPTRH BCF STATUS, О RLCF PRODL RLCF РНОDН MOVF TABLAT, О SUBWF РНОDН, О BNC Div2 ; заrруае'.r в сqе'l'ЧМК 8 ;CABMraeT qaCTHOe BneBO ; CABMraeT деnммое BneBO ; сравнивает делммое с AenM'.reneM ;есnи AenMTenb 60nbwe AenMMoro 
f'naBa 4. ITporpaMMHpOBaHHe на Slзыке Ассембnера 127 MOVFF WREG, PRODH lNO' TI:3LPTRH : 1 v2: !)ECF'SZ TBLPTRlJ Вl{A Div1 MOVFF 'l'I:3LPTRH, PRODL H.ETUHN ;декрементмрует CqeTqMK ;4астное в PRODL Функция, nоказанна в примере 4.10, может 6ыть модисрицирована на деление чисел ЛlO60Й разрдности, она также может выполнять деление со знаком, если перед выполнением делени 4исла 6удуТ сделаны nоложитеЛЫ-IЫМИ. Если предnринимаетс попытка делеllИ 4исел со знаком, то как 4астное, так н остаток 6удут отриu.ательными, если ВЫllолняется деление 4исел, имеюw,нх разные знаки, в противном СЛУ4ае 06а онн будут положительными. V1СКЛЮ4аюw,ее V1ли исnользуетс ДJl сравнени знаков дели MOI-O и делител с u.елью определенн Toro, должен ли результат 6ыть nоложнтельным или отриu.атеЛЫ.IЫМ. Пример 4.11 nOKa3bIBaeT то, как 32разрдное число делитс на 16разрдное число с u.еJlЬЮ nОЛУ4ени 16разрдноrо 4acTHoro и 16разрдноrо остатка. Сравните ero с nримером 4.10, чтобы увидеть, как nepeTLI1 к деленнlO с 60лее высокой Т041Ю стью. Вместо Toro, 4т06ы передать числа в СРУНКЦLl1Ю 4ерез реrистры, в данном случае числа l1ередаютс с ИСl10ЛЬЗ0ванием реrистров вы60ра срала ДJlЯ нх адресацни, также исnользуютс реrистры PRODL и РАООН. В данном СЛУ4ае FSRO указывает на 32 разрядное делимое, а PRODL и РАООН содержат 16разрдный делитель. После за вершеllИ деленн, частное B03Bpaw,aeTc в 4ейке naMTH, адресуемой FSR2, а оста- ток  в ячейке nамти, адресуемой FSRO, он соответствует старшнм двум 6aTaM дели Мor'о. СчеТ4ИК 6ыл изменен с 8 на 16, nocKoJlbKY в данном СЛУ4ае выnолнется 16- разрдное деление. Пример 4.11 ;***************** ФУНКЦМR Div16 ******************* ИС'!lOJlI>зуе'l' О)..\ИН уровень nporpaMMHoro C'l'eKa ИСllOJ1ьзуе'l' WHEG, PRODL, Рн.оон, TABLl\'I', TBLI?'l'RL, TBLP'l'RH, FSRO м FSR1 " .#  Частное B03BpaaeTCR в RqeKe, aApecyeMO FSR2 I?RODL м PRODH npeABapMTenbHo заl'руа'l'СR деJШ'l'елем FSRO nреАвармтелыю заrруае'.rся аАресом деnммоrо FSRO адресует остаток npM возврате Jlv16: MOVLW MOVFF .16 WREG, TABLAT ;заrруает в CqeT4MK 16 )iv16a: MOVI,W BCF RLCF RLCF 1 STATUS, О INDF2 PLUSW2 ;CABMraeT частное BneBo ВСЕ' RLCF RLCF' STATUS, О POSTINCO POS'I'INCO ;CABMraeT Аеnимое BneBO 
128 Прнмененне MHKpOKOHTpOnnepOB PIC 18 RLCF' POSTINCO RJ..JCF' POSTDECO MOVI.' РI{от., О s lJВЮ' i-'OS'I'TNCO, О МОVЮ. ТШ,Р'['Нl, MOV['. PI<'O[)I j, О SUНЮ'В POSTI)ECO, О MOVwr. 'I'Bl,i-''l'Ю! BNC Div16b МОVП' TBLPTRl" POS'I'INCO МОVП' 'l'Вl,Р'l'Ю!, POSTDECO LNCF' INИ'2 BNC Div16b MOVLW 1 INCF PI,USW2 Div16b: MOVLW О IORWF' POSTDECO IORWF POSTDECO DECFSZ TABLAT I3RA Div16a IORWF POSTINCO IORWF POSTINCO RETURN ; сравнмвает леЛМ'l'ель м )еJ]имое ;BqMTaHMe ; мнкремеН'l'ированме qaC'l'HOl'O ;Аекрементмрованме CqeTqMKa 4.3. Прео6разованя между десятчным  двочным форматам ЧL/1сла часто остаютс в срормате ВСО, однако L/1меютс СЛУ4аL/1, коrда 4исла L/13 срормата ВСО должны 6ыть npe06pa30BaHbI в ДВОИ4НЫ срормат. ЕСЛL/1 нужны 4L/1сла в срормате ВСО, однако они доступны только в ДВОИ4НО срорме, то так>ке не06ХОДL/1МО выполнить nре06раЗ0вание. В данном nодразделе paCCMaTpL/1BaeTC npe06pa30BaHL/1e между ДВОИ4НЫМ срорматом и срорматом ВСО. Формат ASCII также иноrда Tpe6yeTC, однако nре06раЗ0вание М8>КДУ срорматами ASCII и ВСО - зто npocTa задача, СВ5lзаllllая с nрL/16авлеНL/1ем L/1ЛИ ОТНL/1манием ОхЗО, как зто 06ъснлось В nредшеСТlзуюw,L/1Х nод разделах. Преобразование из двоичноrо формата в формат BCD 310 nре06раЗ0вание выnолнетс достаТ04НО леrко, еСЛL/1 имеется возможность BbIIIOJIIleHL/1H оnераu.ИL/1 делеНL/1. CooTBeTcTBYIOW,L/1 алrОРL/1ТМ (Ha3ЫBaeMЫ «nраВL/1ЛОМ Хорна») npe06pa30BaHL/1 И3 ДВОL/14ноrо срормата в срормат ВСО L/1сnользует деление "а 1 О L/1 мо>кет 6ыть OnL/1CaH следуюw,им 06раЗ0М: 1. Поделить на 1 О 2. Сохранить остаток как u.исрру результата З. Повторять шаrL/1 1 и 2 до тех пор, пока 4астное не станет нулевым 
lnaBa 4. ITporpaMMHpOBaHHe на Slзыке Ассембnера 129 Пренrюложим, что 0110 0111 2 должно быть nреобраЗ0вано в последовательность 8СD- цисрр. Если 0110 01112 поделить на 10102' то 6удет ПОЛУ4ено 4астное 10102 и остаток, равный 00112' The 00112nредставлет с060Й младшую u.исрру результата. Вследствие Toro, что част ное 10102 не вляется нулевым, выnолнем деление на 10102 ew,e раз. На этот раз мы ПОJ1У чнм частное, равное 00012' и остаток, paBHЫ 00002' Оnть-такн 00012 делитс на 10102' при зтом nОЛУ4аетс 4астное, равное 00002' при остатке, равном 00012' Числа 00112 ' 00002 И 00012 составлют pд остатков, nОЛУ4енных в данном примере. Результат равен 103, nоря док, в котором возвраw,аютс 4исла, реверсируетс. Пример 4.12 nOKa3bIBaeT срункu.ию, KOTopa исnользует 8разрядное И3 прLl1ме ра 4.10 ДJl nре06раЗ0вани 4нсла И3 PRODL в срормат ВСО, сохранив результат в чей ке nамти, адресуемой FSRO. 3то 4ИСЛО coxpaHeTC младше u.исррой вперед и orpa lIичиваетс в nамти 4ИСЛОМ Ох10. Число 103 coxpaHeTC как 3, 0,1 и Ох10. Пример 4.12 ;************ BinBCD ************** мсnоnьзует 2 ypOBHR nporpaMMHoro стека ; мсnоnьзует Div м ее perMcTp, а TaKe FSRO ;nре06разует ABOMqHOe qMCnO М3 PRODL в opMaT ВСD в ;naMRTM, aApecyeMO FSRO. Pe3YnbTaT заканqмваеТСR ;3HaqeHMeM Ох10 3inBCD: MOVLW . .10 MOVFF WREG, TABLAT 8in.l:3CD1: CALL MOVFF CLRF MOVF BNZ Div PRODH, POSTINCO PRODH PRODL, О BinBCD1 ;AenMT на 10 ;coxpaHReT остаток ;АО тех пор, пока qaCTHOe не станет paBHM О MOVLW MOVWF RETURN Ох10 POSTINCO ;coxpaHReT метку KOHua Предположим, 4ТО последовательность ВСDu.исрр, coxpaHeMa в памти, nреобразу eTC в строку символов ASCII NULL, 4ТО 06есnе4ивает совместимость с 3ЫKOM С. 3то выпол HeTC срункu.ие, показанно в примере 4.13. Пример 4.13 ;************** ASCIInull **************** мсnоnьзует 1 уровень nроrраммноrо стека мсnоnьзует FSRO, FSR1, WREG, TABLAT реверсмрует nopRAoK CMMBOnOB строкм и преобразует МХ в строку ASCII null АSСПпull: MOVFF FSROL, FSR1L 
130 llрнмененне MHKpOKOHTponnepOB PIC 18 MOVFF FSROH, FSR1H ASCIInulla: MOVLW Ох30 ; в ASCII ADDWF INDFO MOVIJW Ох40 CPF'SEQ POSTINCO jjЮ\ ASCIInulla ;eCnM не KOHeu DECF FSROL MOVLW О SUBWFB FSROH MOVWF POSTDECO ASCllnullb: MOVFF INDFO, TABLAT ;CBOnMHr дaHHX MOVF INDF1, О MOVWF POSTDECO MOVFF TABLAT, POSTINC1 MOVF FSROH, О CPFSEQ FSR1H, О ВМ ASCIInullb ;eCnM не KOHeu MOVF FSROL, О CPFSEQ rSR1L, О BRA ASCIInullb ;eCnM не KOHeu RETURN Алrорнтм nре06разовання нз ,lJ,80H4HOro формата в ,lJ,еСЯТН4НЫ формат так>ке работа ет ,цля снстем с APyrHMH основаннямн С4НСJlення, eCJlH ,lJ,eJlHTeJlb нзменяется в соответствнн с основаннем снстемы С4нслення. HanpHMep, ,цля nреобраЗ0вання нз ,lJ,BOH4HO формы В BOCbMepH4HYIO, необхо,lJ,НМО BblnOJlHтb ,lJ,eJleHHe на 8. 3тот anropHTM НСnОJlьзуется,ЦЛ npe обраЗ0вання 4нсел в Jl106ylO снстему С4НСJlення nocpe,lJ,CTBOM нзменення деJlнтеля в соответ  ствин с основанием снстемы С4НСJlени. 8CnOMHHTe, 4ТО nре06разованне Н3 ,lJ,ВОН4НОro формата в формат 8СО (npHMepbI 4.9 и 4.10) требует, 4т06ы остаткн сохраНЯJlНСЬ в памятн, однако nОРЯ,lJ,ок остатков peBepcHpyeTC. Одннм Н3 способов нзменення nоря.цка остатков Я8Jlяется занесение НХ в стек перед coxpa неннем нх в строке ASCII. npHMep 4.14 noкa3blBaeT, как зто выnолняетс с НСnОJlЬЗ0ванием стека, npH зтом заменяются ,lJ,ве функu.нн, соотвеТСТ8ytow,не npHMepaM 4.12 н 4.13. Обратн- те вннманне на то, HaCKOJlbKO КОр04е стanа nporpaMMa после НСnОЛЬЗ0ванн стека ,ЦЛ pe верснровання ,о,анных. Пример 4.14 ;************* BinBCDs ************** испоnьзует 2 ypOBHR nporpaMMHoro стека мсnоnьзует Div м ее perMcTp, а TaKe FSRO м WREG мсnоnьзует TABLAT м PRODH npe06pa3yeT двомqное qMCnO в PRODL в opMaT ВСD по ;аАресу naMRTM в FSRO; заканqмваеТСR ОхОО BinBCDs: MOVLW .10 ;заrрузка AenMTenR, paBHoro 10 
rnaBa 4. ITporpaMMHpOBaHHe на Slзыке Ассембnера 131 MOVb't MOVI,W MOVWl:' :l nBCUs1 : CALL MOVLW ADDWF MOVFF CLRF MOVt BNZ "<'I)C[)s2: MOVt' MOVWF BNZ RETURN WRl::G, TABLAT О POS'['\)EC2 Div ОхЗО PRODH PRODH, POSTDEC2 PRODH PHOUL, О BinBCDs1 PREINC2,O POSTINCO BinBCDs2 ;сохраненме меткм KOHua в стеке ;AeneHMe на 10 ;npe06pa30BaHMe в ASCII ; сохраненме остатка в стеке ;noKa qaCTHOe не станет HyneM ;M3BneqeHMe AaHHX М3 стека npHMep 4.14 нсnользует РАООН н TABLAT Д11 nреобраЗ0вання. С целыо обеспе ченн TOrO, чтобы онн не НСnОЛЬЗ0валнсь ew,e r,lJ,eTo, целесообразно МО,lJ,нфнцнровать функцнlO такнм обраЗ0М, 4тобы зтн perHCTpbI с'охраНЯJlНСЬ в стеке ,lJ,анных перед тем, как cpYHKЦH БУ,lJ,ет нх НСПОJlЬЗ0вать, н BOCCTaHaBJlHBaJlHCb бы nepe,lJ, возвратом Н3 функ цин, как зто nоказано в npHMepe 4.15. Пример 4.15 ;************* BinBCDs ************** использует 2 ypOBHR nроrраммноrо стека мсnоnьзует 6 nporpaMMHX ypOBHR (максммум) стека дaHHX, aApecyeMoro FSR2 мсnоnьзует Div м ее perMcTp, а TaKe FSRO м WREG coxpaHReT BCDCTpOKY В naMRTM, aApecyeMO FSRO закаН4мваеТСR ОхОО (HyneBaR строка CCTMnR) 3.i.nBCDs: MOVFF MOVF'F MOVLW MOVFF MOVLW MOVWF BinBCDs1: CALL CALL MOVLW ADDWF MOVFF CLRF MOVF BNZ !3iпBCDs2: MOVr' MOVWF BNZ TABLAT, POSTDEC2 PRODH, POSTDEC2 .10 WREG, TABLAT О POSTDEC2 Div Div ОхЗО PRODH PRODH, POSTDEC2 PRODH PRODL, О BinBCDs1 PREINC2,O POSTINCO BinBCDs2 ;занесенме в Стек TABLAT м PRODH J ;., ;сохраненме в стеке маркера KOHua AeneHMe на 10 ;деnенме на 10 ;npe06pa30BaHMe в ASCII ; сохраненме остатка в стеке ;noKa qaCTHOe не станет HyneM ;M3BneqeHMe AaHHX М3 стека 
132 Прнмененне микроконтроnnеров PIC 18 MOVFF MOVFF RETURN PEEJNC2, PRODH PH.EINC2, l'ABLAT ; мзвnеченме PRODt! м 'l'1\B,A'l' из C'l'GKa Обратите вннмание на то, как perHcTpbI TABLAT н PRODH заносятся в стек перед н}м, как срункцня на4ннает работу н нзвлекаlOТС Н3 стека непосредственно перед BЫ II01Iнением команды return. Эта cpYHKЦH теперь исnользует только FSRO, WREG и стек данных. Обычно рабочнй perHcTp не coxpaHeTC. Какое пространство стека данных необходимо? Два байта необходимы дл Т ABLA Т н PRODH и ew,e на три байта болыuе для остатков, которые помеw,аlOТСЯ в стек. Маркер конца требует одноrо байта про- . странства стека данных,  в обw,ем ДЛ ,lJ,aHHoro npHMepa необходнмо ИСnОЛЬЗ0вать ВJIЛОП) дО шести байтов пространства стека данных. Преобразование формата BCD в двоичньm формат npepbIBaHHe 4HCeJl Н3 формата 8СО в ДВОИ4НЫЙ срормат требует НСnОЛЬЗ0вани умноженн вместо деленн. AnropHTM TaKoro nреобраЗ0вани требует, чтобы двоичное число lIа4нналось с нул н по мере обработкн каждоrо разрда, двоичное чнсло ДОЛ>КIIО УМIIO>каться на 10, после 4ero HOBa цнсрра добавлетс к ДВОИ4НОМУ результату. Этот алrОрLl1ТМ опнсываетс следуlOw,нм обраЗ0М: 1. Начать с результата, paBHoro НУЛIO. 2. УМI-Ю>КLI1ТЬ результат на 10. 3. Добавить HOBYIO 8COЦHcppy к результату. 4. Повторть шаrн 2 и 3 до тех пор, пока не будет достиrнута последняя цисрра. Дл НЛЛlOстрацни 3Toro алrорнтма, CPYHKu.H.B примере 4.16 преобразует нулевую ASCIICTPOKY, HaxoAw,ylOc в 4ейке naMTH, в ДВОН4ное чнсло, B03Bpaw,aeMoe как 8- разрядное беззнаковое 4НСЛО в perHCTpe TA8LAT. Нулева ASCIIcTpoKa aдpecyeTC реrистром выбора фала FSRO на ВХО,lJ,е срункцин. Пример 4.16 ;************** ASCIIBin **************** мсnоnьзует 1 уровень стека мсnоnьзует WREG, TABLAT, FSRO lIpe06pa3ye'l' HyneBY ASCI I CTPOKY, aApecyeMY реrистром FSRO, в 8раЗрRдное Авомчное чмсnо, возврааемое в perMCTpe TABLAT ASCIIBin: CLRF ASCIIl:3in1: MOVLW CPFSEQ ВМ RETURN 1\SCIIBln2 : MOVLW MULWF MOVf'F MOV1W SUBWF TABLAT ;OqMCTKa pe3YnbTaTa О INDFO ASCIIBin2 ;возврат по HYn .10 TABLAT PH.ODL, TABLAT Ох30 POSTINCO, О ;х10 ;АSСП в ВСD 
I'naBa 4. ITроrpаммнрование на Slзыке Ассемблера 133 ADDWf' TABLAT ВЕА ASCIIBin1 ;A06aBneHMe UMp Как н в случае anrорнтма nреобразованн ДВОН4НЫХ 4нсел в десятнчные, дaHHЫ алrо ритм также работает с ЛlOбым основаннем снстемы С4нслени, еслн нзмеllНТЬ КОЭсрфИЦLl1еllТ 1 О на 311a4ellLl1e ОСlIовання снстемы С4ислени. HanpHMep, если требуется преобраЗ0вать строку IЮСЬМИРИ4НЫХ 4исел, то ну>кно выnолнЯlЪ умно>кение на 8. Данная СРУIIКЦИЯ LI1СПОJ(ЬЗУ ет 8-разрядное умно>кение, однако в случае ИСnОЛЬЗ0вани 16-разрIДНor"0 умно>кения, MO жет быть получен ДВОИ4НЫ результат больше разрЯJJ.НОСТИ. 4.4. Временные задержк Мноrие npHMeHeHH мнкроконтроллеров требуlOТ отработкн временных задер- хек. В данном nодразделе paCCMaTpHBaeTC то, как ну>кно формировать точные Bpe lI.4енные задер>ккн, НСnОЛЬ3У nporpaMMbI, которые их reHepHpYIOT. Например, npeAno- .10>КНМ, 4ТО ну>кно актнвнровать соленонд на 100 мс дл nравилыюrо персмещеllИ5-1 Ka 1(0rOTO MexaHH4eCKoro nрнсnособлеIlН. An срормнровання это временной задер>ККLI1, :>авной 100 мс, необходимо ИСnОЛЬЗ0вать какойто метод rенерирования IЗРСМСIIIЮЙ задер>ккн. ПроrраI для формирования временных задержек An начала рассмотрени AaHHoro вопроса, нсследуем ПРОСТУIO срункцию срорми- ;ювани BpeMeHHO задержкн, nоказаннуlO в npHMepe 4.17. В зтой СРУIIКЦНИ выnолняет- :я декрементнрованне perHcTpa WREG н еслн результат будет нулевым, то отрабаты!За eтc 1З0зврат Н3 функцнн. Еслн результат не будет равным НУЛIO, то WREG AeKpeMeHTLI1 :>yeTC повторно н Т.д. Эта CPYHKu.H BJleTC npocTo н достаточно KOPOTKO, Оllа имсет "редсказуемое BpeM выnолненн, оnределемое тем, сколько раз будет ВЫПОЛIIЯТl)С leKpeMeHTHpOBaHHe реrистра WREG '.р. Пример 4. 1 7 . --::: i ау: DE:CE'SZ WP..EG НМ Delay ;Аекрементмрованме WREG ;nepeXOA, eCnM WREG не равен О I{ETURN Предnоло>кнв, 4ТО WREG заrружаетс перед вызовом срункцин, мо>кно сказать, "но КОЛН4естIЗО временн, требуемое ДЛ выnолнени 3TO nроцсдуры, будет опрсде ..1Яться колнчеством командных циклов, ну>кных на отработку команд CALL и RETURN, 1111ОС КОЛLl14естIЗО комаНДIIЫХ ЦHкnoB, требуемых ДЛ nоследователыюrо декреМСIIТИРО 3aHH WREG дО нулевоrо COCTOHH. Декрементнрование WREG выполняется командой JECFSZ, за KOTOPO следует команда BRA. Вы мо>кете обратитьс к nрило>кеНLI1Ю А, IЗ .. (отором указано КОЛН4ество командных ЦHкnoB, требуемое ДЛ выполнения кюкдой (оманды. Кажда И3 команд CALL н RETURN требует ДЛ cBoero выnолнени два KO l.caHAHbIX цикnа, Т.е. Bcero на нх выnолненне требуетс 4етыре командных цнкла. Ko I.taHAa DECFSZ требует ДЛ cBoero выnолненн однн KOMaHДHЫ u.HКn, а команда BRA 
134 ITpHMeHeHHe микроконтроnnеров PIC 18 требует ДJl CBoero выnолненн два командных ЦHкna. npHMep 4.18 показывает уравне- ние, которое ну>кно НСnОЛЬЗ0вать ДЛ onpe,lJ,eJleHH BpeMeHHO задержкн в данном слу чае. Пример 4.18 ЧИС.JIO '['актовых ММnУЛЬСОВ 4 + WREG х 3 иnи ЧМСnО TaKTOBX MMnYnbCOB  4 WREG ------- 3 V13 3Toro ypaBHeHH, eCJlH WREG равен 1, nОЛУ4аем, 4ТО колнчество BpeMellLl1, тре- буемое ДЛ выnолненн функцнн Delay, равно 7 ЦHКnOB. Если во WREG заrрузить MaK CHMaJlbHOe KOJlH4eCTBO нуле (1 ноль дает 256 HTepau.H, то KOJlH4eCTBo командных ЦHK лов будет равно 4 + (256 ( 3) нлн 772 ЦНKJlа. KOMaHДHЫ u.HКn в семействе устройств PIC 18 нмеет длнтеJlЬНОСТЬ, paBHYIO 4етырем nepHoAaM следованн нмnульсов внеШllеrо TaKTOBoro reHepaTopa. Еслн BHeWH TaКТOBa 4астота равна 4 Mru. (250 нс), то 4астота, COOTBeTCTBYIOw,a одному командному ЦHКnY, 6удет равна 1 Mru. (1,0 мкс). Это 0зна4ает, 4ТО cpYHKЦH Delay по прнмеру 4.17 мо>кет reHepHpoBaTb BpeMeHHYIO задер>кку в AHana- З0не от 7,0 мкс .0.0 772 мкс, в завнснмостн от 3Ha4eHH, заrру>кенноrо во WREG. Это BpeM даже 6лнзко не соответствует 3Ha4eHHIO BpeMeHHO задержкн в 100 мс, О KOTOPO rоворнлось в Ha4aJle ,lJ,aHHOrO nО,lJ,ра3,lJ,ела. Прнмер 4.19 ,lJ,емонстрнрует О,lJ,НН нз мето,lJ,ОВ nOJlY4eHH 60Jlee длнтеJlЬНО Bpe менной задержкн. В ,lJ,анном CJlY4ae в ка4естве С4етчнка во WREG заrру>кено значение, равное 165. npH BHewHe TaКТOBO 4 астоте , paBHO 4 Mru., 3ТО дает BpeM задер>ккн, равное 165 х 3 + 4 HJlH 499 мкс (в зтом npHMepe окруrлем 3ТО зна4енне до 500 мкс). Если ну>кно Т04НО 500 мкс, ТО В фУНКЦНIO Delay BBO,lJ,HTC оnерацн NOP (отсутспзне опе- раЦLl1И) (NOP ДЛ CBoero выnолненн требует однн командный цикл) непосредствеНIIО перед командой RETURN, как 3ТО показано в npHMepe 4.20. An срункций, показанных в npHMepax 4.19 н 4.20, зна4енне BHeWHero С4етчнка равно 200. Еслн мы отработаем BpeMeHHYIO за,lJ,ер>кку в 500 мкс 200 раз, то nОЛУ4НМ BpeM задержкн, Т04НО равное 100 мкс. Коне4НО же, Т04НОСТЬ 3TO BpeMeHHO задержкн завнснт от Т04НОСТН внешнеrо НСТ04ннка TaKTOBO 4астоты. 3то BpeM так>ке не будет Т04НЫМ в снлу Toro, 4ТО мы не учнтываем BpeM, не06ХО,lJ,нмое AfI ,lJ,eKpeMeHTHpOBaHH BHeWHero С4еТ4нка в TABLAT, однако в СЛУ4ае соленонда Т04НОСТЬ BpeMeHHO задержкн в пределах одной мнллисе кунды npH обw,е за,lJ,ержке в 100 мс BJleTC BnOJlHe nрнемлемо. Пример 4.19 Delaym: MOVLW MOVWF Delaym1 : CALL DECFSZ BRA .200 ;200 раз TABLAT Delay TABLAT Delaym1 RETURN Dе1ау: ;165 раз MOVLW .165 
rnaBa 4. Проrpаммнрованне на Slзыке Ассембnера 135 " I CJ У 1 : l)O'SZ WI<'EG BI Delay1 RETURN Пример 4.20 Jelaym: MOVLW MOVWF ::Jelaym1: САУ,;, IJECFSZ RHJ\ .200 ;200 раз TABLAT I)e 1 а у TABLAT Delaym1 RE '1' URN :elay: MOVLW .165 :::elay1: DECFSZ WREG ВМ Delay1 NOP RETURN ;165 раз ;nnc ee 1 комаНАНЫЙ UMKn При исnользованнн в ка4естве базнса BpeMeHHO задержкн в 100 мс мо>кно nолу чать так>ке более длительные временные задержки. Напрнмер, еслн требуется времен- Ha задер>кка в 5 секунд, то она может быть nОЛУ4ена в результате 50-кратноrо ВЫЗ0ва Функu.нн Delay (см. npHMep 4.21). Аanее в 3TO KHHre будyr рассмотрены также нные методы nОЛУ4енн временных задержек, НСnОЛЬЗУЮЩt1е BHyrpeHHHe таймеры. Будет также рассмотрен мето,lJ, nОЛУ4енн временных задер>кек, nредусматриваlOw,и HC ПОЛЬЗ0ванне npepbIBaHH от таймера peaJlbHoro времени (АТС). 3тот метод будет pac CMaTpHBaTbC тоrда, коrда будет aHanH3HpOBaTbC HCnOJlb30BaHHe npepbIBaHH в раз- ЛН4НЫХ nрнложеннх. OCHOBНO nр06лемо, связанно с npHMeHeHHeM nporpaMMHoro TaMepa, BJleTC то, 4ТО МИКроКОНТРОJlJlер npH отра60тке BpeMeHHO задер>ккн не MO '.." жет делать НИ4еrо друrоrо. В некоторых СЛУ4ах 3ТО nрнемлемо, а во мноrих друrих  мет. Еслн, HanpHMep, снстема нсnользует npepbIBaHH, то отработка временной за дер>ккн мо>кет быть npepBaHa, 4ТО приведет к не корректному зна4ениlO временной за дер>ккн. Пример 4.21 :::5sec: MOVLW MOVWF J5sec1: CALL DECFSZ ВМ .50 TBLPTRL ;5-сеКУНАнаR заАерка мсnоnьзует Delaym Delaym TBLPTRL D5sec1 RETURN 
136 Прнмененне MHKpOKOHTpOnnepOB PIC18 4.5. Прмеры nporpaMM В зтом подразделе рассмотрено несколько nporpaMMHbIx npHMepoB, НЛЛlOстрн РУlOщнх ра3ЛН4ные методы проrраммнрованн. Как н в случае ApyrHx npHMepoB, рас- смат'риваемых в зтой KHHre, IlpHMepbI Н3 AaHHoro nодраздела дол>кны быть введены IDЕ и выrЮlIIЮIIЫ  как на полной скоростн, так н в nошаrовом ре>кнме, чтобы было AOCTHr "YIO rЮJll-юе поннмаllне cooTBeTCTBYIOW,HX nporpaMM. Первый проrраммный пример Этот nepBbI nроrраммный npHMep НЛЛlOстрнрует первый случай НСllOЛЬЗ0ваlfИ1 ввода-вывода. Данный npHMep нсnользует бнты О (RAO) н 1 (RA 1) порта BBoдaBЫBOHa А мнкроконтроллера PIC ДJl C4HTЫBaHH данных с кnaBHaTYpы ПКС1НJIЯ. Клавна тура nKCTHJl выбрана BCJleACTBHe Toro, 4ТО она леrко ПОДKJl104ается к МНКрОКОllТрОЛ леру по ПРН4нне ее ТТЛсовместнмостн н НСПОЛЬЗ0ванн 0/5 В лоrнкн. 6wтырьковый coeAHHHTeJlbHbI разъем тнпа DIN кnaBHaTYpы nK-стнл nоказан на рнс. 4.2. Соеднннтельны разъем кnaBHaTYpы нсnользует только 4 Н3 6 выводов ДJl noAa tlИ ЭIlектроnнтанн н nepeAa4H снrналов. npH зтом в ка4естве снrнальных НСПОЛЬ3УlOтс две Н3 чеl ырех лнннй. ПО снrнальным лнннм nepeAalOTC данные н TaКТOBa 4астота. Клавнатура запнтываетс от +5,0 В с заземлlOw,нм входом н требует макснмум 250 мА тока, KOTOpЫ noAaeTC от НСТ04ннка nHTaHH мнкроконтроллера. РНСУIЮК 4.3 нллlOСТ рирует снrналы данных н тактовой 4астоты, которые оБЫ4НО ПРНСУТСТВУlOт на ннтер- срейсе. Разъем I(абеля клавиатуры Рис. 4.2. 6TH контактный соеднннтельный разъем тнпа DIN KJlaBHarypbI nКстнл Однн фрем данных кnaBHaTYpы состонт Н3 11 нмпульсов TaKTOBO 4астоты, no ло>кнтельные фронты которых НСnОЛЬ3УlOтс ДJl ПОЛУ4енн данных от клавнаryры. TaK ювые импульсы передаlOТС на номннальной 4астоте, равной 1 О Kru.. Чтобы ннтерфейс СРУlIкцноннровал корректно, 4астота тактовых нмnульсов ДОЛ>Кlia ле>кать в днаnа3Шlе ме>кду 10 н 10.7 Kru.. BpeM переда4Н бнта (BpeM между нмnульсамн) следовательно, номинально н равно 100 мкс. npH прнеме данных от KJlавнюуры контролнруетс со- CTOHHe лнннн тактовых импульсов, н вскнй раз npH nepeКnlO4eHHH TaKToBoro нмnульса с лоrН4ескоrо нул в лоrН4ескуIO eAHHHu.y мнкроконтроллером пронзводнтс выборка линнн данных. 3то 0зна4ает, 4ТО дол>кна быть напнсана nporpaMMa нлн функu.н, KOH ТРОЛНРУIOw,а тактовые нмпульсы н BCKH раз, KorAa тактовый нмпульс переходнт в еДИНН4ное COCTOHHe, данные noAalOTC на вход мнкроконтроллера, а затем преобра зуютс в снмвол, nepeAaHHbI от KJlaBHarypbI. 
InaBa 4. ITporpaMMHpOBaHHe на Slзыке Ассембnера 137 Оwибка сррейма возннкает TorAa, KorAa стартовый бнт влетс ненулевым, а сrОllOВЫЙ бнт не вляетс еДННН4НЫМ в cooTBeTcTBYIOw,He моменты времени. Ошибкн сррейма возникаlOТ нанболее оБЫ4НО TorAa, KorAa данные nрнннмаlOТСЯ прн HeKoppeKT Iюй скоростн ннформацнонноrо обмена. Такнм обраЗ0М, мнкроконтроллерная I1рО- rpaMMa может содержать ceKu.HH, КОНТРОЛНРУIOw,не nравнлы-юсть скорости инсрорма цнонноrо обмена. Бнт парнтета добавлетс к данным с целыо обеспечения 101"0, чю BcerAa будет nepeAaBaTbc нечетное КОЛН4ество еднниц. В npHMepe снrналоu, пока- занном на рнс. 4.3, передаетс еДННН411ЫЙ бнт napHTeTa, срормируя не4етный парите1. Данные HMelOT два еДННН4НЫХ бнта, а так>ке е,lJ,ННН4НЫЙ бнт паритета, что в сумме нает трн еДННН4НЫХ бита. Поскольку трн  зто нечетное 4HCJIO, то сообw,ение нмеет нечет- IIЫЙ napLl1TeT. Еслн обнару>кнвается HeBepHЫ паритет (4етный napHTe), то зто означает, чro сообщен не влетс некорректным. Ошнбкн napHTeTa B03HHKalOT в СЛУ4аях npLl1cYT- СП3Ll1Я помех В некоторых случах в сообw,енне вводитс символ uоnроснтельноrо зна- ка, еслн обнару>кена оwнбка napHTeTa. В ApyrHx СЛУ4ах НСnОЛЬ3УIOТС1 средства ynpaB ленн HHcpopMau.HoHHbIM потоком с цеJlыо заnроса nOBTopHO передачн данных. Сl С2 С3 С4 С5 С6 С7 С8 С9 CIO Cll тактовая частота  даНllые ст.." DO Dl D2 D3 D4 D5 D6 нечетный стоп D7 паритет J.J- Стартбит Bcerдa ноnь Парнтет всеща нечетный Стопбит Всеrда в е.u.ИНИЧ1l0М состоянии Рис. 4.3. Снrналы TaKTOBO 4астоты н данных КJlaBHaTYpы 8следствне Toro, 4ТО в зтом npHMepe НСnОЛЬ3УlOтс бнты О н 1 порта А, то ну>кно знать, KaKa команда BbInOJlHeT С4нтыванне порта А .0.0 Toro, как на4ать nHcaTb npo rpaMMY, c4HTbIBalOw,ylO нажатые КJlавншн КJlaBHaTYpы. Порт А c4H1ывeTc посредством чтенн 4eKH perHcTpoBoro срайла с адресом OxF80. В nporpaMMe обраw,ение к РОАТА идет по адресу OxFO. Порт А nporpaMMHpyeTc nocpe,lJ,CTBOM заrрузкн соответствуlOЩИМ значением perHcTpa TRISA по адресу OxF92. E,o,HHHu.a в бнте perHcTpa TRISA задает pe ЖLl1М ввода ДЛ cooTBeTcTBYIOw,ero вывода, а ноль  режнм вывода. В данном примере НСnОЛЬ3УlOтс бнты О н 1 ДЛ установкн режнма ввода данных, n03ToMY в perHcTp TRISA заrру>каетс значенне Ох03. npHMep 4.22 демонстрнрует nporpaMMY, требуемуlO ДJl 
138 ITpHMeHeHHe MHKpOKOHTpOnnepOB PIC 18 nporpaMMHpoBaHH бнтов О н 1 порта А так, 4тобы онн функцноннровалн как входные выводы. Бнты порта должны так>ке nporpaMMHpoBaTbC как u.HcppoBbIe выводы в HeKOTO рых BepCHX PIC nOCpe,lJ,CTBoM заrрузкн Ox7F в perHCTp ADCON 1. Пример 4.22 MOVLW Ox7F MOVWF ADCON1 ;nopT nporpaMMMpyeTcR как UMpOBO MOVLW MOVWF 3 TRISA ;6MT О М 1 06ЪRВnRТСR ВХОАамм Функu.н, KOTopa npHHHMaeT OT,lJ,eJlbHbI снмвол от KJlaBHaTypbI, НJlЛlOстрнруетс npHMepoM 4.23. В 3TO nporpaMMe npe,lJ,nOJlaraeTC, 4ТО бнт RAO (бит О порта А) noAcoe дннен к ВЫВО,lJ,У ,lJ,анных KJlавиаryры, а 6нт АА 1 (бнт 1 порта А) сое,lJ,ннен с JlHHHe TaKTO вых CHrHaJlOB. AaHHa Функu.ия nOJlY4aeT CHMBOJl от KJlaBHarypbI н B03Bpaw,aeT ero в pe rHCTpe WREG. ЕСJlИ 06HapV>KeHa oWH6Ka (фрема HJlH парнтета), бнт переноса YCTaHa лнвается в еДННН4ное COCTOHHe npH возврате Н3 функu.нн. Еслн В perHCTpe WREG npH сутствует корректный снмвол, бнт переноса сбрасываетс. Anя Toro, 4тобы сделать зry nроцедуру более зсрсректнвно н 4нтабеJlЬНО, в нее BКnlO4eHa CPYHKu.H, Ha3BaHHa Wait4Clock, KOTopa О>КН,lJ,ает nepexo,lJ,a JlHHHH nO,lJ,a4H тактовых снrналов в нулевое со- CTOHHe, а затем ожндает перехода JlHHHH noAa4H тактовых снrналов в еДННН4ное со- CTOHHe пере,lJ, ВЫХО,lJ,ОМ Н3 функu.нн. Функu.ня Wait4Clock nоказана nepBo в лнстннrе. Команды npoBepKH состоння бнта н nponYCKa НСnОЛЬ3УlOтс в 3TO срункцнн ДЛ KOH трол H3MeHeHH состояння BXOAHoro снrнала. Пример 4.23 ;************** Wait4Clock ***************** OMAaeT nepexOAa nMHMM TaKTOBX CMrHanOB в HyneBoe ;COCTORHMe, а затем в eAMHMqHOe nepeA возвратом М3 ;YHKUMM Wait4Clock: BTFSC ВМ PORTA, 1 Wait4Clock ;npOBepKa RA1 ;eCnM тактовый CMrHan 1 Wait4Clock1: BTFSS ВМ PORTA, 1 Wait4Clock1 проверка М1 eCnM TaKTOBЫ CMrHan о RETURN ;************** GetData **************** мсnоnьзует 2 ypOBHR nporpaMMHoro стека Мсnользует PRODL, PRODH м TABLAT CqMTBaeT символ с KnaBMaTypbl м возвраает ero во WREG oWM6Ka = YCTaHaBnMBaeTcR 6мт переноса 
rnaBa 4. ITporpaMMHpOBaHHe на Slзыке Ассембnера 139 etl)ala: CAIJL. B'l']:'8S BRA Wait4C]ock PORTA, О GetData1 BSF STA'fUS, О RETURN ;OMAaeT nepBoro TaKTOBoro CMrHana ; npoBepRe'l' RAO ;eCnM на nMHMM AaHHX CTapTOB ;6мт, nepeXOA на GetData1 ;eCnM Ha4anbHoe COCTORHMe ; некорректно, установка 6мта переноса (CARRY) ;м возврат nроrрамма npoAonaeT BnOnHRTbCR с 3Toro места, ;eCnM paCn03HaH KoppeKTH CTapTOB 6мт PRODL мспоnьзуеТСR как CqeTqMK 6мтов дaHHX JJ1Ю[)Н МСIIОJlьзуеТСR AnR nOACqeTa едмнмu в потоке AaHHX с uenb KOHTpOnR .аРИ'['С'l'а etData1: MOVLW MOVWF CLRF 8 PRODL PRODH etData2: CALL Wait4Clock BTFSC PORTA, О INCF PRODH BTFSC PQRTA, О SETF STATU8, О RRCF TABLAT DECF PRODL BNZ GetData2 ;установка CqeTqMKa на 8 ;с6рос CqeTqMKa napMTeTa ;OMдaHMe TaKTOBoro MMrrYnbca смнхронмзаuмм 6мта AaHHX ;npOBepKa RAO ;yqeT OAHO eAMHMUbl - 6мт napMTeTa м с6рос CARRY ;npOBepKa RAO ;установка 6мта переноса, eCnM бмт данных  1 ;UMKnMqeCKM CABMr 6мта переноса (6мт Аанных) в TABLAT ;декрементмрованме CqeTqMKa ;noBTop 8 раз AnR 8 6мтов AaHHX CALL Wait4Clock ;oдaHMe CMHxpoMMnYnbca AnR 6мта napMPeTa MOVF PORTA, W XORWF РRОDП BTFSS PRODH, О BRA GetData3 BSF STATUS,O RETURN 3etData3: CALL ;заrрузка 6мта Аанных во WREG t ,.i"'- ;MCKnqaee ИЛМ со CqeTqMKOM napMTeTa ;eCnM napMTeT npaBMneH ;eCnM oWM6Ka napMTeTa, установка CARRY ;eCnM нет oWM6KM napMTeTa Wait4Clock BTFSC PORTA, О ВМ GetData4 BS!:' STATU8, О RETURN ;npOBepKa МО на cton-6мт ;eCnM все HopManbHO, peaKUMR на cton-6мт ;eCnM oWM6Ka peMa, установка 6мта переноса 
140 ITpHMeHeHHe MHKpOKOHTpOnnepOB PIC 18 GetData4: MOVF BCF ;eCnM нет oWM60K TABLAT, W ;заrрузка 6aTa Аанных во WREG STATUS, О ;04мстка 6мта переноса RETURN Функu.и, иллюстрируема nримером 4.23, nОЛУ4ает бат от клавиатуры, однако мы не nОЛУ4ИМ ASCIIKOA нажато клавиши до тех пор, пока не nOMeM, как ра60тает клавиатура, и не восnользуемс зтим знанием. Вски раз, KorAa нажимаетс клавиша кnавиатуры, клавиатура посылает Т.Н. CKaHKOД кnавиши. Скан-код не вляетс АSСIIкодом; 3ТО число, которое поставлено в соответствие Ka>K.ЦO клавише клавиату ры. Та6л. 4.1 пере4ислет CKaHKOДЫ клавиатуры. 06ратите внимание на то, 4ТО некоторые CKaHKOДЫ имеют Д1IИНУ, соответствующую двум ли60 60льшему 4ИСЛУ символов. Все скан-коды, длина которых nревосходит один сим вол, на4ннаютс кодом ОхЕО, KOTOpЫ pacn03Haeтc nporpaMMHo как сиrнал о не06ходнмости приема доnолнитеJlЬНЫХ 6aTOB CKaHKOдa, cocTow,ero И3 нескольких 6afu. KorAa на кnавиатуре нажата кnавиша, интерсрес кnавиатуры посылает CKaHKOД, а KO rAa кnавиwа oTnycKaeTc, интерсрес кnавиатуры посылает код nрерывани, за которым сле дует CKaHKOД кnавиши. Например, Korдa нажата кnавиша А, nосылаетс код Ох1 С. А KorAa кnавиша А отпускаетс, nepeAaeTc код OxFO, за которым cneAyeT код Ох1С. 3то nозволяет отслеживание nporpaMMHbIM 06есnе4ением нажати нескольких ЮlaВИШ. Так, нажатие кла- виши "Левы SHIFТ (BpeMeHHЫ BepXHH реrистр)" с nоследуюw,им нажатием кnавиши А приведет к rенерированию следуюw,е последовательности кодов, если nepBo 6удет отпу w,eHa кnавиша Shift: Ох12, Ох1 С. Если же nepBo 6удет oTnyw,eHa кnавиша А, а затем будет oTnyw,eHa кnавиwа Shift, то 6удет послана слеДУIOw,ая nоследователыюсть кодов: OxFO, ох1С, OxFO, Ох12. KorAa отпускаетс кnавиша, rенерируюw.a код, nревосходящий по Д11ине один 6айт, как, например, кnавиwа Insert (Вставка), то после кода ОхЕО 6удет r!Ослаll код, Т.е. no слеДовательность кодов 6удет иметь ВИД: ОхЕО, OxFO, Ох70. Единственным ИСКnЮ4ением И3 3ТИХ правил влетс кnавиwа Pause (nауза) key, KOTopa rенерирует КОД, наfинаюw,ийс с ОхЕ1, а при ее отпускании rенерируетс ОхЕ1, OxFO, Ох14. Последовательность кодов npepbI вани дл Юlаuиши Print Screen (ne4aTb зкрана) влетс друrим ИСКnЮ4ением, она имеет вид: ОхЕО, OxFO, Ох7С, ОхЕО, OxFO, Ох12. Таблица 4. 1 . CKaHKOД Юlавиатуры Кла КОД Клавиша КОД Клавиша КОД виша О Ох45 Z Ох1А Ох49 1 Ох16 F1 Ох05 / Ох4Л 2 Ох1Е F2 Ох06 Enter (ВВОА) Ох5А 3 Ох26 F3 Ох04 Escape (ВЫХОА) Ох76 4 Ох25 F4 ОхОС Print Screen (Пеqать зкрана) ОхЕО, Ох12, О хЕ О , Ох7С 5 Ох2Е F5 Ох03 Scroll Lock Ох7Е (Замок npoKpYTKM) 6 Ох36 F6 ОхОВ pause (Пауза) ОхЕ1, Ox14, Ох77 7 ОхЗD F7 Ох83 Insert (Вставка) О xF: О , ОхС/О 8 Ох3Е F8 ОхОА Home (В МСХОАное) ОхЕО, ОхБС 
rnaBa 4. ITporpaMMHpoBaHHe на языке Ассембnера 141 Кла- виша 9 А в с D Е F G н 1 J к L м N о Ох46 Ох1С Ох32 Ох21 Ох23 Ох24 Ох2В Ох34 Ох33 Ох43 Ох3В Ох42 Ох4В Ох3А р Q R S Т КОД Клавиша КОД Ох01 Ох09 Ох78 Ох07 Ох66 Ох29 ОхОО Ох58 Ох12 Ох14 ОхЕО, Ox1F Ох11 Ох59 ОхЕО, ОхlЗ ОхЕО, Ох27 ОхЕО, Ох11 ОхЕО, Ox2F ОхОЕ Ох4Е Ох55 Ох5D Клавиша page Ор (CTpaHMua вверх) Delete (CTepe'l'b) End (KOHeu) J?age Down (С'l'раниuа вниз) Ор Arrow (CTpenKa вверх) Left Arrow (CTpenKa вnеио) Down Arrow (CTpenKa ВНМ3) Right Arrow (CTpenKa вправо) Замок UMpOBO KnaBMaTypbl I на UMpOBO KnaBMaType * на UMpOBO KnaBMaType - на UMpOBO KnaBMaType + на UMpOBO KnaBMa'l'ype Enter (ВВОА) на UMpOBO KnaBMaType на UMpOBO KnaBMaType О на UMpOBO KnaBMaType О 1 на UMpOBO KnaBMaType 2 на UMpOBO KnaBMaType 3 на UMpOBO KnaBMaType 4 на UMpOBO KnaBMaType 5 на UMpOBO клавматуре КОД ОхЕО, Ох7О О xF. О , Ox71 ОхЕО, Охб9 ОхЕО, Ох7А ОхЕО, Ох75 О хЕ: О , Ох6В ОхЕО, Ох72 ОхЕО, Ох74 Ох77 О xt:: О , Ох4А Ох7С Ох7В Ох79 ОхЕО, Ох5А I J.. F9 F10 F11 F12 Backspace (Шаr назаА) Dp06en ТаЬ (Ta6YnRUMR) Ох31 Caps Lock (Замок BepxHero perM стра) Left Shift (ЛеваR KnaBMwa BpeMeH Horo nepeKnqe HMR perMcTpoB) Left Control (YnpaBneHMe neBaR) Left Alt Option (ЛеваR кnавиwа Alt (AnbTepHa тмва) AOnOnHM TenbHaR) Left Alt (ЛеваR KnaBMwa Alt (AnbTepHaTMBa) ) Right Shift (DpaBaR KnaBMwa BpeMeHHoro ne- peKnqeHMR pe rMcTpoB) Right Control (DpaBaR KnaBMwa yrrpaBneHMR) Right Alt Op tion (DpaBaR KnaBMwa Alt (AnbTepHa тмва) AOnOnHM TenbHaR) Right Alternate (DpaBaR KnaBMwa Alt (AnbTepHaTMBa) Applications (ОрМJIоенме ) Ох71 Ох"/О Ох69 Ох72 Ох7А Ох6в Ох73 Ох44 Ох4О Ох15 Ох2О Ох1В Ох2С \ 
142 Кла КОД виша U ОхЗС V Ох2А W Ох1D Х Ох22 у ОхЗ5 TIpHMeHeHHe MHKpOKOHTponnepOB PIC 18 Клавиша КОД Клавиша Ох54 6 на ЦMpOBO KJJaBMa'l'ype Ох5В 7 на UMpOBO клавма'l'уре Ох4С 8 на UMpOBO KJIaBMa'l'ype Ох52 9 на ЦMpOBO клавма'l'УРС Ох41 КОД Ох"/4 ОхБС Ох75 Ох7О Может 6ыть написано nporpaMMHoe 06есnечение, которое ссрормирует интер- cpec клавиаryры, однако в 60льшинстве СЛУ4аев весь зтот проu.есс управляетс npe рываними. Не06ходимость ИСnОЛЬЗ0вани nрерывани свзана со скоростью интер- cpeca клавиаryры. Если ДJl С4итывани клавиатуры исnользуютс рассматриваемые здесь nporpaMMbI, то микроконтроллер не должен I.3ЫIlОЛНЯТЬ никакой ДОllOлнителы-юй ра60ТЫ. Мы пока не 6удем рассматривать оставшуюс 4асть nporpaMMHoro 06еспече- ни работы с клавнаryро  это 6удет сделано nозже 1.3 3TO Кllиrе, после исслеДОl.3ания Ha3Ha4eHH и роли nрерывани. Здесь же мы рассмотрим то, как нужно pacn03HaBaTb наЛИ4ие TaKToBoro импульса и принимать данные 4ерез порт BI.30Aal.3bIBOAa, ИСПОЛЬ3У HecKonbKo ero штырьков. Второй проrpаммный пример nepBbI nporpaMMHbI пример nРОИЛЛlOстрировал то, как npoBepTb наЛИ4ие сиr нала тактовой 4астоты, как орrаНИЗ0вать поисковую та6лиu.у ASCIIKoAOB (XOT COOTBeT cTBYIOw,a nporpaMMa не рассматривалась), а так>ке то, как нужно ра60тать с портом BBoдaBЫBoдa. Некоторые радиолю6ители при nepeAa4e ннсрормаu.ии с u.елью сужени попосы 4астот исnользуют код Морзе. Сwнал незаryхаюw,их коле6аний, исnользуемый при nepeAa4e кода Морзе, имеет полосу 4астот, ширина которой составляет Bcero 150 ru.. Код Морзе nервона4ально ИСnОЛЬЗ0валс телеrрасристами, он 6ыл разра60тан дл орrанизаu.ии СВ3И меж.цу железнодорожнымн станu.ими в 19 столетии и широко ис nользовалс так>ке и в 20 столетии. Та6л. 4.2 демонстрирует коды Морзе ДJl 6укв и 4исел. В таблнu.е npHBeAeHbI сим 1.30ЛЫ и соответствуюw,ие им КО,lJ,Ы И3 Т04ек (называемых "дит") (.) и тире (назыl.3емыыx "дах") (), а так>ке wестнадu.аТИРИ4ные 4исла, указываюw,ие КОЛИ4ество Т04ек и тире (npaBbIe три 6ита), а так>ке их структуру (левые 5 6нтов). Т04ке соответствует лоrиче- ский ноль, а тире - лоrИ4еска единиu.а. Предположим, 4ТО нам не06ходима система, KOTopa посылает коды Морзе. Вследствие Toro, 4ТО не так У>К MHoro людей знают код Морзе, мы решили разработать простую микроконтроллерную снстему, nредназначенную ДJl Iенерировани 3Toro кода. Поскольку аппаратные средства в зтой книrе пока ew,e не рассматривались, бу дем С4итать, 4ТО наша система 6ерет ASCII  символ И3 реrистра WREG и rенерирует ДJl Hero код Морзе. Поскольку мы уже знаем, как С4итывать клавиаryру, например стандартную клавиаryру nK, то 6удем С4итать, 4ТО символы от клавиаryры передаются в nporpaMMY ДJl их nре06раЗ0вани в код Морзе. 3то nозволит нам передавать коды Морзе noCpeACTI.30M ввода букв и u.исрр с клаl.3иатуры. В дополнение к таблнu.е кода Морзе, KOTopa coxpaHeTC в nамти nporpaMM как nоискова та6лиu.а, не06ходнмо знать так>ке некоторые друrие сракты относительно кода Морзе. BpeM nepeAa4H тире в трн раза 60льше, 4ем BpeM nереда4И Т04КИ. npo межуТКН меж.цу буквам н в слове равны трем периодам nереда4И Т04КИ. nромежуrки меж.цу словами равны семи периодам nереда4И Т04КИ. При nepeAa4e данных со CKOpO стью 50 слов в минyrу, период nереда4И Т04КИ будет равен 24 миллисекундам. 3та CKO рость nереда4И (50 слов в минyry) Ha3ЫBaeTC "nари>кским" стандартом, потому 4ТО Olla 
rnaBa 4. ITporpaMMHpOBaHHe на Slзыке Ассембnера 143 попучена посредством nереда4Н слова "PARIS" 50 раз в минyry. Слово "PARIS" дает Т04НО 50 nернодов nереда4Н Т04КН с npOMe>KyTKaMH меж.цу словами Соответствуюw,а nporpaMMa ,lJ,олжна отра6атывать временную задержку, равную одному периоду nереда4Н Т04КИ (24 мс), а так>ке трем периодам nереда4И точки (72 мс). Поскольку мы пока ew,e не знаем, как актнвировать реле (КnЮ4), то rOToBa функu.и, назыеаема KeyOn, исnользуетс M активнровани реле и функци KeyOff исnользуетс,lJ,Jl ВЫКnЮ4ени реле. Функu.и KeyOn устанавливает 6ит АВО, а Функu.и KeyOff с6расывает 6ит АВО. nр06ел, соответствуюw,н АSСIIкоду, в та6л. 4.2 не OTpa >кен, однако меж.цу словами OTpa6aTЫBaeTC промежуток, равный семи периодам nepe да4И Т04КИ. Пример 4.24 иллюстрирует поисковую та6лиu.у в nамти проrрамм, nредна- зна4енную M сохранени кода Морзе. Та6лиu.а в nамти состоит из двух 4aCTe: Morze.L содержит 6уквы, а MorzeN  u.ифры. Таблица 4.2. Код Морзе Символ Код Байт Символ Байт Байт Символ Код Байт А Ох42 М ОхС2 У   ОхВ4 В Ох84 N Ох80 Z ОхС4 С ОхА4 О ОхЕ3 О OxFD D Ох83 Р Ох64 1 Ox7D Е ОхО1 Q OxD4 2 Ox3D F Ох24 R Ох43 3 OxlD  G ОхС3 S ОхО3 4 OxOD Н ОхО4 Т Ох81 5 ОхО5 ОхО2 U Ох23 6 Ох85 J Ох74 V Ох14 7 ОхС5 К   ОхА3 W Ох63 8 ОхЕ5 L  . . Ох44 Х  . .  Ох94 9 OxF5 Пример 4.24 MORSE СОDЕ - РАСК Morse L: ;6уквы ОТ А АО Z db Ох42, Ох84, Оха4, Ох83, Ох01 db Ох24, Охс3, Ох04, Ох02, Ох74 db Оха3, Ох44, Охс2, Ох80, Охе3 db Ох64, О xd4, Ох43, Ох03, Ох81 db Ох2 3, Ох14, Ох63, Ох94, ОхЬ4 db Охс4 Morse N: ;qMCna ОТ О АО 9 db Oxfd, Ox7d, Ox3d, Ox1d, OxOd db Ох05, Ох8 5, Охс5, О хе 5 , Oxf5 nроu.едура, KOTopa 6ерет один АSСIIсимвол И3 реrистра WREG и посылает код Морзе, nоказана в при мере 4.25. XOT BBOДBЫBOД 6удет рассматриватьс nозже, дaH Ha nроu.едура использует порт В,  однн И3 портов BBoдaBЫBoдa, и ero 6ит OM акти- вировани реле. Если к зтому 6иry nОДКnlO4ИТЬ осu.илnоrраф, то мы Уl.3идим код Морзе 
144 Прнмененне MHKpOKOHTpOnnepOB PIC 18 как последовательность нуле и единнu., которые исnользуютс для ВКJIЮ4ения и ВЫ- КJlЮ4ени реле. Реле н ero интерфес 6удут 06суж.цатьс в nоследуюw,их rлавах. nри BeдeHHa nporpaMMa написана в раС4ете на тактовую 4астоту, равную 4 Mru.; если ис nользуетс ина TaKTOBa 4астота, то то С4еТ4ИКИ временных задержек должны 6ып> подстроены так, как зто 06ъснлось в npeAbIAyw,eM nодраздеllе данной rлавы. Пример 4.25 ;************* ФУНКUИR SendChar ************** мсnоnьзует 3 ypOBHR nporpaMMHoro стека мсnользует LookUp, KeyOn, KeyOff, Delay24, Delay72 м Delay мсnоnьзует WREG, PRODL, PRODH, TABLAT, TBLPTR посылает CMMBon мз WREG на TenerpaH клq (репе) SendChar: MOVWF MOVLW SUBWE' BN MOVLW SUBWF SendChar 1 : MOVLW SUBWF BNZ CALL CALL RETURN SendChar2: MOVLW SUBWF ВС RETURN SendChar3: MOVLW SUBWF ВС CALL ВМ SendChar4: MOVLW SUBWF ВС RE '1' шт SendChar5: MOVLW SUBWF BNC RETURN SendChar 6 : CALL PRODL Ох61 PRODL, О SendChar1 Ох20 PRODL Ох20 PRODL, О SendChar2 Delay72 Delay24 Ох30 PlODL, О SendChar3 Ох3а PRODL, О SendChar4 LookUp SendCharSend Ох41 PRODL, О SendCharS Ох5Ь PRODL, О SendChar6 LookUp1 ;coxpaHReT WREG ;eCnM 6YKB заrnавне ;npe06pa30BaHMe в заrnавне ;eCnM не np06en ;nnc 4 TOqKM ;eCnM "О" MnM 60nbwe ;eCnM не "О"  "9" ;еслм менее, qeM "А" ;eCnM 60nbwe, qeM "Z" 
rnaBa 4. ITporpaMMHpOBaHHe на Slзыке Ассембnера 145 Sепdcri) r:-5end: MOVWi-' MOVWF MOVLW ANDW}O SendCharSend1: CALL RLCF BNC CALL BRA SendCharSend2: CALL SеndСhаrSеndЗ: CALL CALL DECF BNZ CALL CALL RETURN PRODL РН.ОDН "1 PRODL KeyOn PlODH SendCharSend2 Delay72 SеndСhаrSеndЗ Delay24 KeyOff Delay24 PRODL SendCharSend1 Delay24 Delay24 ;КОА в РЕОDН ;CqeTqMK в PRODL ;pene BKn ;n0nyqeHMe TOqKM MnM тмре ;eCnM Т04ка ;заАерка на трм nepMOAa nepeAaqM TOqKM ; за.церка на ОАМН rrермод llepeAaqM 'l'ОЧКМ ; репе BKn ; заАерка на ОАМН перМОА nepeAaqM ТОqКИ ;eCnM не KOHeu ; заАерка на Ава nepMOAa nepeAaqM TOqKM наХОАМТ КОА в nOMCKOBO Ta6nMue КОАа Морзе =..ookUp: КОД B03BpaaeTcR ВО WREG MOVLW SUBWF MOVLW MOVWF MOVLW MOVWF MOVLW MOVWF ВМ :"'00kUp1 : MOVLW SUBWF MOVLW MOVWF MOVLW MOVWF MOVLW MOVWF ;"00kUp2: MOVF ADDWF MOVLW ADDWFC ADDWFC ОхЗО PRODL ;npe06pa30BaHMe мз ASCII UPPER(Morse_N) TBLPTRU HIGH(MorseN) TBLPTRH LOW(MorseN) TBLPTRL LookUp2 Ох41 PRODL UPPER(Morse L) TBLPTRU HIGH(MorseL) TBLPTRH LOW(MorseL) TBLPTRL PRODL,O TBLPTRL О TBLPTRH TBLPTRU t ;'''' 
146 ITpHMeHeHHe MHKpOKOHTpOnnepOB PIC 18 TBLRD* MOVF TABLAT,O RETURN ;КОА М3 nOMCKOBO Ta6nMU ЗаАерка на nepMOA nepeAaqM TOqKM (Амта) Delay24: MOVLW MOVWF .48 TABLAT ;48 раз Delay24a: CALL DECFSZ ВМ RETURN Delay TABLAT Delay24a ЗаАерка на 3 nepMoAa nepeAaqM TOqKM (Амта) Delay72 : CALL CALL CALL RETURN Delay24 Delay24 Delay24 BpeMeHHaR заАерка на 500 МКС; Delay: ;165 раз MOVLW .165 ;500 МКС Delay1: DECFSZ WREG ВМ Delay1 RETURN Установка 6мта О порта В KeyOn: BSF PORTB, О RETURN установка 6мта О порта В С6рос 6мта О порта В KeyOff: BCF PORTB, О RETURN с6рос 6мта О порта В nроu.едура SendChar достаТ04НО проста. Больша ее 4асть выnолнет фильтра u.ню символов ASCII с тем, 4т06ы 06ра6атывались только 4исла, 6уквы и пробелы; лю- 6ые иные символы ASCII иrнорируютс. Как только pacn03HaH доnустимы АSСII-символ, структура кода Морзе и значени С4еТ4ика иw,утс в двух та6лиu.ах в na- мти nporpaMM с ИСnОЛЬЗ0ванием команды TBLRD*. 06ратите внимание, как адрес за rpY>KaeTC в реrистр TBLPTR в Функu.ии LookUp. Аирективы ассемблера UPPER, HIGH и LOW нсnользуютс ДJl досrynа к ра3ЛИ4НЫМ 4aCTM адреса при сохранении ero в TBLPTR. V1, HaKoHeu., структура кода Морзе ра3,lJ,елетс на значение С4еТ4ика и битовую структуру ДJl 6ита О порта В. Бнтова структура затем сдвнrаетс nобитоlЗО для опре- деnени Toro, как долrо 6ит О OCTaeTC в состонии лоrИ4еской единиu.ы. Т04ке (<<диту») соответствует 24 МС, а тире (<<даху»)  72 мс. 
rnaBa 4. ITporpaMMHpOBaHHe на языке Ассембnера 147 4.6. Резюме 1. Стек данных  зто место в nамти данных, в котором информаu.и сохранется по принципу «первым вошел, посnедним вышел». Реrистр вы60ра фала CPYHKu.HOHHPy- ет как указатель стека, ИСnОllЬЗУЮw,ий форму адресаu.ии РОSТDЕС,ЦЛ сохранени ,lJ,ан- ных в стеке и срорму РRЕINС,ЦЛ извле4ени данных И3 стека. 2. 04ередь  зто буфер данных, который coxpaHeT информаu.ию по nринципу "первым вошел, первым вышел». An срункu.ионировани 04ереди не06ходимо исполь 30вать два указател. nepBbI адресует Т04КУ входа, а BTOpO  точку выхода. Ошибоч- нымн состоними, расnознаваемыми nporpaMMHbIM 06есnе4ением, ра60тающим с ачереЩIМИ, вляютс состояние заnолненно очереди и состоние пустой очереди. З. Оnераu.ии сложени и ВЫ4итани ДВОИ4нокодированных деСЯТИ4НЫХ чисел ,ВСО) ИСnОllЬ3УlOТ команду DАW,ЦЛ коррекu.ии результата после ВСDсло>кения. В слу чае ВСDвычитани, исnользуетс nри6авление доnолнени до дести,ЦЛ срормирова НИ разности и ИСnОЛЬЗ0вани команды DAW. 4. Команда DAW корректирует результат ВСDсложени, исследу состоние 6ита переноса и 6ита nоловинноrо переноса реrистра состони, а также зна4ение обеих разрдов результата. Результат 3Toro иссnедовани оnределет, nри6авляетс ,цля коррекu.ни pe3YnbТaTa ОхОО, Ох06, Ох60 или Ох66. 5. АВОИ4ное умножение исnользует аnrоритм сдвиrа и суммировани Д1l срорми ровани nроизведени. АВОИ4ное nроизведение так>ке выnолнетс командами MULLW и MULWF. Описанный алrоритм nозволет выnолнть умножение 4исел лю60rо разме ра. 6. АВОИ4ное деление исnользует алrоритм сдвиrа и вычнтани ,ЦЛ rенерирования частноrо и остатка. Частное и остаток при ИСnОЛЬЗ0вании 3Toro алrоритма  3ТО BcerAa беззнаковые u.елые 4исла. 7. nреобраЗ0вание ДВОИ4ноrо 4исла в деСТИ4ное тре6ует делени на дeCTb. Ал rоритм, Tpe6yeMЫ ,ЦЛ TaKoro nреобраЗ0вани, Ha3ЫBaeTC nравиnом Хорна. 3тот ал rоритм так>ке ра60тает в сnучае nре06раЗ0вани ABoH4Horo 4исла в любую систему С4ислени посредством изменени 4исла, на которое выnолнетс деление, установив ero равным основанию системы С4ислени. 8. nреобраЗ0вание И3 деСТИ4НО в ДВОИ4НУЮ форму выnолнетс посредством умно>кени на дeCTb. 3то nре06раЗ0вание также 06есnе4ивает перевод И3 любо сис темы счисленн в ДВОИ4НУЮ посредством изменени козФФиu.иента с установкой ero ,., равным основанию системы С4ислени. 9. BpeMeHHa задержка 4асто срормируетс nporpaMMHo. 3то выnолнется вслед ствие Toro, что известно КОnИ4ество времени, необходимое ,ЦЛ выnолнени команды. Таким 06раЗ0М Т04ные временные задержки формируютс за С4ет использования npo rpaMMHbIx u.иклов. 4.7. Вопросы и задания 1. Что такое стек данных? 2. Что такое проrраммный стек? З. Сравните стек данных с nporpaMMHbIM стеком. 4. Если реrистр FSR1 исnользуетс как указатеnь стека, вы6ерите команды или команду, которые: а. Заност содер>кимое WREG в стек Ь. V1звnекают данные И3 стека и заност их во WREG. с. Заност nроизведение в стек 
148 ITpHMeHeHHe MHKpOKOHTpOnnepOB PIC 18 5. KaKa команда используетс ДЛ иннu.иализаu.ии FSR2 как указател стека? 6. Если содержимое WREG 6ыло занесено в стек, после 4ero в стек 6ыло 3attCcellO СОАер>кимое PRODL, KaKO И3 названных реrистров 6удет первым выrружен И3 стека? 7. Что такое 04ередь? 8. Опишите состони оши60К, KOTOpЫ должны pacn03HaBaTbc nporpaMMHbIM обеспечением ра60ТЫ с 04ередми. 9. Если 04ередь имеет размер, paBHЫ 16 6aTOB. Сколько 6айтов данных Moryr 6ыть сохранены в 3TO 04ередн? 10. Что 0зна4ает, коrда rOBopT, 4ТО очередь  зто u.иклична naMTb? 11. Коrда складываютс ВСD4исла, KaKa команда должна ИСnОЛЬЗ0ваться Дl1Я коррекu.ни результата? 12. Опиwите разниu.у мюкду упакованными и HeynaKoBaHHbIMLI1 ВСDЧИСl1ами. 13. Определите 4ИСЛО, д06авлемое KOMaHДO DAW в СЛУ4ае следующнх onepa u.ий сложени упакованных ВСD-4исел. а. 03 + 08 Ь. 1 0+ 28 с. 92 + 99 d. 92 + 90 14. Как выnолнетс ВЫ4итание ВСD4исеn? 15. Что такое дополнение до 1 О и как оно nОЛУ4аетс? 16. n04eMY ВСD4исла исnользуютс в nporpaMMax? 17. Умножение может 6ыть выполнено при ИСnОЛЬЗ0вании последовательности  сдвиrов и сложений. 18. Команда умноженн ра60тает только с 8разрдными числами. Как она мо>кет быть ИСnОЛЬЗ0вана ДЛ 16разрдноrо умножени? 19. Как долrо выnолнетс команда умножени? 20. Наnиwите Функu.ню, KOTopa умножает СО,lJ,ержимое WREG на содержимое TABLAT. 3та функu.и должна B03Bpaw,aTb результат во WREG в форме 8разрдноrо сnо>кения, иrнориру старшую часть nроизведени. 21. Напишите Функu.ню, KOTopa возводит в квадрат число во WREG, B03Bpaw,a результат во WREG в форме 8разрдноrо 4исла. 22. Оnиwите изменени, требуемые в примере 4.8 с тем, 4т06ы он выnолнл YM ноженне двух 16-разр,lJ,НЫХ 4исел со знаком и rенерировал 32разрдное nронзведе ние со знаком. 23. Аеление может 6ыть выполнено при ИСnОЛЬЗ0вании последовательности сдвнrов и ВЫ4итани. 24. Если 4ИСЛО ну>кно nоделнть на 4, 4ТО 6удет наИЛУ4ШИМ методом? 25. Может ли алrоритм делени, paCCMOTpeHHЫ в 3TO rлаве, 6ыть модиФиu.иро ван ДЛ выnолнени 24-разрдноrо делени? Если да, то какие измеllени в нем ну>кно выполнить? 26. Можно ли написать nporpaMMY, KOTopa делит 256разрдное 4ИСЛО на 28разрдное4ИСЛО? 27. Что такое правило Хорна? 28. МодиФиu.ируте при мер 4.15 так, 4т06ы выnолнлось nре06раЗ0вание не в деСТИ4НУЮ, а в ВОСЬМИРИ4НУЮ форму. 29. Предположим, 4ТО npLl1Mep 4.15 должен npe06pa30BaTb 4ИСЛО в шестнадu.ати РИ4НУЮ срорму. Оnиwите изменени, которые должны 6ыть в нем ВЫПОЛllены с u.el1bIo достнжени 3Toro и срормировани как 4исел, так и 6укв в результируюw,е nоследова тельности АSСIIкодов. 30. Опишите, как nporpaMMHo npe06pa30BbIBaeTc деСТИ4ное 4ИСЛО в ДВОИЧllOе 
rnaBa 4. ITporpaMMHpOBaHHe на Slзыке Ассембnера 149 31. МО>КНО ли npe06pa30BaTb 4ИСЛО И3 ВОСЬМИРИ4НО В ,lJ,ВОИ4НУЮ форму? Еслн да, то как? 32. Сколько времени замет выполнение функu.ии по примеру 4.15, есnи таКТОl3ая частота микроконтроллера равна 8 Mru.? 33. Что такое командный u.икл и сколько импульсов системной тактовой частоты Tpe6yeTC ДJl одноrо командноrо u.икла? 34. Сколько времени замет выполнение нижеnриведенно Функu.ии, если сис- TeMHa TaКТOBa 4астота равна 40 Mru.? (У4тите BpeM выnолнени команд CALL и RETURN). Wait: MOVLW Wait1: DECFSZ ВМ RE'l'URN .10 WREG Wait1 35. Напишите функu.ию, реализуlOw,ую 1 ООмиллисекундную временную задер>кку с именем D 1 00, а так>ке Функu.ию, реализуюw,уlO 1 миллисекундную временную за держку с именем О1, если TaKTOBa 4астота микроконтроллера равна 20 мrц. 36. V1сnользуйте срункu.ию И3 примера 4.23 ДJl С4итывани клавиши кnавиатуры. HOBa срункu.и должна заносить ОхОО в 4eKY nамти Ох01 О вский раз, коrда на>кима eTC npaBa кnавиша Shift, н заносить OxFF в 4eKY naMTH данных Ох01 О вски раз, коrда npaBa кnавиша Shift. Все друrие кnавншн и комбинаu.ии кnавиш должны иrнори pOBaTbC . 37. Повторите n .36 ДJl 06еих кnавиш Shift. 38. HaДHTe та6лнu.у кодов Морзе в V1HTepHeT и выделите И3 нее символы nYHK- туаu.ии. А06авьте коды символов nункryаu.ии к та6лиu.е КО,lJ,ОВ Морзе, сохранемой в nамти в примере 224, BBeд третью секu.иlO та6лиu.ы с именем MorseP. 39. Каково назна4ение директив LOW, HIGH и UPPER в nporpaMMe, приведенной в при мере 4.25? 
150 ITpHMeHeHHe микроконтроnnеров PIC 18 rлава 5. Проrрамммрованме PIC18 на языке С Теперь, после Toro, как Вы ознакомнлнсь с Ассем6лером PIC, вам не06ходнмо узнать, как nporpaMMHpoBaTb YCTpOCTBa ceMeCTBa PIC18 с НСnОJlьзованнем зыка С. MHorH8 среды nроrраммнровання НСnОЛЬЗУIOТ язык С вместо Ассем6лера, потому 4ТО !з этом СЛУ4ае ЦНKJl разра60ТКН nporpaMM nОЛУ4ается HaMHoro КОр04е, а nporpaMMbI 60 лее леrкн в HanHcaHHH н 06слу>кнваннн. В дaHHO rлаве подразумевается нсnользова- нне комnнлтора языка С, KOTOpЫ мо>кет 6ыть 6есnлатно BbIrpY>KeH с caTa Microchip. В данной rлаве не nреследуется цель НЗУ4ення языка С, так как nредnолаrается, 4ТО чнта тели у>ке знакомы с ннм до HeKOTOpo степени. V1сnользуется комnнлятор С18, KOTOpЫ представляет c060 комnнлтор с языка С дnя мнкроконтроллеров ceMeCTBa PIC18. Бесплатная версня 3Toro комnнлятора  3ТО версня nолносрункцнональноrо комnилято ра с orpaHH4eHHbIMH возмо>кностямн, она достаТ04на дnя НЗУ4ення Toro, как ну>кно про rpaMMHpoBaTb PIC н создавать nрнло>кення. Разннца ме>кду 6есnлатно версие н nол носрункцнонально BepCHe комnнлятора заKJl104аетс в том, 4ТО В 6есnлатно версин оnтнмнзаu.н не выполняется, 4ТО озна4ает, 4ТО reHepHpyeMbIe коды MoryT 6ыть HeMHO ro 60лее ДnHHHЫMH, кроме Toro, в He так>ке за6локнрована 06ра60тка расшнреНIIЫХ команд, досrynных в ceMeCTBe PIC18. Большннство nporpaMM н anropHTMoB, представленных в 3TO rлаве, ИСnОЛЬЗУIOТ в ка4естве nлатсрормы зык С. В некоторых npHMepax nporpaMM, npHcyтcTBYIOT cppar  менты, HanHcaHHbIe на зыке Ассем6лера. Как отме4алось во введеннн в rлаву 4, caMЫ ЛУ4ШИ подход заКЛlO4ается в НЗУ4еннн как rлавы 4, так н rлавы 5. После Н3У4ення дaH HO rлавы Вы: 1. Смо>кете НСnОJlьзовать комnнлятор зыка С С18 в рамках HHTerpHpoBaHHo системы разра60ТКН nporpaMM PIC дNЯ nporpaMMHpoBaHH мнкроконтроллеров ceMe ства PIC18. 2. Узнаете о некоторых срункu.нях, нмеlOw,нхся в 6н6лнотеках, nрнлаrаемых к ком- nнлятору С18. З. НаУ4нтесь нсnользовать н reHepHpoBaTb СЛУ4аные 4нсла. 4. Смо>кете сохранять та6лнu.ы н друrylO ннсрормацнlO в nамятн nporpaMM. 5. Смо>кете nHcaTb nporpaMMbI на С, НСnОЛЬ3УЯ временные задер>ккн н 6н6лноте кн временных за,о,ер>кек. 6. Узнаете, как НСnОЛЬЗ0вать состояння на днаrрамме переходов прн реализацин nporpaMMbI. 7. НаУ4нтесь nHcaTb nporpaMMbI с нсnользованнем MaTeMaTH4eCKO 6н6лнотекн. 5. 1. Компилятор С18 с языка С nporpaMMa, которая nредназна4ена дnя разра60ТКН nporpaMM на языке С н кото- PYIO Microchip предоставляет в рамках HHTerpHpoBaHHo среды разра60ТКН ЮЕ, назы- BaeTC комnнлятором С18. Комnнлятор С18 мо>кет 6ыть 6есnлатно BbIrpY>KeH с caTa Microchip (http://www.microship.com). BpeM нсnользовання 3TO 6есnлатно верснн orpaHH4eHo 60 днямн. Вместе с тем ее срункцнональность достаТ04на дnя решення ЛIO 60 nporpaMMHo за,lJ,а4Н, XOT reHepHpyeMbIe elO коды н 6удут несколько 60лее ДnHH нымн, 4ем в СЛУ4ае npHMeHeHH nолносрункцнонаJlЬНО верснн. ОrраНН4енная версня комnнлтора не BKJl104aeT pacWHpeHHbIe коман,lJ,Ы; однако 3ТО не создает ннкакнх npo 6лем  ПРОСТО реЗУЛЬТНРУIOw,не nporpaMMbI nОЛУ4аlOТСЯ HeMHoro 60лее ДnHHHЫMH. npH разра60тке nporpaMM дn ceMeCTBa PIC18, следует nрндер>кнваться nред n04тнтельноrо НСnОЛЬЗ0ванн в nporpaMMax 6еззнаковых СНМВОЛЬНЫХ nepeMeHHbIx, поскольку мнкроnроцессор нмеет 86HTHYIO архнтектуру. Еслн нсnользовать 4нсла 
rnaBa 5. ITporpaMMHpoBaHHe PIC18 на языке С 151 60льшей разрядности, то это увеЛИ4ИТ время выполнения nporpaMMbI, поэтому ЧLl1СЛ3 601lьшей размерности следует ИСnОЛЬЗ0вать как мо>кно ре>ке. Чем 60ЛЬШИМ будет УХОД от природы аппаратных средств, тем 60ЛЬШНМИ 6удут nporpaMMbI и тем дольше OHLI1 6удут выnолнтьс. Так 16разрядное u.еЛ04ИСJlенное сло>кение тре6ует 60льше време- ни н 60льwеrо 06ъема памяти nporpaMM, 4ем 8-разрядное u.еЛ04исленное сло>кеНLI1е; З2разрдное сло>кенне с nлаваlOw,е T04KO тре6ует HaMHoro 60Jlьше времени и 06ъe ма памяти nporpaMM, 4ем 8-разрядное СJlо>кение. nepeMeHHbIe в nporpaMMe следует вы6ирать с OCTOpO>KHOCTblO; если 4ИСЛО 6еззнаковое, то у6едитесь в том, 4ТО оно 06ъ- явлено 6еззнаковым. PIC  это не nK, 06ъем ero памяти nporpaMM 4pe3BЫ4aHO мал, по сравнениlO с nерсональным KOMnblOTepoM. В силу оrраНИ4енности nамти следует пи- сать nporpaMMbI 04ень Tw,aTeJlbHO, уделя ос060е внимание вы60РУ nepeMeHHbIx. Смешанное nроrраммирование, совместно ИСnОЛЬЗУIOw,ее Ассем6лер и С, так>ке допускается и 4асто исnользуется. Ассем6лерные 6локи на4инаlOТСЯ с директивы asm и закаН4иваlOТСЯ директиво _endasm. Блоки кодов Ассем6лера не 6ерутся в сриryрные ск06ки { }, как это имеет место в nporpaMMHbIx 6локах на языке С. Комментарии, раз Mew,aeMbIe в ассем6лерных 6локах, дол>кны 6ыть комментариями Сстиля, а не исполь- зовать символ Т04КИ с заnто, как это 06Ы4НО делается в nporpaMMax на 3ЫKe Ac сем6лера. Аанные, определенные на языке С, ЯВЛЯlOтся доступными ДЛ nporpaMM, написанных с ИСnОЛЬЗ0ванием внутритекстовоrо ассем6лера. Ew,e OДHO ра3НLI1цей ме>кду языком Ассем6лера и и внутритекстовым ассем6лером 3ЫKa С ВJlется то, что в последнем НИ4еrо не nредnолаrаетс. Так, если nроизводится доступ к nамти дан- ных в 6анке Aocryna, не06ходимо явным 06раЗ0М ИСnОЛЬЗ0вать КЛlO4евое слово ACCESS и Т.Д. Перед тем, как Вы смо>кете 60льше узнать о КОМnИJlяторе С18, не06ходимо по НЯ1Ь ero ИСnОЛЬЗ0вание в IDЕ. IDЕ npeAHa3Ha4eHa, KaKM разра60ТКLI1 nporpaMM на зы I(е Ассем6лера, так и ,lJ,JlЯ разра60ТКИ nporpaMM на зыке С, поэтому, если Вы ИЗУЧLl1J1L11 rлаву 4, HOBЫ интерсрес вам И3У4ать не придется. Однако имеlOТСЯ несколько раЗЛLl1- чий МЮКДУ HaCTpOKO IDЕ M разра60ТКИ nporpaMM на 3ЫKe С и ее настройкой для разра60ТКН nporpaMM на языке Ассем6лера. Ал ИСnОЛЬЗ0вания компилятора С18 в IDЕ, установите комnилтор, следуя noA сказкам, выдаваемым на экран. Убедитесь в том, 4ТО при установке компилятора BЫ браны все не06ходимые nозиu.ии. Wаrи, Tpe6yeMыeM настроки IDЕ на ра60ТУ с KOM nнлятором С18, noA06HbI waraM, не06ходимым M ее настроки на ра60ТУ с Ассем6':.'" лером. 1. В pacKpbIBalOw,eMc MeHIO Configure (Консриryрирование) вы6ерите nозициlO Select Device (Вы6рать устройство), а затем вы6ерите ИСnОJlьзуемы МLI1КРОКОI-IТРОЛ лер. 2. В раскрываlOw,емся MeHIO Project (npoeKT) вы6ерите n03L11ЦLl11О Project Wizard (Мастер npoeKToB) и вновь вы6ерите микроконтроллер, исnользуемы в проекте. З. На шаrе 2 ра60ТЫ мастера npoeKToB вы6ерите Microchip С18 Toolsuite (KOM плект инструментальных средств Microchip С18), а затем w,еJlкните на кнопке Next (Дa лее). Если компилятор С18 6ыл установлен правильно, то все пути 6удут указаны KOp ректно и изменять их не надо. 4. Вве,lJ,ите имя npoeKTa н нмя KaTaJlOra, затем w,елкните на кнопке Next (Аалее). 5. На шаrе 4 вы моrли 6ы захотеть на4ать ра60тать с сралом Example 1 И3 каталоrа mcc18/example/GettingStarted. В этом СЛУ4ае вам следует д06авить к npoeKTY срайл Ех- ample1,c file. 6. под nозиu.ие Project (npoeKT) rлавноrо MeHlO, вы6ерите Build Options (Опu. ии компоновки), затем вы6ерите "h" в каталоrе mcc18 в ка4естве пути BКnlO4aeMbIx срай- лов. После этоrо w,елкните на кнопке Apply (nрименить), а затем на кнопке Ok. 
152 Применение МИКрОКОНТроnnеров PIC 18 7. Щелкните правой KHonKo мышки на nозиu.ии Linker files (Фалы КОМПОНОВЩLl1 ка) в списке срайлов npoeKTa на экране, затем вы6ерите add file (А06ави.тъ срайл), после чеrо д06авьте срайл 18fxxxx.lkr. (О6ратите внимание на то, 4ТО ХХХХ - это серийный HO мер микроконтроллера, исnользуемоrо в nроекте). 8. Под nозиu.ие Debugger (ОтлаД4ИК) вы6ерите инструментальное средство "MPLAB SIM." 3то приведет к ВКЛlO4ениlO в npoeKT инструментальных средств имита ЦLl1L11. Если в вашем расnор>кении имеется внутрисхемный эмулятор (ICE), то д06авьте корректный эмултор к разра6атываемому nроекту. Пере4исленные шаrи не 60лее трудны, 4ем настройка nроекта при использовании Ассемблера. При мер 5.1 демонстрирует ЛLl1стинr nporpaMMbI Example1.c. 3тот листиш. nporpaMMbI является HaMHoro 60лее коротким, 4ем листинr ша6ЛОIIIIОЙ проrраммы, предназна4енной ,lJ,JlЯ ИСnОЛЬЗ0вания с Ассем6лером, поскольку язык С является Ha MHoro 60лее MOW,HbIM и менее вер6альным, 4ем 3ЫK Ассем6лера. Пример 5.1 1* * Это npMMep 1 МЗ KaTanora "Getting Started with MPLAB С18" (Начаnо работ с MPLAB С18) *1 #include <p18cxxx.h> 1* дnя объявnенм TRISB М PORTB*I 1* YCTaHaBnMBaeT 6MT KOHMrypaUMM АnЯ МСnОnЬЗ0ванмя с Аемонстраuмонной nnaTO ICD2/PICDEM2 PLUS: *  YCTaHaBnMBaeT peMM reHepaTopa HS *  OTKn4aeT CTopoeBO TaMep *  OTKn4aeT нмзковоnьтное nporpaMMMpOBaHMe *1 #pragma config OSC HS #pragma config WDT OFF #pragma config LVP OFF int counter; void main (void) counter = 1; TRISB = о; 1* KOHMrypMpyeT PORTB на BBOA *1 while (counter <= 15) { PORTB = counter; 1* OT06paaeT зна4енме nepeMeHHo "counter" на свеТОАМОАах *1 counter++; } }<inst></inst></emphasis> 3та nporpaMMa написана ,lJ,JlЯ ИСnОЛЬЗ0вания с отлаД04НО платой PICDEM2 plus. Она имеет CTaHдapTHЫ, ,lJ,JlЯ языка С срормат, ИСnОЛЬ3У срункu.ИIO main, содер>кащую nporpaMMY. 3та nporpaMMa нсnользует одну nepeMeHHYlO, Ha3bIBaeMYIO counter. Она консриrурирует Port В как BXOДHO порт, а затем от06ра>кает 4исла от О до 15 при nOMO щи светодиодов, подсоеДиненных к nopry В. Если имеется в наЛИ4ИИ демонстраЦLl101l- Ha плата PICDEM2 Plus, то дaHHa nporpaMMa мо>кет выnолнться на He. ЕСЛLl1 >ке эта 
rnaBa 5. ITроrpаммнроваине PIC 18 на языке С 153 плата отсутствует, то nporpaMMa мо>кет ВЫnОJlНЯТЬС на имнтаторе. V1митатор OT06pa ж:ает 4исла по мере ИХ изменени в порте В. Дл имитаu.ни выполнения это nporpaMMbI перейдите к MeHIO View (Вид)и от06разите содер>кимое сnеu.иаJlЬНЫХ срункu.ионаЛЫ-IЫХ реrистров, указав порт В. ВЫnОJlнйте nporpaMMY nошаrово и на6ЛlOдате за измене ними состояни порта В по мере nowarOBoro выnолнени nporpaMMbI. В данном rlрИ- мере ИСnОJlьзуетс PIC18F1220, поэтому ,lJ,JlЯ Toro, 4т06ы этот микроконтроллер cpYHK ЦИОНИРОВaJl корректно, к nporpaMMe из при мера 5.1 6ыла д06авлена одна команда, ВЫnОЛНЯIOw,ая вы60Р u.исрровой ре>ким ра60ТЫ всех выводов BBoдaBЫBoдa. А именно 6ыл д06авлен оператор ADCON 1 = Ox7F перед оператором counter = 1. Скомпонуйте и выполните nporpaMMY, а затем посмотрите на окно имитатора  вы ДОJl>КНЫ увидеть экран, nоказанны на рис. 5.1. Для nОЛУ4ения вида экрана, cooTBeTcTBYIOw,ero nоказанному, ИСnОJlьзуте инст румент увеJlИ4ени (квадрат) ,lJ,JlЯ увеЛН4ения окна и nОJlУ4ени TaKoro ero внешнеrо Вида, KOTOpЫ nоказан на упомянутом рнсунке. Что не так на этом экране. В 06щемто все в порядке, за ИСКЛlO4ением Toro, 4ТО возникает оw,уw,ение Toro, 4ТО имеется оши6 ка, так как зна4ение С4еТ4ика, равное 15, oT06pa>KaeTC в те4ении 60лее одноrо nерио да TaKTOBO 4астоты. Однако, если посмотреть nporpaMMY, то можно видеть, 4ТО она от06ра>кает зна4ени С4еТ4ика от 0000 до 1111, а затем nерезаnускается, 4ТО отнимает ,lJ,оnолнитеJlьное время. Для корректирования nporpaMMHoro примера, nриводимоrо Microchip, модисриu.ируем пример 5.1 таким 06раЗ0М, 4т06ы он выrJlядел так, как nри- мер 5.2. контролируя выход на лоrИ4еском анализаторе. Выхо,lJ, теперь 6удет изменять c от 0000 ДО 1111 и nовторятьс 6ез «провалов» В зна4еннях С4еТ4ика. , ; I , I I I I I I I , I I I I I I I 1 I I J I I I I 111 З1 800.0 11131900.0 11132000.0 11132100.0 11132200.0 Рис. 5. 1. Внешни вид окна Пример 5.2 1* * Это МОАммuированн rrример 5.1, * наrrисанн AnR PIC18F1220 *1 
154 Применение микроконтроnnеров PIC 18 #include <p18cxxx.h> 1* Аnя объявnенм TRISB м PORTB *1 1* YCTaHaBnMBaeT бмты KOHMrypaUMM AnR МСnОnЬЗ0ванмя с * AeMOHCTpaЦMOHHO nnaTO IСО2/РIСОЕМ2 PLUS: *  YCTaHaBnMBaeT peMM reHepaTOpa HS *  OTKn4aeT CTopoeBO TaMep *  OTKn4aeT HM3KOBOnbTHOe npOrpaMMMpOBaHMe *1 #pragma config OSC HS #pragma config WDT OFF #pragma config LVP OFF int counter; void main (void) ADCON1  Ox7F; TRI SB = о; while (1) { 11 объявnяет nopT ЦMpOBMM 1* KOHMrypMPyeT PORTB на BXOA *1 counter = о; while (counter <= 15) { PORTB  counter; counter++; 11 С4еТ4МК передается на светодмоды Оператор #include BKJl104aeT срайл заrоловка, который определяет все реrис 1 ры BBoдaBЫBoдa устройств семейства PIC18, вы6ранные дл npoeKTa. 3то позволяет мик роконтроллеру выnолнть операции ввода-вывода. Файл заrоловка дол>кен включаться во все npoeKTbI. Операторы #pragma config nроrраммируют 6L/1TbI КОНСРL/1rураЦL/1И МL/1кроконтролле ра. BepOTHO, что TepML/1H pragтa произошел от слова pragmatic (llраrмаТL/1ЧНЫЙ), что озна4ает nраКТИ4еСКL/1Й cnoc06 делать 4то-ли60. Команды pragma осв060>кдают про rраммиста от не06ХОДL/1МОСТИ наnL/1сани длинных последовательностей команд или шаrов при выполнении некоторых зада4. Таким 06разом они отра>кшот nраКТL/14НЫЙ L/1JJL/1 nраrмаТИ4НЫЙ cnoc06 выnолнени зада4И. Аиректива #pragma используетс для Toro, чтобы дать команду компилятору. БL/1ТЫ консриrураЦИL/1 уnравлют nеРВL/1ЧIIOЙ настрой кой микроконтроллера PIC18. 3ти 6L/1TbI разъснIOТС в деталях в rl1aue 6 npL/1 paCCMOT реНL/1И аппаратных средств микроконтроллера. Кюкдая верСL/1Я МL/1КРОКОНТРОЛl1ера PIC18 имеет друrL/1е 6иты КОНсрL/1ryраЦИL/1, которые nере4L/1слены в документе "MPLAB С18 Соп fig Settings" (Настройка консриrураu.L/1И MPLAB С18), который доступен ЩIЯ uыrРУЗКL/1 lIa сайте Microchip. Пример проrраммы nредnоло>ким, что нам ну>кна nporpaMMa, KOTopa СЧL/1тьшает СОСТОЯНL/1е переклlO чатеn 4ерез порт А и инкремеНТL/1рует ЧL/1СЛО, от06ра>каемое 4ерез порт В ОДL/1Н раз u секунду только тоrда, коrда кнопка на>кат. Эта проrрамма noxo>Ka на nporpaMMY L/1З ПрL/1 мера 5.1, однако для отра60ТКИ задер>ККL/1 L/1сnользуется СРУНКЦL/1Я временной задер>кки из стандартной би6лиотеКL/1 С. БL/16ЛL/10тека С обеспе4L/1вает временные задер>кки, YKa занные в та6лице 5.1. ЭТL/1 срУНКЦL/1И являютс Ba>KHUIML/1, так как nОЧТL/1 любая IlpOrpaMMa, 
rлава 5. Проrpаммированне PIC 18 на языке С 155 исnользуема для уnравnени nерисрерийными устроствами, HY)f(ДaeTc в отра60тке временных задер>кек. 3TLI1 срункu.ии делаlOТ Т04ное rенерирование временных задер>кек HaMHoro 60лее npocTo зада4е, 4ем в СЛУ4ае ИСnОЛЬЗ0вания cnoc060B, 06Су>Кдавших ся в rлаве 4. Ka)f(Дa И3 ynoMHYТbIX срункu.и срормирует BpeMeHHYIO заде р>кку , Bыpa женнуlO в КОЛИ4естве командных u.HKJlOB, на4иная от 1 командноrо u.ИKJlа и вплоть n04ТИ до ЛlO60rо командных u.иКJlОВ. Для ИСnОЛЬЗ0вани этих срункu.и В на4але nporpaMMbI исnользуетс оператор #include <delays.h> ДЛ ВKJl104ени срункu.и временных задер жек. Описание CTaHдapTHO 6и6лиотеки досrynно на caTe Microchip в документе "MPLAB С18 Libraries" (Би6лиотеки MPLAB С18). Как и в СЛУ4ае временных задер>кек, которые рассматривались в rлаве 4, срункu.ии delays.h 6удут Т04НО отра6атываться только тоrда, коrда система не 6удет npepbIBaTb их выполнение. Пример 5.3 демонстрирует nporpaMMY, которая инкрементирует индикаu.иlO CBe тодиодов, nОДКЛlOченных к порту В, коrда кнопка удер>киваетс в на>катом состонии по крайней мере одну секунду. Если она 6удет удер>киваться в на>катом состоянии немно- rим дольше 2x секунд, индикаu.и на светодиодах инкрементируется ДBa)f(ДЫ и Т.д. Опять-таки эта nporpaMMa nредnолаrает ИСnОЛЬЗ0вание PIC18F1220. 3тот микрокон троллер вы6ран по nРИ4ине ero низко стоимости (менее $3) и малых размеров мик росхемы. В данном примере АА4 nОДKJl104ен к кнопке. СиrнаJl с кнопки находитс в co стонии лоrИ4еско единиu.ы, коrда кнопка не на>ката, и в состонии лоrИ4ескоrо нуля, коrда кнопка на>ката. Пример 5.3 1* * Это npMMep 5.3 АЛЯ TaKTOBO 4aCTOT 4 Mru, * HanMcaHH AnR PIC18F1220 *1 #include <p18cxxx.h> IIBKn4eHMe cneUMMKaUM портов #include <delays.h> IIBKn4eHMe BpeMeHHX заАерек 1* Установка 6мтов KOHMrypaUMM *  установка peMMa reHepaTopa HS *  BKn4eHMe cTopoeBoro TaMepa *  BKn4eHMe HM3KOBOnbTHoro nроrрамммроваНМR *1 . J' #pragma config OSC HS #pragma config WDT OFF #pragma config LVP OFF II ****************** ПЕРЕМЕННЫЕ В ПАМЯТМ HHЫX******************** int counter; 1I ********************* КОНСТАНТЫ ***************************** #define MSEC Delay1KTCYx(1) II MSEC = 1 MMnnMceKYHAa 1I ***************** rЛАВНАЯ проrРАММА ****************************** void main (void) ADCON1 = Ox7F; II KOHMrYPMpoBaHMe портов А м В как UMpOBX II Этм установкм MorYT M3MeHRTbcR в завмсммостм II от версмм MMKpOKoHTponnepa TRISB TRISA PORTB О; OxFF; о; II KOHMrypMpOBaHMe PORTB на BBOA AaHHX II KOHMrypMpoBaHMe PORTA на ВВОА AaHHX 11 свеТОАИОА BKn. 
156 ITрнменение МИКрОКОНТроnnеров PIC 18 while (1) { counter = о; II 6eCKOHe4H UMKn nporpaMMbl II мнмuмаnмзаuмя С4етчмка while ( (PORTA & 16) о) II пока кнопка HaaTa { MSEC; 11 OMAaHMe 1 МС counter++ ; if (counter 1000) II 1 секунда { PORTB++; counter = о; Таблица 5.1. Функu.ии отра60ТКИ временных задер>кек из delays.h Функция DelaylTCY Delayl0TCYx Пример Delay1TCY() ; Delay10TCYx(10); Delayl00TCYx Delay100TCYx(10); ЬеlауlКТСУх Delay1KTCYx(3); Delayl0KTCYx Delay10KTCYx(20); Примечание BCTaBnReT в nporpaMMY одну команду NOP BCTaBnReT 100 KOMaHAHX UMKnOB (ЧМСJlа AOnH бть в AMana30He MeAY О м 255) (о B3BaeT задерку в 2560) BCTaBnReT 1000 KOMaHAHX UMKnOB (4Mcna AOnH быть в AMana30He MeAY О м 2S) (о B3BaeT заАерку в 25600) BCTaBnReT 3000 KOMaHAHX UMKnOB (чмсnа AOnHbl бть в AMana30He MeAY О м 255) (о B3BaeT заАерку в 256000) BCTaBnReT 20000 KOMaHAHX UMKnOB (4MC па AOnH бть в AMana30He MeAY О м 255) (о B3BaeT заАерку в 2560000) в 3TO nporpaMMe одна nеременная исnользуется для nОДС4ета nриращений в 1 миллисекунду. При мер 5.3 nредnолаrает, 4ТО тактовая частота микроконтроллера paB на 4 Miu. (1/4 Miu. = 250 нс), 4ТО озна4ает, 4ТО командный u.икл paueH 1 мкс, ПОСКOJIЬКУ 4 тактовых импульса тре6уется ДЛ одноrо KOMallДHOrO u.LI1кла. Функu.ия Delay1 КТСУх( 1 ) вызывает задер>кку в 1000 командных u.икла, ли6о в 1 мс. 3та временная задер>кка on ределяется как MSEC с тем, 4т06ы nOBbICLl1Tb 4L11та6ельность nporpaMMbI. Операторы define ДОЛ>КНЫ использоваться nоказанным cnoc060M с тем, 4т06ы сделать проrрамму 60лее ясной и менее зашисррованной. Состоние кнопки nроверяется оператором while. С зтой кнопкой соедннена 6L11товая nозиu.и 4 порта А, поэтому 16 (Ох1 О) лоrLl14е ски YMHO>KaeTC (AND) с портом А для оnределени СОСТОЯНLI1 кнопки. Если кнопка не на>ката, то 6итовая nозиu.ия 4 находится в состоянии лоrической еДLl1НИu.ы, 4ТО после лоrическоrо умно>кени с 16 дает 16. Если >ке кнопка на>ката, то результатом лоrИ4еско ro умно>кеНLI1Я порта А с 16 6удет ноль. До тех пор, пока кнопка 6удет на>ката, условие оператора while 6удет истинным, lПО приведет к выполнению команд теJlа оператора while. В данном случае по исте4ении одной секунды содер>кимое порта В инкремеНIИ- pyeTC и выnолнется с6рос C4eT4L11Ka в ноль. 3то nерезаnускает односекундный обраl ный ОТС4ет. Ос06ый интерес в зтой nporpaMMe представляет cnoc06 проверки СОСТОНLI1Я 6и та порта А, соединенноrо с кнопкой. Как nоказано в рассматриваемом rlримере, onepa u.ия AND используется для изолu.ни 6L11Ta порта А. Число, LI1сnользуемое в оnераЦИLl1 
rnaBa 5. ITporpaMMHpoBaHHe PIC 18 на языке С 157 AND, выделяет 6ит: так, 1 вы6ирает 6ит номер О, 2 вы6ирает 6ит номер один, 4 вы6ира ет 6ит номер два, 8 uы6ирает 6L/1T номер три L/1 так далее (см. рис. 5.2). Несколько MeHb ШL/1Й интерес представляет С4еТ4ИК, используемый для срормировани односекундной временной задер>кки шаrами, равными одной миллисекунде. n04eMY зта nporpaMMa содер>кит 6eCKOHe4HЫ u.ИKJl в срорме оператора while( 1)? Среда, nредоставлема комnилтором 3ЫKa С, повторно выполняет mаiп(). nр06лема здесь заКnlOчаетс в том, 4ТО оператор mаiп(), KOTOpЫ иниu.иализирует nporpaMMY, дол>кен выполнятьс только один раз. После ИНИЦL/1ализаu.ии проrраммы оператор while( 1) 6удет в ре>киме повторения выполнять команды u.икла, ToeCTb 6удет ссрорми рован 6есконе4НЫЙ u.икn while. В случае встроенных систем или иных систем nод0611Оrо типа rлавна nporpaMMa или сама оnераu.ионная система pa60TalOT в ре>киме 6еско- He411Oro ЦИKJlа. Рис. 5.3 ИЛJllOстрирует структуру всех оnераu.ионных систем, - как BCl poeHlIbIx, так и иных. При этом термин ХОЛОДНЫЙ старт 0зна4ает аппаратный с6рос. Проrрамма L/13 примера 5.2 непосредственно следует nоказанной модели. В комnил торе PIC С18 холодный старт предварительно выполняется срункцией main(). 7 6 Позиции битов 5 4 3 2 о Значения 2 4 8 16 , ,:  32 64 128 Рис. 5.2. Выделение разрдов 4исла 
158 ITримененне микроконтроnлеров PIC 18 "холодный старт" системы . j 1 инициализация СИСТl\lЫ, всех переМСlIIIЫХ и устройств ВIЮ)(аВЫВО)Щ  r только операционная система Рис. 5.3. Структура оnераu.ионной системы ApyrHM cnoc060M КОНТРОJlЯ состояни 6ита явлетс использование дирек-тиuы PORTAbits 3ЫKa С. Так, оператор PORTApits.RA4 используетс для nроuерки СОСТОЯНLI1Я 6итшюй nозиu.ии 4 порта А. Фал комnоновw,ика ДЛ данноrо МLI1КрОКОНТрОЛJlера опре делет все выводы порта А, а команда PORTAbits.RA4 проверет состоние 6L11ТОВОЙ nозиu.ии АА4 порта А. Пример 5.4 nерера60танный пример 5.3, при зтом В новой верСLl1И зтой nporpaMMbI исnользуетс команда nрОlЗерКLI1 СОСТОЯНLI1Я 6L11Ta. 3тот метод nршзеРКLI1 состояни 6ита не явлетс не06ходимым, однако он вляется удобным способом Tec тирования 6ита. Код на Ассем6лере, сrенеРLl1рованный ДЛ 060Ll1X методов npOBepKLI1 состония 6L11Ta вляетс идеНТИ4НЫМ, и нет HLI1KaKLI1X nреLl1муществ IЗ LI1сnользоuаНLI1И одноrо метода, в сравнении с друrим. ЕСЛLl1 состояние 6ита perLl1CTpa TRIS ДОЛ>КНО быть LI1зменено, то мо>кет 6ыть использована вида TRISBbits.TRISB3 = 1, KOTopa в данном npLl1Mepe используется дл YCTaHoBKLI1 6ита 3 реrистра TRISB в состояние 1. Иноrда зто не06ХОДLl1МО, коrда Tpe6yeTC LI1зменить состояние только ОДНОIО БLl1та IЗ рcrистрс TRIS. Пример 5.4 \ 1* * Это пример 5.4 AnR TaKTOBO 4aCTOT 4 Mru,  * наnмсаин AnR PIC18F1220 *1 #include <p18cxxx.h> IIBKn4eHMe cneUMMKauM портов 'include <delays.h> IIBKn4eHMe BpeMeHHX заАерек 1* Установка 6мтов KOHMrypaUMM *  установка peMMa reHepaTopa HS *  ВКЛЮ4енме cTopoeBoro TaMepa * - BblKn4eHMe HM3KOBOnbTHoro nроrрамммрованмя *1 ;-, 
rnaBa 5. ITporpaMMHpoBaHHe PIC18 на языке С 159 tragma config OSC HS tagma config WDT OFF tagma config LVP OFF :::. coun te r ; fefine mSec Delay1KTCYx(1) II mSec 1 MMnnMceKYHAa -,-::d main (void) ADCON1 == Ox7F; II KOHMrypMpoBaHMe портов А м В как UMpOBX II Этм установкм MorYT M3MeHRTbcR в завмсммостм II от версмм MMKpOKoHTponnepa TRISB TRISA PORTB о; OxFF; о; II KOHMrYPMpoBaHMe PORTB на BBOA Аанных II KOHMrypMpOBaHMe PORTA на ВВОА AaHHX II CBeTOAMOA BKn. .::,lle (1) { 11 бесконе4Н UMKn nроrрамм counter = о; II мнмuмаnмзаUМR С4еТ4мка while (PORTAbits .М4 о) II пока кнопка HaaTa mSec; II OMAaHMe 1 мс counter++; if (counter 1000) II 1 сеКУНАа { PORTB++; counter = о; 5.2. Использование включаемых файлов языка С в данном nодразделе nриведены дальнешие примеры проl-рамм на языке С, KO" торые ИСnОJlЬ3УlOТ некоторые друrие BКnlO4aeMbIe сралы, входяw,ие в состав 6и6лиоте ки С18. В nодразделе 5.1 6ыл представлен ВКЛlO4аемы cpaJl delays.h, KOTOpЫ содер- жит срункu.ии отра60ТКИ временных задер>кек, поскольку временные задер>кки исnоль ЗУlOтс в 60льшинстве nporpaMM, написанных ,lJ,Jlя микроконтроллеров. В данном nод- разделе мы рассмотрим некоторые друrие nOJle3HbIe ВКЛlO4аемые срайлы, исnользуе мые,lJ,JlЯ nроrраммировани микроконтроллеров. Преобразования Как у>ке отме4алось в rлаве 4 при рассмотрении ИСnОЛЬЗ0вани языка Ассем6ле ра, данные редко 6bIBalOT изна4ально в HY>KHO срорме. BКnlO4aeMbIe сралы nре06разо BaHH (в stdlib.h) ИСnОJlЬЗУIOТС ,lJ,JlЯ выполнения nре06раЗ0вани И3 OДHO 4исленной формы в друrуlO. В та6л. 5.2 nере4ИСJlены мноrие И3 06Ы4НО используемых срункций nре06раЗ0вани, имеlOw,ихся в 6и6лиотеке, nоставлемо совместно с компилятором 
160 ITpHMeHeHHe МНКрОКОНТроnлеров PIC 18 С18 и 06ъявляемой в срале заrоловка стандартной 6и6лиотеки stdlib.h. Для исrlОl1Ь30- ваНLI1Я СРУНКЦLl1Й stdlib в nporpaMMe дол>кен nрисутствовать оператор #include <stcjlib.h>. Таблица 5.2. Часто исnользуемые срункции nре06разований stdlib.h. Функuмя atob atof atoi atol btoa itoa itol rand srand tolower toupper ultoa Орммер atob( buffer atof( buffer atoi( buffer atol( buffer ) btoa( num, buffer ) itoa( num, buffer ) itol( num, buffer ) rand() srand( seed ) tolower( letter toupper( letter ) ultoa(num, buffer ) Dриме4анме Пре06разует 4MCnO М3 CTpOKOBO OpM В буере. B03BpaaeT 6aTOBoe 4MCno СО знаком (от +127 до 128) Пре06разует 4MCno М3 CTpOKOBO OpM В 6yepe. B03BpaaeT 4MCno С nnaBae T04KO Пре06разует 4MCno М3 CTpOKOBO OpM В 6yepe. B03BpaaeT 16раЗРЯАное uenoe чмсnо СО знаком (от + 32,767 АО 32, 768) Пре06разует 4MCnO М3 CTpOKOBO OpM В 6уфере. B03BpaaeT 32разрядное uenoe 4MCnO СО знаком (от + 2 147 483 647 АО -2417 483 648) Пре06разует бат со знаком в строку СММВОЛОR, coxpaHReMY в буере Пре06разует 16раЗРЯАное uелое 4MCno СО знаком в строку CMMBonoB, сохраНRемую в 6yepe Dреобразует 32-раЗРRАное uenoe 4MCno СО знаком в строку CMMBonoB, coxpaHReMY в буере Returns а 16-bit random number ( О to 32, 767) YCTaHaBnMBaeT значенме Ha4anbHOro 4Mcna на 16 раЗРЯАное uenoe ПереКn4ает букв в opMe 6aTOBX CMMBonoB С BepXHero perMCTpa на нинм, B03BpaaeT букв HMHero perMCTpa. Dерекnчает 6уквы в OpMC бай'l'ОВЫХ CMMBOJJOl, С HMHero perMCTpa на BepXHM, B03BpaaeT 6уквы BepXHero perMcTpa. То e, 4ТО м itol, , за MCKn4eHMeM '1'01'0, 4'1'0 num ЯВnRеТСR 4McnoM 6ез знака Предnоло>ким, 4ТО нам ну>кно от06ра>кать СЛУ4аные 4исла на светодиодах порта В 4ерез каждуlO половину секунды. Проrрамма, которая BbInOl1HeT 3ТО, используs-I СРУIIКu.иlO rand(}, nоказана в примере 5.5. В данном СЛУ4ае' при rенерации случайных 4исел исnользуетс на4альное 4ИСЛО, равное 1. Пример 5.5 \ 1* * Это npMMep 5.5 AnR TaKTOBO 4астоты в 4 MrU *1 #include <p18cxxx.h> #include <delays.h> #include <stdlib.h> 1* Установка 6мтов KOHMrypaUMM *  установка peMMa reHepaTopa HS *  BblKn4eHMe cTopoeBoro TaMepa *  BKn4eHMe HM3KOBOnbTHoro nporpaMMMpOBaHMR *1 
rnaBa 5. Проrpаммнрованне PIC18 на Slзыке С 161 tpragma config OSC HS tpragma config WDT OFF fpragma config LVP OFF loid main (void) ADCON1 = Ox7F; // конфиrурирование портов А и В как uифровх // Эти установки MorYT измеНRТЬСR в зависимости // от версии микроконтроnnера TRISB = о; PORTB = о; srand(l); while (1) { // конфиrурирует PORTB на BBOA AaHHX /1 свеТОАИОА BKn. // Ha4anbHoe 4ИСnО reHepaTopa cnY4aHX 4исеn // nOBTopRTb 6есконе4НО Delay10KTCYx(50); PORTB = rand(); // ОАание 1/2 ceKYHA // от06раение cnY4aHoro 4исnа npHMep 5.6 показывает ,lJ,pyro мето,lJ, OT06pa>KeHH СЛУ4аных 4нсел, О,lJ,нако прн этом СЛУ4аные 4нсла rенернруlOТСЯ BCer,lJ,a, KOr.o,a на>ката кнопка. nоказанная про rpaMMa сраКТН4ескн ннкрементнрует С4етчнк на макснмально скоростн н reHepHpyeT СЛУ4аные 4нсла в ,lJ,напаЗ0не ме>кду О н 9. О,lJ,НО Н3 прнмененн ЭТО проrраммы мо>кет заКnlO4аться в вы60ре 4нсел AflЯ лотерен. В ,lJ,анном прнмере пре,lJ,полаrается, 4ТО к 6нту 4 порта А ПО,lJ,соедннен КНОП04НЫ переКnlO4атель. 3та проrрамме не нспользует KaKHe лн60 BКnlO4aeMble сралы, за НСKJlЮ4еннем BKJl104aeMOro срала мнкроконтроллера p18cxxxx.h. д,лнна проrраммы, reHepHpyeMo по НСХО,lJ,ному тексту, прнве,lJ,енному в этом прнмере, является HaMHoro, прн6лнзнтельно наполовнну, КОр04е, 4ем в пре,lJ,Ы,lJ,У щем прнмере. Чем MeHbwe BKJl104aeMbIX сралов н CPYHKu.H нспользуется в проrрамме, тем ЛУ4wе. Еслн нмеется каколн60 спос06 нз6е>кать НСПОЛЬЗ0вання 6н6лноте4ноrо фала, то сле,lJ,ует нм ВОСПОЛЬЗ0ваться. Прииер 5.6 /* * Это пример 5.6 *1 . '10.", linc1ude <p18cxxx.h> 1* Установка 6итов конфиrураuии - установка реима reHepaTopa HS *  ВКn4ение cTopoeBoro TaMepa * - ВКn4ение низковоnьтноrо nроrраммироваНИR 1<1 tpragma config OSC HS tpragma config WDT OFF tpragma config LVP OFF int seed; void main (void) ADCON1 = Ox7F; // конфиrурирование портов А и В как uифровх // Эти установки MorYT измеНRТЬСR в зависимости // от версии микроконтроnnера 
162 Прнмененне MHKpOKOHTpOnnepOB PIC 18 TRISB = О; TRISA = OxFF; PORTB = о; while (1) // конфиrурирование PORTB на BBOA AaHHX // кониrурирование PORTA на ВВОА AaHHX // свеТОАИОА BKn. // 6ecKoHe4H uикn nроrрамм whi1e ( PORTAbits.RA4 ( о ) // пока кнопка HaaTa seed++; if (seed == 10) seed = 1; // есnи Ha4anbHoe 4ИСnО равно 10 PORTB =: seed; Память и строковые функции Приводимая далее nporpaMMa нсnользует 4нсла в срорме строки символов для иллюстраЦИLl1 ИСnОЛЬЗ0вання ,lJ,pyro срункu.ИLl1 Н3 стандартной бибЛLl10теКLI1. Эта npo rpaMMa не LI1сnользует какой-ли60 BBO,lJ,BЫBOД  зто просто npHMep, нллюстрируюw,ий строковые CPYHKu.HH. Строка снмволов с нменем string1 содер>кнт сообщеНLI1е "The timG is 22 hours" (СеЙ4ас 22 4аса). nporpaMMa нзвлекает 4НСЛО 22 после ero нахождеl-IНЯ в строке и сохраняет ero в Я4ейке nаМЯТLI1 hour. В npLl1Mepe 5.7 строка символов npocMaT ривается на предмет нахождени nepBoro вхождення u.HcppbI 4нсла. После 3Toro 4ИСЛО, заКnlO4енное в символьной строке, нзвлекается Н3 нее с НСnОЛЬЗ0ваннем срункции atob, которая nреобразует 4НСЛО, заданное в срорме CTpOKLI1 снмволов, в данные, размером в 6айт НЛLl1 снмвол. Пример 5.7 1* * Это npMMep 5.7 *1 #inc1ude <p18cxxx.h> #inc1ude <string.h> #include <stdlib.h> ') /* Установка 6мтов конфиrураuии *  установка реима reHepaTopa HS * - BKn4eHMe cTopoeBoro TaMepa *  BKn4eHMe низковоnьтноrо nроrраммироваНИR */ #pragma config OSC HS #pragma config WDT OFF #pragma config LVP OFF char buffer[J = "The time is 22 hours."; char hour; int а; 
rnaBa 5. Проrpаммнрованне PIC18 на Slзыке С 163 -.raid main (void) for (а = О; а < strlen(buffer); а++) lf (b1.:ffer[a] >= 'О' && buffer[a] <= '9') break; hour = atob (buffer + а); 3тот npL/1Mep нсnользует CPYHKu.HIO strlen ДJlЯ определення ДJ1ННЫ CTpOKL/1, а так>ке ЦИKJl for с onepaTopaMH if н break ДJlЯ орrаннзаu.нн сканнровання СL/1МВОЛЬНОЙ CTpOKL/1 с цеnыо ПОL/1ска снмвола u.HcppbI. KorAa отра6атывается оператор break (ЗавершеНL/1е), переменна а СО,lJ,ер>кнт OTHocHTenbHYIO познu.НIO 4нсленноrо снмвола в MaCCL/1Be. ФУНК ЦИ atob затем пре06разует 4НСЛО Н3 строковой срормы в срорму u.enoro 4L/1CJla L/1 coxpa няет ero в переменной hour. Строковые CPYHKu.HH совместно с прнмераМL/1 L/1X L/1CnOnb30 вaHL/1 пере4ислены в та6л. 5.3. Строковые CPYHKu.HH располо>кены в срайле string.h, KO торый дол>кен 6ыть BKJl104eH в проrрамму, еслн в ней НСПОЛЬ3УIOтся строковые CPYHKu.L/1L/1. Имеется MHoro строковых срункu.нй, которые 06еспе4L/1ваlOТ решеНL/1е для мноrих при ложеНL/1Й, предназна4енных ДЛ ра60ТЫ со строкамн. Некоторые L/13 HL/1X ВКЛЮ4ены в стандарт языка С (ANSI), а некоторые ЯВЛЯlOтся уннкаЛЬНЫМL/1 ДJlЯ МL/1кроконтроллеров PIC. Не06хо,lJ,НМОСТЬ наЛН4НЯ спецнanьных срункцнй ДJlЯ мнкроконтроллеров PIC BЫTe кает Н3 наЛL/14НЯ в ннх памятн проrрамм, 4ТО 06Ы4НО не характерно для 60ЛЬШL/1нства KOMnblOTepHbIx снстем. Для НЛЛlOстрацнн строковых коман,lJ" nредполо>кнм, что КОЛL/14ество СL/1МВОЛЬНЫХ строк сохраняется в памятн проrрамм. Память проrрамм является постоянно, позтому она L/1спользуется ДJl хранення стаТН4НЫХ проrраммных данных. Дл сохранеНL/1Я дaH ных в памятн проrрамм, в проrрамме НСПОЛЬ3УIOтся ,lJ,нректнвы rom н near L/1ЛL/1 far. AL/1- реКТL/1ва rom ннсрормнрует компнлятор о том, 4ТО он ,lJ,ол>кен размещать данные в пам- ти проrрамм, а днректнвы near илн far определяlOТ ДJlHHY а,о,реса. А,о,рес МО,lJ,еЛL/1 паМТL/1 near вляется 16разрядным а,lJ,ресом, в то время, как адрес моделн памятн far  зто 21  разрядный адрес. Еслн мнкроконтроллер нмеет менее, 4ем 64К паМЯТL/1 проrрамм, L/1C- пользуйте модель памятн near; еслн >ке он нмеет 60лее, 4ем 64К паМЯТL/1 проrрамм, HC пользуйте МО,lJ,ель памятн far. npHMep 5.8 ,lJ,емонстрнрует, как сле,lJ,ует сохранять несколько снмвольных строк в масснве, располо>кенном в памятн проrрамм. Данная проrрамма так>ке резеРВL/1рует 20 с байтов в памятн данных с тем, 4т06ы строка снмволов Н3 памятн проrрамм моrла KOnL/1 роваться в память данных AflЯ маннпуляu.нй elO в nporpaMMe. В ,lJ,анном СЛУ4ае L/1СnОЛЬ зуется срункu.ня strcPypgm2ram (КОПL/1роваНL/1е строкн Н3 памтн проrрамм в ОЗУ) дЛЯ копнровання BTOpO строкн (элемент 1) в 6усрерное пространство ОЗУ. ЕСЛL/1 просмот- реть COAep>KL/1MOe памятн проrрамм н памятн ,lJ,анных в IDЕ после выnолнеНL/1 этой ко- роткой проrраммы, то 6усрерная 06ласть 6удет СО,lJ,ер>кать вторую СНМВОЛЬНУIO строку. Таблица 5.3. Строковые CPYHKu.HH, ПРНСУТСТВУIOw,L/1е в string.h Ф ун кция memchr Пример memchr (area51, 'а' ,23) mеmсmр mcmcmppgm mеmсmр (areal, area2, 4) memcmppgm (area3, area4, 2) П р имечание Просматривает первые 23 байта area51 на вхожде- ние 'а' Просматривает первые 5 байтов area 1 на вхождение 65 (если обнаружен, возвращается указатель на этот символ, если нет, то возвращается ноль) Сравнивает area 1 с area2 для 4 байтов Сравнивает area3 в памяти проrpамм с area4 в памя- ти проrpамм для 2 байтов memchrpgm memchrpgm (areal, 65, 5) 
164 Прнмененне MHKpOKOHTpOnnepOB РУС 18 ФУНКЦИЯ memcmppgm2ram memcmpram2pgm П р име р memcmppgm2ram (а1, а2, 5) mel11cl11pram2pgm (а3, а4, 6 ) тетсру mеmсру (а1, а2, 4)" memcpypgm memcpypgm (а3, а4, 5) memcpypgm2ram memcpypgm2ram (а5, а6, 7) memcpyram2 pgm memcpyram2pgm (а7, а8, 2) шеmшоvе l11еl11l110уе (а 1, а2 , 3) mешmоvерgш mешшоvерgm (а3, а4, 3) mеш l11еl111110vерgm2rаш (d, е, 3) mоvерgш2rаm шеm- шешшоvеrаш2рgш (f, g, 45) mоvеrаш2рgш strcat strcat (str 1, str2) strсаtрgш strсаtpgш (str3, str4) strсаtрgш2rаm strcatp gmram (str5, str6) strсаtrаm2рgш strcatpgmram (str3, str4) strchr strchr (str1, 'а') strсhrрgш strchrpgm (str2, 'О') strcmp strcmp (str1, str2) strcmppgm strcmppgm (str3, str4) strсmррgm2rаш strcmppgmram (str5, str6) strсmрrаm2рgш strcmprampgl11 (str3, str4) strcpy strcpy (str 1, str2) strcpypgm strcpypgl11 (str3, str4) strpypgm2ram strcpypgm2ral11 (str5, str6) strсруrаш2 pgm strcpyram2pgm (str3, str4) strcspn strcspn (str1, str2) strсsрпрgш strcspnpgm (str3, str4) strсsрпрgmrаш strcspnpgl11ral11 (str5, str6) strcspnrampgm strcspnrampgm (str3, str4) strlen strlen (str 1) strlenpgm strlenpgm (str2) strlwr strlwr (strl) strlwrpgm strlwrpgm (str2) strncat stmcat (strl, str2, 3) strпсаtрgш stmcatpgm (str3, str4, 2) strncatpgm2 rаш stmcatpgm2ram (str5, str6, 1) strncatram2 p m stmcatram2 pg m ( str3, str4, 2 ) П р имечание Сравнивает аl с а2 в памяти проrрамм на 5 байтах Сравнивает а3 в памяти ПрОlрамм с а4 на 6 байтах (возврат <О, если первое меньше BTopor'o, возврат ====0, если строки равны, возврат>О, еСJ/И первая строка больше второй) Копирует а2 в а 1 для 4 байт Копирует память проrpамм а4 в память проrpамм а3 для 5 байтов Копирует память проrpамм а6 в памЯ1Ъ проrpамм а5 для 7 байтов Копирует а8 в память проrpамм а7 для 2 байтов То же, что и шеI11СРУ, за исключением TOI'O, что разрешены перекрываlOщиеся области Добавляет str 1 к str2 Добавляет str3 в памяти проrpамм к str4 Добавляет str5 к строке str6 в памяти проrpамм То же, что и strcatpgm Находит первое вхождение буквы а в strl Находит первое вхождение нуля в str2 Сравнивает str} со str2 Сравнивает str3 в памяти проrpамм со str4 в памяти проrрамм Сравнивает str5 с str6 в памяти проrpамм Сравнивает str3 в памяти проrрамм со str4 (возврат >0, если первая c'rpoKa меньше второй, возврат ====0, если строки равны, возврат<О, если первая строка больше второй) Копирует str2 в str 1 Копирует str4 в памяти проrpамм в str3 Копирует str6 в позицию памяти проrpамм str5 То же, что и strcpypgm Просматривает str1 на вхождение str2; возвращает- ся количество совпадений Просматривает str3 в памяти проrpамм на вхожде ние str4 из памяти проrpамм Просматривает str5 в памяти проrpамм на вхожде ние str6 Просматривает str3 на вхождение str4 из IIамяти проrpамм Возвращает д1ину str} Возвращает длину str2 в памяти проrрамм Преобразует символы BepxHero реrистра str 1 в символы нижнеrо реrистра Преобразует символы BepxHero реrистра str2 в памяти проrpамм в символы нижнеrо реrистра Добавляет str} к str2 для 3 символов Добавляет str3 в памяти проrpамм к str4 для 2 сим- волов Добавляет str5 к строке str6 в памяти проrpамм для } символа То же, что и strcatpgm 
rnaBa 5. Проrpаммнрованне PIC18 на Slзыке С 165 Ф ун кция П р име р strnсmр stmcmp (strl, str2, 2) strncmppgm stmcmppgm (str3, str4, 4) strncmppgm2ram stmсmррgmrаш (str5, str6, 3) strncmpram2pgm stmcmprampgm (str3, str4, 1) strnсру stmcpy (strl, str2) strncpypgm stmcpypgm (str3, str4) stmpypgm2ram stmсрурgш2rаш (str5, str6) strncpyra m2 pgm stmсруrаm2рgш (str3, str4) strpbrk strpbrk (strl, str2) strpbrkpgm strpЬrkрgш (str3, str4) strpbrkpgmram strpЬrkpgmrаш (str5, str6) strpbrkrampgm strpbrkrampgm (str3, str4) Strrchr stпсhr (str, 'О') stnрп strspn (strl, str2) stnpnpgm strsрпрgш (str3, str4) stnpnpgmram strsрпрgшrаш (str5, str6) stnpnrampgm strsрnrашрgш (str7, str8) stntr strstr (str 1, str2) stntrpgm strstrpgm (str3, str4) stntrpgmram strstrpgшrаm (str5, str6) stntrrampgm strstпаmрgш (str7, str8) strtok strtok (strl, str2) strtokpgm strtokpgm (str3, str4) strtokpgmram strtokpgmram (str5, str6) strtokrampgm strtokrampgm (str3, str4) strupr strupr (strl) struprpgm strupr (str2) Примечание Сравнивает strl со str2 для 2 символов Сравнивает str3 в памяти проrpамм со str4 в памя ти проrpамм для 4 символов Сравнивает str5 в памяти проrpамм со str6 для 3 символов Сравновает str3 в памяти проrpамм со str4 для 1 символа (возврат >0, если первая строка меньше второй, возврат ===0, если строки равны, возврат<О, если первая строка больше второй) Копирует str2 в str 1 Копирует str4 в памяти проrрамм в str3 Копирует str6 в область памяти проrpамм str5 То же, что и strcpypgl11 Просматривает str 1 на вхождение символов из slr2 Про сматривает str 1 в памяти проrpамм на вхожде ние символов из str2 в памяти проrpамм SПросматривает str5 в памяти проrpамм на вхож- дение символов из str6 Просматривает str3 на вхождение символов из str4 в памяти проrpамм. Возвращает указатель на последнее вхождение О Возвращает количество последовательных вхожде ний в strl символов из str2 Возвращает количество последовательных вхожде- ний в str3 в памяти ПрОJ']Jамм символов из str4 в памяти проrpамм Возвращает количество последовательных вхожде ний символов из str6 в str5 памяти проrpамм Возвращает количество последовательных вхожде- ний символов из str8 памяти проrpамм в str7 Определяет первое вхождение str2 в strl Определяет первое вхождение в str3 памяти про- rpaMM str4 из памяти проrpамм Определяет первое вхождение в str5 памяти про rpaMM str6 Определяет первое вхождение в str7 памяти про rpaMM str8 (если вхождение найдено, возвращается .;, указатель на Hero, в противном случае возвращает ся ноль) Вставляет ноль в strl на место знаков, специфици- рованных str2 Вставляет ноль в str3 из памяти проrpамм на место знаков, специфицированных в str4 Вставляет ноль в str5 из памяти проrpамм на место знаков, специфицированных в str6 То же, что и strtokpgm (возвращает нулевой указа- тель, если ничеrо не найдено) Преобразует символы нижнеrо реrистра из strl в символы BepxHero реrистра Преобразует символы нижнеrо реrистра из str 1 в символы BepxHero реrистра для str2 из памяти I!pO rpaMM 
.1'66 ITpHMeHeHHe MHKpOKOHTpOnnepOB PIC 18 Пример 5.8 1* * Это npMMep 5.8 *1 #include <p18cxxx.h> #include <string.h> 1* Установка 6мтов конмrураuми *  установка реима reHepaTopa HS *  BKn4eHMe cTopoeBoro TaMepa * --- BKn4eHMe HM3KOBOnbTHoro проrраммироваНМR *1 #pragma config ose HS #pragma config WDT OFF #pragma config LVP OFF II program memory data rom near char 100kUpTable[] [20] "my first message", "my second message", "my third message", "my fourth message", "my fifth message" } ; II AaHHe в naMRTM AaHHX char buffer[20]; II rnaBHaR nроrрамма void main (void) strcpypgm2ram (buffer, 100kUpTable[l]); npLl1Mep 5.9 демонстрнрует ew,e О,lJ,НН прнмер осуw,ествлення ,lJ,осryпа к паМЯТLI1 проrрамм. В зтот раз ,lJ,осryп к паМЯТLI1 проrрамм осуw,ествляется с u.елыо ПОLl1ска 7 cerMeHTHoro кода в ПОLl1СКОВО та6ЛLl1u.е, пре,lJ,назна4енноrо дЛЯ ВЫВО,lJ, на 7 сеrментный свето,lJ,НО,lJ,НЫЙ LI1H,lJ,LI1KaTop. д.nя ,lJ,осryпа к ПОНСКОВОЙ та6ЛLl1u.е LI1спользует- ся соответствуюw,ая срункu.ня. Функu.LI1Я с LI1MeHeM Get7Seg прео6разует ВСО (АКД) - 4L11СЛО в 7-сеrментный КО,lJ, только Tor.цa, KorAa зто 4L11СЛО ото6ра>кает СLl1МВОЛ от О до 9. ЕСЛLl1 CPYHKu.LI1L11 передается какоелн60 LI1HOe 4L11СЛО, то возвраw,ается значеНLI1е охОО. Пример 5.9 1* * Это пример 5.9 *1 #include <p18cxxx.h> 1* Установка 6мтов конфиrураuии 
rnaBa 5. Проrpаммнрованне PIC 18 на Slзыке С 167  установка реима reHepaTopa HS  ВКn4ение cTopoeBoro TaMepa , ВКn4ение низковоnьтноrо nроrраммироваНИR tpragma config OSC HS tpragma config WDT OFF tpragma config LVP OFF ! AaHHe В nаМRТИ nporpaMM =om near char 100kUp7Seg[] = 1/ nоисковаR та6nиuа 7-сеrментнх КОАОВ Ox3f, Ох06, Ох5Ь, Ox4f, Ох66, Ox6d, Ox7d, 7, Ох7 f, Ox6f naMRTb AaHHX :::'ar data1; I function Get7Seg :har Get7Seg (char bcd) if (bcd <;:= 9) return 100kUp7Seg[bcd]; else return О; I main program i:)id main (void) data1 = Get7Seg(3); nporpaMMa по прнмеру 5.1 О нллюстрнрует НСnОЛЬЗ0ванне срункu.LI1Й уnравлеНLI1Я naMTblO нз 6н6лнотекн строковых CPYHKu.H. Так, функu.н memset LI1СПОJlьзуется ДЛЯ запнсн 4нсла Ох20 во все Я4екн 6усрера в nамятн ,lJ,анных. Прииер 5.10 * Это пример 5.10 *1 tinclude <p18cxxx.h> tinclude <string.h> * Установка 6итов конмrураuии - установка реима reHepaTopa HS ВКn4ение cTopoeBoro TaMepa BKnqeHMe низковоnьтноrо nроrраммироваНИR 
168 Прнмененне MHKpOKOHTpOnnepOB PIC 18 *1 #pragma config osc HS #pragma config WDT OFF #pragma config LVP OFF Ildata memory char buffer [20]; void main (void) { memset(buffer, Ох20, 20); в rлаве 4, nporpaMMa на языке Ассем6лера (прнмер 4. 25) нспользовалась для осуществлеНLI1Я досryпа к та6лнu.е снмволов кодов Морзе npH nOMow,H CPYHKu.HH, KOTO рая называлась SendChar. npOCMoTpHTe ew,e раз зтот прнмер н сравннте ero с верСLl1ей это проrраммы на языке С, nрнведенной в прнмере 5.11. Здесь, как LI1 в rлаве 4, память nporpaMM нспользуется с u.елью хранення структур кодов Морзе для упомянутой CPYIIK- u.HH. nporpaMMa тестнровання CPYHKu.HH SendChar передает 6уквы от а до z 4ерез 6нт О порта В,  Т04НО так >ке, как в npHMepe 4.25. nрнведенная версня зтой проrраммы на языке С HaMHoro 60лее 4нта6ельна н леr4е поннмается, 4ем ее версня на языке Ас- сем6лера. Е,о,ннственное, 4ТО еще мо>кно д06авнть в зry nporpaMMY - так зто ew,e ОДНУ понсковую та6лнu.у для хранення кодов Морзе снмволов nYHKTyau.LI1H. Самая ЛУ4шая проверка ра60ТЫ зтой nporpaMMbI, коне4НО >ке, связана с НСnОЛЬЗ0ваннем осu.нллоrра сра для на6ЛlOдення выходных СLl1rналов для 6нта О порта В. Пример 5.11 /* * Это пример 5.11 AnR TaKTOBO 4астоты в 4 MrU */ #include <p18cxxx.h> #include <delays.h> /* Установка 6итов кониrураuии *  установка реима reHepaTopa HS *  ВКn4ение cTopoeBoro TaMepa *  ВКn4ение низковоnьтноrо nроrраммироваНИR *1 #pragma config OSC HS #pragma config WDT OFF #pragma config LVP OFF ) // nоискове та6nиu в nаМRТИ nporpaMM rom near char Morse_L[] Ох42, Ох84, Оха4, Ох83, ОхО 1, Ох24, Охс3, ОхО4, Ох02, Ох74, Оха3, Ох44, Охс2, Ох80, ОхеЗ, Ох64, Oxd4, Ох43, ОхО 3, Ох81, Ох23, Ох14, Ох6З, Ох94, ОхЬ4, Охс4 } ; 
rnaBa 5. Проrpаммнрованне PIC 18 на Slзыке С 169 om near char MorseN[] Oxfd, Ox7d, ОхЗd, Ox1d, OxOd, Ох05, Ох85, Охс5, Охе5, Oxf5 } ; functions ;id sendDitDah (char pattern) int а; int count pattern & 7; for (а = О; а < count & 7; а ++) { PORTB 1; if ((pattern & Ох80)) Delay1KTCYx (72); else Delay1KTCYx (24); PORTB = О; Delay1KTCYx (24); тоqки pattern «= 1; } Delay1KTCYx (48); реАаqи Т04КИ i void sendChar' (char sendData) { /1 nepeAaqa симвоnа в КОАе Морзе I / Kn4 BKn. // KOHTponb СОСТОRНИR 6ита // тире // Т04ка // Kn4 BKn 1/ ОИАание в те4ении nерИОАа nереАа4И // nOnY4eHMe cneAyero 6ита / / ОИАание в те4ении АВУХ nеРИОАОВ ne.. if (sendData >= 'а' && sendData <= 'z') sendData = Ох20; // nepeBoA в симвоn if (sendData == , ') // есnи nр06ел Delay1KTCYx (96); // ОАание 96 мс else if (sendData >= 'А' && sendData <= 'Z') sendDitDah (Morse_L [sendData  Ох41]); else if (sendData >= 'о' && sendData <= '9') sendDitDah (MorseN [sendData  Ох30]); } II rnaBHaR nроrрамма AnR тестироваНИR функuии sendChar void main (void) BepxHero реrистра . ! int а; ADCON1 = Ox7F; // конфиrурирование портов А и В как uировх // ЭТИ установки MorYT измеНRТЬСR в зависимости // от версии микроконтроnлера TRISB = Охоо; // кониrурирование порта В как BxoAHoro for (а = О; а < 26; а++) sendChar('a' + а); // тестирование sendChar 
170 ITpHMeHeHHe МНКрОКОНТролnеров PIC 18 АВО 1"'"'   r""     L...-..   ..... 2900000.0 I 2910000. О I 2920000.0 Рис. 5.4. CHL/1MOK зкрана лоrН4ескоrо анаnнзатора для кода Морзе, передаваемоrо проrраммой L/1З npL/1Mepa 5.11 PL/1c. 5.4 AeMOHCTpL/1pyeT nporpaMMY Н3 прнмера 5.11 в ,lJ,еЙСТВL/1L/1. В данном СЛУ4ае лоrL/14еСКL/1Й анаЛL/1затор нспользуется для демонстраЦИL/1 выходных данных на штырьке АВО. На этом pL/1cYHKe показана переда4а кодов Морзе СL/1МВОЛОВ, на4L/1ная с 6уквы В. Поскольку проrрамма передает СL/1МIЗОЛЫ в алсраlЗL/1ТНОМ порядке, после В следует С L/1 так далее. Список кодов Морзе CMOTpL/1Te в та6л. 4. 2. ШL/1рОКИЙ ВЫСОКL/1Й импульс соот- ветствует TL/1pe, а узкий uысоки L/1МnУЛЬС  точке. ЕдL/1нспзенным спос060М nОЛУ4еНL/1 3Toro CHL/1MKa зкрана 6ыла замена CPYHKu.L/1H временной задерЖКL/1 Delay1 КТСУх на Delay10KTCYx, - зто 6ыло необходимо только ЩlЯ Toro, 4т06ы выходной СL/1rнал от06ра>кanся на 3КрШlе анаЛL/1затора. ФL/1рма Microchip в BepCL/1L/1 IDЕ 7.11 не реаЛL/1З0вала cnoc06 MOAL/1cpL/1Kau.L/1L/1 4астоты выборки лоrическоrо анаЛL/1затора. Остается надеятьс, 4ТО зтот недостаток будет устранен в будуw,их Bep CL/1X IDЕ. 5.3. Примеры nporpaMM на языке С Теперь, после Toro, как БЫЛL/1 L/1зло>кены ВLЗодные сведеНL/1Я языка С для семейс'ruа PIC18, IЗ данном nодраздеnе рассмаТРL/1ваlOТСЯ ПРL/1меры некоторых простых проrрамм, которые L/1ЛЛЮСТрL/1рУIOТ ДОnОЛНL/1тельные B03MO>KHOCTL/1 nроrраММL/1роваНL/1Я ML/1KpOKOII тролле ров PIC на языке С. Как у>ке отме4ШIOСЬ, С ДЛ PIC в основном вляетс таким >ке, как язык С для ЛlOбой нной CL/1CTeMbI, хотя некоторые БL/1БлиотеКL/1 6ЫЛL/1 расширены с u.елыо ВKJlI04еНL/1Я функu.L/1Й, ра60таЮЩL/1Х с nространстlЗОМ памяти PIC. Пример первый Этот первый прнмер проrраммы (npHMep 5.12) ,lJ,eMOHCTpL/1pyeT переработанный npL/1Mep проrраммы на 3ЫKe Ассем6лера L/13 rлавы 4, который OpL/1eHTL/1pOBaH на р'а60ТУ с клаUL/1атурой nКСТL/1Л. 3тот новый ПРL/1мер возвраw,ает ASCIIKOAL/1pOBaHHbIe СL/1МВОЛЫ дЛЯ 60ЛЬШL/1нства кnaBL/1W клавиатуры. Работа с клаВL/1шаМL/1 Ctrl L/1 Alt не реаЛL/1ЗОВalta, 
rnaBa 5. ITporpaMMHpoBaHHe PIC18 на языке С 171 однако на>катие кnавиши Shift OTpa6aTЫBaeTC. Аве та6лицы в памяти IlpOrpaMM LI1C- ПОЛЬЗУlOтс ДJl 06есnе4ени возврата ASCIIKoAOB как ДJl ввода с клавиатуры 6ез Ha жати кnавиши Shift, так и ДJl ввода с на>катием кnавиши Shift. Функция getChar реЭJlLI1 3Ована с использованием рекурсии ДJl nОЛУ4ени дополнительных символов с клаВLI1а туры. При реализации отра60ТКИ на>кати клавнши Ctrl д06авлIOТС доnолнитеш>ные та6лнцы ДJl Ctrl = О Ь Ctrl = 1. Коды ДJl Ha>KaTO кnавиши Ctrl 06Ы4НО onpeAel1IOTc в диапазоне от ОхОО до Ох 1 А ДJl кnавиш от А до Z. Таблица 5.4. Коды специальных функциональных клаВLI1Ш Клавиша  K  Клавиша Код Клавиша Код F9 Ох80 Левая Alt Ох8В 8 на цифровой Ох96 клавиатуре F5 Ох8\ Левая Ctrl Ох8С Num 140ck Ох97 f3 Ох82 Caps Lock Ох8О Fll Ох98 Н Ох83 1 на цифровой Ох8Е + на цифровой Ох99 клавиатуре клавиатуре F2 Ох84 4 Ila цифровой Ox8F + на цифровой Ох99 клавиатуре клавиатуре Н2 Ох85 7 на цифровой Ох90 3 на цифровой Ох9А клавиатуре клавиатуре НО Ох86 О на цифровой Ох91  на цифровой Ох9В клавиатуре клавиатуре F8 Ох87 . на цифровой Ох92 * на цифровой Ох9С клавиатуре клавиатуре F6 Ох88 2 на цифровой Ох93 9 на цифровой Ох9О клавиатуре клавиатуре .'4 Ох89 5 на цифровой Ох94 Scroll Lock Ох9Е клавиатуре ТаЬ Ох8А 6 на цифровой Ох95 F7 Ox9F клавиатуре ASCIIKoA, возвращаемы функu.ие getChar, пре,lJ,ставлет c060 CTaHдapTHЫ ASCIIKO,lJ, ДJl всех KJlавиw, за ИСКnlO4ением сnеu.нальных KJlавиш,  таких как page up (страница вверх), page down (страница вниз) н так далее. Специальные кnавиши relle РИРУlOт коды, как зто nоказано в та6л. 5.4. 06ратите внимание на то, 4ТО двухраЗРДllьiё коды не реализованы в данном примере, однако они MOryт 6ыть д06авлены в реЗУJlьта те модификации nporpaMMbI и ,lJ,06авленн та6лицы. Пример 5.12 1* * Это rrpMMep 5.12 *1 #include <p18cxxx.h> 1* Установка 6мтов KOHMrypaUMM *  установка peMMa reHepaTopa HS *  BKnqeHMe cTopoeBoro таймера * - BKnqeHMe HM3KoBonbTHoro rrроrрамммроваНМR *1 #pragma config OSC HS #pragma config WDT OFF 
172 ITpHMeHeHHe MHKpoKoHTponnepoB PIC 18 #pragma config LVP = OFF II AaHHe в rraMRTM rrporpaMM II rroMCKoBaR Ta6nMua AnR 6укв BepxHero perMCTpa rom near char upperCaseTable[] = ОхОО, Ох80, ОхОО, Ох81, Ох82, Ох83, Ох84, Ох85, ОхОО, Ох86, Ох87, Ох8 8, Ох89, Ох8А, Ох7Е, ОхОО, ОхОО, Ох8В, ОхОО, ОхОО, Ох8С, Ох51, Ох21, ОхОО, ОхОО, ОхОО, Ох5А, Ох53, Ох45, Ох57, Ох4 О, ОхОО, ОхОО, Ох4 3, Ох58, Ох44, Ох4 5, Ох24, Ох23, ОхОО, ОхОО, Ох20, Ох56, Ох46, Ох54, Ох52, Ох25, ОхОО, ОхОО, Ох4Е, Ох42, Ох48, Ох47, Ох59, Ох5Е, ОхОО, ОхОО, ОхОО, Ох4D, Ох4А, Ох55, Ох2 6, Ох2А, ОхОО, ОхОО, Ох3С, Ох4В, Ох4 9, Ox4F, Ох2 9, Ох28, ОхО О, Ох4Е, Ох3 F, Ох4С, Ох3А, ОхОО, Ох50, Ox5F, ОхОО, ОхОО, ОхОО, Ох22, ОхОО, Ох7В, Ох2В, ОхОО, ОхОО, Ох8D, ОхОО, ОхОD, Ох7D, ОхОО, Ох7С, ОхОО, ОхОО, ОхОО, ОхОО, ОхОО, ОхОО, ОхОО, ОхОО, Ох08, ОхОО, ОхОО, Ох8Е, ОхОО, Ox8F, Ох90, ОхОО, ОхОО, ОхОО, Ох91, Ох92, Ох93, Ох94, Ох95, Ох96, Ох1В, Ох97, Ох98, Ох99, Ох9А, Ох9В, Ох9С, Ох9D, Ох9Е, ОхО О, ОхОО, ОхОО, ОхОО, Ox9F, ОхОО, ОхОО, ОхОО, ОхОО, ОхОО, ОхОО, ОхОО, ОхОО, ОхО О, ОхОО, ОхОО, ОхОО } ; II rrOMCKOBaR Ta6nMua AnR 6укв HMHero perMcTpa rom near char 10werCaseTable[) = ОхОО, Ох80, ОхОО, Ох81, Ох82, Ох83, Ох84, Ох85, ОхОО, Ох86, Ох87, Ох88, Ох8 9, Ох8А, Ох60, ОхОО, ОхОО, Ох8В, ОхОО, ОхОО, Ох8С, Ох71, Ох31, ОхОО, ОхОО, ОхОО, Ох7А, Ох73, Ох61, Ох77, Ох32, ОхОО, ОхОО, Ох63, Ох7 8, Ох64, Ох65, Ох34, Ох33, ОхОО, ОхОО, Ох20, Ох76, Ох66, Ох74, Ох7 3, Ох35, ОхОО, ОхОО, Ох6Е, Ох62, Ох68, Ох67, Ох79, Ох3 6, ОхОО, ОхОО, ОхОО, Ох6D, Ох6А, Ох7 5, О хЗ7 , Ох38, ОхОО, ОхОО, Ох2С, Ох6В, Ох6 9, Ox6F, ОхЗО, Ох39, ОхОО, Ох2Е, Ox2F, Ох6С, Ох3В, ОхОО, Ох60, Ох2D, ОхОО, ОхОО, ОхОО, Ох27, ОхОО, Ох5В, Ох3D, ОхОО, охОО, Ох8D, ОхОО, ОхОD, Ох5D, ОхО О, Ох5С, ОхОО, ОхОО, ОхОО, ОхОО, ОхОО, ОхОО, ОхОО, ОхОО, Ох08, ОхОО, ОхОО, Ох8Е, ОхОО, Ох8 F, Ох90, ОхОО, ОхОО, ОхО О, Ох91, Ох92, Ох93, Ох94, Ох95, Ох96, Ох1В, Ох97, Ох98, Ох99, Ох9А, Ох9В, Ох9С, Ох9О, Ох9Е, ОхОО, ОхОО, ОхОО, ОхОО, Ox9F, ОхОО, ОхОО, ОхОО, ОхОО, ОхОО, ОхОО, ОхОО, ОхОО, ОхОО, ОхОО, ОхОО, ОхОО } ; II AaHHe в rraMRTM AaHHX int shift О; II YHKUMM 
rnaBa 5. ITporpaMMHpoBaHHe PIC18 на языке С 173 OMAaHMe OAHoro rrOnHoro UMKna мзменеНМR CMrHana на тактовом ВХОАе возврат, KorAa тактовый MMrrYnbC rrepexoAMT в eAMHMqHOe COCToRHMe .ld Wait4Clock (void) while (PORTAbits.RA1 while (PORTAnits.RA1 1) ; О) ; II while clock II while c10ck 1 О int readChar (void) { int parity = о; int keyData = о; int а; Wait4Clock(); if (PORTAbits.RAO == 1) keyData = Ох100; II eCnM oWM6Ka peMa else II корректный CTapTOB 6мт for (а = о; а < 8; а++) keyData »= 1; IIacceM6nMpoBaHMe .<.eyData Wai t4Clock (); keyData 1= (PORTAbits.RAO 1); parity += PORTAbits.RAO; } Wait4C10ck(); II rronyqeHMe 6мта rrapMTeTa parity Л= PORTAbits.RAO; if ((parity & 1) == О) keyData = Ох101; II eCnM oWM6Ka rrapMTeTa Wai t4Clock () ; if (PORTAbits.RAO == О) keyData = Ох100; II eCnM нет oWM6KM peMa на cTon6MTe, return keyData; t getChar (void) int step = О; int scanCode = readChar(); while (step == О && scanCode < Ох100) { switch (scanCode) { case Ох12: case Ох59: II cABMr shift = 1; scanCode readChar(); break; case OxFO: II OCB060AeHMe scanCode readChar(); switch (scanCode) 
174 ITpHMeHeHHe MHKpOKOHTpOnnepOB PIC 18 case Ох12: case OxS9: 11 CABMr shift о; break; } scanCode break; readChar(); } default: { step 1; break; } if (step = 1 && scanCode < Ох100) { if (shift) scanCode upperCaseTable [scanCode]; else scanCode 10werCaseTable [scanCode); } return scanCode; 3та функци С4итывает клавиатуру и возвраw,ает АSСII-символ, однако она Tpe бует большоrо расхода времени МLI1кроконтроллера. Дл Toro, 4тобы снизить зтот pac ход, ЛУ4ше Bcero переделать nporpaMMY так, 4тобы она работала в ре>киме nрерываНLI1Й. 3та MeTOALl1Ka будет обсуждатьс в rлаве 8. Пример второй Существует система уnравлени моделми >келезно дороrи, которая назьiвается ОСС (управление при nомоw,и цифровых команд). CLI1CTeMa ОСС посылает цифровые сиrналы 4ерез рельсы модели, которые уnравлIOТ злектромоторами и друrИМLI1 компо- нентами модели >келезно дороrи. Одна из функци контроллера в зтом СЛУ4ае заклlO 4aeTC в активировании дополнительных устройств модеЛLl1 с использованием npo rраммируемых адресов. Адрес nосылаетс и nринимаетс МLI1кроконтроллерно систе MO, которая аКТИI3L11рует УСТРОСТ130. Схема, исnользуема ДJl извле4ени цепочки последовательных СLl1rналов, идуw,их 4ерез модель, nоказана на pLl1c. 5.5. В 3TO схеме LI1спользуетс 0llТИ4еска развзка ДJl LI1ЗОЛЦИИ системы от наllрl>кеIlLl1Я на p8JH.>cax модели, а так>ке rенерации ПЛ-совместимоrо сиrнала дл МLI1кроконтроллера. Полр- ность nОДКЛlO4ени к рельсам не имеет зна4ени, поскольку сиrнал на рельсах  зто сиrнал nepeMeHHoro тока, а информаци nepeAaeTc 4ерез ШИрLl1НУ LI1МIlУЛЬСОI3, переда- ваемых по рельсам. .;:":1 . C-:'t,....., "'-.';' :1'..".... 
rnaBa 5. ITporpaMMHpoBaHHe PIC 18 на языке С 175 vcc R1 1К R2 R pe..lЪCЫ 1$01 8 з i 7 6 к биту О lIорта В 6N 1 37 Рис. 5.5. Аетектирование сиrнала ОСС nepeAaBaeMbI 4ерез рельсы сиrнал относитс к сиrналам nepeMeHHoro тока. Ero амплитуда изменетс в пределах :t14 В. 3тот сиrнал несет ЦLl1сррОВУIO инсрормациlO CМ. рис. 5.6). Бит данных, состоние KOToporo соответствует лоrИ4еско еДLl1НLI1це, ne peдaeTC сиrнаJ10М, ДJlительность KOToporo ле>кит в пределах 54.. .64 мкс. Бит данных, состоние KOToporo соответствует лоrИ4ескому нулlO, соответствует импульсам ДJ1Ll1 тельностыо 90...10000 мкс. V1нсрормационны naKeT, nepeAaBaeMbI на YCTpOCTBa, co аер>кит 3 бата. При зтом заrоловок naKeTa nредставлет собо последовательность -з 12 еДИНИ4НЫХ битов, за которыми следует нулево CTapTOBЫ бит адреса. nepBbI байт naKeTa содер>кит nеРВИ4НЫ адрес в диапазоне от Ох80 (128) до OxBF (191). BTOpO байт содер>кит ew,e три бита адреса, бит контрол данных и ВТОРИ4НЫ Збитны адрес. Трети и nоследни бат naKeTa содер>кит контрольнуlO сумму naKeTa, nОЛУ4еннуlO по npинциnу ИСКnlO4ительноrо V1ЛV1. 3тот naKeT данных типа 1 ИЛЛlOстрируетс на рис. 5.6. Биты адресы указываlOТС посредством исnользовани cTaHAapTHoro соrлашени OT ., носительно nрименени доnолнени до единицы трех старших битов адреса. В примере 5.13 nоказана nporpaMMa, KOTopa декодирует все БLl1ТЫ IlaKe1a и BЫ noлнет проверку на nравильность контрольно суммы. 3та nporpaMMa не задает aд рее, а так>ке не выnолнет иные функции, оБЫ4НО характерные ДJl ТLI1nИ4ноrо контрол- .аера YCTPOCTB, она так>ке не уnравлет устроствами. Перед тем, как мы смо>кем зто сделать, нам необходимо рассмотреть некоторые аппаратные схемы. 
176 ITpHMeHeHHe MHкpOKOHTpOnnepOB PIC 18 ( нули А '\ +14V ov 14V '- у едиющы ) (а) 1111111111 О 1 ОАsАзА2АIАо о 1 А 8 А 7 А 6Сааа О ХХХ:ХХХХХ 1  зarОЛОВОК ААААААААА = 9-биПlЫЙ первичный адрес С = контрольный бит ааа = адрес устройства ХХХХХ:ХХХ = контрольная сумма, полученная по принципу исключительноro ИЛИ (ь) NМRA type 1 accessory packet Рис. 5.6. (а) Сиrнал на рельсах в системе ОСС и (Ь) информационный пакет типа 1 Пример 5.13 1* * Это rrpMMep 5.13 AnR TaKTOBO qaCTOT в 4 MrU *1 #include <p18cxxx.h> #include <delays.h> 1* Установка 6мтов KOHMrypaUMM *  установка режима reHepaTopa HS *  BKnqeHMe cTopoeBoro TaMepa *  BKnqeHMe нмзковоnьтноrо rrроrрамммроваНИR *1 /" 
rлава 5. ITporpaMMHpoBaHHe PIC 18 на языке С 177 ragma config OSC HS ragma config WDT OFF Lagma conflg LVP OFF Аанные в памяти nporpaMM :;t count; :;t state; :;t dataBit; :;t preambleCount; ::t firstByte; :'.t secondByte; :1t checkSum; 1 functions 70id assembleByte (int* locale, int nextState) if (preambleCount != 9) { *locale »= 1; *locale += dataBit; preambleCount++; } else preambleCount = о; state = nextState; oid stateO (void) if (dataBit == 1) { preambleCount; if (preambleCount { о && dataBit == О) state = 1; preambleCount 11 nРИНRТЬ KoppeKTH заrоnовок о; } else preambleCount++; 11 в заrоnовке 60nьше еАИНМЦ } else preambleCount 10; Ilnерезаnуск } void state1 (void) assembleByte (&firstByte, 2); if (dataBit == 1) state = о; 1I по оши6ке } void state2 (void) assembleByte (&secondByte, 3); if (dataBit == 1); state = о; 11 по ошм6ке } void state3 (void) 
178 Прнмененне MHKpOKOHTpOnnepOB PIC 18 assembleByte (&checkSum, 4); if (dataBit == О) state = о; II rro оwи6ке } void state4 (void) state  о; I1 с6рос state if ((firstByte л secondByte л checkSum) == о) { 11 CAa BCTaBnRTcR rrporpaMMa yrrpaBneHMR 1I AnR rrроrрамммроваНМR KOHTponnepa II MnM aKTMBMpoBaHMR YCTpOCTBa, nOAKn4eHHoro аАреса к ПОР'J'У В CJly(ae соответствме } typedef void (*ptr) (void); ptr states[] { II массмв указатеnе YHKUM II AnR COCTORHMR YCTpOCTBa &stateO, &state1, &state2, &state3, &state4 } ; void Update (void) if (count == О) { 1/ комаНАа с6роса смстемы state = firstByte = secondByte  checkSum  dataBit = о; preambleCount = 10; IIMMHMManbHoe зна4енме счеТ4ика 6мтов заrоnовка count = 1; } II замер WMpMHbl MMrrYnbca 1I CqeTqMK = О с6рос CMCTeM 1I CqeTqMK = 1 MnM 2 (от 28 АО 84 мкс) 3HaqeHMeM AaHHX RBnReTCR norM4eCKaR eAMHMua II CqeTqMK COAepMT 60nee 2 OTCqeTOB зна4енмем AaHHX RвnяеТСR nOrMqeCKM HOnb else { count = о; if (PORTBbits.RBO == 1) { II заnуск HOBoro С4ета whi1e (PORTBbits.RBO { 1) Delay10TCYx(2); count++; II 20 мкс } else { while (PORTBbits.RBO == О) { Dе1ау10ТСУх(2); count++; II 20 мкс 
rnaBa 5. ITporpaMMHpoBaHHe PIC18 на slзыеe С 179 } if (PORTBbits.RBO == 1) while (PORTBbits.RВO II rrporrycK сnеАущеrо rrony6MTa 1) ; else while (PORTBbits.RВO if (count == О) state = О; else if (count < 3) dataBit 1; О) ; II 6мт 1 else dataBit о; II 6мт II взов YHKUMM COCTORHMR о } states [state] () ; eAMHcTBeHHaR rnaBHaR rrроrрамма :id main (void) II с6рос CMCTe ADCON1 = Ox7F; II KOHMrypMpoBaHMe rropTOB А м В как UMpOBX II Этм установкм MorYT мзмеНRтЬСR в завмсммостм от версмм MMKpOKoHTponnepa II KOHMrYPMpoBaHMe rropTa В II HaqanbHOe COCTORHMe = О II с6рос rrроrраммы м HaqanO oMAaHMR II KoppeKTHoro заrоnовка II OCHOBHO UMКn II OMAaHMe заrоnовка м KoppeKTHoro rraKeTa TRISB 1; state о; count о; while (1) Update(); Ожидание 1 Оти полных единиц заrоловка Выделение первоrо байта пакета Выделение BToporo байта пакета Выделение байта контрольной суммы Проверка контрольной суммы и выполнение нужной функции Рис. 5.7. COCTOHH 060рудовани AfI примера 5.12 
180 TIpHMeHeHHe MHKpOKOHTpOnnepOB PIC 18 rлавная проrрамма nредставлет собой бесконечры ЦLl1КЛ while, KOTOpЫ вызы вает функцию Update с нулевым значением счеТ4L11ка (nеременная count). ФУНКЦИ5-1 Up date распознает нулевое значеНLI1е C4eT4L11Ka LI1 04L11щает три бата пакета, а затем YCTa навливает счеТЧLl1К заrоловка на 10. Заrоловок дол>кен состоять, по краней мере, из 1 О последовательных лоrLl1чеСКLI1Х еДLl1НLI1Ц, однако КОЛLl14ество еДLl1НLI1Ц мо>кет быть HaMHoro БОl1l)ШИМ. Функция Update затем вызывает функцию, 4ей адрес хршштся в массивс с LI1MeHeM states (СОСТОНLI1Я). Поскольку начальное СОСТОЯНLI1е являеТС5-1 нулевым, вызыва е TC5-1 фУНКЦLl1Я stateO, которая ОТСЧLl1тывает по крайне 1 О лоrLl14еСКLI1Х еДLl1НLI1Ц во входных данных. При этом первичном LI1НLI1ЦLl1аЛLl1ЗLl1РУIOw,ем ВЫЗ0ве СРУНКЦLl1L11 ничеrо не счи rаеrся LI1 orpa6aTbIBaeTc возврат в rлавную проrрамму, в которой счеТ4L11К с6расываеlСЯ rlОсле 06раw,ения к фУНКЦLl1И Update. Затем выполняется замер ШLl1рИНЫ BxoAHoro импульса в функции Update. ECl1L11 BXOДHO бит HaXOALl1TC в состоянии лоrической 1, запускается первы цикл while, or СЧLl1ТЫВШОЩLl1Й время, а еСЛLl1 входной БLl1Т находится в СОСТОЯНLI1И лоrИЧССКОIО НУl1Я, OT С4ет BpeMeHLI1 выnолняетс во втором ЦLl1KJlе while. ЭТLI1 ЦLl1КЛЫ занимают точно 28 мкс на LI1тераЦLl1Ю npLl1 тактовой 4астоте, равной 4 мrц, npLl1 этом значение счеТЧLl1ка увеЛИЧLl1ва ется так долrо, пока BXOДHO сиrнал не LI1зменяет свое СОСТОЯНLI1е. ЕСЛLl1 значеНLI1е BXOf\a не изменяется в течеНLI1L11 BpeMeHLI1, ле>кащеrо в ДLl1аnазоне от 28 до 56 мкс, значение счетчика будет равно 1, аналоrичным образом, еСЛLl1 значеНLI1е входа не изменяе ТС5-1 в течении времени, ле>кащеrо в ДLl1аnазоне от 56 до 84 мкс, зна4еНLI1е счеТЧLl1ка будет paB но 2. Длительность LI1мпульса лоrLl1ческоrо нуля ле>кит в ДLl1аnазоне ме>кду 52 LI1 64 мкс. Импульс лоrLl1ческой единицы LI1MeeT Д1lLl1тельность, nревосходщую 90 мкс, n03TOMY, еСЛLl1 счетчик AOCTLI1r значеНLI1Я 3 LI1ЛLl1 больше, то 3ТО озна4ает, 4ТО вход lIе LI1змеНЯllСЯ по крайней мере в течеНLI1L11 84 мкс, 4ТО в свою очередь ЗIIaЧLl1Т, 4ТО BXOДHO импульс rlpe восходит длительность лоrLl1ческоrо нуля. Приведенна nporpaMMa соответствует вре- менным требованиям как для нулевых, так LI1 Д1lя еДLl1НLI1ЧНЫХ битов. Как ТОJll)КО nроизо дет смена СLl1rнала, КОНТРОЛLl1руетс, однако не замеряется, BTopa половина БLl1та. Дол>кна замеряться только одна nОЛОВLI1на БLl1та. После замера БLl1та LI1 ero nрохо>кдения, nporpaMMa счета устанаВЛLl1вает ЛLl1бо сбрасывает dataBit, а затем вызывает функцию states[state](}, определяемую СОСТОЯНLI1ем YCTpOCTBa. На pLl1c. 5.7 npLl1BeAeHa ALl1arpaM- ма состояний, отра>каюw,ая назна4еНLI1е Ka>KДO СРУНКЦИLl1 СОСТОНLI1Я (от stateO до stat(4). Проrраммы управлеНLI1Я YCTpocTBaMLI1 4асто LI1СnОЛЬЗУЮТ ряд состояний ПрLl1 вы- nолнеНLI1И задаЧLl1. В данном npLl1Mepe MaCCLl1B адресов функций используетс для ВЫЗ0ва раЗЛLl14НЫХ функци для раЗЛLl14НЫХ COCTOHLI1. Блаrодаря такому подходу ДОСТLI1rается nРЯМОЛLl1неная орrаНLI1зация nporpaMMbI. Проrрамма так>ке ДОЛ>Кllа ИСnОЛЬЗОВaJЪ Ka KO-TO метод Д1lя оnределеНLI1Я факта «заВLI1сания» CLl1CTeMbI в течеНLI1И более 1 О милли секунд. 3то выnолняетс npLl1 nОМОЩLl1 LI1сnользования CTOpO>KeBOrO TaMepa, однако поскольку зта тема будет рассматриватьс поз>ке, здесь она не LI1ллюстрируетс. V1c ПОЛЬЗОВа!ше CLl1CTeMHbIX LI1 сторо>кевых TaMepOB будет рассмотрено LI1 ПрОLl1JlЛЮСТрLl1рО вано npLl1MepaMLI1 проrрамм поз>ке в 3TO KHLI1re. ЕСЛLl1 BXOДHO LI1МnУЛЬС «застыл» 13 со- СТОЯНLI1L11 лоrLl1ческой еДИНLI1ЦЫ, 4ТО мо>кет LI1MeTb место в случае ОТКЛЮ4еНLI1Я nOAa4L11 Ha nря>кеНLI1Я на рельсы модеЛLl1, то CLl1CTeMa «заВLI1снет»  3ТО явлетс nРLl1ЧLl1НОЙ LI1СnОЛЬЗО вания какоrОЛLl1бо мехаНLI1зма вывода CLl1CTeMbI LI1З nодобноrо СОСТОНLI1Я. 
rnaBa 5. ITporpaMMHpoBaHHe PIC 18 на языке С 181 5.4. Математическая библиотека XOT MaTeMaTH4eCKa 6н6лнотека н не нсnользуетс столь же часто, как БLl1Блио :Ka временных задержек, CPYHKu.HH, входщне в состав математнческой бибJJLI101еки, axOДT определенное npHMeHeHHe npH nporpaMMHpoBaHHH. Математическая бибЛLl10- :Ka нсnользует только 32разрдные чнсла с nлаваlOw,ей точкой, при Э10М 64 :азрдные чнсла двойной Т04НОСТН не nО,lJДер'жнваIOТС. Поскольку мы изучаем 8 :.азрдный мнкроконтроллер, 64разрдные оnерацни потребовали бы для свое! о BЫ олненн слншком MHoro временн. Во встроенных мнкроnроцессорных системах npo :>aMMЫ редко работаlOТ с даннымн в срормате nлаваlOw,ей точки. Таблица 5.5. Математнческие функции, BxoAw,He в состав включаемоrо файла math.h Ф у нкция П р и ме р acos acos (data 1 ) asiD asin (data2) ataD atan (data3) ataD2 atan2 (datal, data2) ссП ceil (data 1) cos cos (data2) cosh cosh (data3) еlР ехр (data4) (аЬ [аЬ (data5) floor f100r (data6) fmod fпюd (пит, пюd) frexp frexp (data 1, intr) ieeetomchp ieeetomchp (data2) idexp idexp (data3, int 1) log log (data4) log10 log 1 О (data5) mchptoieee l11chptoieee (data6) modf пюdf(dаtа7, data8) ро\у pow (data 1, data2) SiD sin (data3) SiDh sinh (data4) sqrt sqrt (data5) (ап tan (data6) taDh tanh ( data7) Коммеllта рий Возвращает арккосинус в радианах datal (от О до п) Возвращает арксинус в радианах data2 (от п/2 до п/2) Возвращает apKTaHreHc в радианах data3 (от п/2 до 7[/2) Возвращает apKTaHreHc в радианах clata 1 / data2 ( от от  п до 7[) Возвращает целое число, которое больше или равно числу с плавающей точкой datal Возвращает косинус data2 в радианах Возвращает rиперболический косинус data3 Возвращает edata4 Возвращает абсолютное значение data5 Возвращает целое число, которое больше ИJIИ равно числу с плавающей точкой data6 Возвращает остаток пит по модулlO тod Разделяет datal на дробную (возвращает) I! целую часть (coxpa няется по указателю intr) Преобразует data2 в формат с плавающей точкоiI Мiсюсl1iр Возвращает data3 * i ntl Возвращает натуральный ЛОI'арифм data4 Возвращает обычный лоrарифм data5 Преобразует data6 из формата с плаuающеп TOLIKOJI Мiсюсhiр Возвращает дробную часть data7 и сохраняет целую часть но указателю data8 Возвращает data 1 data2 Возвращает синус уrла в радианах data3 Возвращает rиперболический синус data4 Возвращает корень квадратный из data5 Возвращает TaHreHC УI'ла в радианах data6 Возвращает rиперболический TaНJ'eHC data7 МатемаТИ4еска 6н6лнотека, nоставлемая совместно с компилятором С18, pea изует те же CPYHKu.HH, 4ТО н CTaHдapTHa математнческа бнблнотека зыка ANSI С, (JTopa nоставлетс с 60ЛЬWННСТВОМ комnилторов. В табл. 5.5 nереЧLl1слены эти :Jункцнн, BКJlI04a npHMepbI н комментарнн о нх работе. Ал НЛЛlOстрацнн нсnользовани матемаТН4еской библиотеки, nporpaMMa из pHMepa 5.14 pewaeT уравнен не 4астоты резонанса, нзвестное из курса электроники Fr = 1/2 n-VLC). 3та nporpaMMa находнт 4астоту резонанса дл конденсатора eMKO :TblO 1,0 мкФ Н зна4еннй нндуктнвностн в днаnазоне от 1,0 до 1 О MI, сохранSlЯ десять ::езультатов в масснве с именем Fr. 
182 ITpHMeHeHHe MHKpOKOHTpOnnepOB PIC 18 Пример 5.14 1* * Это npMMep 5.14 *1 #iпclude <p18cxxx.h> #lclude <math.h> 1* Установка 6мтов конфмrураuмм *  установка peMMa reHepaTopa HS * - ВКnЮ4енме CTopoeBoro TaMepa * - ВКnЮ4енме HM3KoBonbTHoro nроrрамммроваНМR */ / #pragma config OSC #pragma config WDT #pragma config LVP HS OFF OFF II данные в naMRTM nporpaMM float Fr [10]; f10at L 1.0е-3; float С = 1.0е-6; // rnaBHaR nроrрамма void main (void) int а; for (а = о; а < 10; а++) { Fr[a] 1/ (6.2831853*sqrt(L*C)); L += 1.0e6; ECJlH вы наnнwите .цанную nporpaMМY, НСnОJlЬ3УЯ IDE, н посмотрите на КОJlН4ество nамffiИ, HCnOJlb30BaHHO ,lJ,Л coxpaHeHH 3TO за,ца4Н, то увнднте, 4ТО ее длнна 6удет COCTaВnтb 1941 6айта памяти nporpaMM. Такое 60JlbWoe КОJlН4ество памяти нужно в свзн С НСnОЛЬЗ0ваннем матемаТН4ескнх срункu.нн,lJ,Л выnолненн onepau.нH нзвле4енн ква,ораn-юrо KOpH, а таюке one раu.нй С nлаваlOw,е T04KO. Как уже отме4МОСЬ, в npHкnaднbIX nporpaмMax CJleAyeT НСnОЛЬЗ0 вать снмволы н u.елые 4исла Bcer.цa, Kor.цa зто возмо>кно, н60 размер nporpaMMbI мо>кет npeBbI- снть 06ъем дocтynHO памяти nporpaMM. Предnоло>кнм, 4ТО нам ну>кно onpe,lJ,eJlHTb козфсрнu.нент УСНJlення наnря>кенн в децн6елах. 3то достиrаетс нсnользованнем ypaBHeHH Vgain = 2010g,o(V ou ,fV,J. Функ цня, KOTopa НСnОJlьзует MaTeMaTH4ecKYlO 6н6лнотеку npH peweHHH 3TO зада4Н, nOKa зана в npHMepe 5.15. Как н в CJlY4ae npHMepa 5.14, зта cpYHKЦH HY)I(ДaeTC в 60ЛЬШОМ КОЛН4естве naMTH ,lJ,Jl BbInOJlHeHH onepau.HH lOglO, а таюке арнсрмеТН4ескнх onepa- u.H С nлаваlOw,е T04KO. Пример 5.15 float gainDB (float voиt, float vin) { return 20 * 10g10 (vout/vin);  
rnaBa 5. ITporpaMMHpoBaHHe PIC18 на языке С 183 5.5. Резюме 1. Комnнлтор С18 3ЫKa С ,lJ,OcryneH в CBoe Y4e6HO верснн как 6есnлатны BЫ ужаемы срал. Ero МО>КНО BbIrpY3HTb С caTa фнрмы Microchip. 2. IDЕ nOJlHOCTblO nOPдep>KHBaeT nporpaMMHpoBaHHe на С с НСnОЛЬЗОIJaННGМ KOM 1илтора С18. З. Операторы #pragma config конфнryРНРУIOТ мнкроконтроллер РС 18 на зыке С anguage. 4. Анректнвы asm н endasm НСnОJlЬ3УIOТСЯ 6ез {} ,lJ,Jl ВВО,lJ,а ассем6лерноrо кода 3 проrрамму на зыке С. 5. Точные срункцнн временных за,lJ,ер>кек HMeIOTC во ВKJllOчаемо 6н6лнотеке <омnнлятора С18, KOTopa Ha3ЫBaeTC delays.h. 6. АостУП к портам BBoдaBЫBO,lJ,a Н3 nporpaMM на 3ЫKe С орrаннзуетс с нсnоль- зованнем, а так>ке nporpaMMHpoBaHH perHCTpoB наnравленн ,lJ,анных. 7. Файл заrОJlОВка stdlib.h СО,lJ,ер)I(ИТ фун Ku.н Н , которые ВЫnОЛНIOТ nре06разовання. 5оJlЬWННСТВО Н3 ннх ВЛIOТ Функu.нмн npe06pa30BaHH CTaндapTHOro 3ЫKa ANSI С. 8. Фал заrОJlовка striпg.h СО,lJ,ер>кнт CPYHKu.HH, которые 06есnечнваlOТ возмож ТЬ выnолненн маННnУJlЦН С снмвольнымн строкамн н naMTblO, НСnОЛЬ3У как 1aMTb nporpaMM, так н naMTb ,lJ,анных. 9. Анректнвы rom near HJlH rom far HCnOJlb3YIOTC AfI coxpaHeHH HHcpopMau.HH в 1ЗМтн nporpaMM МНКрОКОНТрОJlлера. 1 О. ФаJl заrоловка math.h СО,lJ,ер>кнт CPYHKu.HH, которые ВЫПОЛНIOТ математнче :кие оnерацнн, стаН,lJ,артные AfI ANSI С. 11. В комnилторе С 18 арнсрметнка С nлаваlOw,е T04KO оrраннчена onepau.HMH : З2разрднымн 4HCJlaMH с nлаваlOw,е T04KO O,lJ,HHapHO Т04НОСТН. 5.6. Вопросы и задания 1. Сравннте 3ЫK С18 С ANSI С. 2. Как КО,lJ, 3ЫKa ACCeM6Jlepa вставлетс в nporpaMMY на 3ЫKe С? З. Каково назна4енне оператора #include <p18cxxx.h>? 4. Каково назна4енне оператора #pragma config? 5. Что такое на60Р инструментаJlЬНЫХ сре,lJ,СТВ Microchip С18? 6. 06ъсните ,lJ,етanьно, как cpyнкu.н Delay1 КТCfx нсnользуетс ДЛ отработкн'  миrulнсекундно BpeMeHHO задер>ккн, eCnH снстемная тактовая 4астота равна 4 Mr Ц. 7. nOBTopHTe вопрос 6,lJ,Jl СЛУ4а TaКТOBO 4астоты, paBHO 20 Mru.. 8. V1сnользу 6н6лнотеку delays.h, HanHWHTe KOPOTKYIO nporpaMMY, KOTopa нзме "'IЯeТ COCTOHHe 6HTOBO n03Hu.HH О порта В так, чт06ы в те4еннн O,lJ,HO секунды она Ha I(}ДИлась в е,lJ,ННН4НОМ состояннн н так>ке в те4еннн О,lJ,ной секун,lJ,Ы в нулевом COCTO ....и. C,lJ,eJlaTe nре,lJ,nоло>кенне о том, 4ТО TaКТOBa 4астота МНКРОКОНТРОЛЛGра ра13на .( мrц. 9. HanHWHTe KOPOTКYIO nporpaMMY, KOTopa reHepHPyeT nрмоуrольные нмnульсы : частото 1 Kru. в 6HTOBO nознцнн 2 порта В. 10. HanHwHTe nporpaMMY, KOTopa выnолнет npocrylO проверку всех восьмн !IXO,lJ,HbIX KOM6HHau.H на ЗВХО,lJ,ОВО лоrН4еско схеме NAND (HE-V1), nOAКnI04eHHo к "1IOpTaM BBO,lJ,aBЫBoдa MHKpOKOHTpOJlJlepa. Порт В, 6нты О, 1 н 2 nOAКnlO4eHbI ко входам .1()("И4еско схемы NAND, а 6нт 4 порта А сое,lJ,ннен С ВЫХО,lJ,ОМ лоrнческо схемы. Еслн :)езультат проверки nоло>кнтелен, nOMeCTHTe лоrН4ескуIO e,lJ,HHHu.y В 6нтовую nОЗНЦНIO 3 Ta В, а еслн результат npoBepKH oTpHu.aTeJleH, nOMeCTHTe лоrН4ескн ноль В 6нтовую iOЗнцню 3 порта В. 
184 ITрименение микроконтроллеров PIC 18 11. ИСnOJlLJЗУЯ фУНКЦИIO rand, наnншнте nporpaMMY, которая будет rel Jерироваrь числа для лотереи в ДL/1аnазоне между 1 н 47 на 6нтах порта В микроконтроллера I3ский раз, коrда На>Кимается кнопка, nОДKJlюченна к БL/1ТУ 4 порта А. V1сходите нз Toro, что npH На>Катнн кнопка rС;llерируе r лоrL/1ческий ноль, а при отnусканни  лоrическуlO еднннцу. 12. В чем разница между ДL/1рективамн rom near н rom far? 13. Создайте nOL/1CKoBYIO таблнцу в памяти nporpaMM, которая содержит ASCII коды ЦL/1фР от О до 9 и букв от А дО F. После этоrо наnишнте СРУНКЦИIO, которая бу/еr L/1сrlOЛLJЗОЕШТЬ nонсковую таблнцу дл nреобразовани переданноrо ей символов от О /o 15 в KoAASCII. 14. Объсните, каким образом nознu.нн та6лнu.ы в naMTH nporpaMM L/13 nримс ра 5.11 КОДИРУlOт коды Морзе. 15. Объясннте, как функцн sendDitDah ра60тает в npHMepe 5.11. 16. Сформируйте оператор зыка С, который nРОl3еряет состояние бнтовой nози ции 2 порта В. Еслн этот бнт находитс в состонин лоrнческой единицы, то nporpaMMa должна остановнться на этом операторе, а еслн в COCTOHHH лоrическоrо нул, то про- rpaMMa Аолжна nрОДОЛЖL/1ТЬ свое выполненне. 17. Объсните, как функци Wait4Clock в npHMepe 5.12 О>КНАает завершенн OДHO ro nолноrо u.L/1кла тактовой частоты в битовой nОЗL/1ЦИН 1 порта А. 18. Какое значенне возвраw,ает функци readChar 13 примере 5.12 в СЛУ4ае ошиб ки napL/1TeTa? 19. Какое зна4енне B03Bpaw,aeT cpYHKЦH readChar в npHMepe 5.12 в случае ошиб ки фрейма? 20. Объсните, как rлавна nporpaMMa в npHMepe 5. 13 оnределет шнрнну BXOД Horo снrнала Jlоrическоrо нул нлн лоrнческой единицы в бнтовой nознu.нн О порта В. 21. Каков смысл оператора &ЬоЬ на языке С? 22. Объясните, как оператор states[state]() в npHMepe 5.13 вызывает разлнчные срункцнн, в завнсимостн от зна4енн переменной state. 23. Если TaKTOBa частота в при мере 5.13 6удет нзменена с 4 на 8 Мiц, то что должно быть L/1зменено в nporpaMMe ДЛ Toro, чтобы она работала nравнлыю? 24. V1сnользу заrоловочный срайл math.h, напишите nporpaMMY, KOTopa будет оrlределть емкостное соnротнвление (хс) конденсатора на 1,0 мкФ для частот от 100 'ц до 1000 iu. шаrамн по 100 ,ц. Емкостное соnротивленне оnределется по фор муле:  2лFС' 25. Предnоложнм, 4ТО порт А (6нты О, 1 н 2) влетс входом от цифровоrо кодн- руюw,еrо устройства, которое reHepHpyeT трехразрдный двончный код, коrорый npeA ставлет 45. на каждое nрираw,ение двоичноrо чнсла, ToeCTb 000 = О., 001 = 45., 01 0= 90. н так далее. Напишите фУНКЦНIO с нменем sinPortA, KOTopa счнтывает порт А н B03 Bpaw,aeT сннус уrла. Исnользу срункu.ню sin(bob) 6н6лнотекн math.h library, возвраТL/1те синус уrла ЬоЬ, предполаrа, 4ТО уrол ЬоЬ задан в paAL/1aHaX (360. = 2л radians). Запиши- те длину СРункu.ин, KOTopa сообw,ается IDЕ. 26. Повторите вопрос 25, исnользу nОИСКОВУIO та6лнцу, coxpaHeHHYIO в naMHL/1 nporpaMM, дл возврата тех же значеннй, которые рассчитывались в вопросе 25.CpaB нин: длину этой функцнн С срункцией, написанной вами npL/1 работе над вопросом 25. 27. Как вы СЧL/1таете по результатам ра60ТЫ над BonpocaMH 25 и 26, являются ли поисковые таблиu.ы важным средством СОЗ,lJ,анн nporpaMMHoro обеспечения для YCT ройств С оrраниченным объемом naMTH  такнх, например, как мнкроконтроллеры? ): 
rnaBa 6. Спецнфнкацнн аппаратных Cpe.u.CTB семейства PIC 18 185 rЛАВА 6. Спецмфмкацмм аппаратных среАСТВ семейства PIC18 Прежде, чем может 6ыть создана снстема на основе лю60rо МНКРОКОlIтроллера :емейства PIC18, должно 6ыть достнrнуто полное nОllиманне срункцноналыюrо назна -jения ero выводов, а так>ке CPYHKu.H, реалнзованных в конкретном мнкроконтроллере. Эта rлава onHcbIBaeT характернстнкн семейства PIC 18 как по nOCTOHHOMY, так и по пе земенному току, схемы сннхроннзацнн, тре6уемые ДЛ срункu.нонироваllИ PIC18, а акже nрнводнт cyw,ecTBeHHo Ba>KHYIO ннсрормацнlO в отношеннн ра60ТЫ некоторых нз fСТРОЙСТВ BBO,lJ,aBЫBoдa, HMelOw,Hxc внутрн мнкроnроцессоров PIC18. ВНУI'реllние fстройства, не рассмотренные в зтой rлаве, 6удут рассмотрены в nоследуюw,нх rлавах, -iарду с cooTBeTcTBYIOW,HMH nрнло>кеннмн. После НЗУLlенн 3ТОЙ rлавы Вы: 1. Смо>кете nравнльно орrаннзовать электроnнтанне мнкроконтроллера, OnHcaTb ero характеристнкн по nocToHHOMY току н nравнльно нх нсnользовать. 2. Сможете детально onHcaTb раЗЛИ4Н в мнкросхемах МИКрОКОlIl роллеров ce 'Аейства PIC 18. 3. Сможете характернзовать мнннмальные н макснмальные наnряженн н токи на выводах Ввод  Вывод н на выводах ДЛ nОДКЛ104енн nнтания. 4. Сможете НСnОЛЬЗ0вать сторо>кевой таймер. 5. Сможете nporpaMMHpoBaTb выводы портов. 6. Сможете coxpaHTb н С4нтывать данные нз 3СnnЗУ данных. 7. Узнаете о npepbIBaHHx н смо>кете nHcaTb nporpaMMbI на зыке С, нсnользуlO щие npepbIBaHH. 8. Смо>кете OnHcaTb внутреннне nepHcpepHHbIe YCTpOCTBa мнкроконтроллеров семейства PIC18. 9. V1сnользовать TaMep, а так>ке модуль cpaBHeHH н с60ра данных в прнкла[J,IIЫХ nporpaMMax. 6. 1. Цоколевка выводов и базовые операционные характеристк Как у>ке отме4алось в rлаве 2, мнкроконтроллеры семейства PIC 18 Moryт нмеТЬ разные нсnолненн. 3тот подраздел OnHCbIBaeT деталн этнх нсnолненнй, а также cne цнфнцнрует Tpe60BaHH относнтельно nотре6лемой MOW,HOCTH по постоянному току н наrрузочнуlO cnoc06HoCTb мнкроконтроnлеров. 3тн знанн не06ходнмы npH разработке снстем, cnoc06HbIX срункцноннровать nродол>кнтельное BpeM. Цоколевка вьшодов Cyw,ecTByeT orpoMHoe колнчество BepCH мнкроконтроллеров семейства PIC18, начнна от 18BЫBOДHЫX корпусов Н заканчнва 128BЫBOДHЫMH KopnycaMH. Чтобы BЫ брать nравнльны мнкроконтроллер AfI KOHKpeTHoro npHMeHeHH, не06ходнмо блнзкое знакомство с раЗЛН4НЫМН варнантамн u.околевкн выводов. Мнкроконтроллеры семей ства PIC18 nронзводтс в сле,lJ,УIOw,нх варнантах корпусов: PDIP (пластмассовый двух рдный корпус), SOIC (мала ннтеrральна схема ДЛ nOBepxHocTHoro монтажа), PLCC (пластмассовы 6езвыводно КОРПУС), QFN (KBaдpaTHЫ nлоскнй 6езвыводной), QFP (квадратный nлоскнй), ТОРР (TOHKH KBaдpaTHЫ nnоскнй), LQPP (ннзкоnросрнльный KBaдpaTHЫ nлоскнй) н SSOP (маJlЫЙ КОРПУС занн>кенноrо nросрнл). Все зтн корпуса, за 
186 ITpHMeHeHHe MHKpOKOHTpOnnepOB PIC 18 НСКЛlOчением PDIP н PLCC, разра60таны AfI nOBepXHoCTHoro монта>ка н не НСnОЛЬЗУlOт C npH работе с npoToTHnaMH. Рнс. 6.1 нллюстрнрует названные варнанты корпусов. PDIP 06ычно НСnОЛЬЗУlOтс AfI ра60ТЫ с npoToTHnaMH снстем, а корпуса с nОlЗерхност- ным монтажом НСnОЛЬ3УlOтс в npoMbIwneHHbIX нзделнх. //' 1\J  /' J ' · }-  i  . ) PDIP PLCC ..............., // '.''-, //..,/ '-'-, f...... > .  ,./;] '- ,. ''-O/ "-','r/ QFP /... .    LQFP \; , /'.......... /'  SOIC Q QFN ../;.,......................  TQFP //"" ,,'/ ........ ,,'" ...... ;;t/.  SSOP Рис. 6.1. Варнанты корпусов мнкроконтроллеров. 
rnaBa 6. СnецнФнкацнн аппаратных Cpe.u.cTB семейства PIC 18 187 PDIP, SOIC RAO/ANO ...... АА 1/AN1/LVDIN ....... RA4rrOCKI ...... McLRN pp/RA5........... V55/AV55........... RА3IАNЗNRЕF+ ........ ABO/AN4/INTO ........... AB1/AN5rrx/...... СК/INТ1 MCLAN pP/AE3 ............... о 1 ААОI ANO ....... 2 АА 1/ AN 1........ 3 AA2IAN2NREF-/CVREF ........ 4 AA3IAN3NREF+ ........ 5 RA4rrOCKIIC 1 OUT ......... 6 RA5/AN4 /551lV DIN/C20UT ........ 7 V 55 ............ 8 05C1/CLKI/AA7 ......... 9 05C2ICLKO/AA6........ 1 О RCOrr1 050rr1 CКI......... 11 AC1rr10sl/CCP2*........... 12 АС2/ССР1/Р1А........ 13 АС3IsСК/sСL........ 14 ...... АВ3IССР1/Р1А ....... AB2IP1 B/INT2 ........ OSC1/CLКI/RA7 ...... OSC2ICLKO/RA6 ............ Voo/AVoo R67/PGDrr10511 .......... Р1 D/КВIЗ ...... RB6/PGCrr1 0501 Т1 ЗСКl/Р 1 C/KBI2 .......... RBS/PGM/KBI1 .......... АВ4/ AN6/RXI ОТ/КВIO 18Р1230/1330 .......... RВ7IКВIЗ/РGD .......... AB6/KBI2/PGC ............ AB5/KBI1/PGM .......... АВ4/АN111КВIO .......... RВЗlАN9/ССР2* .......... AB2/AN8/1NT2 .......... АВ 1/AN1 OllNT1 ......... RBO/AN121INTO ........... V()D ........... V 55 .......... AC7/AXlDT .......... RC6rrX/CK ......... АС5/5ОО ....... AC4/SDI/SDA 00 C'\IN C'\I('I) C'\IN LLLL со со т- т- ()() 0:0: PJC18F2220/2320 Рис. 6.2. HecKoJlbKO npe,lJ,CTaBHTeJle мнкросхем ceMeCTBa PIC18 в KopnycaxTHna PDIP н SOIC (на4ало) 
188 ITpHMeHeHHe MHKpOKOHTpOnnepOB PIC18 MCLRN pp/RE3 ..........-... ААО/ ANO ............... АА 1/AN1 ........ . RA2/AN2NREr./CVREF .............. RA3/AN3Nf1EF+ .. RА4IТОСКl/СlОUТ  АА5/ AN4iss/LVDIN/C20UT ....... REO/AN5/ RD  RE1/AN6IWR ............. RE2/AN7 /CS ---------- V оо -----...... VSs OSC1/CLKI/RA7 .............. OSC2/CLKO/RA6 .............. RCOIТlOS0IТ1CKI ............. RС1IТlОSI/ССР2* ............... RC2/CCP1/P1A ............. RC3/SCКlSCL ... RDO/PSPO .......... RD1/PSP1 ---------- [ МСLRN рр/RЕЗ  Q 1 RAO/ANO ........... 2 RA1/AN1  3 RA2/AN2NREF- ........... 4 RА3/АN3NПЕF+ ............. 5 RA4rrOCКI ........... 6 RA5/AN4/ss/HLVDIN............ 7 V 88 -----+- 8 OSC1/CLКI/RA7 ............... 9 OSC2/CLKOlfiA6 +------ 1 О RCOIТ10s0rr13CКI......... 11 RС1rrюsl........... 12 Ас2/ССР1.......... 1 3 RСз/sСК/sсL........... 14 18Р4220/4320 18п480/2580  RВ7/КВI3/РGD ...... ПВ6/КВI2/РGС  RB5/KBI1/PGM  RB4/AN11/KBIO 36 ................. RB3/AN9/CCP2* 35 ' ............... RB2/AN8I1NT2 34 ..... RB1/AN10/INT1 33  RBO/AN12/INTO 32  Voo 31 ............... Vss ЗО ..-....-... RD7/PSP7/P1 [) 29  RD6/PSP6lP1 С 28 ............... RDS/PSP5/P1 В 27 ................ RD4/PSP4 26 ............... АС7/АХ/ОТ 25 ............... АС6/ТХ/СК 24 ...-..-.. RC5/SDO 23 .... fiC4/SDIiSDA 22 .........-... RD3/PSP3 21 ............... HD2/PSP2 о о N N N М '<t '<t LL LL (х) (х) ..... .....  а. а. 00 (х)со '<tU') "'''' LLLL (х)со ..... ,... ОО а.а.  RB7/KBI3/PGD ...... RB6/KBI2/PGC .......... flB5/KBI1/PGM  RB4/KBIO/AN9 ....... RB3/CANRX ......... RB2/INT2/CANTX ........... RE31/INT1/I\N8 ......... RBOIINTO/AN10 ........... VOO ........... VSS ......... RC7/RX/DT ........... RС6IТХ/СК RC5/SDO .......... RC4/SDI/SDA Рис. 6.2. Несколько nредставнтелей мнкросхем семеЙСТlЗа PIC18 в корпусах THna PDIP и SOIC (продолженне) 
rnaBa 6. Сnецнфнкацнн аппаратных Cpe.u.cTB семейства PIC 18 189 МСLR/V Рf'/RЕЗ 1 RAOIANO/CVREF 2 АА 1/AN1.............. 3 RA2I АN2NЯЕF- 4 RАЗ/АNЗ/VRЕF+ ............... 5 RA4rrOcКl.............. 6 RA5IAN4 /ss/ HLVDIN............. 7 REO /RO/ AN5  8 RE1 IWR/ AN6/C1OUT  9 RE2/ cs/ AN7/c20UT............... 10 VDD ............... 11 Vss............... 12 Osc1/cLКI/RA7............... 13 Osc2lcLKO/RA6............... 14 RСО/Т1ОS0/Т1 зсКl............... 15 RС1rrЮSI  16 Ас2!ссР1............... 17 Rc3/scКlscL............ 18 RDO/PsPO/c1IN+............... 19 R01/PsP1/c1IN-.............. 20 'v 00 фф '<;f'U') 'O:to::t IJ..IJ.. фф ,... ,... 2 а.а. 18Р4480/4580 40 ......--.. RВ7/КВIЗ/РGО 39 ............... RB6/KBI2!PGC 38 ............... RB5/KBI1/PGM 37 ............. АВ4/КВIO/ AN9 36 ............... RB3/CANRX 35 ............... RB2/INT2/CANTX 34 .............. RB1/INT1/AN8 33 ............... RBO/INTO/FLTO/AN1O 32 ............... VOD 31 ............... Vss 30 .....---. RD7/PSP7/P1 О 29 ............... R06!PSP6/P1 С 28 ............... RD5IPSP5IP1 В 27 ............ R04/PSP4/ECCP1/P1A 26 ............... АС7/АХ/ОТ 25 ............... RC6rrX/CK 24 ............... RC5/SDO 23 ............. RC4/SDI/SOA 22 ............... RDЗ/РSРЗ/С2IN- 21 ............ R02!PSP2!C2IN+ Рис. 6.2. Несколько nредставнтелей мнкросхем ceMeCTBa PIC18 в корпусах THna PDIP н SOIC (ОКОН4ание) Рнс. 6.2. НЛЛlOстрнрует u.околевку выводов некоторых мнкроконтроллеров семей ства PIC18. nоказанные npHMepbI ВЛIOТС THnOBbIMH ДЛ семейства МНКРОКОIIТРОJJле ров PIC18, npH этом в нх состав не BXOДT мнкросхем 18F242/248/252/258/448/458, исnользованне которых в новых npoeKTax не peKOMeHдyeTC срнрмой Microchip, в связи со CHTHeM нх с nронзводства в не,lJ,алеком 6удуw,ем. )J,л ознакомленн с полным ne- речнем доступных в HacTow,ee BpeM устройств семейства 18F, noceTHTe сайт фнрмы Microchip. В 06w,eM CJlY4ae npH нсnользованнн 18BЫBOДHЫX мнкросхем с KopnycaMH PDIP, BBOДBЫBOД 6удет оrраннчен nopTaMH А н В; nopTaMH А, В н С npH нсnользованнн 28-выводных BepCH мнкросхем н nopTaMH А, В, С, D н Е npH нсnользованнн 40BЫBOДHЫX корпусов. YCTpOCTBa paccMaTpHBaeMoro ceMeCTBa в 60лее, чем 40-выво,lJ,НЫХ корпусах THna PDIP не BnIOTc 06w,едостуnнымн, поэтому здесь онн Не paCCMaTpHBaIOTCJ н60 моrлн 6ы возннкнуть трудностн npH созданнн nрототнпов. Как только этн младwне верснн корпусов 6удут нзучены, мы сможем леrко nереклIOЧНТI:)С на L/1зученне корпусов ДЛ nOBepxHocTHoro монтажа с 60ЛЬШНМ колнчеством в ЬIlЗОДОЕЗ , поскольку все члены семейства во всем остальном ндентнчны. ЕДННСТЕЗенное разлнчие" заKJllOчаетс в cnoc06e установкн мнкросхемы (THn корпуса), д06авленнн дополннтеJlЬ- ных выводов ДЛ BBoдaBЫBoдa, а так>ке в некоторых доnолннтельных CPYHKu.HX, KOTO рые реаЛНЗ0ваны в BepCHX мнкросхем с MeHbWHM КОЛН4еством выводов. Выводы для подключеция напряжения питания' Как н в Л1060 ннтеrрально схеме на полевых МОnтранзнсторах, ДЛ подачи номннальноrо Hanp>KeHH nHTaHH, paBHoro +5В (3ТО Hanp>KeHHe может снн>каться до 4,2 В ДЛ 06ecne4eHH макснмальноrо 6ыстродействн) нсnользуетс вывод VDD; ДЛ51 nОДКЛlOченн землн СЛу>кИТ вывод VSS. Все выводы VDD н VSS должны 6ыть nОДKJlI04е ны к нсточннку электроnнтанн, ВKJllOча те верснн МНКрОКОНТрОЛJJероЕЗ, которые имею r 60лее одноrо вывода VDD илн VSS. Во всех случах макснмально доnустнмое напряже 
190 ITpHMeHeHHe микроконтроnnсров PIC18 нне питанн нормируетс уровнем + 7,5 В. Микросхемы nОЗВОЛЯlOт нспользова',1, самые различные нсточникн электроnнтанн, ВKJllOча 6атареи. V1меется также l3ерсня микро контроллера со снн>кенным nотре6леннем MOW,HOCTH (PIC18L), в которой допускается, чтобы наnрженне nHTaHH опускалось 6ы до YPOBH 2,5 В npH ра60те с полным 6ыст- родействнем. МИКРОКОНТРОJlJlер - зто устройство выполнено на KMOnCTpYKTypax, с которым нужно работать cooTBeTcTBYIOW,HM образом. Мнкросхема может 6ыть nOBpe>K дена злектростаТН4ескнм разрдом (ESD). УДОСТОl3ернтесь в том, что МИКрОКОНТрОJlJlер храннтся в антнстатнческом заw,нтном корпусе до тех пор, пока 011 не установлен в схе- му, а также в том, что при ра60те с ннм nрименяютс надлежаw,не методы. OHLI1 I3КJ'IO чаlOТ nравнльное заземленне, а также ра60ТУ 13 среде с надлежаw,ей шIaжIюстыо (СВЫ- we 20%). Прн ра60те с мнкроконтроллером, всеrда одевайте на руку заземляющий 6раслет, а также у6еднтесь, что pa604a зона заземлена надлежащнм образом. Если некоторые нз входов мнкроконтроллера не НСnОЛЬЗУlOтс, не06ходнмо нх nОДКЛlOчнть на 06щнй провод нлн к нсточннку питанн, как Toro тре6ует теХНН4сское оnнсание на мнкроконтроллер. НеnОДКЛlOченных выводов 6ыть не Дол>кно. 3лектростатнческнй раз pд на «BHC4H» вывод, приведет к выводу нз CTpO мнкросхемы. В обw,ем случае ток nотре6ленн оnределетс тактовой частотой, 011 может нметь днаnазон от 60 мкА npH ра60те с тактовой частотой в 31 кrц до 12 мА и выше, коrда нсnользуетс TaKTOBa 4астота 40 Mru.. Макснмалыюе зна4енне тока мо>кст дoc THraTb 300 мА, а макснмальное значенне MOW,HOCTH, рассеНl3аемой устройством, равно 1 Вт. Величина тока nотре6ленн нзменетс в завнсимости от таКТОL30Й чаС10"'Ы н Ha rрузко на выводах ввод - вывод, однако она указываетс в техническнх данных кон- крепюrо устройства дл определенной частоты. Наrрузка на ВЫL30дах дл ввода - L3bIBO- да дол>кна 6ыть определена дл KOHKpeTHor.o nрнложени н д06а13леlla к МОW,IЮСТН, по- треблясмой мнкроконтроллером. В неnосредственной 6лизостн от ннтеrрально схемы ДОJl>кен 6ыть установлен развзываlOw,нй конденсатор eMKocTblO 0,1 мкФ, ШУНТНРУIOw,н вывод VDD на 06w,ий провод (вывод VSS). Микроконтроллер PIC пронзводнт 60льшое КОЛН4ество внутренне- ro nереКЛlOчательноrо WYMa, KOTOpЫ может nередаватс на друrне компоненты CHC темы 4ерез WHHbI nHTaHH. ПО 3TO nрнчнне налнчие развзываюw,еrо конденсатора 06зателыю. 3тот ВЫСОК04астотный WYM reHepLl1pyeTc всякн раз, коrда внутрен- ннй KJlЮЧ на полевом МОnтранзнсторе замыкаетс нлн размыкаетс, вызыва броскн тока на выводе nHTaHH. Все цифровые ннтеrральные схемы nронзводят этот THn wy МО13, поэтому выводы nHTaHH дол>кны шунтироватьс. Да>ке лннейный УСИЛИТCJII, такой как onepau.HoHHbI уснлитель, reHepHpyeT шумы н наЛН4не конденсаторов разL3ЯЗКИ на выводах nHTaHH обзательно. Подключения BBoдaBывoдa Характернстнки ВВО,lJ,а - вывода весьма ва>кны AfI орrаннзацнн взанмодествн с друrнмн устройствамн. Характернстнкн ннтерфейса мнкроконтроллеров nеречнслены в та6л. 6.1. В зтой та6лнu.е макснмальные токн лоrнческоrо нул н еднннu.ы указаны совместно с cooTBeTcTBYIOW,HMH днаnазонамн Hanp>KeHH. Указанных значеннй нсоб ходнмо твердо nрндер>кнватьс, еслн выходы нсnользуютс ДЛI уnравленн лоrиче скнмн схемамн. В друrнх случах (как, HanpHMep, npH уnравленнн светоднодами н т.д.) сраКТН4ескнй максимальны выходной ток равен 25 мА дл лоrнческоrо нул или Jlоrи- ческой еднннu.ы npH условнн, что не nревышен общнй ток потребления мнкросхемы мнкроконтроллера. Еслн Вывод ввода  вывода нмеет сла6ую наrрузочнуlO способность (порт В н порт D в некоторых BepCHX мнкросхем), как это 6удет OnHCbIl3aTbC в 1l0сле- ДУIOw,нх раздеJlах, то макснмальны входной ток 6удет равен 400 мкА. Еслн Tpe6yeTC 
rnaBa 6. Сnецнфнкацнн аппаратных среДСТВ семейства PIC18 191 ток, nревышаlOw,и peKOMeHдyeMЫ, то в ка4естве HHTepcpeca BBoдa вывода ИСnОJlЬ- зуетс УСИJlитеJlЬ. В 06w,eM CJlY4ae ток на выходном выводе 6удет достаТ04НЫМ ДЛ уnраВJlени 4eTыpbM стандартными ТТЛ-мнкросхемами ИJlИ 10 высокоскоростными KMOn-микросхемами. ЕСJlИ ИСnОJlЬ3УIOТС иные зна4ени наnр>кени питания, то 06 paw,aTecb к теХНИ4еским данным на МИКрОКОНТрОJlJlер AfI nОJlУ4ени доnолнитеJlbl'lЫХ сведени о токе nотре6Jlени и токах на выводах мнкросхемы. Таблица 6.1. ЛоrИ4еские уровни на выводах «ввод-вывод» при VDD = +5,0 В. Лоr. уровень Vmin Vmax Imax О ВХОА 0.0 В 0.8В :t1.0 мкА 1 ВХОА 2.0 В 5.0В :t1.0 мкА О BXOA 0.0 В 0.6В 8.5 мА 1 BXOA 4.3 В 5.0В 3 МА *MaKCMManbHO AonycTM 06 ток MMKpocxe равен 200 мА npM BnnOTb АО 25 мА на KaA BBOA, npM YCnOBMM, 4ТО npeAen в 200 мА не npeBweH AnR всей микро" cxeM, а ее BXOД не nOAKn4eH ко ВХОАам nоrИ4ескмх схем. Сброс An nраВИJlЬНО ра60ТЫ ми KpOKOHTpOJlJlepa, AOJl>KHa 6ыть nраВИJlЬНО выполнена оnераu.и nриведени ero в исходное состоние ИJlИ с6роса. BXOДHO Вывод МGbR - зто Вывод 06w,ero с6роса, KOTOpЫ иниu.иanизирует МИКрОКОНТрОJlJlер таким 06раЗ0М, 4ТО он на4инает ра60ТУ, вы6ира команду И3 HYJleBO 4еки naMTH, KOTopa Ha3ЫBaeTC адресом вектора с6роса. ECJlH питание растет со CKOpOCTblO 0,05 В/мс (минимумом), то TorAa резистор с номинаJlОМ от 1 кОм до 1 О кОм nOAKJlI04aeTC Me>K,lJ,Y входом MGl::R и + 5.0 V, при зтом внутреннне схемы автомаТИ4ески c6paCbIBalOT МИКрОКОНТрОJlJlер. ЕСJlИ скорость роста наnря>кенн неJlЬ3Я rарантировать, как со всеми nрнмерами в 3TO кни- re, потому 4ТО характер НСТ04ника nитани неизвестен, то схема, ИJlЛlOстрируема рн- сунком 6.3, nраВИJlЬНО с6расывает МИКрОКОНТрОJlJlер. 04ень 4асто HOpMaJlbHO раЗ0МК- HYТЫ KHon04HbI переKJl104атеJlЬ ИСnОJlьзуетс AfI PY4Horo с6роса МИКрОКОНТрОJlJlера (зта кнопка с6роса мо>кет 6ыть CHTa, eCJlH PY4HO с6рос не Tpe6yeTC). RCnoCToHHa времени u.еnи с6роса AOJl>KHa 6ыть Me>K,lJ,Y 1 О мс И 20 мс. Схема на рис. 6.3 имеет no- CTOHHYIO времени АС, paBHYIO 1 ОК х 1.0 мкФ ИJlИ 1 О мкс. МИКрОКОНТрОJlJlер так>ке c6paCЫBaeTC при следуlOw,их УСJlОВИХ в ДОnОJlнение к зазеМJlеннlO вывода 06w,ero с6роса: 1. С6рос по сторо>кевому TaMepy (WDT) 2. nроrраммируемы с6рос по 4аСТИ4НО потере nHTaHH (ВОА) 3. KOMaндo RESEТ (Reset) при 06раw,енин к cooTBeTCTBYIOw,e срункu.ии на 3ЫKe С. 4. С6рос по заnОJlнениlO стека 5. С6рос по потере зна4ИМОСТИ стека nрОХО>K,lJ,ение сиrнаJlа 06w,ero с6роса от входа 06w,ero с6роса разрешаетс на языке С оператором #pragma config MCLRE = ON. ЕСJlИ он не разреwен, то TorAa BЫ nOJlHeTC с6рос по росту наnр>кени nитани, КОНТРОJlируемоrо на выводе VDD при УСJlОВИН, 4ТО ero нарастание соответствует тре60ваним теХНН4еских данных. Входом o6w,ero с6роса становитс 6ит BBoдaBЫBoдa порта А, еСJlИ вход 06w,ero с6роса дезак тивирован оператором #pragma config MCLRE = OFF. ФаКТН4еский номер штырька и позиu.и 6ита порта onpeAeJlIOTC версие МИКрОКОНТрОJlJlера. Во мноrих СЛУ4аях KOH денсатор с6роса н резистор тре6уIOТСЯ AfI Toro, 4т06ы rарантировать nраВИJlьное вы- ПОJlнение оnераu.ии с6роса. '" 
192 ITpHMeHeHHe MHKpOKOHTpOnnepOB PIC18 vcc R1 10К SW1 С::О:::::.  j MCLR Сброс С1 1.0 uF Микро контроллер Рис. 6.3. Цепь с6роса МL/1кроконтроллера PIC18 Команда #pragma config на 3ЫKe С определяет СОСТОЯНL/1е 6L/1TOB КОНсрL/1rураЦL/1L/1 микроконтроллера. ЭТL/1 6L/1TbI pa3Mew,eHbI в пространстве nамти nporpaMMbI, которое является доступным только 4ерез ИСnОЛЬЗ0вание команд та6ЛL/14ноrо 4тения L/1 заПL/1СL/1 по адресам от ОхЗООООО до Ox3FFFFF. ВВL/1ДУ значителы-юrо КОЛL/14ества работы, Tpe буемой ДЛ Toro, 4тобы L/1зменить 3TL/1 Я4еЙКL/1, язык С реаЛL/1зует команду #pragma config ДЛ зтой зада4L/1. БL/1ТЫ КОНсрL/1ryрации Moryr так>ке L/1зменяться в MPLAB IDЕ на вкладке Сопfigurаtiоп (KoHcpL/1rypau.L/1) rлавноrо MeHlO, НО HaMHoro 60лее ОnL/1сателы-ю зто бу дет, еСЛL/1 КОНсрL/1rУрL/1рование 6удет выполнено с nOMow,blO оператора #pragma config. Сторожевой таймер. Сторо>кевой таймер (WDT) - зто внутренний С4еТ4ИК, KOTO рый сбрасывает МL/1кроконтроллер по L/1CTe4eHL/1L/1 заданноrо nepL/1oAa BpeMeHL/1. Этот таймер мо>кет npOrpaMML/1pOBaTbc. WDT мо>кно ВKJlЮ4ать ИЛL/1 ВЫКЛI04ать, L/1СnОЛЬ3УЯ команду #pragma config ИЛL/1 >ке cooTBeTcTBYIOw,L/1e команды nporpaMMbI на языке Ac семблера. На языке С команда #pragma config 4асто L/1сnользуется для Toro, 4т06ы включать L/1ЛL/1 отключать WDT дЛЯ всей nроrраммной CL/1CTeMbI. WDT работает при пе pL/1oAe тактовой 4астоты равном 4 мс. Тактовая 4астота rенеРL/1руется BlJyrpeHHL/1M reHe- ратором. WDT масшта6L/1руетс с КОЗсрсрL/1u.L/1ентом от 1 до 32К, как зто nоказано 13 та6л. 6.2 и мо>кет OTC4L/1TbIBaTb время в AL/1ana30He между 4 мс L/1 131 секундой. Друrая команда KOHcpL/1rYPL/1pOBaHL/1 L/1сnользуетс ДЛ Toro, 4т06ы ВKJlЮЧL/1ТЬ WDT. #pragma config WDT = ON/OFF L/1сnользуетс на 3ЫKe С и WDT ON2H или _WDT _OFF _2Н (ДЛ 18F1320) L/1сnользуется на Ассем6лере. ПРL/1мер 6.1 ИJlJ1IОСТРL/1рует BepCL/1L/1 cooTBeTcTBYIOW,L/1X команд как на 3ЫKe С, так и 3ЫKe Ассем6лера, ВКЛI04аlOw,L/1G WDT L/1 задаюw,L/1е КОЗсрсрL/1u.L/1ент масшта6L/1роваНL/1, равный 4, который npOrpaMML/1pYGT WDT на сброс микроконтроллера по L/1CTe4eHL/1L/1 16 мс. 
rnaBa 6. Сnецнфнкацнн аппаратных Cpe.u.cTB семейства PIC18 193 Пример 6.1 '/ комаНАЫ R3Ka С АnЯ всех 4neHoB ceMeCTBa 18F 'pragma config WDT ON 'pragma config WDTPS =4 ; KOMaHД R3Ka ,AcceM6nepa ДnR PIC18F1320 TaMaYT WDT равен 16 мс CONFIG CONFIG2H, WDT ON 2Н WDTPS 4 2Н Оператор С tpragma config 'pragma config 'pragma config 'pragma config 'pragma config 'pragma config tpragma config tpragma config tpragma config tpragma config tpragma config tpragma config 'pragma config tpragma config tpragma config tpragma config WDTPS WDTPS WDTPS WDTPS WDTPS WDTPS WDTPS WDTPS WDTPS WDTPS WDTPS WDTPS WDTPS WDTPS WDTPS WDTPS 1 2 4 8 =16 32 64 128 256 =512 1024 2048 4096 8192 16384 32768 Таблица 6.2. Аоnустимые козсрсрициенты масшта6ировани CTOpO>KeBOrO таймера Язшс Ассемблера WDTPS12H WDTPS22H WDTPS42H WDTPS82H WDTPS162H WDTPS322H WDTPS642H WDTPS1282H WDTPS2562H WDTPS5122H WDTPSI0242H WDTPS20482H WDTPS40962H WDTPS81922H WDTPS163842H WDTPS327682H Коэфф. масшт. 1: 1 1: 2 1: 4 1:8 1:16 1:32 1:64 1:128 1:256 1:512 1:1024 1:2048 1:4096 1:8192 1:16384 1:32768 Время до сброса 4 мс 8 мс 16 мс 32 мс 64 мс 128 мс 256 мс 512 мс 1.024 с 2.048 с 4.096 с 8.192 с 16.384 с 32.768 с 65.536 с 131.072 с риме4ание: rronH сrrисок команд R3Ka AcceM6nepa имееТСR во BKnqaeMOM ane хикроконтроnnера PIC18F (здесь в KaqeCTBe иnnстраuии исrrоnьзуеТСR микрокон тponnep PIC18F1320) WDT заnускается nOCJle с6роса МИКрОКОНТрОJlJlера, он на4инает ОТС4итывать Bpe мя с интерваJlами в 4. В примере 6.1 интерваJl С4ета равен 4етыре периода по 4 мс ишt 16 мс. nOcJle ра60ТЫ nporpaMMbl в те4ении 16 мс WDT ИНИЦИaJlизирует с6рос. 3то no- З80лет с6расывать систему при nереnОJlнении WDT в CJlY4ae c60 nporpaMMHoro 06ec neчени. Если проrрамма срункu.ионирует HOpMaJlbHO, WDT nерезаnускаетс 6ез ини- ЦИaJ1изации с6роса, nOMew,a команды SLEEP (SleepO на С) ИJlИ CLRWDT (ClrWdt() на С) '. В HOpMaJ1bHYIO nOCJleAOBaTeJlbHOCTb команд nporpaMMbI (см. при мер 6.2). WDT мо>кет таюке 6ыть BKJl104eH (Jlor. 1) HJlH BblKJl104eH (Jlor. О) с ИСПОJlьзованием 6ита SWDTEN pe rистра WDTCON. ЕСJlИ nporpaMMa зависнет, то WDT не 6удет с6рошен срункцией ClrWdtO и nроизойдет с6рос системы. nерезаnуск системы, в этом примере, nроисхо дит по исте4енни 16 мс. TaKa ос06енность 4ре3ВЫ4айно Ва>Кна в системах, которые ДOJl>KHbl срункu.ионировать непрерывно 6ез с60ев. Во06разите TOJlbKO, 4ТО WDT OTCYТCT вует В снстеме анти6JlОКИРОВКИ ТОрМ030В автом06ИJlЯ (ABS) и nporpaMMa за6Jlокнрова лась, KorAa BOAHTeJlb Ha>KaJl на ТОРМ03! При наJlИ4НИ WDT система с6роситс и заnус титс вновь. И да>ке ew,e худwи CJlY4a: 4ТО 6удет, еСJlИ KOHTpOJlJlep управления зажи- fЗннем "зависнет", KorAa Baw aBTOM06HJlb HeceTC по автостраде со CKOpOCTblO 70 миль в час? 
194 ITpHMeHeHHe MHкpOKOHTpOnnepOB PIC18 Пример 6. 2 II OnepaTop на Rзыке С ДЛR всех BepCM ceMeCTBa 18F void MAin(void) while (1) { // cMcTeMHbrn UMКn CIrWdtOi // с6рос cTopoeBoro TaMepa // 3Аесь BCTaBnReTCR смстемное rrporpaMMHoe 06ecrre4eHMe R3bIK AcceM6nepa . ) MAin: CLRWDT ; с6рос cTopoeBoro TaMepa здесь BCTaBnReTCR смстемное rrporpaMMHoe 06ecrre4eHMe GOTO Main Сброс при частичной потере питания. С6рос при 4аСТИ4НОЙ потере nитани (ВОА) nерезаnускает систему вски раз, KOr,lJ,a наnр>кение nитани nони>каетс ниже предварительно заnроrраммированноrо ypOBH. БУДУ4И nерезаnуw,енным, МИКрОКOI-i троллер не на4инает ра60тать, пока наnр>кение nитани не поднимется выше предва рительно заnроrраммированноrо ypOBH. 3тот с6рос останавливает систему и nереза пускает ее, если по како-ли60 nРИ4ине наnр>кение nитани сни>каетс ни>ке предва- рительно заданноrо зна4ени. Снижение наnр>кени моrло 6ы 6ыть вызвано neperpy3- KO или в СЛУ4ае 6aTapeHoro nитани  севшими 6атареми. С6рос ВОА nредотвраw,а ет nporpaMMHbIe с60И в сиryаu.их, свзанных со сни>кением наnр>кени nитани. no- poroBoe зна4ение наnржени, иниu.иаЛИЗИРУIOw,ее с6рос по 4аСТИ4НО потере nита ни, nроrраммируlOТС, ИСnОJlЬ3У ry >ке caMYIO мето,lJ,ИКУ консриryрировани, 4ТО и при nроrраммировании WDT. В Ta6Jl. 6.3 nере4ислены параметры и уровни наnр>кени ДЛ ВОА. ВОА разрешаетс консриryРИРУlOщим зна4ением ВОА = ON и заnреw,аетс значе нием ВОА = OFF. Предnоло>ким, 4ТО в системе ДЛ ВОА исnользуетс noporoBoe значение lIanp >кение nитани, равное 4,2 В. Пример 6.3 ИЛЛlOстрирует операторы языка С, устанаuли вающне ВОА. Таблица 6.3. Уровни наnр>кени с6роса по 4аСТИ4НОЙ потере наnр>кени nитани Язк С Язк AcceM6nepa HanpReHMe с6роса по потере nMTaHMR #pragma config BORV 45 BORV 45 2L 4.5 В  #pragma config BORV 42 BORV 42 2L 4.2 В  #pragma config BORV 27 BORV 27 2L 2.7 В  #pragma config BORV 20 BORV 20 2L 2.0 В Прмме4анме : указанне уровнм наnрRенмя MorYT 6Tb MHbIМM В ApyrMx ммкрокон- Tponnepax, n03ToMY 06paaTeCb к теХНМ4ескмм дaHH на MMKpOKoHTponnep MnM к справке по 6мтам KOHMrypMpoBaHMR комnмnятора С18 (здесь в ка4естве MnncTpa- UMM pacCMaTpMBaeTCR MMKpOKoHTponnep PIC18F1320) . 
rnaBa 6. СnеЦНфl;(кацнн аппаратных cpe.u.CTB семейства PIC18 195 Пример 6. 3 tpragma config BORV tpragma BOR = ON 42 /1 установка rroporoBoro наrrрRеНИR с6роса на 4.2 В Сброс стека. Стек никоrда не nepenOJlHeTC н не onycTowaeTc при нормальной ра- 6оте nporpaMMbI., Если по KaKO- Jlи60 nРИ4ине возннкает c60 в системно nporpaMMe, то может возникнутЬ nереnолнение лн60 оnустоwение стека. Опустошение стека вызывается слншком 60JlЬШИМ КОJlИ4еством возвратов или оnераu.и выталкивани адресов И3 стека, а переnОJlнение стека BЫ3ЫBaeTC СJlИШКОМ 60JlЬШИМ КОJlИ4еством ВЫЗ0ВОВ срункци ИЛLl1 one раци вставки адресов в стек. ЕСJlИ nРОИСХО,lJ,Нт одна Н3 названных оши60К, то снстема aBTO маТИLlески c6paCЫBaeTC, еСJlИ зтот вид с6роса разрешен. С6рос стека разрешает- ся/заnрещаетс командой #pragma config SТVR = ON/OFF. nереnОJlнение nроисходнт, eCJlH 6ольше 4ем 31 адрес возврата nOMew,aeTc в стек, а опустошение nРОИСХО,lJ,Нт, еСJlИ СJlИШКОМ MHOro адресов возврата Y,D,aJleHO И3 стека. Ре>ким 6е3,lJ,естви. МИКРОКОНТРОJlJlер nepeBO,lJ,НTC в состоние или режим 6ездест ВИ, ИСnОJlЬ3У Jlи60 команду SleepO 3ЫKa С ИJlИ команду SLEEP Ассем6лера. В ре>киме 6ез действи TaКТOBЫ reHepaTop МИКРОКОНТРОJlJlера BbIKJl104eH и выполнение nporpaMMbI aCTa новлено с u.eJlblO миннмизаu.ни nотре6Jlени енерrии. 3тот ре>ким nОJlезен в системах с 6a тapeHЫM питанием. В ре>кнме 6е3,lJ,естви сторожево TaMep может 6ыть заnроrраММLI1- рован так, 4т06ы nocJle исте4ени KOHTpoJlbHOrO интервanа времени МИКрОКОНТрОJlJlер 6bIJl выведен И3 COCTOHH 6е3,lJ,есТ8Н. С06ыти, которые rенерируют npepbIBaHH, так>ке BЫBO дят МИКрОКОНТрОJlJlер И3 состони 6е3,lJ,ействн, nOCKOJlbКY nрерывани npepbIBalOT зтот режнм. Мноrие nРИJlо>кени H3BJleKalOT nOJlb3Y И3 ре>кима 6ездестви, nOCKOJlbКY он П03ВО ляет зкономить ЭJlектроnитанне, однако, eCJlH система не 3КСnJlуатируетс в УСJlОВНЯХ 6aTa рейноrо nитани, то ре>ким 6е3,lJ,ействн ИСnОJlьзуетс редко. Хорошнм nримером ра60ТЫ в режнме 6е3,lJ,естви BJleTC nYJlbТ дистанu.нонноro уnраВJlени теJlеВИЗ0РОМ. npLl1 на>каТИLl1 IНOnки ДЛ nереKJl104ени на APyro канan Jlи60 ВЫnОJlнени HHO срункции reHepHpyeTc рывание, которое застаВJlет МИКРОКОНТРОJlJlер выйтн И3 ре>кима 6ездестви и выпал- жть требуемуlO срункu.ИIO. nOcJle заверwени BbInOJlHeHH нужно срункu.ии микроконтроллер ВНОВЬ входнт в ре>ким 6ездейсТ8И. 3то сни>кает nотре6Jlение 3Jlектрознерrии, доводя ero до очень низкоrо YPOBH, n03BOJl 6атарейкам nYJlbТa ра60тать в те4ении длитеJlЫ-lOrо времени. Синхронизация MHKpOKOHTpOJlJlep - это CHHxpOHHa снстема, KOTopa AfI CBoe ра60ТЫ тре6ует IIIICПОJlЬЗ0вани ИСТ04ника тактовой 4астоты  тактовоrо reHepaTopa. БОJlЬШИНСТВО MLI1K IXЖОНТРОЛJlеров семейства PIC18 имеlOТ CPYHKu.HIO вы60ра входа TaKTOBO 4астоты, ко- тopa может nocrynaTb от BnJlOTb до 1 О ра3JlИ4НЫХ ИСТ04ННКОВ. (Некоторые ИСnОJlнени 184KpOKOHTpOJlJlepOB, отме4енные 3Be3Д04KO в ни>кеСJlедуюw,ем списке, не имеlOТ внyrpeHHero тактовоrо reHepaTopa, а некоторые ,lJ,руrие ИСnОJlнени МИКРОКОНТРОJlле ров MOryт реаJlИЗ0вать ДОnОJlнитеJlьные ре>кимы.) TaКТOBЫ reHepaTop задает скорость работы МИКрОКОНТрОJlJlера и ИСnОJlьзуетс так>ке при отра60тке временных задер>кек н обра60тке иных с06ытий внутри МИКрОКОНТрОJlJlера. V1СТ04никами TaKTOBO 4астоты lIOfYf 6ыть: 1. МаJlОМОw,ный KBapu.eBbl reHepaTop (LP) 2. KBapu.eBbI Jlи60 кераМИ4еский реЗ0натор (ХТ) 3. BЫCOK04aCTOTHЫ кварu.евый Jlи60 кераМИ4еский реЗ0натор (HS) 4. BЫCOK04aCTOTHЫ KBapu.eBbl Jlи60 кераМИ4ескн реЗ0натор с контуром фАnЧ НSPLL) 5. Внешни резнстор/конденсатор с ВЫХО,lJ,ОМ Fosc/4 на OSC2 (АС) 
196 ITримененне MHKpOKOHTpOnnepOB PIC 18 6. ВнеШНLI1 резистор/конденсатор с ВХОДОМ/ВЫХО,lJ,ОМ на OSC2 (RСЮ) 7. Внутренни reHepaTop с Fosc/4 на АА6 и входом/выходом на АА7 (INTI01) 8. ВнутреННLI1Й reHepaTop с входом/выходом на АА6 и АА7 (INTI02) 9. Внешни reHepaTop с Fosc/4 (ЕС) 1 О. Внешни reHepaTop с входом/выходом на АА6 (ЕСIQ) Первые 4етыре pe>KLI1Ma требуlOТ внешнеrо кварцевоrо или кераМИ4ескоrо резо наторов, которые nOAKJlI04aIOTC к выводам OCS1 и OSC2 МLI1кроконтроллера. 3то  наи 60лее распространенные cnoc06bI 06есnе4ИТЬ МИКРОКОНТРОJlлер TaKTOBbIMLI1 LI1мnульса MLI1. ЕСЛLl1 LI1сnользуетс KBapцeBЫ реЗ0натор, то не06ходимо ИСnОJlЬЗ0вать nараллель ный, а не nоследовательны реЗ0нанс. При nОСJlедовательном реЗ0нансе, тактовые импульсы не rенерируlOТС nocJle nервичноrо ВKJllOчеНLI1 CLl1CTeMbI, n03ToMY он редко LI1СПОЛЬ3УlOТСЯ в CLl1CTeMHOM nроектироваНLI1L11. Рис. 6.4 ИЛЛlOстрирует типовое ПОДКЛlOче ние KBapu.eBoro реЗ0натора к выводам OSC1 и OSC2. В данном случае KOIlAeHcaTop на 27 пФ ИСnОJlьзуетс совместно с кварцевым reHepaTopoM. Мо>кет nOTpe6oBaTbc He 60ЛЬWО noA60p емкостн 3Toro конденсатора (15 - 33 пФ), однако конденсатор емко- CTblO 27 пФ наде>кно ра60тает AfI 60Jlьшннства 4астот KBapu.eBoro Jlибо KepaMLI14eCKOro реЗ0наторов. PIC OSCl У1 D OSC2 С2 27 pF Рис. 6.4. ИСnОJlЬЗ0ванне KBapu.eBoro ЛLl160 KepaMH4eCKoro реЗ0натора в ка4естве ИСТ04ннка TaКТOBO 4астоты ЕСJlИ выбран режим PLL (контур ФАnЧ), то внутренние u.enH ФАnЧ 06ecne4aT ум- но>кенне 4астоты KBapu.eBoro reHepaTopa на козсрсриu.иент, равный 4. СледоватеJlЬНО, при KBapu.eBoM реЗ0наторе 4 Mru., nO,lJ,KJl104eHHOM к выводам OSC1 и OSC2, н Bы6paH ном pe>KLI1Me PLL, МИКРОКОНТРОJlлер 6удет ра60тать с BHyтpeHHe TaKTOBO 4aCTOTO, равной 16 мrц. 3тот тип СРОРМLI1ровани TaКТOBO 4астоты мо>кет nотре60ваться в тех системах, в которых не06ходимо снизить уровень злектромаrнитных помех (EMI), удер>кива внешнlOlO тактовуlO 4астоту настолько низкой, насколько 3ТО возмо>кно. 
fnaBa 6. СnецнФнкацнн аппаратных cpe.u.CTB семейства PIC18 197 TaKTOBa 4астота мо>кет так>ке срормнроваться npH nомоw,и внеwней частотно за даlOще RСцеn04КИ. Рнс. 6.5 из06Ра>Кает cooTBeTcTBYIOw,ee nO,lJ,KJlI04eHHe. БJlИ3КО аnnроксимаu.ией nOJlY4aeMoro зна4ени 4астоты 6удет выра>кение 1/4,2АС. 3то 3Ha4e ние 4астоты 6удет зависеть от наnря>кення nHTaHH и Т04НОСТИ номиналов 3JleKTpOHHbIX компонент. ПО nРИ4нне раз6роса HOMHHaJlOB ЭJlектронных компонентов, времязадаlO щие RСu.еnи должны ИСnОJlЬЗ0ваться TOJlbKO в тех системах, в которых не Tpe6yeTC T04HO синхроннзации ВЫnОJlнени команд. В ре>киме АС вывод OSC2 npOrpaMMLI1PyeT c как ВЫВОД ВХОд/ВЫХОД, ли60 как выход TaKTOBO 4астоты, деленно на 4 (Fosc/4). vcc ( PIC i R1 I R > OSC2 Fosc/4 OSCl 1 g' --:::- . ра60та на 4астоте 2 Mru.AOcTHraeTc при А=3,9 кОм и С = 30 пФ; Fosc/4 равно 500 Kru. при указанных HOMHHaJlaX компонент; от 3 кОм до 100 кОм; С 60льше 20 пФ. Рис. 6.5. V1СnОJlЬЗ0вание AfI синхронизаu.ии RСu.еn04КИ PIC Вход внеIШlей тактовой OSCl частоты Рис. 6.6. УnраВJlение PIC от ВХО,lJ,а внешне тактовой 4астоты Ава друrие ре>кима ра60ТЫ HCnOJlb3YlOT внешни НСТ04НИК TaKTOBO 4астоты, ПрLl1 этом BHeWH TaKTOBa 4астота nOAaeTc на ВЫВО,lJ, OSC1. Выво,lJ, OSC2 исnользуетс ..60 как вход/выход, Jlи60 как вывод тактовоrо сиrНaJlа Fosc/4, KOTOPЫ равен одной четверто тактовой 4астоты. Рнс. 6.6 ИJlJllOстрирует nOAa4Y сиrнаJlа BHewHe TaКТOBO частоты. An вы60ра ре>кима ра60ТЫ тактовоrо reHepaTopa, соответствуlOw,им 06раЗ0М nporpaMMHpYIOTC 6иты консриryраu.ни. npHMep 6.4 НJlJllOстрирует код консриryрирова 
198 ITримененне MHKpOKOHTpOnnepOB PIC 18 IIИЯ системы на 3ЫKe С при ИСnОJlЬЗ0ванни в ка4естве ИСТО4ника TaKTOBO 4астоты в 4 мrц KBapu.eBoro reHepaTopa. Зна4ение OSC будет тем, которое указано в на4ШШ laIlIlO ro подраздела, т.е. HS ДЛ pe>KLI1Ma 3, АС Д11 ре>кима 5 и т.Д. Если nporpaMMa созrастс TOJlI..!KO при LI1СnОЛЬЗ0вании 3ЫKa Ассем6лера, то смотрите BKJl104aeMbI срал микро КОllтроллера, BbI6paHHoro ДЛ ИСnОJlЬЗ0ванн в системе. 3тот ВКЛlOчаемы срайл co Aep>KLI1T LI1нформациlO по 3ЫKY Ассем6лера, необходимуlO ДЛ nроrраммирования pe rистра консриrурации на соответствуlOw,нй ре>ким ра60ТЫ тактовоrо reHepaTopa. Пример 6. 4 #pragma config OSC HS 11 B6MpaeT BCOK04aCTOTHbrn KBaPUeBbrn reHepaTOp 11 юш #pragma config OSC RC 11 B6MpaeT RC reHepaTOp Если выбран режим ра60ТЫ от BHyтpeHHero TaKTOBoro reHepaTopa (режимы 7 и 8), ВЫВОДЫ OSC 1 LI1 OSC2 6удут ,lJ,ocrynHbI ДЛ орrанизаu.ии Ввода  Вывода (порт А, биты 6 LI1 7) или же ДЛ сиrналов Fosc/4 н РА7. (Не все версии PIC LI1MCIOT внутреНIIИ reHepaTop.) Доступны ,lJ,ве 4астоты BHyтpeHHero тактовоrо reHepaTopa, - 8 Mru. и 31 кrц. СLI1rнал с частото 8 мrц мо>кет 6ыть отмасшта6нрован В сторону уменьшени с 4 Mru. до 125 Kru. внутренним делитеJlем. Рис. 6.7 из06ра>кает perHcTp уnраВJlени reHepaTopa и реrистр настройки reHepaTopa, KOTOpЫ НСnОJlьзуетс AfI уnраВJlени внутренннм reHepaTo- ром. ПРLl1мер 6.5 nOKa3bIBaeT, как ИСnОJlЬЗ0вать 3ЫK С AfI nроrраммнровани PIC на ИСnОЛЬЗ0ваНLI1е BHyтpeHHero reHepaTopa npLl1 ра60те с 4aCTOTO paBHO 4 Mru.. В зтом примере задаетс cpeДH 4астота. В доnолнеНLI1е к nporpaMMHoMY коду по примеру 6.5, в nporpaMMe дол>кны npLl1cyтcTBoBaTb операторы #pragma config OSC INI02 ИЛLl1 #pragma config OSC = INTI01 AfI вы6ора ре>кима ра60ТЫ от BHyTpeHHero таКТОЕЗоrо re- нератора. Ре>ким INTI02 застаВJlет OSC1 и OSC2 срункu.ионировать для Ввода  ВыЕЗО да, а INTI01 иниu.LI1алнзирует ВЫ,lJ,а4У на ВЫВО,lJ, OSC2 4астоты Fosc/4, OSC1 npLl1 зтом 6y дет СРУНКЦLl10нировать AfI Ввода  Вывода. An вы6ора BHyтpeHHero reHepaTopa, ра6о- таlOщеrо с 4aCTOTO 31 Kru., в nporpaMMe ИСnОJlьзуетс nсевдокомментари INTRC. Пример 6. 5 OSCCON = Ох62; 11 B6MpaeT qaCTOTY BHYTpeHHero reHepaTopa OSCTUNE = о; 11 HaCTpOKa reHepaTopa на cpeAH 4астоту Теперь, после Toro, как мы рассмотрели назна4енне выводов СИНХрОНLI1заЦLl1И LI1 сброса, u.елесоо6разно рассмотреть пример, KOTOpЫ nOMor 6ы свзать все зто BMe сте. Рис. 6.8 ИJlЛIOСТРLl1рует МИКрОКОНТрОJlлер, HCnOJlb3YIOW,LI1 KBapu.eBbI reHepa rop, работаlOЩLl1Й с 4aCTOTO 4мrц с реально KHonKo с6роса и соотвеТСТЕЗуюw,ИМLI1 цеrl ми. Пример 6.6 nOKa3bIBaeT nporpaMMY на 3ЫKe С, ИСnОJlьзуемуlO ДЛ nроrраММИрОЕЗа ни МИКрОКОНТрОJlJlера таким 06раЗ0М, 4т06ы CTOpO>KeBO таймер ИIILl1u.ИaJlизироваJl сброс OALl1H раз в секунду, noporoBoe наnр>кение с6роса по 4аСТИ4НО потере nитаНLI1 устанаВJlиваетс при зтом на 4,2 В. 
rnaBa 6. СnецнФнкацнн аппаратных Cpe.u.CTB семейства PIC18 199 (а) реrистр OSCCON lDLEN = о разрешение режима ШLЕN = 1 разрешение режима без.u.ействия: IECF2 IRCFl IRCFO О О О О О 1 О 1 О О 1 1 1 О О 1 О 1 1 1 О 1 1 1 31 кI'ц 125 кI'ц 250 кI'ц 500 кI'ц lмrц 2мrц 4мrц 8мrц 0818 = о работа таймера запуска reHepaтopa 0818 = t истечение интервала счета таймера запуска rеиератора IOF8 = О внутрешшй reHepaтOp нестабилен IOFS ::; 1 внyrpeшшй reHepaтop стабилен ЭСЭ 1 8С80 О О = первичный reHepaтop О 1 = reHepaтop таймера 1 I О = внyrpeшшй reHepaтop 1 1 = внyrpешшй reHepaтop (Ь) реrиСТр OSCТUNE т -биrы: 011 t t 1 = максимanънаSl частота 00000] 000000 = среДНSIЯ частота 111111 100000 = МИЮlМanънaSI частота Рис. 6.7. Внутреннне реrистры уnраВJlени reHepaTopOM Цепь, nоказанная на рнсунке, имеет ДОnОJlнитеJlЬНЫ конденсатор (С4). AaHHЫ конденсатор ВЫnОJlняет срункu.ию развязки. nOCKOJlbКY МИКРОКОНТРОJlJlер - зто синхрон Ha снстема, то она rенерирует ВЫСОК04астотный шум (nepeKJlI04aTeJlbHbI шум) на BЫ водах nнтания. Чт06ы ОТсрИJlьтровать этот WYM, с4 06есnе4ивает путь отвода Jl1060ro BbICoK04aCTOTHOrO WYMa, сrенерированноrо МИКрОКОНТрОJlлером, на землlO. 06Ы4ная практнка свзаНа с ИСnОJlЬЗ0ванием конденсатора на 0,1 мкФ AfI отвода шума на каж дo аналоrовой ИJlИ u.исррово HHTerpaJlbHO схеме снстемы. ЕСJlИ AflЯ шунтировання выводов nитани КОН,lJ,енсатор не ИСnОJlьзуетс, то 6удут 4асто возннкать np06JleMbI и таннственные nporpaMMHbIe с60Н. 
200 ITpHMeHeHHe MHкpOKOНTpOnnepOB PIC18 Пример 6.6 #pragma config MCLRE = ON #pragma config OSC = HS #pragma config WDT = ON #pragma config WDTPS = 256 #pragma config BORV =42 nMTaHMR #pragma BOR = ОМ void main (void) 11 мнмuмаnизаUИR CMCTeM while (1) 11 rnaBHbrn nporpaMMH UMКn 11 разреwенме Mcrronb30BaHMR входа 06ero с6роса 11 вы60Р KBapueBoro reHepaTopa 11 установка cTopoeBoro TaMepa 11 BpeMR cTopoeBoro TaMepa = 1 сеКУНАе 11 установка наnряеНМR с6роса по 4acTM4Ho потере 11 с6рос rro qacT. Потере nMTaHMR BKn. { CIrWdtf) ; 11 с6рос cTopoeBoro TaMepa 11 3Аесь BCTaBnReTCR сметемное rrроrpаммное 06ecne4ele 5V PIC С4 0.1 uF VDD R1 10К SW1 ...-:з.... MCLR RESET OSCI D У1 4UIiz 1 uF сз С2 OSC2 VSS Рнс. 6.8. ТИnИ4ные u.enH с6роса и reHepaTopa. Основной u.ИKJl В это npOrpaMMe СО,lJ,ер>кит срункu.иlO ClrWdt. Поскольку правильно cnpoeKTHpoBaHHa система срункu.ионирует в основном u.и KJle , WDT 04иw,аетс н ннко- rAa не сра6атывает на с6рос МИКрОКОНТрОJlJlера. На 3ЫKe С OCHOBHO u.ИKJl nporpaMMbI ДЛ Jl1060Й оnераu.ионно снстемы 6есконе4ен  да>ке в CJlY4ae такнх CJlO>KHbIX оnераu.и онных систем, как Windows н Linux. WDT мо>кно так>ке активнровать, ИСnОJlЬ3У коман,lJ,У wrCONbits.SWDTEN = 1 в nporpaMMe на 3ЫKe С вместо оператора #pragma. 
rnaBa 6. Спецнфнкацнн апПtlратных Cpe.u.cTB семейства PIC18 201 6.2. ВЫВОДЫ ВВОД-ВЫВОД Число портов Ввод - Вывод и КОЛИ4ество выводов у этих портов раЗЛИ4НО AfI 4ленов ceMeCTBa Р1С18, однако все версии микросхем имеют по KpaHe мере порт А и порт В. Выводы портов Ввод - Вывод 060зна4аются так, как, например, ААО AflЯ 6ито- BO позиu.ии О порта А. R в 060зна4ении "ААО" 0зна4ает "реrистр", так 4ТО это вывод 6ита О реrистра А. Порт А Выводы Порта А ИСПОЛЬ3УlOтс в схеме, показанно на рисунке 6.8. Вход МGbН  зто АА5 (AfI PIC18F1220), в типовом СЛУ4ае он используется AflЯ pY4Horo с6роса, по зтому он 4асто недоступен в ка4естве вывода Ввод - Вывод. Аналоrично, биты АА7 и АА6 (AfI PIC18F1220) ИСПОЛЬ3УlOтся в схеме (см. рис. 6.8) как выводы OCS1 (АА7) и OSC2 (АА6). Порт А имеет три реrистра, которые управляют ero pa60TO н ИСПОЛЬ3УlOт СЯ в ходе это ра60ТЫ: это реrистры TRISA, РОАТА и LATA. PerHcTp TRISA определет направление переноса данных на WTbIpbKax порта А, при этом лоrИ4еская единиu.а 6и- TOBO позиu.ии определет Вывод как BXOДHO, а ноль 6итово позиu.ии определяет Вывод как BЫXOДHO. Некоторые версии микросхем ИСnОЛЬ3УlOт реrистр ООАА (реrистр направлени данных), KOTOpЫ вляется вторым названием (псевдонимом) реrистра TRISA, используемым при управлении 6итами TRISA. (Для конкретных верси микро контроллера, смотрите фал Ikr AflЯ знакомства с соответствуlOw,ими определениями). Реrистр РОАТ А используетс AflЯ считывания выводов порта А или записи в зти выво- ды. Реrистр LATA используется ВНуТренне AflЯ С4итывани и модификации AallHbIX с nослеДУIOw,е их записыо в порт А. В ТИПИ4НОМ СЛУ4ае он непосредственно не адресу- eTC nporpaMMHbIM 06еспе4еннем. Буферны perHcTp позволяет порту изменть свое состоние 6ез с60ев. nримером выполнения оnераu.и 4тения, модификаu.ии и записи мо>кет 6ыть такая команда языка С, как РОАТА ++, KOTopa С4итывает порт А, инкремен- тирует ero, а затем записывает результат 06ратно в порт А. Чт06ы ЛУ4wе понять xapaK тер ра60ТЫ порта, посмотрите на рис. 6.9, KOTOpЫ ИЛЛlOстрирует BHyTpeHHlO1O структу- ру порта. Чт06ы записать данные в порт, не06ходимо записать их ли60 в реrистр LATA или в реrистр РОАТА. Чт06ы С4итать ВЫВОДЫ порта, ну>кно С4ИТalЪ РОАТА. Чт06ы счи- тать содержимое 6уферноrо реrистра порта, ну>кно С4итать LATA. 06ычно только РОАТ А используетс как реrистр, в nporpaMMe AflЯ 06раw,ени к данным порта А. На языке С весь порт С4итывается или заnисывается, ИСПОЛЬ3У команду РОАТА, а отдельны 6ит С4итывается или заnисывается, ИСПОЛЬ3У команду вида PORTAbits.RAO, которая С4итывает/записывает 6ит О порта А. Пример 6.7 показыuаст, как заnисать зна4ение Ох45 в порт А, ноль в 6ит 3 порта В и единиu.у в 6ит 5 порта В. При этом прннимается, 4ТО УПОМЯНуТые порты определены как u.ифровые, а cooTBeTcTBYIO- щие выводы запроrраммнрованы на выnолненне операu.ии вывода данных. ДaHHЫ пример ИЛЛlOстрнрует так>ке то, как ну>кно адресовать отдельные 6нты реrистра TRIS AflЯ проrраммирования выводов порта на ввод (1) нлн вывод (О). 
202 Прнмененне MHKpOKOHTpOnnepOB PIC18 .....,.... OJ<O........ "., .,.."..... . 'A'_'_""'"'' Буфер чтения УОО D1 Шина данъIX D Q LAT Буфер записи CLK D Q TRIS Запись реrистра 'Ш.IS CLK Чтение