Коммерциялық емес акционерлік қоғам
АЛМАТЫ ЭНЕРГЕТИКА Ж ӘНЕ БАЙЛАНЫС УНИВЕРСИТЕТІ
Инженерлік кибернетика кафедрасы
САНДЫҚ ТЕХНИКАНЫ ЖӘНЕ БАСҚАРУ МИКРОБАҚЫЛАУЫШТАРЫН ПРОГРАММАЛАУ
5В070200-Автоматтандыру және басқару мамандығының студенттер үшін зертханалық жұмыстарды орындауға арналған әдістемелік нұсқау
Алматы 2013
ҚҰРАСТЫРУШЫЛАР: Тарасов В. М., Ибрашева А.Т. Сандық техниканы және басқару микробақылауыштарын программалау. 5В070200-«Автоматтандыру және басқару» мамандығының студенттері үшін зертханалық жұмыстарды орындауға арналған әдістемелік нұсқау - Алматы: АЭжБУ, 2013. – 56б.
Әдістемелік нұсқауда «Сандық техниканы және басқару микробақылауыштарын программалау» пәнінен РІС микробақылауышының негізінде жасалған УМК-7 зертханалық кешенінде зертханалық жұмыстарды орындауға арна
лған әдістемелік нұсқаулар келтірілген. Әрбір зертханалық жұмыста орындауға қажетті тапсырмалар, нұсқалар берілген және мысал ретінде программа үзіндісі келтірілген. Соған қосымша зертханалық жұмыстардың соңында қысқаша теориялық ақпарат берілген.
Зертханалық жұмыстарда технологиялық жабдықтарды автоматтандыру процесін МБ қолдану арқылы орындалған нақты практикалық есептер талданған.
Безендіру - 25, кесте - 28, әдеб. – 8 атау.
Рецензент: АЭжБУ доценті Қалиева С.А.
“Алматы энергетика және байланыс университеті” коммерциялық емес акционерлік қоғамының 2012 ж. баспа жоспары бойынша басылады.
© “Алматы энергетика және байланыс университеті ” ҚЕАҚ, 2013 ж.Мазмұны
Кіріспе 1 Зертханалық жұмыс. Байттық және биттік командалар. Логика 2 Зертханалық жұмыс. Маскілеу. Массив қосындысын алу 3 Зертханалық жұмыс. Бояу камерасын автоматтандыру. Ішкі программалар 4 Зертханалық жұмыс. Көбейту және бөлу 5 Зертханалық жұмыс. Газ шығынын реттеу 6 Зертханалық жұмыс. Клавиатураны программалау 7 Зертханалық жұмыс. Буып-түю жұмысын автоматтандыру. Дыбыс түзу 8 Зертханалық жұмыс. Сандарды 2-санақ жүйесінен 2_10 санақ жүйесіне ауыстыру 9 Зертханалық жұмыс. Таймер TMR1 10 Зертханалық жұмыс. Үзулер 11 Зертханалық жұмыс. Екі байттық сандарды қосу Қосымша А. Status регистрі Қосымша Б. PIC МБ нұсқауларының сипаттамасы Қосымша В. Модуль TMR1 таймері Қосымша Г. PIC16F877 МБ жады картасы Қосымша Д. УМК-7 сипаттамасы Әдебиеттер тізімі
|
4 5 8
12 16 20 24
26
31 34 38 42 46 47 51 52 53 55
|
Кіріспе
Техниканың қазiргi жағдайы мамандардың микропроцессорлар (МП) және микробақылауыштар (МБ) жайлы білуді талап етедi. Көптеген фирмалардың шығарылатын бұйымдарының құрамында микробақылауыштар бар және оларды қолдану облыстары үнемi үлкеюде. Олар технологиялық жабдықтарда, автокөлiктер, телефон және т.б. заттардың құрамында бар.
Қолдану аясы кең микробақылауыштар көптеген шетел фирмаларымен шығарылады: Microchip, Atmel, TI, Motorola және т.б.
Аналогты құрылғылармен салыстырғанда құрамында МБ болатын жабдықтардың маңызды жақсы қасиеттері бар:
- арақашықтықтан өлшеу және жабдықтарды оператордың басқару пультінен тексеру мүмкіндігі;
- сенімділігі жоғары және энергияны аз тұтыну;
- үздіксіз өзін-өзі тексеру және жоғары аппараттық сенімділік;
- апаттық режимдердің көрсеткіштерін тіркеу және сақтау;
- құрылғыларыдң қосу-өшуі және күйі жайлы ақпаратты арақашықтықтан операторға тасымалдау.
Студенттерге сандық техниканы және микропроцессорлық техниканы қолдануды үйрету үшін университетте УМК-7 оқулық-микропроцессорлық комплектісі бар. Ассемблер тілінде PIC16F877 программалаумен қатар олар қазіргі микробақылауыштардың ішкі және сыртқы құрылымымен танысады.
Жұмысты бастағанға дейін студент алдын ала оған дайындалу керек: зертханалық жұмыстың сипаттамасын оқып өзінің нұсқасы үшін программа құру.
Есептемеге қойылатын талаптар.
Зертханалық жұмыс бойынша есептеме титулдық беттен, тапсырма, блок-сұлба, программа, нәтижелер кестесінен және жұмыс нәтижесі ретінде Watch көшірмесі, бақылау сұрақтарынан тұруы керек.
Студент зертханалық жұмысты қорғауы керек.
Зертханалық жұмыстарды жүргізуге қажетті жабдықтар мен программалық жабдықтар: Windows 98 және жоғары, MPLAB ортасы, УМК-7 кешені.
1 Зертханалық жұмыс. Байттық және биттік командалар. Логика
Жұмыс мақсаты: қосу, алу және логикалық функцияларды орындау үшін BSF, BCF, ADDWF, ANDWF, IORWF, XORWF, SUBWF нұсқауларын оқып үйрену.
1.1 Зертханалық жұмыс тапсырмасы
Л1 программасын оқыңыз, теориялық мәліметтерді 1.3 тармақтан оқыңыздар. Ол екі тұрақтыға әртүрлі амалдар қолданады және нәтижесін REZ регистріне жазады. Қолданылған регистрлер қай банктерде орналасқанын анықтаңыздар. Программада ORG h’00’ нұсқауы – ассемблер көрсеткіші, ол осы өрнектен кейін жазылатын код электрлік қайта программаланатын сақтау құрылғысының (ЭППЗУ) нөлдік адресінен бастап жазылатынын көрсетеді. EQU нұсқауы equal (ағыл.) сөзінен – тең дегенді білдіреді.
Л1 программасы.
Include <p16F877.inc>; бұл файлда РСН символдық аттары сипатталған.
R1 EQU h'21' ; R1 - h'21' регистрінің символдық аты.
R2 EQU h'22' ; R2 - h'22' регистрінің символдық аты.
R3 EQU h'23' ; R3 – h'23' регистрінің символдық аты.
REZ EQU h'24' ; REZ – нәтиже жазуға арналған регистр аты.
; МБ жұмысын реттеуге арналған нұсқаулар
ORG h'00' ; келесі NOP нұсқауы h'00' адресіне жазылады.
NOP ; үзу және қайта қосу векторларының орнын қызметі бар
NOP ; командалармен NOP толтырмау үшін
ORG h'05' ; келесі CLRF нұсқауы h’05’ адресіне жазылады.
CLRF STATUS ; регистрді тазартып, нөлдік банкті таңдаймыз.
BSF STATUS, 5 ; бірінші банкке ауысамыз,онда TRISC регистрі бар.
CLRF TRISC; PORTC регистрінің барлық биттерін мәлімет шығаруға орнатамыз.
BCF STATUS, 5; нөлдік банкке қайта ораламыз.
; Программаның жұмысшы бөлігі. Мәліметтері енгізу
MOVLW D'240' ; константаны аккумуляторға W жазу.
MOVWF R1 ; W құрамын R1 регистріне жазу.
MOVLW D'130' ; константаны аккумуляторға W жазу.
MOVWF R2 ; W құрамын R2 регистріне жазу.
MOVLW D'5' ; константаны аккумуляторға W жазу.
MOVWF R3 ; W құрамын R3 регистріне жазу.
; Есептеулерді орындау
MOVF R1, W ; константаны R1 регистрінен W аккумуляторға жазу.
SUBWF R2, W ; азайту W=R2-W=R2- R1.Нәтижесін W-да қалтырамыз.
MOVWF REZ ; W құрамын REZ регистріне жіберу.
MOVF R2, W ; константаны R2 регистрінен W аккумуляторға жазу.
ADDWF R1, W ; W=R2+W=R1+R2.
MOVWF REZ
MOVF R2, W ; R2 құрамын W аккумуляторға жазу.
SUBWF R1, W ; азайту W=R1-W=R1-R2. Нәтижесін W-да қалтырамыз.
MOVWF REZ ; W құрамын REZ регистріне жіберу.
MOVF R2, W ; константаны R2 регистрінен W аккумуляторға жазу.
ADDWF R3, W ; W=R3+W=R2+R3.
MOVWF REZ
MOVF R2, W ; константаны R2 регистрінен W аккумуляторға жазу.
SUBWF R2, W
MOVWF REZ
MOVF R2, W ; константаны R2 регистрінен W аккумуляторға жазу.
ANDWF R1, W ; W=R1 AND W(R2) операциясы, нәтижесі W.
MOVWF REZ
GOTO $
END ; программа соңы.
Программаны өздігіңізше R2+R3, R1 OR R2, R1 XOR R2 операцияларын орындайтын командалармен жалғастырыңыздар.
Нұсқау бойынша мәліметтерді 1.1 кестеден алыңыздар.
1.1 кесте – Тапсырма нұсқалары
Нұсқа |
R1, R2, R3 адрестеріне жазылатын мәндер |
Нұсқа |
R1, R2, R3 адрестеріне жазылатын мәндер |
1 |
81h, 12h, 1h |
6 |
86h, 67h, 6h |
2 |
82h, 23h, 2h |
7 |
87h, 68h, 7h |
3 |
83h, 34h, 3h |
8 |
88h, 69h, 8h |
4 |
84h, 45h, 4h |
9 |
89h, 6Ah, 9h |
5 |
85h, 56h, 5h |
10 |
8Ah, 6Bh, Ah |
1.2 Жұмысты орындау тәртібі
MPLAB-та жаңа файлға ассемблерде программа жазыңыз, оны бумада сақтаңыздар. Осындай атпен сол бумада жаңа жоба құрыңыз. «;» символынан кейін түсініктеме тұрады. Программа кодын МБ-ға жазыңыз. Программада қолданылатын регистрлерді көрсетіп, Watch Window бақылау терезесін құрыңыз, сандар форматын қадағалаңыз. Программаны қадамдық режимде орындап, барлық операция нәтижелерін 1.2 кестеге жазыңыз. Есептемеде қосымша қолмен есептеулер жүргізіңіздер, олардың STATUS регистріне әсерін көрсетіңіздер.
1.2 кесте - Командалар жұмысының нәтижелерін көрсету мысалы
Кірістегі сан |
Амал |
REZ-дегі нәтижелер |
Status мәндері B түрі |
||
B немесе D түрінде |
B немесе D түрінде |
D түрі |
B түрі |
||
R1=D’240’ |
R2=D’130’ |
R1-R2=240-130 |
D’110’ |
- |
00011001 |
R1=D’240’ |
R2=D’130’ |
R1+R2=240+130 |
D’114’ |
- |
00011001 |
R1=D’240’ |
R2=D’130’ |
R2-R1=130-240 |
D’146’ |
- |
00011010 |
R2=D’130’ |
R3=D’5’ |
R2+R3=130+5 |
D’135’ |
- |
00011000 |
R2=D’130’ |
R2=D’130’ |
R2-R2130-130 |
D’0’ |
- |
00011111 |
R1=D’240’ |
R2=D’0’ |
R2-R1=0-240 |
D’16’ |
- |
00011010 |
R1=b’11110000’ |
R2=b’10000010’ |
R1 AND R2 |
- |
10000000 |
00011011 |
R1=b’11110000’ |
R2=b’10000010’ |
R1 OR R2 |
- |
11110010 |
00011011 |
R1=b’11110000’ |
R2=b’10000010’ |
R1 XOR R2 |
- |
01110010 |
00011011 |
1.3 Жұмыс тақырыбы бойынша қысқаша теориялық ақпарат
Программада қолданылатын регистрлер әртүрлі банктарда орналасуы мүмкін. Банк нөмірін Status арнайы қызмет регистрі (РСН) арқылы орнатуға болады, А қосымшасын қараңыздар. Сонымен қатар бұл регистр операциялардың орындалу нәтижесін қадағалайды, регистрлер толуын, нөл болуын жазады. Осының нәтижесінде алгоритмнің тармақталуы жүреді [1, 2].
BSF, BCF, ADDWF, SUBWF, ANDWF, IORWF, XORWF нұсқауларының форматы және сипаттамасы Б қосымшасында келтірілген.
Қосу және азайту операциялары екілік санақ жүйесінде жүреді. Азайту азайғышқа кері кодтағы азайтқышты қосу арқылы орындалады.
240+4 қосуды орындайық, ондық санақ жүйеде сол жағында, екілік санақ жүйеде оң жағында (мысал а). Мысал б) азайту операциясын көрсетеді. Екілік кодта азайту орындалғанда азайту орнына қосу орындалады:
мысал а) 240+4 мысал б) 240-128
240 11110000 240 11110000
+ 4 ® + 00000100 -128 ® + 01111111 -128 санының инверсиясы
244 11110100 112 101101111 - қосындысы
+
1 - қосымша код
01110000 -нәтиже.
Азайту нәтижесінде регистр 8 разрядты болғандықтан оның толуы болды. Тоғызыншы разрядта тұрған 1 Status регистрінің С битіне ауысады. Ал сол регистрде тек 8 разряд қалады, ондық санақ жүйесінде ол 112 көрсетеді. Және де 3 разрядтан 1-лік 4-ші разрядқа өтті, яғни кіші жартыбайттан үлкен жартыбайтқа, сондықтан Status регистрінің DC биті де 1-ге тең.
1.3 кесте – Логикалық функциялар Y=f(X1,X2)
Нұсқау |
Шындық кестесі |
Шартты белгіленуі |
Электрлік сұлбалардағы баламасы |
|||||||||||||||||||||
Х1 |
Х2 |
Y |
||||||||||||||||||||||
|
0 0 1 1 |
0 1 0 1 |
0 1 1 1 |
Х1Y |
Х2 Кез келген контакт қосылғанда тізбекте тоқ болады |
|||||||||||||||||||
AND (және) функциясы |
0 0 1 1 |
0 1 0 1 |
0 0 0 1 |
Х1Y |
Тек екі контакт қосылғанда ғана тізбекте тоқ болады |
|||||||||||||||||||
XORWF Функция XOR (Исключи- |
0 0 1 1 |
0 1 0 1 |
0 1 1 0 |
Х1Y Х2 |
екі контакт әртүрлі күйде болғанда ғана тізбекте тоқ болады |
Барлық логикалық операциялар әрбір разряд үшін орындалады.
1.4 Бақылау сұрақтары
1.4.1 Программа қай банкпен жұмыс істегені қалай анықталады?
1.4.2 ADDWF R1, F нұсқауы нені орындайды?
1.4.3 ANDWF R1, F нұсқауы нені орындайды?
1.4.4 XORWF R2, W нұсқауы нені орындайды?
1.4.5 Битті орнату және тазарту нұсқауларын атаңыздар.
1.4.6 R1, R2 және REZ регистрлері қай банкта орналасқан.
1.4.7 230+60 қосқанда МБ регистрінде қандай нәтиже болады?
1.4.8 130-135 азайтқанда МБ регистрінде қандай нәтиже болады?
1.4.9 TRISC РСН қызметі және оның орналасуы.
1.4.10 W аккумулятордың адресі қандай?
2 Зертханалық жұмыс. Маскілеу. Массив қосындысын алу
Жұмыс мақсаты: мәліметтерді маскілеуді үйрену, массивтің қосындысын табудың алгоритмін және программасын құру.
2.1 Зертханалық жұмыс тапсырмасы
Жанама адрестеу программасын ұйымдастыруды блок-сұлба және Л2 программасы мысалында, ал теориялық мәліметтерді 2.3 тармақтан оқыңыз. FSR регистрі көрсеткіш, ол жұмыс істейтін ұяшықтың адресін сақтайды, ал ұяшықпен жұмыс INDF физикалық емес регистрі арқылы орындалады.
Есеп. Массивке төрт айда тұтынған энергия мөлшері жазылған. Көрсетілген периодқа кеткен суммарлық энергия шығынын және орташа мәнін анықтау керек.
2.1-суретте массивті суммалау және орташаны табу блок-сұлбасы келтірілген. Блок-сұлбада массивке мәлімет жазылған деп қарастырылған.
2.1 сурет – Массивті суммалау және орташаны табу блок-сұлбасы
Л2. Массивті суммалау программасының фрагменті.
Include<p16f877.inc>
EL_MAS_0 EQU h'40' ; массивтің
нөлінші элементі.
EL_MAS_1 EQU h'41' ; массивтің бірінші элементі.
EL_MAS_2 EQU h'42' ; массивтің екінші элементі.
EL_MAS_3 EQU h'43' ; массивтің үшінші элементі.
IND_EL EQU h'50' ; қосылатын массив элементінің индексін жазу үшін.
SHAG EQU h'22' ; мәліметтердің өзгеру қадамы.
KOL_EL EQU h'44' ; массив элементтерінің санын сақтауға арналған регистр.
SUM EQU h'51' ; қосындыны сақтауға арналған регистр.
SREDNEE EQU h'52' ; энергияның орташа шығынын сақтауға арналған регистр.
; МБ стандартты реттеу командалары көрсетілмеген.
; массивті 11-17-ге дейін 2 қадаммен мәліметтермен толтыру
;{
MOVLW D'2'
MOVWF SHAG
MOVLW D'11'
MOVWF EL_MAS_0
ADDWF SHAG, W; W= EL_MAS_0+SHAG
MOVWF EL_MAS_1
ADDWF SHAG, W; W= EL_MAS_1+SHAG
MOVWF EL_MAS_2
ADDWF SHAG, W; W= EL_MAS_2+SHAG
MOVWF EL_MAS_3
;}
CLRF SUM
CLRF IND_EL
MOVLW D'4' ; массив элементтерінің саны.
MOVWF KOL_EL
MOVLW EL_MAS_0 ; 0-ші элемент тұрған ұяшық адресін жанама
MOVWF FSR ; FSR адрестеу регистріне жазу.
NEXT_ELEM
MOVF SUM, W
ADDWF INDF, W ; W мен ағымдағы массив элементін қосу.
MOVWF SUM ; алынған қосындыны сақтаймыз.
; Келесі циклға дайындалу
INCF FSR, F ; массивтің келесі элементінің адресіне өту.
INCF IND_EL, F ; сол массив элементінің индексін аламыз.
MOVF KOL_EL, W
XORWF IND_EL, W ; элемент индексінің 4-ке теңдікке тексереміз
BTFSS STATUS, Z ; Z=1 екенін тексереміз
GOTO NEXT_ELEM ; тек Z =0 болса циклды қайталаймыз.
,; Орташа мәнді есептеуге дайындық
MOVF SUM, W ; Z=1 болғандағы қосындыны аламыз.
MOVWF SREDNEE ; SUM-ды SREDNEE регистріне көшіреміз.
; Орташа мәнді есептеуді ары қарай жалғастыру керек.
. . . .
END
Өздігіңізше 4-ке бөлуді SREDNEE регистрін RRF арқылы екі рет оңға жылжыту арқылы орындаңыз, 2.1 кестеге қараңыз. Жылжытар алдында Carry битін тазартуды ұмытпаңыздар.
Циклды қайталау келесідей: алдымен Kol_El регистріне элементтер саны жазылады, содан кейін циклды әр қайталаған сайын элемент индексін 1-ге өсіріп отырамыз да XORWF IND_EL, W командасының нәтижесі 0 шыққанын тексереміз, мұнда W=Kol_El. Индексі 4 болатын регистрді өңдеп қойғандықтан IND_El=4 болғанда циклдан шығамыз.
2.2 Жұмысты орындау тәртібі
Көрсетілген фрагменттерді қолдана отырып, 2.2 кесте бойынша программа дайындаңыз. Программа кодын МБ-ға жазыңыз. Программада қолданылатын регистрлерді көрсетіп бақылау терезесін құрыңыз. Қажетті регистрлер 2.2 суретте көрсетілген. 2.1 кестедегідей программаны қадамдық режимде кестеге толтырыңыз. |
|
2.2 сурет – Бақылау терезесі |
|
2.1 кесте – Массив суммасы және массив орташасы
Нұсқа |
FSR-де көрсетілетін массив регистрінің адресі |
Массив регистріндегі сан |
W регистріндегі қосынды немесе SREDNEE регистрінің мәні |
||
Регистр индексі |
H формасы |
D формасы |
В формасы |
||
11 |
1 |
40h |
D ‘11’ |
11 |
00001011 |
11 |
2 |
41h |
D ‘13’ |
24 |
00011000 |
11 |
3 |
42h |
D ‘15’ |
39 |
00100111 |
11 |
4 |
43h |
D ‘17’ |
56 |
00111000 |
SREDNEE регистрін оңға жылжытып, 56-ны 2-ге бөлеміз |
28 |
00011100 |
|||
SREDNEE-ні тағы оңға жылжытып, 56-ны 4-ке бөлеміз |
14 |
00001110 |
2.2 кесте – Тапсырма нұсқалары
Нұсқа |
Бірінші регистрдің мәні |
Массив регистрлерінің адрестері |
Нұсқа |
Бірінші регистрдің мәні |
Массив регистрлерінің адрестері |
1 |
D’21’ |
21h – 24h |
6 |
D’26’ |
26h – 29h |
2 |
D’22’ |
22h – 25h |
7 |
D’27’ |
27h – 30h |
3 |
D’23’ |
23h - 26h |
8 |
D’28’ |
28h – 31h |
4 |
D’24’ |
24h - 27h |
9 |
D’29’ |
29h – 32h |
5 |
D’25’ |
25h - 28h |
10 |
D’30’ |
30h – 33h |
Ескерту – Массивті толтыру қадамы 2-ге тең болғаны ыңғайлы. |
2.3 Жұмыс тақырыбы бойынша қысқаша теориялық ақпарат
Маскалау кезінде бастапқы сан мен маска арасында әрбір бит бойынша логикалық операциялар орындалады. Ол бір мезетте бірнеше разрядтарды өзгерту немесе сандардың теңдігін тексеру мақсатында орындалады:
- AND логикалық операциясы бастапқы санның керекті разрядтарын маска санының көмегімен тазартады, яғни маска-санында 0 тұрса сәйкес разряд тазарады, маска-санында 1 тұрса өзгермейді;
- OR логикалық операциясы бастапқы санның керекті разрядтарына маска санының көмегімен 1 орнатады, яғни маска-санынды 1 тұрса сәйкес разрядқа 1 орнайды, маска-санында 0 тұрса өзгермейді;
- XOR логикалық операциясының көмегімен көп жағдайда бастапқы сан мен маска санының теңдігін тексерген ыңғайлы. Егер екі санның сәйкес разрядтарының кем дегенде біреуінің мәні әртүрлі болса оның нәтижесі 1 болады, яғни XOR нәтижесінің кем дегенде бір разрядының 1 болғаны екі санның тең емес екендігін көрсетеді, сондықтан нәтижесі 0 болса екі сан тең.
Маскалау операциясының мысалдары 2.3 кестеде келтірілген.
2.3 кесте – Маскалау нәтижелері
Объекттер |
Операция |
|||
OR (4-тен 7 дейін 1 орнату) |
AND (0-ден 3 дейін тазарту) |
XOR (екі сан тең емес) |
XOR (екі сан тең) |
|
Сан |
10101010 |
10101010 |
10101010 |
11011101 |
Маска |
11110000 |
11110000 |
11110000 |
11011101 |
Нәтиже |
11111010 |
10100000 |
01011010 |
00000000 |
Циклды шарттық операторлар және ауысу көмегімен орындау керек.
Шартты өту нұсқаулары BTFSC және BTFSS кез келген регистрдегі берілген биттің күйін тексереді, нәтижеге сәйкес программаның келесі нұсқауын аттап кетеді немесе орындайды. BTFSC нұсқауы берілген бит 0-ге тең болса аттап кетеді. BTFSS нұсқауы берілген бит 1-ге тең болса аттап кетеді. Осының негізінде басқаруды программаның басқа бөлігіне беру арқылы цикл ұйымдасады, 2.4 кестені қараңыздар.
2.4 кесте - Шартты өту нұсқауларының жұмысы
CARRY (C) битін қолдану |
|
BTFSS STATUS, C GOTO METKA MOVWF R2 |
Carry биті 1-ге тең болса, онда программаның келесі нұсқауы GOTO МЕТКА орындалмай аттап кетіледі, MOVWF R2 нұсқауы орындалады |
Carry биті 0-ге тең болса келесі нұсқау GOTO METKA орындалады |
|
ZERO (Z) битін қолдану |
|
BTFSS STATUS, Z MOVF R2, W MOVWF PORTC |
Z 1-ге тең болса, онда программаның келесі нұсқауы MOVF R2, W орындалмай аттап кетіледі, MOVWF PORTC нұсқауы орындалады |
Z биті 0-ге тең болса келесі нұсқау MOVF R2, W нұсқауы орындалады, содан кейін MOVWF PORTC нұсқауы орындалады |
Нақты программаларда 2.4 кестеде көрсетілген нұсқаулар орнына алгоритмге сәйес нұсқаулар орналастыру керек.
Алдыңғы зертханалық жұмыстарда абсолютті адрестеу қолданылды, онда регистр адресі нұсқауда жазылады. Бұл зертханалық жұмыста жанама адрестеу қолданылады, онда нұқсауға адрес көрсеткіші жазылады, ол программа барысында өзгеруі мүмкін [2, 3, 6].
2.4 Бақылау сұрақтары
1. Есептеу операцияларынан кейін Status регистрінің қай биттері өзгереді?
2. BTFSS STATUS, Z шартты өту көмандасының қызметін түсіндіріңіз.
3. Сандардың теңдігін қалай тексеруге болады?
4. Адрестеудің қандай әдістерін білесіздер?
5. Массивтен шығу қалай бақыланады?
6. FSR, INDF регистрлерінің қызметі.
7. SUM регистрі қосынды алу алдында неге тазартылады?
8. Status регистірінің C битінің жылжыту операциясына қатысы қандай?
9. Регистрдің тақ разрядтарын қалай тазартуға болады?
10. Регистрдің разрядтарына қалай 1 орнатуға болады?
11. XOR (Исключительное ИЛИ) қай кезде қолданылады?
12. AND, OR, XOR үшін шындық кестесін келтріңіздер.
13. W аккумулятордың адресі қандай?
3 Зертханалық жұмыс. Бояу камерасын автоматтандыру. Ішкі программалар
Жұмыс мақсаты: уақыттық тежеу ішкі программаларын қолданып бояу камерасын автоматтандыру процесінің программасын құру, уақыттық тежеуді есептеу.
3.1 Зертханалық жұмыс тапсырмасы және берілгендер
Тапсырма. Бояу камерасын автоматтандыру процесінің программасын құруда келесі жұмыстар орындалсын:
- қорек көзін қосқанда оператор пультіндегі L2 жарықтық және S1 дыбыстық сигнализацияны қосу;
- 2 секундтан кейін сиренаны өшіріп бояубүріккіштің D1 қозғалтқышын, вентилятор қозғалтқышын D2 және боялғаны жайлы сигнал беретін L1 лампасын қосу керек;
- үш секундтан кейін бояубүріккіштің қозғағалтқышын D1 өшіру;
- енді 2 секундтан кейін D2 вентиляторын және L1 лампасын өшіру;
- камерадағы затты ауыстыру үшін 1 секундқа пауза жасау;
- сирена қосылғаннан бастап жаңа затты бояуды қайта бастау.
3.1 суретте құрылғылардың PORTC регистрінің биттеріне жалғану сұлбасы келтірілген.
3.1 сурет – Құрылғыларды жалғау сұлбасы
3.2 сурет – Бояу камерасының уақыттық диаграммасы
Л3 программасы:
include<p16F877.inc> ; РСН символдық аттары сипатталған файл.
; Жалпы қызмет регистрлерінің символдық аттарының сипаттамасы
Sch_in EQU H'22' ; тежеудің ішкі циклының санағышы.
Sch_out EQU H'24' ; тежеудің сыртқы циклының санағышы.
Sch3 EQU H'23' ; тежеудің үшінші циклының санағышы.
МБ стандартты нұсқаулары көрсетілмеген.
; Программаның жұмысшы бөлігі
MOVLW B'10000000'
MOVWF PORTC ; оператор пультіндегі L2 сигнализациясын қосу.
Sled_det BSF PORTC, 0 ; S1 дыбыстық сигнализацияны қосу.
MOVLW d’40’ ; W-ға таймера уақытын береміз. Қадамдық режим
; үшін d’2’ алу керек.
CALL Timer
MOVLW B’10001110’
MOVWF PORTC ; S1 өшіріп, D1, D2 және L1 қосу.
MOVLW d’60’ ; бояу уақытын береміз.
CALL Timer
BCF PORTC, 2 ; D1 өшіреміз, D2, L1 және L2 жұмыс істей береді.
MOVLW d’40’ ; D2 және L1 жұмыс уақытын береміз.
CALL Timer
MOVLW B'10000000'
MOVWF PORTC ;бояу аяқталды, L2 сигнализациясы жұмыс істеуде.
MOVLW d’20’ ; затты ауыстыру уақытын береміз.
CALL Timer
GOTO Sled_det ; жұмысты қайталау үшін Sled_det белгісіне ауысу.
; Ішкі программа
Timer ; Timer ішкі программасы. Екі ішкі цикл қолданылды.
MOVWF Sch3 ; W мәні ішкі программа үшін аргумент.
M3 MOVLW D'150'
MOVWF Sch_out ; сыртқы санағыштың мәнін орнатамыз.
M_out ; сыртқы санағыштың белгісі.
MOVLW D’255';
MOVWF Sch_in ; ішкі санағыштың мәнін орнатамыз.
M_in ; ішкі санағыштың белгісі.
DECF Sch_in, F ; Sch_in санағыштың мәнін 1-ге кемітеміз.
BTFSS STATUS, Z ;егер Sch_in=0 болса (Z=1), GOTO-ды аттап кетеміз.
GOTO M_in ; Z=0 болғанда ғана орындалады.
DECF Sch_out, F ; Sch_out санағыштың мәнін 1-ге кемітеміз.
BTFSS STATUS, Z ;егер Sch_out=0 болса (Z=1), GOTO-ы аттап кетеміз
GOTO M_out ; Z=0 болғанда ғана орындалады.
DECF Sch3, F ; Sch3 санағыштың мәнін 1-ге кемітеміз,
BTFSS STATUS, Z ; егер Sch3=0 болса (Z=1), GOTO-ды аттап кетеміз.
GOTO M3 ; Z=0 болғанда ғана орындалады.
RETURN ; Timer ішкі программасының соңы.
END
Құрылғыларды нұсқаға сәйкес уақытқа өшіріп, қосатын программа құрыңыз. Жоғарыда жызылған программаны өзгертіңіз.
3.1 кесте – Тапсырма нұсқалары
Нұсқа |
S1, D1, D2 |
Жұмыс істеу уақыты, сек |
Нұсқа |
S1, D1,
D2 |
Жұмыс істеу уақыты, сек |
||||
S1 |
D1 |
D2 |
S1 |
D1 |
D2 |
||||
1 |
1, 2, 3, 4, 5 |
5 |
6 |
3 |
6 |
6, 7, 0, 1, 2 |
6 |
6 |
4 |
2 |
2, 3, 4, 5, 6 |
6 |
7 |
4 |
7 |
7, 0, 1, 2, 3 |
7 |
7 |
5 |
3 |
3, 4, 5, 6, 7 |
7 |
6 |
5 |
8 |
0 ,1 ,2 ,3, 4 |
8 |
6 |
6 |
4 |
4, 5, 6, 7, 0 |
8 |
5 |
6 |
9 |
1, 3, 5, 7, 0 |
9 |
5 |
7 |
5 |
5, 6, 7, 0, 1 |
9 |
7 |
7 |
10 |
2, 4, 6, 0, 1 |
10 |
6 |
3 |
3.2 Жұмысты орындау тәртібі
Бақылау терезесін құрыңыз. Оған программада көрсетілген регистрлердң қажетті фоматта келтіріңіз.
Программаны қадамдық режимде ретке келтіру. Timer ішкі программасының тек бірінші шақыруды қалтырып, W=2 аргументін орнатыңыз. Қалған шақыруларды Call алдында «;» қойып өшіріп қойыңыз. Sch_in және out Sch _ санағыштарына 2 санын жазыңыздар. Программаны қадамдық режимде орындаңыздар. Қадамдық режимде бітіргеннен кейін W аргументінің, Sch_in және Sch_out санағыштарының бастапқы мәндерін қайта қойыңыздар. Тапсырма бойынша қажетті уақытты санау үшін W мәнін есептеңіздер, W=20 кезінде тежеу уақыты 1 секунд уақытты дәлірек жасау үшін циклдарға NOP нұсқауын қоюға болады.
3.2 кесте – Кешігу циклдарын реттеу нәтижелері
Нұсқа |
Құрылғы |
Timer ішкі программасының параметрлері |
|||
Жұмыс істеу уақыты, сек |
Санағыштар мәні |
||||
Sch_in |
Sch_out |
Sch3 |
|||
|
S1 |
|
|
|
|
|
D1, D2, L1 |
|
|
|
|
|
D2, L1 |
|
|
|
|
Ескерту! Timer ішкі программасын «Мои документы» бумасында міндетті түрде сақтап қою керек, ол келесі жұмыстарда қолданылады.
Нәтижелерді 3.2 кестеге енгізіңіздер.
3.3 Жұмыс тақырыбы бойынша қысқаша теориялық ақпарат
Қандай да бір жұмысты бірнеше рет әртүрлі мәндер үшін қайталағанда ішкі программаларды қолданады. Сонымен қатар программаны қарапайым қылу үшін оны ішкі программаларға бөліп тастаған да ыңғайлы.
Уақыт санауды санағыштар мен ішкі программа арқылы ұйымдастыру керек. Ішкі программаның бар жұмысы – санағыштардың мәнін 0-ге дейін азайту, ал оған қандай да бір уақыт кетеді. Уақыт ұзақтығы санағыштың бастапқы мәнімен және Мб-та 1 нұсқауға кететін уақытпен анықталады.
Тежеу уақыты циклдардың ұзақтығын машиналық циклға көбейткенге тең.
Микропроцессор жиілігі жоғары болғандықтан тежеу уақытын үлкейту үшін сыртқы цикл құру қажет .
Ішкі программаны негізгі программаның соңынан кейін жазу қажет. Ішкі программа негізгі программадан “call i/п аты” арқылы шақырылады. W аккумулятордың мәні Timer ішкі программасының аргументі. Оның жұмысы біткеннен кейін басқару негізгі программаға өтеді, яғни Timer шақырғаннан кейінгі нұсқау орыналады [1, 2, 4].
3.4 Бақылау сұрақтары
1. Timer ішкі программасында неге үшінші цикл жазылған?
2. Машиналық цикл дегеніміз не?
3. Timer-дағы әрбір команда неше машиналық цикл орындалады?
4. Неге Timer-де Sch_in, Sch_out–тың көрсетілген мәндері таңдалған?
5. Ішкі программа қалай шақырылады?
6. DECF Sch_out, F нұсқауының жұмысын сипаттаңыз.
7. Тежеу уақытын санау формуласын келтіріңіз.
8. Ішкі программа қандай операторлармен басталып, бітеді?
9. Процессорда 1 машиналық циклда қандай операциялар орындалады?
10. Кейбір нұсқаулардың 2 машиналық цикл орындалуы неліктен?
11. Команданы орындауға процессордың қай регистрлері қатысады?
12. Уақыт санауға процессор жиілігінің қатысы қандай?
4 Зертханалық жұмыс. Көбейту және бөлу
Жұмыс мақсаты: көбейту және бөлуді орындау алгоритмін оқып, сандарды салыстыру мен алгоритмді тармақтауды орындауды үйрену.
4.1 Зертханалық жұмыс тапсырмасы және берілгендер
6 санын 0,8-ге көбейтуді орындау мысалын оқыңыз. Алдымен калькуляторда жуықпен берілген коэффициентті алу үшін бүтін көбейткішін және бүтін бөлгішін келтіріп аламыз. Бұл жағдайда көбейткіш 4 және бөлгіш 5 дәл келеді, өйткені 4/5=0,8. Ары қарай берілген санды 4 көбейтеміз де нәтижесін 5-ке бөлеміз. Қалдығы өткізілген есептеулердің қателігін көрсетеді. Көбейту және бөлуді ішкі программалар түрінде жазамыз.
4.1 кесте – Бүтін бөлу алгоритмі
Цикл |
Бүтін бөлігі |
Жұмысшы регистрі |
Әрекет |
Жұмыс регистрі |
«С» битінің мәні |
С=0? |
Әрекет |
1 |
1 |
35 |
Rab_peg= Rab_peg- Delitel |
25 |
1 |
Жоқ |
Циклды қайталау |
2 |
2 |
25 |
15 |
1 |
Жоқ |
Циклды қайталау |
|
3 |
3 |
15 |
5 |
1 |
Жоқ |
Циклды қайталау |
|
4 |
4 |
5 |
-5 |
0 |
Иә |
1 қадамға артқа қайтамыз |
|
|
3 |
5 |
|
|
|
|
Қалдық =5 |
Бөлу нәтижесі: бүтін бөлігі =3, қалдық =5, яғни 35/10=3 (5) |
Л4 көбейту және бөлу программасының фрагменті.
Микробақылауыштың стандартты реттеулері келтірілмеген.
; Программаның жұмыс бөлігі
CLRF PORTC ; PORTC-ға нөл жазу (жарықдиодтарын өшіру).
CLRF Delitel ; бөлгіш адресін тазарту.
; 6×0,8 көбейтеміз, =6×4/5=4(4)
MOVLW D'6'
MOVWF Chislo ; берілген сан
MOVWF Umn_Chislo ; Umnozhenie ішкі прогаммасындағы регистр
MOVLW D'4'
MOVWF Mnozh ;көбейткіш.
MOVLW D'5'
CALL Umnozhenie ; ішкі прогаммадан кейін көбейтінді Pr -ға жазылады.
; Бөлуге дайындық
Movf Pr, W ; Pr мәні Umnozhenie ішкі прогаммасынан алынады.
Movwf Delimoe
Movlw D'5'
movwf Delitel ; егер мәні берілмесе 0-ге бөлу болады.
CALL Delenie
Goto$
; Ішкі программа.
Umnozhenie ; Umn_Chislo және Mnozh кірістері, шығысы Pr.
Clrf Pr
Clrf Kol_slag
Sled_slag
Movf Pr, W
Addwf Umn_Chislo, W ; келесі қосылғышты қосу.
Movwf Pr
Incf Kol_slag, F ; қосылғыштар санын есептейміз.
MOVF Kol_slag, W
XORWF Mnozh, F ; Kol_slag=Mnozh теңдігін маскалау арқылы тексеру.
BTFSS STATUS, Z
Goto Sled_slag ; Z=0 болғанда орындалады.
RETURN
; Ішкі программа.
Delenie ; Delimoe, Delitel кірістері, Chastnoe, Ostatok шығыстары.
CLRF Chastnoe
Movf Delimoe, W;
MOVWF Rab_peg ; Delimoe .
MOVF Delitel, W ; нөлге тексеру.
BTFSC STATUS, Z ; нөлге бөлуден қорғау.
GOTO NUL ; Z=1 болғанда орындалады.
Metka
INCF Chastnoe, F ;бүтін бөліктің мәнін санау.
SUBWF Rab_peg, F ; Rab_peg=Rab_peg – Delitel шегереміз.
BTFSC STATUS, C ;айырмасы теріс екендігін тексереміз?
GOTO Metka ; C=1 болғанда орындалады.
; Бір қадамға кейін қайту
DECF Chastnoe, F ; бүтін бөлікті қайта орнына келтіреміз.
ADDWF Rab_peg, W ; Rab_peg қайта орнына келтіреміз.
MOVWF Ostatok ; қалдықты аламыз.
RETURN
NUL MOVLW D'255' ; нөлге бөлген кезде программаны аяқтау белгісі.
MOVWF PORTC ; нөлге бөлу болғаны жайлы сигнал береміз.
GOTO $
END
Қолданылған жалпы қызмет регистрлері 4.1 суретте келтірілген.
Зертханалық жұмысқа тапсырма. 4.2 кестедегі нұсқа үшін бөлшек санға көбейту программасын жазыңыз.
4.2 Жұмысты орындау тәртібі
4.2 кесте – Тапсырма нұсқалары
Нұсқа |
Коэффициент |
Сан |
Нұсқа |
Коэффициент |
Сан |
|
1 |
1,33 |
62 |
6 |
6,33 |
12 |
|
2 |
2,33 |
35 |
7 |
7,33 |
11 |
|
3 |
3,33 |
22 |
8 |
8,33 |
10 |
|
4 |
4,33 |
17 |
9 |
9,33 |
9 |
|
5 |
5,33 |
14 |
10 |
10,33 |
8 |
|
4.1 сурет – Бақылау терезесі |
Барлық регистрлерді қажетті форматта бақылау терезесіне шығарыңыз. Олардың мәнін зертханалық жұмыс есептемесінде көрсетіңіздер. Мәліметтерді алу үшін программаны ANIMATE режимінде жіберіп, HALT арқылы тоқтатып отыруға болады. Жұмыс нәтижелерін 4.3 кестеге жазыңыздар.
|
|||||
4.3 кесте - Нұсқа 11. 0,8-ге көбейу нәтижелері.
Коэффициент |
Сан |
Көбейткіш |
Бөлгіш |
Нәтиже |
Қалдық |
Дәлдік |
0,8 |
6 |
4 |
5 |
4 |
4 |
83,3% |
Бөлшек санға көбейту программасын «Мои документы» бумасында сақтаңыз, ол келесі жұмыстарда қолданылады.
4.3 Жұмыс тақырыбы бойынша қысқаша теориялық ақпарат
Шартты өту нұсқаулары BTFSC және BTFSS кез келген регистрдегі берілген биттің күйін тексереді, 2.4 кестені қараңыздар. Осы нұсқауларға негізделе отырып көбейту және бөлудің циклдық алгоритмы құрылады.
Циклдың орындалуын тоқтату немесе жалғастыруды әдетте екі санның теңдігін тексеру арқылы орындайды: циклдар санымен және орындалатын циклдың нөмірі арқылы.
Ассемблерде сандарды салыстыру нұсқаулары жоқ. Екі санның кіші, үлкендігін білу үшін келесі алгоритмді қолданады:
а) сандардың айырмасы алынады, сонда нәтижеге байланысты Status регистрінің C және Z флагтары өзгереді, олар 4.4 кестеде келтірілген.
б) ары қарай шартты өту нұсқаулары қолданылады.
4.4 кесте – Айырмасын алу кезіне Status регистрінің C және Z күйлері
ЖҚР UMENSH және W мәндерінің қатынасы |
Айырмасын алудан кейін Status регистрінің флагтарының мәні |
|
Флаг Z |
Флаг C |
|
UMENSH-W>0 |
0 – нөлдік нәтиже болған жоқ |
1 –W-дың 7-битінен С битіне ауысу болды (қосымша кодта қосу кезінде) |
UMENSH-W<0 |
0 – нөлдік нәтиже болған жоқ |
0 – W-дың 7-битінен С битіне ауысу болды (қосымша кодта қосу кезінде) |
UMENSH-W=0 |
1 – операция нәтижесі 0-ге тең |
1- W-дың 7-битінен С битіне ауысу болды (қосымша кодта қосу кезінде) |
Ескерту –UMENSH регистріне азайғыш жазылады |
Көбейтуді тізбектеп қосу арқылы орындауға болады.
Мысалы, 25×10=25+25+25+25+25+25+25+25+25+25=250.
Бүтін бөлу алгоритмі 35-ті 10-ға бөлу мысалы ретінде 4.1 кестеде келтірілген. Алгоритмде бөлгіш 0-ге тең болса программа циклға түсіп кететіні көрніп тұр. Алгоритмнің блок-сұлбасы 4.2 суретте көрсетілген.
Бөлшек санға көбейтуді қандай да бір дәлдікпен көрсетуге болады, яғни берілген санды бүтін көбейткішке көбейтіп, шыққан санды бүтін бөлгішке бөлу арқылы. Көбейткіш пен бөлгішті калькулятор арқылы келтіріп алуға болады [1, 2, 3, 4].
4.4 Бақылау сұрақтары
1. BTFSC STATUS, C шартты өту командасы жұмысын түсіндіріңіз.
2. DECFSZ R3, F шартты өту командасының жұмысын түсіндіріңіз.
3. Бүтін санға көбейту алгоритмін түсіндіріңіз.
4. Сандартың теңдігін қандай операциялар арқылы анықтауға болады?
5. Бүтін санға бөлу алгоритмін түсіндіріңіз.
6. Бөлшек санға көбейту алгоритмін түсіндіріңіз.
7. Айырма нәтижесінің терістігін қалай анықтауға болады?
8. 26 санын 10-ға көбейткенде МБ регистрінде қандай нәтиже болады?
9. 4-ті 0,8-ге екі әдіспен көбейткенде: 4×4/5 немесе 4/5×4 нәтижелері бірдей болады ма?
10. BTFSS STATUS, Z. шартты өту командасы жұмысын түсіндіріңіз.
11. Қай кезде Status регистрінің Z және C бірдей 0-ге тең?
12. Сандарды салыстыру қалай орындалады?
5 Зертханалық жұмыс. Газ шығынын реттеу
Жұмыс мақсаты: шартты өтуді ұйымдастыру бойынша алынған білімді нығайту. Газ шығынын құбырда орналасқан жабынды МЭО орындаушы механизмінін көмегімен реттеу программасын жазу.
5.1 Зертханалық жұмыс тапсырмасы және берілгендер
Жабынды жабу сигналын МЭО-ға PORTC,0 разряды арқылы жібереміз. Жабынды ашу сигналын МЭО-ға PORTC,1 разряды арқылы жібереміз. Программаның бұл бөлігін ішкі программа түрінде жасаймыз. МЭО айналуын басқару үшін «В» және «М» латын әріптерін 0 және 1 арқылы кодтау ерекшеліктерін қолданамыз. «В» әрпінің бірінші разрядында 1 бар, ал «М» нөлінші разрядында 1 бар.
Л5 газ шығынын реттеу программасының фрагменті. МБ-тың стандартты реттеулері келтірілмеген.
;SHAG, DAVLENIE, FAKT_RASKHOD регистрлеріне мәліметтерді енгізу
MOVLW D'2'
MOVWF SHAG ; қосылғыштардың өзгеру қадамы.
MOVLW D'14'
MOVWF TREB_RASKHOD ; газдың қажетті шығыны.
MOVLW D'8' ; газ қысымының мәнін.
MOVWF DAVLENIE ;адреске жазамыз.
MOVWF CHISLO ; SQRT ішкі программасы үшін.
; Программаның ішкі бөлігі
CLRF NAPRAV_MEO
CLRF FAKT_RASKHOD
CLRF PORTC
CALL SQRT ;түбірді артық есептейміз.
CALL VYCH_OB’EM ;көлемді есептейміз.
CALL MEO ; МЕО басқаруды орындаймыз.
GOTO$
SQRT;түбірастын есептеу ішкі программассы. Кірісі – CHISLO, шығысы – KOREN.
MOVLW D'1'
MOVWF SLAGAEMOE ; бірінші қосылғышты 1-ге тең етіп аламыз.
MOVWF SUM ; қосынды да 1-ге тең.
MOVWF KOL_SLAG ; қосылғыштар саны да 1.
Sled_slag INCF KOL_SLAG, F ; қсылғыштар санын өсіреміз.
MOVF SLAGAEMOE, W
ADDWF SHAG, W ;келесі қосылғыштың мәнін есептейміз.
MOVWF SLAGAEMOE ;жаңа қосылғышты сақтаймыз.
ADDWF SUM, W ; W= SLAGAEMOE+W
MOVWF SUM ; қосылғыштардың жаңа қосындысын сақтаймыз.
; Келесі циклға дайындық
SUBWF CHISLO, W;
BTFSC STATUS, C ; CHISLO және SUM-ның қайсысы үлкен екенін анықтаймыз.
GOTO Sled_slag ; С=1 болса орындалады, цикл қайталанды.
MOVF KOL_SLAG, W ; C=0 кезінде циклдан шығамыз.
MOVWF KOREN ; артық түбірді белгілейміз
RETURN
VYCH_OB’EM ; K=4 үшін V=4×KOREN газ көлемін есептеу ішкі программасы.
MOVF KOREN , W ; кірісі– KOREN, шығысы - FAKT_RASKHOD.
MOVWF FAKT_RASKHOD
BCF STATUS, C
RLF FAKT_RASKHOD, F ;екіге көбейтеміз.
BCF STATUS, C
RLF FAKT_RASKHOD, F ;тағы екіге көбейтеміз.
RETURN
MEO ; МЭО айналу бағыты "B" немесе "M" екенін анықтау ішкі программасы
MOVF TREB_RASKHOD, W ; қажетті шығынды W-ға жібереміз.
SUBWF FAKT_RASKHOD, W ; W= Fakt_Raskhod - Treb_Raskhod.
MOVLW b'01001101' ; "М" әрпінің коды, жабынның ашылуын азайтамыз.
BTFSS STATUS, C; C = 1?
MOVLW b'01000010' ; C=0 кезінде, "В" әрпінің коды, жабынды ашамыз.
MOVWF NAPRAV_MEO ; айналудың бағытының символын сақтаймыз.
ANDLW b'00000011' ; маскамен МЭО-ға қажетсіз разрядты тазартамыз.
MOVWF PORTC ; басқару импульсын МЭО-ға жібереміз.
RETURN
Timer ; бұл ішкі программа келтірілмеген.
END
5.2 Жұмысты орындау тәртібі
Мәліметтерді сақтауға арналған ЖҚР-ры 5.1 және 5.2 суреттерде келтірілген. Бақылау терезелері жеткіліксіз және өте көп шығын кезіндегі мәндері келтірілген.
5.1 сурет – Газ беруді өсіру |
5.2 сурет – Газ беруді азайту |
5.1 кесте – Бөлшек коэффициенті бар тапсырманың нұсқалары.
Нұсқа |
К коэф. |
P1 қысым |
P2 қысым |
Қажетті шығын |
Нұсқа |
К коэф. |
P1 қысым |
P2 қысым |
Қажетті шығын |
1 |
1,33 |
8 |
12 |
5 |
6 |
6,33 |
18 |
26 |
35 |
2 |
2,33 |
10 |
22 |
11 |
7 |
7,33 |
20 |
26 |
40 |
3 |
3,33 |
12 |
24 |
15 |
8 |
8,33 |
22 |
26 |
46 |
4 |
4,33 |
14 |
20 |
20 |
9 |
9,33 |
24 |
26 |
51 |
5 |
5,33 |
16 |
18 |
24 |
10 |
10,33 |
26 |
38 |
67 |
Ескерту - P1 және P2 газ қысымы үшін программа жазу керек |
5.2 кесте – Бүтін K=4 тапсырмасының нұсқалары.
Нұсқа |
P1 қысым |
P2 қысым |
Қажетті шығын |
Нұсқа |
P1 қысым |
P2 қысым |
Қажетті шығын |
1 |
8 |
12 |
14 |
6 |
18 |
26 |
22 |
2 |
10 |
22 |
18 |
7 |
20 |
26 |
22 |
3 |
12 |
24 |
18 |
8 |
22 |
26 |
22 |
4 |
14 |
20 |
18 |
9 |
24 |
26 |
22 |
5 |
16 |
18 |
18 |
10 |
26 |
38 |
26 |
Ескерту - P1 және P2 газ қысымы үшін программа жазу керек |
Құрылған жоба P1 және P2 үшін автоматты режимде екі рет орындалады. F5 батырмасын басқан кезде регистрлердің мәндері орнайды. Терезе суреттерін есептемеде көрсетіңіздер.
5.3 Жұмыс тақырыбы бойынша қысқаша теориялық ақпарат
Өндірісте газ технологиялық қондырғыға қысыммен беріледі. Қысым құбырда өзгереді, бірақ газдың шығынын қажетті мәнде тұрақты ұстап тұру керек. Газ қысымы P, жабыннан кейін датчик көмегімен өлшенеді, ал мәліметтер микробақылауышқа беріледі. Газ шығыны (көлемі) V=K×SQRT(P) формуласымен анықталады. Мұнда K газ қасиеттеріне байланысты коэффициент. Қысым төмендегенде Vраб газ шығынын ұстап тұру үшін құбырдағы жабынды МЭО орындаушы механизм көмегімен кішкене ашу керек («Bolshe» бағыты). МЭО-ға импульс беру 1-2 секунд алады. Қысым үлкейгенде жабын жабылады («Menshe» бағыты), сонымен газ беруді азайтады. Бұл әрекеттер МЭО-ға әртүрлі полярлы импульстарды беру арқылы орындалады. Бір уақыттан кейін қысым қайта өлшенеді де газ беруді түзету қайта орындалады, осылай газдың қажетті бір мәнін ұстап тұру іске асырылады.
Есептеулерді қарапайым қылу үшін квадрат түбірдің бүтін мәндерімен шектелейік, мұнда өзінің шын мәнінен үлкен болуы мүмкін. Түбірастын есептеу үшін N бүтін санының квадратын қатар көмегімен алу алгоритмін қолданайық:
N2=1+3+5+7+9…Қосылғыштар саны N санына тең;
N=5 үшін алатынымыз 52=1+3+5+7+9=25.
Егер қысым Р=30 болса, онда біз қосынды жинақтаймыз, қосылғыштардың қосындысы 30-дан асқанға дейін қосамыз. Яғни түбірдің бүтін мәнін 6 деп аламыз. K=4 дейік, онда газ шығыны V=6×4=24. Егер Q=20 шығыны қажет болса, онда жабынды «Menshe» бағытында жабу керек. Егер Q=28 шығыны қажет болса, онда жабынды «Bolshe» бағытында ашу керек [1, 2, 3, 4].
5.4 Бақылау сұрақтары
1. Ішкі программаны шақыру. Негізгі программаға ол нені береді?
2. Ішкі программа қайда, қалай жазылады?
3. Ішкі программаны шақырғанда және одан қайтқан кездегі команадалар санағышының жұмысы?
4. Бүтін сандарды квадратқа шығару алгоритмі.
5. Түбірдің жуық және бүтін мәні қалай есептеледі?
6. МЭО қызметі. Ол қалай жұмыс істейді?
7. Қай кезде Z немесе С бірге тең?
8. Қай кезде Z, С бірдей бірге тең?
9. Сандарды салыстыру қалай орындалады?
10. «В» және «М» латын әріптерінің кодтары қалай қолданылады?
6 Зертханалық жұмыс. Клавиатураны программалау
Жұмыс мақсаты: мәліметтерді клавиатура арқылы енгізу программасын құру.
6.1 Зертханалық жұмыс тапсырмасы және берілгендер
Жобалауға тапсырма. №3 зертханалық жұмыста жасалған бояу камерасын автоматтандыру программасында әрбір детальды бояуды «Пуск» батырмасымен жіберу және «Стоп» батырмасымен тоқтату (ол әрекеттерді камера жанындағы батырма немесе оператор пультынан орындауға болады).
Клавиатура контакттарының «дребезгі» Timer ішкі программасын кішкене уақытқа қосу арқылы жойылады. Бұл программада Stop кнопкасы Timer ішкі программасында орналасқан.
Л6 программасы №3 зертханалық жұмыс негізінде жазылады. Ол программаға қосылған командалар курсивпен келтірілген.
Л6 программасының фрагменті.
; PORTD кіріс/шығысқа орнату нұсқаулары
CLRF TRISC
MOVLW b'00001111' ; PORTD жұмысын.
MOVWF TRISD ; 0-3 биттерін кіріске, 4-7 шығысқа реттейміз.
BCF STATUS, 5
CLRF PORTC
; Программаның жұмысшы бөлігі
MOVLW B'11110000' ; клавиатураның К4-К7 аяқшаларына қорек
MOVWF PORTD ;кернеуін береміз.
MOVLW B'10000000'
MOVWF PORTC ;қорек кернеу бар екенін сигнализациямен көрсетеміз. Sled_det
BTFSS PORTD, 2 ; Pusk1(2)кнопкасы басылғанын тексереміз
GOTO Sled_det ;егер кнопка әлі де басылмаса тексеруді қайталаймыз.
BSF PORTC, 0 ; егер басылса S1 дыбыстық сигнализацияны қосамыз.
MOVLW d'40' ; S1 сигнализацияның жұмыс істеу уақытын береміз.
CALL Timer
MOVLW B'10001110'
MOVWF PORTC ; D1 және D2 қозғалтқышын, L1сигнализацияны қосамыз.
MOVLW d'60' ; D1 жұмыс істеу уақытын береміз.
CALL Timer
BCF PORTC, 2 ; D1 өшіреміз, D2, L1 және L2 жұмыс істей береді.
MOVLW d'20' ; L1 және вентилятордың жұмыс істеу уақытын береміз.
CALL Timer
MOVLW B'10000000'
MOVWF PORTC ; D2 вентилятор және L1 сигнализацияны өшіреміз.
MOVLW d’20’ ; детальды ауыстыруға кететін уақытты береміз.
CALL Timer
GOTO Sled_det ; қондырғыны қайта қосу үшін Sled_det белгісіне көшу.
GOTO $ ; ішкі программа мен негігі программаны бөлу.
Timer ; ішкі программада Stop кнопкасы бар ішкі цикл ғана көрсетілген.
M_in ; ішкі санағыштың белгісі.
BTFSC PORTD, 1; Stop1 және Stop2 кнопкасы басылғанын тексереміз.
GOTO Stop ; басылса, онда камераны тоқтату нұсқауына өту.
DECF Sch_in, F ; Sch_in санағыш мәнін 1-ге кемітеміз.
BTFSS STATUS, Z; егер Sch_in=0 болса (Z=1), GOTO-ды аттап кетеміз.
GOTO M_in ; Z=0 кезінде орындалады.
. . . .
RETURN
Stop CLRF PORTC ; бояу камерасының жұмысын тоқтату.
GOTO Sled_det ; немесе GOTO $ қою қажет
END
6.3 Жұмысты орындау тәртібі
6.1 кестедегі нұсқауға сәйкес бояу камерасын автоматтандыру программасын құру.
6.1 кесте – Тапсырма нұсқалары
Нұсқа |
Қосылу биттері S1, D1, D2 |
Батырма Pusk |
Батырма Stop |
Нұсқа |
Қосылу биттері S1, D1, D2 |
Батырма Pusk |
Батырма Stop |
1 |
1, 2, 3, 4, 5 |
1 немесе 2 |
5 немесе 6 |
6 |
6, 7, 0, 1, 2 |
6 немесе 7 |
9 немесе 0 |
2 |
2, 3, 4, 5, 6 |
2 немесе 3 |
6 немесе 7 |
7 |
7, 0, 1, 2, 3 |
7 немесе 8 |
3 немесе 4 |
3 |
3, 4, 5, 6, 7 |
3 немесе 4 |
7 немесе 8 |
8 |
0 ,1 ,2 ,3, 4 |
8 немесе 6 |
4 немесе 2 |
4 |
4, 5, 6, 7, 0 |
4 немесе 2 |
6 немесе 8 |
9 |
1, 3, 5, 7, 0 |
9 немесе 0 |
2 немесе 3 |
5 |
5, 6, 7, 0, 1 |
5 немесе 6 |
1 немесе 2 |
10 |
2, 4, 6, 0, 1 |
0 немесе 9 |
7 немесе 6 |
S1, D1, D2, L1 және L2 жұмыс істеу уақытын және олардың PORTC-ға қосылу биттерін №3 зертханалық жұмыстағыдай алу керек.
6.3 Жұмыс тақырыбы бойынша қысқаша теориялық ақпарат
Клавиатура программаларда мәліметтерді енгізу, есептеу алгоритмін өзгерту нұсқауларын беру үшін және т.б. қолданылады. Зертханалық жұмыста PORTD-ға ’1’ сигналын беру арқылы клавиатураға қорек кернеуін береміз, қосымша қорек көзі қажет емес.
Пленкалы клавиатураны МБ-қа қосу сұлбасы 6.1-суретте көрсетілген. RD7, RD6, RD5, RD4 разрядтары ‘1’ сигналын беруге арналған, қалғандары сигнал қабылдау үшін. Келген сигналды микропроцессор программаға сәйкес өңдейді, программа орындалуы сәйкесінше өзгереді.
6.1-суретте «1» цифрлы кнопканың PORTD-ға қосылуы көрсетілген. «1» кнопкасының бір клеммасы RD7 аяқшасына, ал екіншісі RD3 аяқшасына жалғанған. RD7 битін шығысқа, ал RD3 битін кіріске программалау керек.Кнопка басылған кезде RD7 битінен шыққан сигнал «1» кнопкасы арқылы RD3 кірісіне өтеді [2, 3, 6].
Программада клавиатура кнопкаларының рөлі және олардың орналасуы: «5» - пульттағы Pusk1 кнопкасы; «6» - орналасқан жердегі Pusk2 кнопкасы; «1»-пульттағы Stop1 кнопкасы; «2»-орналасқан жердегі Stop2 кнопкасы. |
|
6.1 сурет – Клавиатураны қосу сұлбасы және кнопкалар қызметі |
6.4 Бақылау сұрақтары
1. PORTD разрядтарын неге кірі/шығысқа реттейді
2. PORTD аяқшаларының жұмысын қалай орнату керек?
3. Клавиатура кнопкасының басылуынқалай тексеру керек?
4. Неге клавиатураның әрбір кнопкасының жеке клеммасы жоқ?
5. BTFSS PORTD, 2 нұсқауы нені орындайды?
6. BTFSC PORTD, 2 нұсқауы нені орындайды?
7. «7» және «5» кнопкаларын қалай параллель қосуға болады?
8. p16F877.inc не үшін жазылған?
9. Stop кнопкасын Timer ішкі программасының сыртында орнатуға болады ма?
7 Зертханалық жұмыс. Буып-түю жұмысын автоматтандыру. Дыбыс түзу
Жұмыс мақсаты: буып-түю машинасын автоматтандыру программасын құру. Сиренаның үзілісті дыбысын түзу немесе қондырғының жанында орналасқан лампаның жыпылықтауын орындау.
7.1 Зертханалық жұмыс тапсырмасы және берілгендер
Буып-түю машинасын автоматтандыру тапсырмасы. Қондырғыға кернеу бергенде оператор пультындағы L2 лампасын және ескертуші дыбыстық сигнализацияны S1 қосу. 2 секундтан кейін S1 сигнализациясын өшіріп D1 конвейерін қосу. Конвейерарқылы изоляторлар жылжиды, фотодатчик изолятордың қорапқа түскенін байқайды. Екі изолятор түскеннен кейін L1 лампасын қосу керек. Төрт изолятор келгеннен кейін екі секундқа буып-түю механизмін қосу, ол толы қорапты бос қораппен алмастырады. Қораптар санын санау, фотодатчиктерді клавиатураның K5 және K6 кнопкаларымен имитациялау керек.
7.1 кесте – PORTC биттерінің және клавиатуры аяқшаларының қызметі
Регистр PORTC |
Клавиатура кнопкалары |
Кнопка жұмысы |
0 разряд - S1 ескертуші дыбыстық сигнализация |
5 немесе 6 |
Фотодатчик |
1 разряд – D1конвейерінің қозғалтқышы |
|
|
2 разряд – D2 буып-түюші механизмнің қозғалтқышы |
|
|
3 разряд – L1 жарықтық сигнализация |
|
|
7 разряд – оператор пультіндегі L2 жарықтық сигнализация |
|
|
7.1 сурет – Бақылау терезесі |
Төменде көрсетілген программада Stop кнопкасы жоқ, өйткені мұндай алгоритм кезінде тоқтату процесін тек үзу арқылы ғана орындау керек.
7.2 Жұмысты орындау тәртібі
Программаны жөндеу. Қадамдық режимде Timer ішкі программасының уақытын шектеңіз, яғни W мәнін Sch3 санағышына жазатын команданы ғана қалдыру керек. Программа жөндеуден өткеннен кейін PORTC «0» битін сирена клеммасымен қосыңыз.
7.1 суретте көресетілген бақылау терезесін құру қажет.
7.2 кесте – Тапсырма нұсқасы
Нұсқа |
Қондырғыны
қосу биттері |
Нұсқа |
Қондырғыны
қосу биттері |
1 |
1, 2, 3, 4, 5 |
6 |
6, 7, 0, 1, 2 |
2 |
2, 3, 4, 5, 6 |
7 |
7, 0, 1, 2, 3 |
3 |
3, 4, 5, 6, 7 |
8 |
0 ,1 ,2 ,3, 4 |
4 |
4, 5, 6, 7, 0 |
9 |
1, 3, 5, 7, 0 |
5 |
5, 6, 7, 0, 1 |
10 |
2, 4, 6, 0, 1 |
Л7 программасының фрагменттері.
include<p16F877.inc> ; төменде РОН аттары, таймер үшін көрсетілмеген.
KOL_IZOL EQU h'45' ; изоляторлар санын жазуға арналған регистр.
KOL_KOROB EQU h'46' ; қораптар санын жазуға арналған регистр.
Inver_Bit EQU H'47' ; терістелетін битті анықтайтын регистр.
_PORTC EQU H'48' ; PORTC күйін сақтауға арналған регистр.
; МБ және клавиатураның стандартты реттеу операциялары жазылмаған.
; Программаның жұмысшы бөлігі
CLRF KOL_KOROB
MOVLW B'10000001'
MOVWF PORTC ; пульттағы L2 сигнализациясын және S1 сиренаны қосу.
Сиренаның үзілісті сигналын қосуға арналған командалар.
MOVLW b'00000001'
MOVWF Inver_Bit ; терістеу битін береміз.
MOVF PORTC, W
MOVWF _PORTC ; PORTC күйін сақтаймыз.
MOVLW d'40' ; сиренаның жұмыс уақытын беру. Тексеру кезінде d’2’.
CALL Timer
MOVF _PORTC, W
MOVWF PORTC ; PORTC күйін қайта қалпына келтіреміз.
CLRF Inver_Bit ; Timer і/п келесі шақырулар кезінде сиренаны өшіріп қоямыз.
BCF PORTC, 0 ; S1 сиренаның қорек кернеуін өшіру.
MOVLW B'10000010'
M1 MOVWF PORTC ; D1 транспортерды өшіреміз, L2 жұмыс істей береді.
CLRF KOL_IZOL
Prov_dat
BTFSS PORTD, 2 ; датчиктің істегенін тексереміз ("5", "6" кнопкалары).
GOTO Prov_dat
MOVLW D'10'
CALL Timer ; датчик контакттарының «дребезгтерін» жоямыз.
INCF KOL_IZOL, F ; изолятордың қорапқа түсуін көрсетеміз.
MOVLW D'2';
XORWF KOL_IZOL, W ; екі изолятор түскенін тексереміз
BTFSC STATUS, Z ; Z = 0? тексерміз.
BSF PORTC, 3 ; Z=1 кезінде ғана, L1 лампасын қосамыз.
MOVLW D'4' ; 4 изолятор түскенін тексереміз.
SUBWF KOL_IZOL, W ; W=KOL_IZOL-4.
BTFSS STATUS, Z ; Z = 1? тексерміз (4 изолятор түсті ме?)
GOTO Prov_dat ; Z=0 болғанда датчик істегенін тексереміз.
MOVLW
b'10000110' ; тек Z=1 кезінде, қорапты
ауыстырып
; (D2 қосу) және L1 сигнализациясын
өшіру керек.
MOVWF PORTC ; информацияны PORTC-ға жібереміз
INCF KOL_KOROB, F ; келесі қораптың толғанын көрсетеміз.
MOVLW d'50' ;қорапты ауыстыру уақыты.
CALL Timer
MOVLW b'10000010' ; D2-ні өшіруге дайындық.
GOTO M1;
GOTO$
Timer ; Timer ішкі программасы
MOVWF Sch3 ; W таймер аргументі.
; RETURN ; бұл команда тек программаны тексеру кезінде қолданылсын.
M3 MOVLW D'150'
MOVWF Sch_out ; сыртқы санағыштың мәнін орнатамыз.
M_out ; сыртқы санағыштың белгісі.
;Сиренаның үзілісті сигналына немесе жылтылдауға арналған нұсқаулар
MOVLW b'00000000' ;сиренаны қосу қажет емес деп аламыз.
MOVF Inver_Bit, F ; Inver_Bit регистрін =0 тексеру.
BTFSS STATUS, Z ; Z=1 тексереміз?
MOVF Inver_Bit, W ; тек Z=0 кезінде S1 үшін битті терістейміз.
XORWF PORTC, F ;маска арқылы PORTC битін сирена үшін терістейміз.
MOVLW D'255';
MOVWF Sch_in ;ішкі санағыштың мәнін орнатамыз.
M_in ; ішкі санағыштың белгісі. Timer-дің басқа нұсқаулары көрсетілмеген.
RETURN ; ішкі программаның соңы.
END
7. 3 Жұмыс тақырыбы бойынша қысқаша теориялық ақпарат
Технологиялық қондырғыны қосар кезде әрқашан ескертуші үзілісті дыбыстық немесе жанып-өшіп жыпылықтайтын жарықтық сигнализация қосылады. Бұл қондырғы PORTC биттеріне қосылады. 7.2 суретте келтірілген уақыттық диаграммаға сәйкес S1 дыбыстық сигнализациямен қатара L2 лампасы жанады. Сәйкесінше «0» битке пульстік кернеу беру керек, ал «1» битке тұрақты кернеу.
7.2 сурет – Буып-түйгіш жұмысының уақыттық диаграммасы
Қосымша ішкі программа жазбас үшін пульстік кернеуді PORTC «0» битін терістеу арқылы аламыз, ол нақты бір уақыттан кейін Timer ішкі программасының сыртқы циклында орындалады (№3 зертханалық жұмыстан). Терістеуді ХOR (Исключительное ИЛИ) логикалық операциясымен орындауға болады. Inver_Bit регистрінде терістелетін бит нөмірін жазамыз, өйткені сирена нөлінші битке жазылған, сонда Inver_Bit=h’01’.
Программа келесі алгоритмді орындауы керек:
Inver_Bit=h’01’ ; нөлінші битті терістейтінімізді көрсетеміз.
_PORTC= PORTC ; PORTC күйін _ PORTC регистрінде сақтаймыз.
W=d’40’ ; сигнал беру уақытын береміз.
Call Timer ; ішкі программаны шақырамыз.
PORTC=_ PORTC ; PORTC сақталған мәнін қайтарамыз.
Inver_Bit=h’00’ ; PORTC битін терістеуге тыйым саламыз.
Timer ішкі программасының өзгертілген бөлігінің блок-сұлбасы 7.3 суретте көрсетілген, оң жағында түсініктемесі келтірілген.
- мұнда W=h’00’ - XOR логикалық операциясының маскасы. Оны нөлге теңестіру арқылы PORTC битін терістеу қажет емесе деп шешеміз.
- терістелетін биттер көрсетілгенін тексереміз.
- инверсия қажет болса, онда маскаға инверсияланатын биттердің нөмірлерін жазамыз.
- маска (W) және PORTC арасындағы логикалық операцияны орындаймыз. Егер масканың қандай да бір разрядында ‘1’ жазылса, онда PORTC-дағы сәйкес разряд инверсияланады, PORTC қалған разрядтары өзгерусіз қалады.
|
|
7.3 сурет – Timer ішкі программасы |
7.4 Бақылау сұрақтары
1. Timer ішкі программасының жұмыс уақыты қалай беріледі?
2. Клавиатура кнопкалары нені имитациялайды?
3. Контакттардың «дребезгі» қалай жойылады?
4. «Паразитная наводка» деген не?
5. Неге Stop кнопкасын Timer ішкі программасына қоюға болмайды?
6. Апаттық датчиктердің жұмысы қалай имитацияланады?
7. Изолятордың саны екіге тең екендігі қалай анықталады?
8. Қорап толғаны қалай көрсетіледі?
8 Зертханалық жұмыс. Сандарды 2-санақ жүйесінен 2_10 санақ жүйесіне ауыстыру
Жұмыс мақсаты: сандарды 2-к санақ жүйесінен 2_10 санақ жүйесіне ауыстыруды үйрену, шақырған программаға мән қайтаратын ішкі программалар құру.
8.1 Зертханалық жұмыс тапсырмасы және берілгендер
Тапсырма. 8.1 кестеде берілген екілік санақ жүйесіндегі санды 2_10 санақ жүйесіне ауыстырып, жеті сегментті таблоға жүздік, ондық бірліктер санын көрсететін кодты шығару керек. Жеті сегментті таблоны шартты түрде микробақылауыштың бір сегіз разрядты портына қосылған деп аламыз. Бұл таблоны қолдану бойынша ақпарат төменде берілген.
8.2 Жұмысты орындау тәртібі
8.1 сурет – Бақылау терезесі
|
Vybor_Seg ішкі программасы команда санағышының кіші байтына (h'02' адресі бойынша орналасқан PLC регистрі) W жұмысшы регистр арқылы берілетін N санын қосады. Осы операция нәтижесінде кестенің жолын таңдау орындалады. Мысалы, PCL ‘0’ цифрының коды бар retlw командасының адресін көрсетіп тұрады, бірақы N санын қосқаннан кейін ол бізге N-нші команданы көрсететін болады, бізге керегі де сол. Қолданылатын регистрлердің символдық аттары 8.1 суретте көрсетілген.
|
Л8 программасының фрагменті.
МБ және клавиатураның стандартты реттеу операциялары және регистрлерді алдына ала тазарту жазылмаған.
MOVLW b'11101011' ; берілген екілік сан.
MOVWF CHISLO
MOVWF Rab_Reg
; Жүздіктер санын санаймыз
MOVLW D'100'
MOVWF VYCH ; Жүздіктер санын анықтаған кездегі азайтқыш.
M_SOT INCF K_SOT, F;
SUBWF Rab_Reg, F ; Rab_Reg= Rab_Reg-100
BTFSC STATUS, C ; азайту нәтижесі терістігін тексереміз (С=0)?
GOTO M_SOT ; С=1 кезінде жүздіктер санын санау циклы қайталанады.
ADDWF Rab_Reg, F ; қарызға алу болса, алдыңғы қадам мәніндерін кері
DECF K_SOT, F ; қайтарамыз, жүздіктер санын да.
MOVLW D'10'
MOVWF VYCH ; ондықтар санын анықтаған кездегі азайтқыш.
Ондықтар санын санау жүздіктер санын санау сияқты орындалады. Бұл программаны өздігіңізше орындаңыздар.
; бірліктер санын көрсететін кодты табамыз
MOVF Rab_Reg, W ; қайтарудан соң Rab_Reg бірліктер санынан тұрады.
MOVWF K_ED ; бірліктер санын басқа регистрге жазамыз.
SWAPF K_DES, W ; ондықтарды жоғары разрядтарға жазамыз.
ADDWF K_ED, W ; бірліктер санын кіші разрядтарға орнатамыз.
MOVWF R_D_ED ; регистр енді ондықтар және бірліктер санынан тұрады.
MOVF K_ED, W ; W аккумулятор мәні Vyb_Seg і/п аргументі.
CALL VYBOR_SEG ; аргументі W і/п шақырамыз.
MOVWF Kod_seg_ed ;бірліктер санын көрсететін кодты жазамыз.
; Осыған ұқсас ондықтар мен жүздіктер кодтарын анықтаңыздар.
GOTO $ ; негізгі программа мен ішкі программаны бөліп тұр
VYBOR_SEG ; сегменттердің қосылу кодынан тұратын ішкі программа.
addwf PCL, f ; команда санағышындағы жаңа адрес PLC=PCL+W
retlw b'00111111' ; 0 цифрасының коды. W=0 болғанда қайтарылады.
retlw b'00000110' ; 1 цифрасының коды. W=1 болғанда қайтарылады.
retlw b'10101101' ; 2 цифрасының коды. W=2 болғанда қайтарылады.
retlw b'01001111' ; 3 цифрасының коды. W=3 болғанда қайтарылады.
retlw b'01100110' ; 4 цифрасының коды. W=4 болғанда қайтарылады.
retlw b'01101101' ; 5 цифрасының коды. W=5 болғанда қайтарылады.
retlw b'01111101' ; 6 цифрасының коды. W=6 болғанда қайтарылады.
retlw b'00000111' ; 7 цифрасының коды. W=7 болғанда қайтарылады.
retlw b'01111111' ; 8 цифрасының коды. W=8 болғанда қайтарылады.
retlw b'01101111' ; 9 цифрасының коды. W= 9 болғанда қайтарылады.
; ішкі программаның соңы.
END ; программың соңы.
8.1 кесте – Тапсырма нұсқалары
Нұсқа |
Екілік сан |
Нұсқа |
Екілік сан |
1 |
11010011 |
6 |
10100110 |
2 |
11110010 |
7 |
10110001 |
3 |
11101001 |
8 |
10111100 |
4 |
10010000 |
9 |
11000111 |
5 |
10011011 |
10 |
11010010 |
8.1 суретте b'11101011' екілік сан 2 жүздік, 3 ондық 5 бірлік бар екені көрініп тұр, яғни бұл сан ондық санақ жүйесінде 235 саны болады. Осы сан таблоға шығады.
8.3 Жұмыс тақырыбы бойынша қысқаша теориялық ақпарат
Әдетте технологиялық процесс күйі оператор пультіне сандық немесе символдық күйде шығуы керек. Мысалы жеті сегментті индикатор алайық, Сандарды осындай индикаторға шығару үшін оларды 2_10 санақ жүйесіне келтіру керек. Бұл жүйеде бір регистрде тек екі ондық сан орналасуы мүмкін, олардың әрбіреуі жарты байтты алады. Екілік жүйеде көрсетсек 00000000 санынан бастап 10011001 санына дейін. Сонымен, бір регистрге екі ондық сан жазуға болады және 00-ден 99-ға дейінгі сандарды көрсетуге болады [2].
Біз алдыңғы жұмыстарда қолданған ішкі программалар void типінде болған, яғни шақырған программаға ешқандай мәлімет қайтармайды. Шақырған программаға бір байттық мәлімет қайтаратын ішкі программа жазайық. Бұл ішкі программа әдетте жеті сегментті цифрлық индикаторға қолданылады.
8.2 суретте санды ауыстыру алгоритмінің бір бөлігінің блок-сұлбасы келтірілген.
8.2 сурет – Блок-сұлба
Көптеген цифрлық индикаторлар қажетті сегменттерді таңдап қосу принципімен жұмыс істейді (8.3-суретті қараңыздар). Мәліметті беретін порттың разрядтары санмен белгіленген. Әдетте бұл сегменттер жарықдиодтары немесе сұйық кристалдан жасалған элементтердің электродтары болады.
8.3 сурет – Жеті сегментті индикатор
Ішкі программаның жүйелік көрінісі 8.3,а суретінде келтірілген. Кіріс сигнал мұнда W жұмысшы регистрде орналасқан 4-битті екілік код. Ал осы W жұмысшы регистрге қайтатын шығыс мән сәйкес 7-битті код, ол қажетті сәйкес битті көрсетеді (Vyb_Seg ішкі программасы). PIC микробақылауыштарының гарвард архитектурасы программа жадысының мәндерін мәліметтер ретінде қолдануға мүмүкіндік бермейді. Оның орнына түрлендіру кестесі retlw командаларының жиыны ретінде іске асырылады, олардың әрбіреуі бір байтты константаны береді. Жетінші бит нүкте үшін қолданылады.
8.4 Бақылау сұрақтары
1. 2-10 санақ жүйесі не үшін қажет?
2. 2-10 сан қанша бит орын алады?
3. Бір регистрге 2-10 жүйеде қанша сан жазуға болады?
4. Цифрлар индикаторға қалай шығарылады?
5. addwf PCL, f командасының қызметі қандай?
6. VYBOR_SEG ішкі программасын шақыру кезінде W=h’06’ болса, ол шақырған программаға не қайтарады?
7. Программада Swap командасы қандай мақсатта қолданылған?
8. Жүздіктер санын табу алгоритмін түсіндіріңіз.
9. R_D_ED регистрінің қызметі неде?
10. PCL регистрінің қызметі қандай?
11. Жеті сегментті индикаторды қосу үшін МБ қанша аяқшасы қажет?
12. Екі санға арналған индикаторға мәлімет беру қалай жүреді?
9 Зертханалық жұмыс. Таймер TMR1
Жұмыс мақсаты: микробақылауышқа орнатылған таймер-санағыш TRM1 және оны реттеуге арналған арнайы регистрлерді қолдануды үйрену.
9.1 Зертханалық жұмыс тапсырмасы және берілгендер
Жобалауға тапсырма. №3 зертханалық жұмыстағы бояу камерасының жұмысын ала отырып, TMR1 таймерін қолданатын ішкі программа құрыңыз. Қосымша боялған детальдар санын санау қажет.
Камераның жұмысының уақыттық диаграммасы 3.2 суретте көрсетілген.
9.1 және 9.2 суреттер бойынша бояу камерасын жұмысын автоматтандыру алгоритмінің блок-сұлбасын жасаңыз. Программа фрагменттерімен таңысыңыздар. Соның негізінде өз нұсқаңыз үшін программа құрыңыз.
9.1 сурет - Программа блок-сұлбасы 9.2 сурет - Timer2 і/п блок-сұлбасы
Л9 программасының фрагменттері.
Include <p16F877.inc>; символдар кітапханасын қосамыз.
T_reg EQU h'20' ; кешігу уақытын аынқтайтын регистр .
Kol_det EQU h'21' ; боялған детальдар санын көрсететін регистр.
; МБ реттеулері көрсетілмеген.
; TMR1 таймерінің реттеулері
BSF STATUS, 5
CLRF TRISC
CLRF PIE1 ; перифериялық үзулерге тыйым саламыз.
BCF STATUS, 5
CLRF T1CON ; TMR1-ді күту режиіне орнату, TMR1-ді ішкі
;генератордан тактілеу, жиілік бөлгіштің мәні 1:1.
CLRF TMR1H ; TMR1 үлкен регистр-санағышын тазартамыз.
CLRF TMR1L ; TMR1 кіші регистр-санағышын тазартамыз.
CLRF INTCON ; TMR1арқылы үзуге тыйым саламыз .
MOVLW b'00110000'; ішкі генератордан тактілеу.
MOVWF T1CON ; жиілік бөлгіштің мәнін 1:8 орнатамыз .
;№3 зертханалық жұмыстың жұмысшы бөлігіне сәйке фрагменті көрсетілмеген.
GOTO$
Timer2 ; Timer і/п-сы TMR1 бар Timer2 ішкі программамен ауыстырылады.
MOVWF T_reg
; Return ; бас программаны жөндегенде Timer2 і/п өшіру үшін.
M_T_reg ; келесі 4 команда тек F7 режимі үшін.
; MOVLW D'255' ; Timer2 жұмысын жөндеу үшін.
; MOVWF TMR1H ; Timer2 жұмысын жөндеу үшін.
; MOVLW D'254' ; Timer2 жұмысын жөндеу үшін.
; MOVWF TMR1L ; Timer2 жұмысын жөндеу үшін.
BCF PIR1, TMR1IF ; әр циклда таймердің толу флагын нөлге түсіру.
BSF T1CON, TMR1ON; TMR1 таймерін жіберу.
; келесі үш жол – бұл TMR1 таймерінің санағыштарын кеміту циклдары.
M_ TRM1 ; белгі.
BTFSS PIR1, TMR1IF; таймердің толу флагын тексеру.
GOTO M_ TRM1 ; егер флаг орнамаса, онда TRM1 циклы жалғаса береді.
DECFSZ T_reg, F ; регистрдегі санды кемітеміз де нөлге тексереміз.
GOTO M_T_reg; (тек Z=0 болғанда) уақыт біткен жоқ, циклды қайталаймыз.
RETURN
END
9.2 Жұмысты орындау тәртібі
Үш детальді бояуға арналған қондырғыны берілген уақытқа өшіріп қосатын программа құрыңыз. Нұсқалар 9.1 кестеде берілген.
9.1 кесте – Тапсырма нұсқалары
Нұсқа |
Қосылу
биттері |
Жұмыс істеу уақыты, сек |
Нұсқа |
Қосылу биттері |
Жұмыс істеу уақыты, сек |
||||
S1 |
D1 |
D2 |
S1 |
D1 |
D2 |
||||
1 |
1, 2, 3, 4, 5 |
5 |
6 |
3 |
6 |
6, 7, 0, 1, 2 |
6 |
6 |
4 |
2 |
2, 3, 4, 5, 6 |
6 |
7 |
4 |
7 |
7, 0, 1, 2, 3 |
7 |
7 |
5 |
3 |
3, 4, 5, 6, 7 |
7 |
6 |
5 |
8 |
0 ,1 ,2 ,3, 4 |
8 |
6 |
6 |
4 |
4, 5, 6, 7, 0 |
8 |
5 |
6 |
9 |
1, 3, 5, 7, 0 |
9 |
5 |
7 |
5 |
5, 6, 7, 0, 1 |
9 |
7 |
7 |
10 |
2, 4, 6, 0, 1 |
10 |
6 |
3 |
Нәтижелерін 9.2 кестеге енгізіңіз.
9.2 кесте – Кешігу цилдарын реттеу нәтижелері
Нұсқа |
Қондырғы |
Timer2 ішкі программасының параметрлері |
|||
Уақыт, сек |
Санағыштар мәні |
||||
T_reg |
TMR1H |
TMR1L |
|||
|
S1 |
|
|
|
|
|
D1, D2, L1 |
|
|
|
|
|
D2, L1 |
|
|
|
|
Программаны жөндеу. Timer2 ішкі программаның тек бірінші шақыруын қалдырыңыз, аргумент W=2. Таймер санғыштарының мәні ішкі программада көрсетілген (;). TMR1 санғыштары F7 кнопасының басуынан істемейді, ол синхрондау сигналының жоқ болғандығынан. Программаны қадамдық режимде істегеннен кейін көрсетілген жолдарды (;) арқылы өшіріп тастаңыз да, оны автоматты режимде жіберіңіз. Қондырғының берілген уақытын реттеңіз. |
|
9.3 сурет – Бақылау терезесі |
9.3 Жұмыс тақырыбы бойынша қысқаша теориялық ақпарат
Микробақылауышта бірнеше таймер-санағыштар бар. Олар уақыт интервалын дәл өлшеу үшін, сыртқы импульстер санын санауға немесе программа үзулерін санау үшін қажет. Таймер-санағыштар арнайы регистрлар арқылы бақыланады [1, 2]. TRM1 таймер-санағыштың PIR1, TICON, INTCON, TMR1, TMR1H, TMR1L арнайы регистрлары В қосымшасында сипатталған.
9.4 Бақылау сұрақтары
1. TMR1 таймерінің қызметі.
2. TMR1 таймерінің қанша санағышы бар?
3. TRM1 максимал уақыты қалай орнатылады?
4. TMR1 санағыштарына қандай максимал сан жазуға болады.
5. TICON регистрінің қызметі.
6. INTCON регистрінің қызметі.
7. PIR1 регистрінің қызметі.
8. егистра PIE1 регистрінің қызметі.
9. Timer2 жұмысының ұзақтығы қалай беріледі?
10. Жиілік бөлгіштің қызметі.
11. PIE1 регистрі қай банкте орналасқан?
12. TMR1 толуы жайлы флаг қай кезде пайда болады?
13. TMR1қалай жіберіледі?
14. T_reg регистрінің қызметі.
15. 255+1 қосқанда регистрде қандай нәтиже болады?
10 Зертханалық жұмыс. Үзулер
Жұмыс мақсаты: үзулерді өңдеу програмаларын құруды үйрену.
10.1 Зертханалық жұмыс тапсырмасы және берілгендер
Л10 программасының фрагменттері. «RB0/INT арқылы үзуді өңдеу».
include <p16F877.inc>
SUM EQU h'50' ; в фондық программада жұмыс істейтін санағыш.
_STATUS EQU h'51' ; Status күйін сақтауға арналған регистр.
EVENT EQU h'52' ; үзулер кезінде оқиғалардың болғанын көрсететін санағыш.
_WORK EQU h'53' ; аккумулятор күйін сақтауға арналған регистр.
; Timer і/п санағыштарының сипаттамасы көрсетілмеген.
org 0x000 ; компиляторға келесі жолды жазу адресін көрсетікіш.
GOTO MAIN ; қайта жіберу векторын ЭППЗУ-дің h’000’ адресіне
; жазамыз.
org 0x004 ; компиляторға келесі жолды жазу адресін көрсетікіш.
GOTO PERS_COUNT ; векторды h’004’ үзу адресіне жазамыз.
NOP
MAIN NOP ; бос команда.
NOP ; курсорды F7 режимінде CLRF STATUS командасына қоямыз.
CLRF STATUS
BSF STATUS, 5
CLRF TRISC
MOVLW B'00001111'
MOVWF TRISB ; RB0 үзу клеммасын кіріске орнатамыз.
MOVLW B'00001111'
MOVWF TRISD ; узуді имитациялау үшін клавиатура жұмысын реттеу.
BCF STATUS, 5
BSF INTCON, INTE ; сыртқы үзулерге рұқсат береміз.
BSF INTCON, GIE ; жалпы үзуге рұқсат береміз.
CLRF EVENT ; оқиға санағышын тазартамыз (келушілер саны).
MOVLW B'11110001'
MOVWF PORTD ; клавиатура аяқшаларына кернеу береміз.
CLRF SUM ; регистрді тазартамыз.
M_FON ; фондық программаның шексіз циклының белгісі.
MOVLW H'F0'
MOVWF PORTC ; фондық программаның жұмысының сигналы.
INCF SUM, F ; SUM регистрін периодты түрде өсіреміз.
; келесі 4 команда тек F7 режимінде жөндеу үшін.
; MOVLW D’2’
; XORWF SUM, W
; BTFSC STATUS, Z
; CALL PERS_COUNT; PERS_COUNT ішкі программа ретінде шақырылады.
MOVLW D'20' ; жарықдиодтардың жану уақытын береміз.
CALL Timer
CLRF PORTC
MOVLW D'20' ; жарықдиодтардың өшу уақытын береміз.
CALL Timer
GOTO M_FON
Timer ; Timer кешігу уақытының і/п келтірілмеген.
PERS_COUNT ; үзуді өңдеу ішкі программасы.
BCF INTCON, INTE ;сыртқы үзулерге тыйым саламыз.
MOVWF _WORK ; W мәнін _WORK регистріне сақтаймыз.
SWAPF STATUS, W
MOVWF _STATUS ; Status мәнін сақтаймыз.
BCF INTCON, INTF ; сыртқы үзу флагын тазартамыз.
INCF EVENT, F ; келесі келушіні тіркеу.
SWAPF _STATUS, W ; Status мәнін қалпына келтіреміз.
MOVWF STATUS
SWAPF _WORK, F
SWAPF _WORK, W ; W мәнін қалпына келтіреміз.
BSF INTCON, INTE ; сыртқы үзуге рұқсат береміз.
RETFIE ; өңдегіштен фондық программаға қайтамыз.
END
Программа жұмысы МБ қорек көзін қосқанда немесе МБ қайта қосуға жібергенде h’00’ қайта жіберу векторынан басталады, сонда жазылған GOTO MAIN командасына сәйкес басқару бас программаға беріледі. Оның басында PORTB және PORTD регистрлерінің биттері кіріске немесе шығысқа орнатылады. Содан кейін жалпы үзуге және сыртқы үзулерге рұқсат беріледі, РСН биттері орнатылады (INTCON, INTE және INTCON, GIE). РСН жұмысын реттегеннен кейін фондық программаның шексіз циклы басталады.
Қысқа уақытқа клавиатураның «1» кнопкасын басқанда RB0 аяқшасына кернеу импульсі келеді, ол келген адамның турникет арқылы өткенін имитациялайды да INTCON регистрінің INTF битінде сыртқы үзу жайлы флаг-хабарлама түзіледі. Бұл флаг бойынша фондық программаның жұмысы үзіледі де, басқару h’004’ адресі бойынша орналасқан үзу векторына беріледі. Ол жердегі goto PERS_COUNT шартсыз өту командасы үзуді өңдегіш программаға жібереді.
Үзуді өңдегіште лезде сыртқы үзулерге тыйым саламыз (мысалы қосымша жалған үзулерді шақыратын кнопкалық «дребезгтен» сақтану үшін). Содан кейін сыртқы үзу келгені жайлы флаг-хабарламаны 0-ге түсіреміз (BCF INTCON, INTF). Егер оны істемесе, үзулер шексіз болады және фондық программаға өту болмайды. W регистрінің мәнін _WORK регистрінде және и Status регистрінің мәнін _STATUS регистрінде сақтаймыз. Ары қарай оқиғаны өңдеу басталады, біздің жағдайда EVENT регистрінің мәні өседі, ол келушілердің санын бақылайды.
Ең соңында фондық программа өз жұмысын дұрыс жалғастыру үшін өңдегіш W және Status мәндерін қайта қалпына келтіреді, өйткені бұл регистрлердің мәндері өңдегіш жұмысының кезінде өзгеруі мүмкін. Қайта қалпына келтіру SWAPF командасының көмегімен орындалады, өйткені бұл команда Status-қа әсер етпейді. BSF INTCON, INTE командасы арқлы қайтадан үзуді өңдегіштің жұмысына рұқсат береміз. RETFIE командасы бойынша фондық программаға қайтамыз.
EVENT регистрінің өсуі бірден көп болуы мүмкін екенін ескерте кетейік. Бұл клавиатура шығысын RB0 аяқшасымен жалғайтын өткізгіш экрандалмағанына байланысты.
Осы жұмыстарға сәйкес фотоэлектрлік датчик жанынан өткен консервтелген банкаларды санауға болады. Мысалы, 24-х банка өткеннен кейін үзуді өңдегіш конвейерді тоқтатып буып-түю машинасын қоса алады.
10.3 Жұмысты орындау тәртібі
10.1 кестесінде көрсетілген нұсқа үшін программа жазыңыздар. Теориялық түрде кешігу уақытын санаңыз, микробақылауыш жиілігі 12 МГц.
Программамен жұмыс істеу ерекшеліктері:
а) программаны жөндеу кезінде қадамдық режимде үзулер болмайды, сондықтан программаны жөндеу кезінде үзуді өңдегішті ішкі программа ретінде шақырамыз. Ол кезде Timer ішкі программасын шақыруды өшіріп тастау қажет. Үзуді өңдегішті бас программадан шақыру қажет, Sum=2 болсын. Ол үщін фондық программада «;» белгісімен берілген программаларды ашу керек. Жөндеп болғаннан кейін оларды өшіру керек;
б) кнопка контактілерінің «дребезгі» қосымша үзулерді болдыруы мүмкін, сондықтан өңдегіште үзуге тыйым салу арқылы жойылады;
в) жөнделген программ автоматты режимде жіберіледі. Бірнеше үзулерді орындағаннан кейін программа Halt командасымен тоқтатылады. Event, Sum, _Work, W, _Status, Status регистрлерінің мәндері бақылау терезесінде көрсетіледі және есептеме кестесіне толтырылады.
10.1 кесте – Тапсырма нұсқалары
Нұсқа |
Үзу көзі |
Timer кешігу уақыты, с |
Нұсқа |
Үзу көзі |
Timer кешігу уақыты, с |
1 |
Кнопка ‘1’ |
1 |
6 |
Кнопка ‘6’ |
1 |
2 |
Кнопка ‘2’ |
2 |
7 |
Кнопка ‘7’ |
2 |
3 |
Кнопка ‘3’ |
3 |
8 |
Кнопка ‘8’ |
3 |
4 |
Кнопка ‘4’ |
4 |
9 |
Кнопка ‘Shift’ |
4 |
5 |
Кнопка ‘5’ |
5 |
10 |
Кнопка ‘Enter’ |
5 |
УМК-7 стендіндегі клавиатура және өткізгіштер қорғаушы экраны болмағандықтан барлық RD4..RD7 разрядтарына ‘1’ сигналын беру керек. Сонымен қатар клавиатураның барлық аяқшаларын PORTD аяқшаларына қосу керек.
Есептемеде 10.2 кестені толтырыңыздар.
10.2 кесте – Зертханалық жұмыс бойынша есептеме мәліметтері
Нұсқа |
Үзу көзі |
Timer кешігу уақыты, с |
Sch3 санағышының мәні |
Sch_out санағышының мәні |
Sch_in санағышының мәні |
|
|
|
|
|
|
10.3 Жұмыс тақырыбы бойынша қысқаша теориялық ақпарат
Микробақылауышты әдетте шексіз цикл бойы қандай да бір жұмыс орындайтындай етіп программалайды: есептеулер, мәлімет беру, технологиялық процесті бақылау. Бірақ қандай да бір сыртқы немесе ішкі оқиға болғанда негізгі (фондық) программаның шексіз циклын үзіп қандай да бір әрекеттер орындау (үзуді өңдеу) қажет болады, содан кейін қайтадан фондық программа тоқтау нүктесінен қайта басталады. Сондықтан фондық программаны жалғастырғанда W, Status регистрлерінің мәні, тағы басқа регситрлердің мәні үзуді өңдеуге дейінгі күйінде болуы керек. Олардың мәнін сақатап үзуді өңдегеннен кейін қайта қалпына келтіру керек.
Зертханалық жұмыста фондық программа келушілердің санын санауға арналған. Программадағы үзулер турникет арқылы өткен келушілердің санын санауға қажет.
Сыртқы үзулер көзі PORTB регистрінің RB0/INT аяқшасына жалғанады. Үзу болу үшін бұл клеммаға импульс келуі керек, содан кейін ғана МБ үзу векторы арқылы h’04’ қайта қосылады [1, 2]. Зертханалық жұмыста бұл клемма К3 клавиатураның клеммасын жалғанады. PORTD регистрі клавиатура кнопкасын басқанда К3 клеммасында сигнал пайда болатындай етіп орнатылады. Ол сигнал сыртқы импульстің имитациясын орындайды.
10.4 Бақылау сұрақтары
1. Event, Sum, _Work, W, _Status, Status мәндерін қалай қалпына келтіруге болады?
2. Үзуді өңдегіштен бас программаға арналған ішкі программаны шақыруға болады ма?
3. Үзу дегеніміз не?
4. Үзуге рұқсат қалай беріледі?
5. Үзу флагының қызметі?
6. Контакттар «дребезгі» дегеніміз не? «Дребезгтен» қорғау.
7. Фондық программа дегеніміз не?
8. Үзу векторы қай адресте орналасқан?
9. Қайта жіберу векторы дегеніміз не?
10. Status регистрін сақтау үшін неге SWAPF командасы қолданылады?
11. Тәжірибеде программаның күткен нәтижесін бұзатын қандай бөгеттер (помехи, наводки) бар?
12. W және Status регистрлерінің мәні қандай мақсатта сақталады?
11 Зертханалық жұмыс. Екі байттық сандарды қосу
Жұмыс мақсаты: әртүрлі санақ жүйесіндегі екі байттық сандарды қосу прораммасын жазуды үйрену.
11.1 Зертханалық жұмыс тапсырмасы және берілгендер
Жұмыста қолданылатын регистрлердің символдық аттары 11.1-суретте және 11.1-кестеде келтірілген.
Л11 программасының фрагменттері. Екібайттық сандарды қосу.
МБ жұмысын реттеу және айнымалыларға ат беру көрсетілмеген.
CLRF SUM_M ; қосындыға арналған регистрлерді тазартамыз.
CLRF SUM_S
CLRF SUM_3
; Бірінші қосылғышты енгіземіз
MOVLW h’04’
MOVWF S1_M ; кіші байт S1_M= h’04’.
MOVLW h’FF’
MOVWF S1_S ; үлкен байт S1_S= h’FF’.
; Екінші қосылғышты енгіземіз
MOVLW h’FE’
MOVWF S2_M ; кіші байт S2_M=h’FE’.
MOVLW h'FF'
MOVWF S2_S ; үлкен байт S2_S= h'FF'.
; S1_M және S2_M кіші байттарын қосу
MOVF S1_M, W
ADDWF S2_M, W
MOVWF SUM_M
BTFSC STATUS, C; егер ауысу (толу) болса, қосынды 255-тен үлкен, онда
INCF SUM_S, F ; С=1 кезінде байтты өсіреміз.
; Үлкен байттарын қосу
MOVF SUM_S, W
ADDWF S1_S, W
BTFSC STATUS, C ;ауысу болды ма?
INCF SUM_3, F ; қосындының үшінші байтын тек С=1 болғанда өсіреміз.
ADDWF S2_S, W
MOVWF SUM_S
BTFSC STATUS, C; ауысу болды ма?
INCF SUM_3, W ; қосындының үшінші байтын тек С=1 болғанда өсіреміз.
GOTO$
END
11.3 Жұмысты орындау тәртібі
11.1 және 11.2 кестелеріндегі тапсырмалар бойынша оналтылық санақ жүйесін қолданып екі байттық сандарды қосуды орындаңыздар. Нәтижелерін 11.3 және 11.4 кестелеріне толтырыңыздар.
11.1 кесте – Бүтін ондық сандар үшін тапсырма нұсқалары
Нұсқа |
Сан S1 |
Сан S2 |
Нұсқа |
Сан S1 |
Сан S2 |
1 |
60001 |
10001 |
6 |
65406 |
60006 |
2 |
30002 |
20002 |
7 |
60007 |
10007 |
3 |
40003 |
30003 |
8 |
30008 |
20008 |
4 |
65504 |
40004 |
9 |
40009 |
30009 |
5 |
64505 |
50005 |
10 |
50010 |
40010 |
11.2 кесте – Бөлшек ондық сандар үшін тапсырма нұсқалары
Нұсқа |
Сан S1 |
Сан S2 |
Нұсқа |
Сан S1 |
Сан S2 |
1 |
110,01 |
110,1 |
6 |
160,06 |
160,6 |
2 |
120,02 |
120,2 |
7 |
170,07 |
170,7 |
3 |
130,03 |
130,3 |
8 |
180,08 |
180,8 |
4 |
140,04 |
140,4 |
9 |
190,09 |
190,9 |
5 |
150,05 |
150,5 |
10 |
200,10 |
200,20 |
11.1 Жұмыс тақырыбы бойынша қысқаша теориялық ақпарат
Сандарды қосу технологиялық процесс көрсеткіштерін қосу кезінде қолданылады. Қосынды мәндерін зерттеп қондырғыны басқару процесіне бір өзгертулер енгізеді.
Бір байтқа 0-ден 255-ке дейінгі сандарды жазуға болады. Кейбір практикалық есептер үшін бұл жеткіліксіз. Егер екі байт қолданса, онда 0-ден 65535-ке дейінгі сандарды жазуға болады. Сандарды он алтылық санақ жүйесінде беріп қосуға болады.
Мысалы, 65284 және 65534 ондық жүйедегі сандарды қосу керек. Сандарымызды 16-лық жүйеде көрсетейік, әрқайсын екі регистрге жазамыз, 11.3-кестеге қараңыздар. Зертханалық жұмыста бұл байттар әрбір қосылғыш үшін үлкен және кіші байттар деп аталады, мысалы h’23’ және h’22’.
11.3 кесте – Сандарды оналтылық кодта қосу
Атаулар |
Ондық жүйе |
Оналтылық жүйе |
||
Қосылғыштар немесе SUM_3 |
Үлкен байттар (регистрлер) |
Кіші байттар (регистрлер) |
||
1-ші қосылғыш |
65284 |
h’FF04’ |
S1_S =h’FF’ |
S1_M =h’04’ |
2- ші қосылғыш |
65534 |
h’FFFE’ |
S2_S =h’FF’ |
S2_M =h’FE’ |
Табылған қосынды |
130818 |
SUM_3=h’01’ |
SUM_S=h’FF’ |
SUM_M =h’02’ |
Нәтижесін
ондық санақ жүйесінде көрсетейік: h’01FF02’®
®1×164+15×163+15×162+0×161+2×160=65536+61440+3840+0+2=130818.
Байттарды қосқан кезде егер қосынды h’FF’ (яғни 255-тен) жоғары болса, онда үлкен байттың 0-нші битіне 1 қосуды ескеру керек. Қосынды үш байт шығатыны анық. Регистрдің толу кезі Status регистрінің С битінде көрсетіледі, яғни ол 1-ге тең. Осы кезді қолданып үлкен байттын 1-ге өсіруді орындаймыз, яғни арифметикалық ауысу болады.
Басқа жағынан қарасақ үлкен байтта санның бүтін бөлігі көрсетілген, ал кіші байтта бөлшек бөлігі бар деп қарастыруға болады. Мұндай санды көпмүшеге келтіреміз A=K2×162+ К1×161+K0×160+ K-1/16-1+К-2/16-2.
Ондық жүйедегі 255,017 және 255,991 бөлшек сандарды қосайық. Бұл сандарды қосу үшін бөлшек және бүтін бөліктерін бөлек оналтылық санақ жүйесіне өткізіп қосамыз [2].
Санның бүтін бөлігін 16 санақ жүйесіне аудару алгоритмі:
Алгоритм басы
Берілген санның бүтін бөлігін енгізу
Бөлінгішті берілген санға теңестіру
Бөлінгіш нөл болғанға дейін келесіні қайталау:
Бөлінгішті 16-ға бөліп бүтін бөлігін және қалдығын табу
Қалдығын есте сақтау
Бөлінгішті бүтін бөлікке теңестіру
Цикл соңы
Алгоритм соңы
Мысалы, 255 санын 16
санақ жүйесіне аударайық:
255:16=15(15)
15:16=0 (15).
онымен, 16 санақ жүйесіне алғанымыз 25510=FF16.
Санның бөлшек бөлігін 16 санақ жүйесіне аудару алгоритмі:
Алгоритм басы
Берілген санның бөлшек бөлігін енгізу
Көбейтілгішті енгізілген санға теңестыру
Көбейтінді 0-ден үлкен болса келесіні қайталай беру:
Көбейтілгіштің 16-ға көбейтіндісін табу
Көбейтіндінің бүтін бөлігін нәтижеге 16 жүйедегі сан ретінде жазу
Егер барлық маңызды сандар табылса, онда циклдан шығу
Цикл соңы
Алгоритм соңы
Бірінші қосылғыштың бөлшек бөлігін үш санға дейінгі дәлдікпен оналтылық жүйеге ауыстырайық, содан кейін дөңгелектейміз.
0.017×16=0.272; 0.272×16=4.352; 0.352×16=5.63.
Сонымен, 0.01710=0.0416. Үшінші 5 цифрасы 8-ден кіші болғандықтан қарастырмаймыз.
Екінші қосылғыштың бөлшек бөлігі:
0.991×16=15.856; 0.856×16=13.696; 0.696×16=11.136.
Сонымен, 0.99110=0.FDB16.
Оналтылық жүйеде алынған санды екі санға дейін дөңгелектеп алатынымыз 0,99110=0,FE16.
Программа жұмысының нәтижесінде алынған мәндер 11.4 кестеде көрсетілген.
11.4 кесте – Екі байттық бөлшек сандарды қосу
Атаулар |
Ондық жүйе |
Оналтылық жүйе |
||
Қосылғыштар немесе SUM_3 |
Үлкен байттар (регистрлер) |
Кіші байттар (регистрлер) |
||
1-ші қосылғыш |
255,017 |
h’FF,04’ |
S1_S =h’FF’ |
S1_M =h’04’ |
2- ші қосылғыш |
255,991 |
h’FF,FE’ |
S2_S =h’FF’ |
S2_M =h’FE’ |
Алынған қосынды |
511,008 |
SUM_3=h’01’ |
SUM_S=h’FF’ |
SUM_M =h’02’ |
Оналтылық жүйеде алынған h’01FF,02’ нәтижені ондық жүйеге келтірейік:
Sum=1×162+15×161+15×160+0×16-1+2×16-2=256+240+15+0+0,0078,
=511,0078.
Осыдан көргеніміздей екі жағдайдағы да нәтиже бөлшек мәніне дейін тура келді.
11.1-суретте екібайттық сандарды қосу блок-сұлбасы көрсетілген, онда қосылғыштар берілген деп қарастырылады.
11.1 сурет – Блок-сұлба
11.4 Бақылау сұрақтары
1. Санақ жүйесінің негізі деген не? Олар қандай болады?
2. 255-тен жоғары сан МБ жадысында қалай орналасады?
3. Санды ондық санақ жүйесінен оналтылық санақ жүйесіне және кері қалай ауыстырады?
4. Толу битін қай кезде пайда болады?
5. Толу битінің қосындының үлкен байтына қандай қатынасы бар?
6. Екібаттық сандарды қосқанда қанша регистр қажет?
7. F+1 және FF+1 санарын қосқанда қандай нәтиже болады?
8. Бөлшек сандарды қосуға бола ма?
А қосымшасы
Status регистрі
А.1 кестесінде status регистрі биттерінің аты және олардың орналасуы көрсетілген. Олар арифметикалық және логикалық операцияларды басқаруда, банктерді таңдауда және басқа мақсаттарда қоданылады.
А.1 кесте – Status регистрінің биттері
Нөмірлер |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Аттар |
IRP |
RP1 |
RP0 |
-TO |
-PD |
Z |
DC |
C |
А.1 кестесінде келесі атаулар қабылданған:
- IRP жанама адресация кезінде банкті таңдау биті (IRP=1 - банк 2 немесе банк 3 таңдалады, IRP=0 - банк 0 немесе банк 1 таңдалады);
- RP1, RP0 тура адресация кезінде банкті таңдау биттері. Банк таңдау кезіндегі биттердің мәндері А.2 кестесінде көрсетілген;
- TO бақылаушы таймердің толу флагы;
- PD қорек көзінің қосылу флагы;
- Z нөлдік нәтиже флагы. Арифметикалық немесе логикалық операциялар нәтижесі нөлге тең болса оған “1” жазылады.
- DC ондық ауысу немесе қарызға алу флагы. Ондық-екілік жүйеде қосу және алу командалары үшін егер кіші жартыбайттан ауысу болса “1” жазылады. Қарызға алу инверсиялы мән;
- C ауысу неме қарызға алу флагы. Қосу және айырмасын алу командалары үшін егер үлкен биттен ауысу болса “1” жазылады. Қарызға алу инверсиялы мән;
А.2 кесте – RP1 және RP0 биттерімен банк нөмірін таңдау
RP1 |
RP0 |
Банк нөмірі |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
2 |
1 |
1 |
3 |
Регистрдің әрбір битімен аты бойынша немесе нөмірі бойынша қатынасуға болады. BTFSC STATUS, Z командасы BTFSC STATUS, 2 командасына пара-пар.
Status регистрін тазартқаннан кейінгі оның биттерінің мәндері А.3 кестесінде көрсетілген.
А.3 кесте – CLRF STATUS командасынан кейінгі status регистрінің мәні.
IRP |
RP1 |
RP0 |
-TO |
-PD |
Z |
DC |
C |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
Б қосымшасы
PIC* МБ нұсқауларының сипаттамасы
Нұсқауларда константа k символымен берілген. Нұсқаулар сипаттамасында оның орындалуы кезінде өзгеретін флагтар көрсетілген. Нұсқауларда d параметрі (dest) нәтиже қайда жазылатынын көрсетеді. Егер d=0 болса нәтиже W регистрінде сақталады. Егер d=1 болса, нәтиже f (file-сөзінен) регистрінде сақталады. Программаларды d параметрінде ‘0’ орнына ‘W’ жазуға, ал ‘1’ орнына ‘f’ жазуға болады.
Программаларды регистр адресінің орнына оның символдвқ атын жазған ыңғайлы. Мысалы, егер h’21’ адресіті регистр аты R1 болса, онда ADDWF f, d нұсқауын программада екі әдіспен жазуға болады: ADDWF h’21’ , W немесе ADDWF R1, W.
ORG h’xx’ – бұл ассемблера көрсеткіші, осы өрнектен кейінгі код ЭППЗУ-дың h’xx’ адресінен басталатынын көрсетеді.
ADDLW - W мен тұрақтыны қосу
Синтаксис: [label] ADDLW k
Оперантар: 0 £ k £ 255
Операция: (W) + k à (W)
Өзгеретін флагтар: С, DC, Z
ADDWF - W және f –ты қосу
Синтаксис: [label] ADDWF f,d
Оперантар: 0£f£127
Операция: (W) + (f) -»(dest)
Өзгеретін флагтар: C, DC, Z
ANDLW - тұрақты мен W арасындағы бит бойынша (побитная) 'ЖӘНЕ' операцисы
Синтаксис: [labef] ANDLW k
Операндтар: 0£k£255
Операция: (W) .AND. k à (W)
Өзгеретін флагтар: Z
ANDWF - W және f арасындағы бит бойынша 'ЖӘНЕ'
Синтаксис: [label] ANDWF f,d
Операндтар: 0 £ f £ 127
Операция: (W) .AND. (f) à (dest)
Өзгеретін флагтар: Z
BCF - f регистріндегі b битін тазарту
Синтаксис: [label] BCF f,b
Операндтар: 0£f£127; 0£b<£
Операция: 0 à (f<b>)
Өзгеретінжолақша: Жоқ
BSF - f регистрінде b битін орнату
Синтаксис: [label] BSF f,b
Операндтар: 0£f£127; 0£b£7
Операция: 1àf<b>
Өзгеретін флагтар: Жоқ
BTFSC - f регистріндегі b битін тексеру, егер 0 болса келесі командадан өтіп кету
Синтаксис: [label] BTFSC f,b
Операндтар: 0£f£127; 0£b£7
Операция: егер (f<b>) = 0 болса келесі командадан өтіп кету
Өзгеретін флагтар: Жоқ
Сипаттамасы: Егер f регистріндегі b биті '1'-ге тең болса, онда келесі нұсқау орындалады. Егер f регистріндегі b биті '0'-ге тең болса, онда келесі нұсқау орындалмайды.
BTFSS - f регистріндегі b битін тексеру, егер (f<b>) = 1 болса келесі командадан өтіп кету
Синтаксис: [label] BTFSS f,b
Операндтар: 0£f£ 127: 0£b£7
Операция: егер b биті '0'-ге тең болса келесі нұсқау орындалады, ал '1'-ге тең болса, онда келесі нұсқау орындалмайды.
CALL ішкі программаны шақыру
Синтаксис: [label] CALL
Операндтар: 0 £ k £ 2047
Операция: (PC)+1àTOS
kàPC<10:0>,
(PCLATH<4:3>)à PC<12:11>
Өзгеретін флагтар: Жоқ
Сипаттамасы: Ішкі программаны шақыру. Келесі команда адресі (РС+1) стектің ең жоғары жағына орналасады. Адрестің онбір биті команда кодынан команда санығышына (счетчигіне) РС<10:0> қондырылады. Екі үлкен биті PCLATH регистрінің комада санығышына РС<12:11> қондырылады. CALL командасы екі цикл орындалады.
CLRF - f-ті тазарту
Синтаксис: [label] CLRF
Операндтар: 0 £f £ 127
Операция: 00h à (f); 1 àZ
Өзгеретін флагтар: Z
Сипаттамасы: f регистрін тазарту және Z=1 флагын орнату.
CLRW - W регистрін тазарту
Синтаксис: [label] CLRW
Операндтар: Жоқ
Операция: 00h à (W), 1 à Z
Өзгеретін флагтар: Z
Сипаттамасы: W регистрін тазарту және Z=1 флагын орнату.
CLRWDT – WDT регистрін тазарту
Синтаксис: [label] CLRWDT
Операндтар: Жоқ
Операция: 00h à WDT,
00h à алдыңғы бөлгіш WDT,
1à -TO, 1 àPD
Өзгеретін флагтар: -TO, -PD
Сипаттамасы: CLRWDT командасы WDT- ны және алдыңғы бөлгішті де WDT-ға қосылып тұрса тазартады. Status регистрінде ТО және PD биттерін орнатады.
COMF - f инверсиясын алу.
Синтаксис: [label] COMF f,d
Операндтар: 0£f£127 dÎ [0,1]
Операция: (-f) à (dest)
Өзгеретін флагтар: Z
Сипаттамасы: f регистрінің барлық биттерінің инверсиясын алу.
DECF - f-ті 1-ге кеміту
Синтаксис: [label] DECF f,d
Операндтар: 0 £f £ 127 dÎ [0,1]
Операция: (f) - 1 -> (dest)
Өзгеретін флагтар: Z
DECFSZ - f-ті 1-ге кемітіп, егер 0 болса келесі командадан өтіп кету
Синтаксис: [label] DECFSZ f,d
Операндтар: 0 £f £ 127 dÎ [0,1]
Операция: (f) -1 à (dest);
Өзгеретін флагтар: Жоқ
Сипаттамасы: f регистрін декременттеу. Егер оның нәтижесі '0'-ге тең болмаса келесі жол орындалады, ал 0-ге тең болса келесі жол орындалмайды.
GOTO – шартсыз өту операциясы
Синтаксис: [label] GOTO 0 £ k £ 2047
Операндтар:
Операция: Белгіге көшу
Өзгеретін флагтар: Жоқ
INCF - f –регистрін 1-ге өсіру
Синтаксис: [ label] INCF f,d
Операндтар: 0£f£127 dÎ[0,1]
Операция: (f) + 1 à (dest)
Өзгеретін флагтар: Z
INCFSZ - f-ті 1-ге өсіріп, егер 0 болса келесі командадан өтіп кету
Синтаксис: [label] DECFSZ f,d
Операндтар: 0 £f £ 127 dÎ [0,1]
Операция: (f) -1 à (dest);
Өзгеретін флагтар: Жоқ
Сипаттамасы: Егер оның нәтижесі '0'-ге тең болмаса келесі жол орындалады, ал 0-ге тең болса келесі жол орындалмайды.
IORLW - тұрақты және W арасындағы бит бойынша 'НЕМЕСЕ'
Синтаксис: [label] IORLW k
Операндтар: 0 £ k £ 255
Операция (W).OR. kà (W)
Өзгеретін флагтар: Z
IORWF - W және f арасындағы бит бойынша 'НЕМЕСЕ'
Синтаксис: [label] IORWF f.d
Операндтар: 0 £ f £ 127 dÎ [0,1]
Операция: (W).OR. (f)->(dest)
Өзгеретін флагтар: Z
MOVF - f мәнін жіберу
Синтаксис: [label] MOVF f.d
Операндтар: 0£f£127 dÎ [0,1]
Операция: (f) -> (dest)
Өзгеретін флагтар: Z
Сипаттамасы: f регистрінің мәні адресат регистріне ауысады. Егер d=0 болса, мәні W регистрінде сақталады. . Егер d=1 болса, мәні f регистрінде сақталады. d=1 мәні f регистрін 0-ге тексеру үшін қолданылады.
MOVLW - тұрақтыны W-ға жіберу
Синтаксис: [label] MOVLW k
Операндтар: 0 £ k £ 255
Операция: kà(W)
Өзгеретін флагтар: Жоқ
Сипаттамасы: Қолданылмайтын биттерге ассемблер '0' орнатады.
MOVWF - W -ны f-ке жіберу
Синтаксис: [label] MOVWF f
Операндтар: 0£f£127
Операция: (W) à (f)
Өзгеретін флагтар: Жоқ
NOP - операция жоқ
RETFIE - ішкі программадан үзуге рұқсатпен қайту
Синтаксис: [ label] RETFIE
Операндтар: Жоқ
Операция: TOS à PC, 1à GIE
Өзгеретін флагтар: Жоқ
Сипаттамасы: үзуді өңдейтін ішкі программадан қайту. TOS стегінің басы PC команда санағышқа қондырылады. GIE(INTCON<7>) толық үзуге рұқсат беру флагы '1'-ге орнатылады.
RETLW -тұрақтыны W регистрға орната ішкі программадан қайту
Синтаксис: [label] RETLW k
Операндтар: 0 £ k £ 255
Операция k à (W), TOS à PC
Өзгеретін флагтар: Жоқ
Сипаттамасы: W регистрына 8-разрядты тұрақты қондырылады. TOS стегінің басы PC команда санағышқа қондырылады.
RETURN -ішкі программадан қайту
Синтаксис: [label] RETURN
Операндтар: Жоқ
Операция: TOS à PC
Өзгеретін флагтар: Жоқ
Сипаттамасы: Ішкі программадан қайту. TOS стегінің басы PC команда санағышқа қондырылады.
RLF - f регистрін алмасу арқылы циклдық солға жылжыту
Синтаксис: [label] RLF f.d
Операндтар: 0£f£127 dÎ [0,1]
Операция: Сипаттамасын қара
Өзгеретін флагтар: С
Сипаттамасы: f регистрінің ішін status регистрінің С биті арқылы циклдық солға жылжыту орындалады.
RRF - f регистрін алмасу арқылы циклдық оңға жылжыту
Синтаксис: [label] RRF f,d
Операндтар: 0£f£127 dÎ [0,1]
Операция: Сипаттамасын қара
Өзгеретін флагтар: С
Сипаттамасы: f регистрінің ішін status регистрінің С биті арқылы циклдық оңға жылжыту орындалады.
SLEEP - SLEEP режиміне өту
Синтаксис: [label] SLEEP
Операндтар: Жоқ
Операция; 00h à WDT, 00h à алдыңғы бөлгіш WDT 1 à -ТО
0 à PD
Өзгеретін флагтар: -ТО, -PD
Сипаттамасы: PD - қорек көзі қосылу флагын '0'-ге орнату. ТО – WDT толу флагын '1'-ге орнату. WDT таймерін және оның алдыңғы бөлгішін тазарту. Микробақылауышты SLEEP режиміне ауыстырып, такттік генераторды өшіру.
SUBLW - тұрақтыдан W мәнін шегеру
Синтаксис: [label] SUBLW k
Операндтар: 0 £ k £ 255
Операция: k - W à W
Измен, флаги: C, DC, Z
SUBWF – f-тен W мәнін шегеру
Синтаксис; [label] SUBWF f,d
Операндтар: 0£f£127 dÎ [0,1]
Операция: (f) –(W) à (dest)
Өзгеретін флатар: C, DC, Z
SWAPF - f регистріндегі жартыбайттарды алмастыру
Синтаксис: [label] SWAPF f.d
Операндтар: 0£f£127 dÎ [0,1]
Операция: (f<3:0>) à (dest<7:4>)
Өзгеретін флагтар: Жоқ
XORLW - W және тұрақты арасындағы бит бойынша 'НЕМЕСЕ-ні жоққа шығару '
Синтаксис: [ label] XORLW k
Операндтар: 0£k£255
Операция: (W) .XOR. k à (W)
Өзгеретін флагтар: Z
XORWF - W және f арасындағы бит бойынша 'ЕРЕКШЕ НЕМЕСЕ'
Синтаксис: [label] XORWF f.d
Операндтар: 0£f£127 dÎ [0,1]
Операция: (W) .XOR. (f) à (dest)
Өзгеретін флагтар: Z
В қосымшасы
Модуль TMR 1 таймері
TMR1 - 16-разрядты таймер/санағыш, екі 8-разрядты регистрден тұрады (TMR1H және TMR1L), оларға жазуға және оқуға болады. TMR1 таймер/санағышты басқару биттері T1CON регистрінде орналасқан.
Санау екі пар регистрде орындалады (TMR1H:TMR1L), 0000h санынан FFFFh санына дейін бірге өсіп отырады. Тағы бір бірлікті қосқанда регистрлердің толуы болады да, санағыштарда қайтадан 0000h болады. Санағыштың толуы кезінде PIR1 регистріндегі TMR1IF<0> үзу флагында '1' орнайды. PIR1 регистріндегі TMR1IE битін орнату/тазалау арқылы үзуге рұқсат беруге/тыйым салуға болады.
TMR1жұмыс істеу режимдері: таймер режимі, санағыш режимі.
TMR1ON (T1CON<0>) битін ‘1’ орнату арқылы TMR1 қосылады.
TMR1CS (T1CON<1>) биті арқылы тактілік импульстер көзі таңдалады.
TMR1 әрбір машиналық цикл сайын өседі.
Тактілік импульстер генератор (T1OSCEN=1) қосылған кезде RC1/T1OSI/CCP2 және RС0/T1OSO/TICK1 аяқшалары кіріс ретінде орнатылуы керек. TRISC<1:0> биттерінің мәндері қарастырылмайды, ал бұл аяқшалардың мәнін оқу '0' береді.
TMR1 (TMR1H, TMR1L) регистрлерін тазартуға жіберу. TMR1H және TMR1L регистрлері қорек көзі қосылуы бойынша немесе басқа тазарту түрлері кезінде 00h мәніне түспейді.
TMR1 жиілік бөлгіші TMR1L,TMR1H регистрлеріне сан жазылғанда тазарады.
PIE1 (адресі 8Ch) регистріне жазуға және оқуға болады, перифериялық үзулерге рұқсат беру биттерінен тұрады. Перифериялық үзулерге рұқсат беру үшін PEIE (INTCON<6>) битіне '1' орнату керек.
INTCON (адресі 0Вh, 8Вh, 10Вh немесе 18Вh) регистріне жазуға және оқуға болады, үзулерге рұқсат беру биттерінен және үзу флагтарынан тұрады: TMR1 толуы; PORTB аяқтарындағы сигнал деңгейінің өзгеруі; RB0/INT сыртқы үзу көзі.
Ескерту. Үзу флагтары үзу шарттары орындалған кезде орнайды. Олар рұқсат беру битіне және жалпы үзуге рұқсат беру битіне GIE (INTCON<7>) тәуелді емес.
PIR1 регистрін жазуға және оны оқуға болады. Ол перифериялық модульдердің үзу флагтарынан тұрады.
Ескерту! программа перифериялық модульдердің үзу сигналдарын өңдеп біткеннен кейін сәйкес үзу флагын тазарту керек, әйтпесе үзу бағдарламасы қайта-қайта өңделе береді.
Г қосымшасы
PIC16877 микропроцессорының жады картасы
|
|
|
|
|
|
|
|
Адрес |
|
Жанама адресация регистрі |
00h |
Жанама адресация регистрі |
80h |
Жанама адресация регистрі |
100h |
Жанама адресация регистрі |
|
|
TMR0 |
01h |
OPTION_REG |
81h |
TMR0 |
101h |
OPTION_REG |
181һ |
|
PCL |
02h |
PCL |
82h |
PCL |
102h |
PCL |
182һ |
|
STATUS |
03h |
STATUS |
83h |
STATUS |
103h |
STATUS |
183һ |
|
FSR |
04h |
FSR |
84h |
FSR |
104h |
FSR |
184һ |
|
PORTA |
05h |
TRISA |
85h |
|
105h |
|
185һ |
|
PORTB |
06h |
TRISB |
86h |
PORTB |
106h |
TRISB |
186һ |
|
PORTC |
07h |
TRISC |
87h |
|
107h |
|
187һ |
|
PORTD(1) |
08h |
TRISD(1) |
88h |
|
108h |
|
188һ |
|
PORTE(1) |
09h |
TRISE(1) |
89h |
|
109h |
|
189һ |
|
PCLATH |
0Ah |
PCLATH |
8Ah |
PCLATH |
10Ah |
PCLATH |
18Ah |
|
INTCON |
0Bh |
INTCON |
8Bh |
INTCON |
10Bh |
INTCON |
18Bh |
|
PIR1 |
0Ch |
PIE1 |
8Ch |
EEDATA |
10Ch |
EECON1 |
18Ch |
|
PIR2 |
0Dh |
PIE2 |
8Dh |
EEADR |
10Dh |
EECON2 |
18Dh |
|
TMR1L |
0Eh |
PCON |
8Eh |
EEATH |
10Eh |
Резерв(2) |
18Eh |
|
TMR1H |
0Fh |
|
8Fh |
EEADRH |
10Fh |
Резерв(2) |
18Fh |
|
T1CON |
10h |
|
90h |
жалпы міндет регистрі 16 байт |
110h |
жалпы міндет регистрі 16 байт |
190h |
|
TMR2 |
11h |
SSPCON2 |
91h |
111h |
191h |
||
|
T2CON |
12h |
PR2 |
92h |
112h |
192h |
||
|
SSPBUF |
13h |
SSPADD |
93h |
113h |
193h |
||
|
SSPCON |
14h |
SSPSTAT |
94h |
114h |
194h |
||
|
CCPR1L |
15h |
|
95h |
115h |
195h |
||
|
CCPR1H |
16h |
|
96h |
116h |
196h |
||
|
CCP1CON |
17h |
|
97h |
117h |
197h |
||
|
RCSTA |
18h |
TXSTA |
98h |
118h |
198h |
||
|
TXREG |
19h |
SPBRG |
99h |
119h |
199h |
||
|
RCREG |
1Ah |
|
9Ah |
11Ah |
19Ah |
||
|
CCPR2L |
1Bh |
|
9Bh |
11Bh |
19Bh |
||
|
CCPR2H |
1Ch |
|
9Ch |
11Ch |
19Ch |
||
|
CCP2CON |
1Dh |
|
9Dh |
11Dh |
19Dh |
||
|
ADRESH |
1Eh |
ADRESL |
9Eh |
11Eh |
19Eh |
||
|
ADCON0 |
1Fh |
ADCON1 |
9Fh |
11Fh |
19Fh |
||
|
жалпы міндет регистрі 96 байт |
20h |
жалпы міндет регистрі 80 байт |
A0h |
жалпы міндет регистрі 80 байт |
120h |
жалпы міндет регистрі 80 байт |
1A0h |
|
|
|
|
|
||||
|
|
|
|
|
||||
|
|
|
|
|
||||
|
|
|
|
|
||||
|
|
EFh |
16Fh |
1EFh |
||||
|
|
70h-7Fh - қа өту |
F0h |
70h-7Fh - қа өту |
170h |
70h-7Fh - қа өту |
1F0h |
|
|
|
|
|
|
||||
|
|
|
|
|
||||
|
7Fh |
FFh |
|
|
||||
|
Банк 0 |
|
Банк 1 |
|
Банк 2 |
17Fh |
Банк 3 |
1FFh |
|
|
|
|
|
|
|
|
|
|
* -физикалық регистр емес |
|
|
|
|
|
||
|
Боялған орындардың қызметі жоқ |
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
Ескерту |
1 |
Бұл регистрлер РІС16F876-да іске қосылмаған |
|
|
|||
|
|
2 |
Резервтік регистрлер, қолданушы онымен жұмыс істемеуі керек |
|||||
|
|
W аккумулятор адресі 200h
|
Д қосымшасы
УМК-7 сипаттамасы
Оқулық микропроцессорлық комплект УМК-7 қазіргі технологиялық процесстерді АР, СОИ, ДБ жүйелерінде микропроцессор мен микробақылауыштарды қолдану облысының талаптарына сай мамандарды дайындау үшін құрылған. Студент PIC16F877 микробақылауыш мысалында ассемблерді үйренумен қатар қазіргі микробақылауыштардың сыртқы және ішкі құрылымымен танысады.
Микробақылауыштың қондырылған программалаушы құрылғысы программаны компьтердан микробақылауышқа енгізуге арналған.
Микробақылауыштың “аяқтары” УМК-7-нің сыртқы клеммалық қосқыштарымен жалғанған. Клеммалық қосқыштар PIC микропроцессорының “аяқтарын” сыртқы құрылғыларымен қосуға арналған.
Сыртқы құрылғыларға келесілер жатады: клавиатура, жарықдиодттары, сұйықкристалдық индикатор, дыбыстық сигнализация құрылысы және сыртқы аналогтық сигналды енгізуге арналған бос орын.
Стендтың алдыңғы панелімен танысыңдар (Д.1 сурет), мұнда:
1 - микроконтроллер PIC16F877;
2 – клеммалық қосылыстар тізбегі (PIC16F877 “аяғы (соңы)”);
3 - клеммалық қосылыстар тізбегі (сыртқы құрылғылар “аяғы”);
4 - дыбыстық сигнализация;
5 - аналогтық кіріс;
6 - жарықтық сигнализация;
7 - сұйықкристалдық индикатор;
8 -пернетақта.
Микробақылауышты сыртқы құрылғылармен қосу үшін микробақылауыштың клеммалық қосылыстар тізбегін сыртқы құрылғылардың клеммалық қосылыстар тізбегінің керектілерімен қосқыш көмегімен жалғау керек.
MPLAB сипаттамасы
MPLAB-ICD – бұл PIC16F87X серия микробақылауыштарын сынаушы комплект. PIC16F87X кристалдарына қондырылған “ішкі сұлбалық жөндеуді (ICD)” және Microchip (ICSPTM) фирмасының “ішкі сұлбалық тізбектеп программалау протоколын” қолданып MPLAB-ICD-дың өзі программалаушы және ішкі сұлбалық жөндегіш болып табылады. Ол MPLAB IDE құраған интегралданған орта басқаруымен жұмыс істейді, жөндегіш құрылғыға қосылады да PIC16F87X микробақылауышы сияқты жұмыс істейді. MPLAB-ICD осы зертхана құрамында кодтарды жөндеуде және танысуда көмек үшін қажет.
MPLAB-ICD келесіні қамтамасыз етеді:
- нақты уақыт масштабында кодтарды қадам бойынша орындау;
- тоқтау нүктелерін (break points);
- ішкі сұлбалық жөндеу;
- программалауды;
- жұмыс кернеу диапазоны 3.0V-тан 5.5V-қа дейін;
- жұмысшы жиілігі 32 КГц-тен 20 МГц-ке дейін;
- берілген код бойынша және символдық аттар бойынша орындау;
- қолданушы интерфейсі – MPLAB;
- Windows XXXX -пен үйлеседі;
- RS-232 интерфейс.
Әдебиеттер тізімі
1. Заец Н.И. Радиолюбительские конструкции на PIC. - М.: Солон, 2003.
2. Катцен
С. PIC микроконтроллеры. Все, что необходимо вам знать.
- М.: Додека, 2008.
3. Копесбаева А.А. Басқару жүйелеріндегі микропроцессорлық кешендер. Оқулық. - Алматы: АЭжБИ, 2010.
4. Кохц Дитер. Измерение, управление с помощью PIC-контроллеров. - Киев. Наукова думка. 2007.
5. Погребинский М.П. Микропроцессорные системы управления электротехническими установками. - М.: МЭИ, 2003.
6. Сайт в Internet www.microchip.ru
7.
Тарасов В.М. Программирование цифровой техники и
микроконтроллеров управления. Конспект лекций для студентов всех форм обучения
специальности 5В070200- «Автоматизация и управление»
- Алматы: АУЭС, 2012.
8. Яценков В.С. Микроконтроллеры Microchip. Практическое руководство. – 2 –е изд. исп. и допол. - М.: Горячая линия – Телеком, 2005.
2012ж. құрама жоспар, реті 101