САНДЫҚ ТЕХНИКАНЫ ЖӘНЕ БАСҚАРУ МИКРОБАҚЫЛАУЫШТАРЫН  ПРОГРАММАЛАУ

Коммерциялық емес акционерлік қоғам

АЛМАТЫ ЭНЕРГЕТИКА Ж ӘНЕ БАЙЛАНЫС УНИВЕРСИТЕТІ

Инженерлік кибернетика кафедрасы

 

САНДЫҚ ТЕХНИКАНЫ ЖӘНЕ БАСҚАРУ МИКРОБАҚЫЛАУЫШТАРЫН  ПРОГРАММАЛАУ

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


IORWF
OR (немесе) функциясы

 

0

0

1

1

0

1

0

1

0

1

1

1

 

Х1

                  Y

Х2

Y

 
                Х1

 


                Х2

Кез келген контакт қосылғанда тізбекте тоқ болады


ANDWF

AND (және) функциясы

0

0

1

1

0

1

0

1

0

0

0

1

 

Х1

                  Y

Х2

Y

 
               X1          X2

 

 


Тек екі контакт қосылғанда ғана тізбекте тоқ болады

XORWF Функция XOR  (Исключи-
тельно ИЛИ)

0

0

1

1

0

1

0

1

0

1

1

0

 

 

Х1

                   Y

Х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
 L1, L2 қосылу биттері

Жұмыс істеу уақыты, сек

Нұсқа

S1, D1, D2
 L1, L2 қосылу биттері

Жұмыс істеу уақыты, сек

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 Жұмыс тақырыбы бойынша қысқаша теориялық ақпарат

Подпись:   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
 L1, L2.

Батырма Pusk

Батырма Stop

Нұсқа

Қосылу биттері  

S1, D1, D2
 L1, L2.

Батырма 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 кесте – Тапсырма нұсқасы

Нұсқа

Қондырғыны қосу биттері
S1, D1, D2, L1, L2.

Нұсқа

Қондырғыны қосу биттері
S1, D1, D2, L1, L2.

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
 L1, L2.

Жұмыс істеу уақыты, сек

 

Нұсқа

Қосылу биттері
 S1, D1, D2
 L1, L2.

Жұмыс істеу уақыты, сек

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 арасындағы бит бойынша  'ЖӘНЕ'

Синтаксис: [labelANDWF   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 регистрін тазарту

Синтаксис: [labelCLRWDT

Операндтар: Жоқ

Операция: 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

SUBWFf-тен 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