- •Сандық техниканы және басқару микробақылауыштарын программалау
- •5В070200-Автоматтандыру және басқару мамандығының студенттері
- •Мазмұны
- •Кіріспе
- •1 Зертханалық жұмыс. Байттық және биттік командалар. Логика
- •1.1 Зертханалық жұмыс тапсырмасы
- •1.2 Жұмысты орындау тәртібі
- •1.3 Жұмыс тақырыбы бойынша қысқаша теориялық ақпарат
- •1.4 Бақылау сұрақтары
- •2 Зертханалық жұмыс. Маскілеу. Массив қосындысын алу
- •2.1 Зертханалық жұмыс тапсырмасы
- •2.1 Сурет– Массивті суммалау және орташаны табу блок-сұлбасы
- •2.2 Жұмысты орындау тәртібі
- •2.3 Жұмыс тақырыбы бойынша қысқаша теориялық ақпарат
- •2.4 Бақылау сұрақтары
- •3 Зертханалық жұмыс. Бояу камерасын автоматтандыру. Ішкі программалар
- •3.1 Зертханалық жұмыс тапсырмасы және берілгендер
- •3.1 Сурет–Құрылғылардыжалғау сұлбасы
- •3.2 Сурет–Бояу камерасының уақыттық диаграммасы
- •3.2 Жұмысты орындау тәртібі
- •3.3 Жұмыс тақырыбы бойынша қысқаша теориялық ақпарат
- •3.3 Сурет– Блок-сұлба
- •3.4 Бақылау сұрақтары
- •4 Зертханалық жұмыс. Көбейту және бөлу
- •4.1 Зертханалық жұмыс тапсырмасы және берілгендер
- •4.2 Жұмысты орындау тәртібі
- •5 Зертханалық жұмыс. Газ шығынын реттеу
- •5.1 Зертханалық жұмыс тапсырмасы және берілгендер
- •5.2 Жұмысты орындау тәртібі
- •5.3 Жұмыс тақырыбы бойынша қысқаша теориялық ақпарат
- •5.4 Бақылау сұрақтары
- •6.3 Жұмысты орындау тәртібі
- •6.3 Жұмыс тақырыбы бойынша қысқаша теориялық ақпарат
- •6.4 Бақылау сұрақтары
- •7 Зертханалық жұмыс. Буып-түю жұмысын автоматтандыру. Дыбыс түзу
- •7.1 Зертханалық жұмыс тапсырмасы және берілгендер
- •7.2 Жұмысты орындау тәртібі
- •7. 3 Жұмыс тақырыбы бойынша қысқаша теориялық ақпарат
- •7.2 Сурет– Буып-түйгіш жұмысының уақыттық диаграммасы
- •7.4 Бақылау сұрақтары
- •8 Зертханалық жұмыс. Сандарды 2-санақ жүйесінен 2_10 санақ жүйесіне ауыстыру
- •8.1 Зертханалық жұмыс тапсырмасы және берілгендер
- •8.2 Жұмысты орындау тәртібі
- •8.3 Жұмыс тақырыбы бойынша қысқаша теориялық ақпарат
- •8.2 Сурет– Блок-сұлба
- •8.3 Сурет – Жеті сегментті индикатор
- •8.4 Бақылау сұрақтары
- •9 Зертханалық жұмыс. Таймер tmr1
- •9.1 Зертханалық жұмыс тапсырмасы және берілгендер
- •9.2 Жұмысты орындау тәртібі
- •9.3 Жұмыс тақырыбы бойынша қысқаша теориялық ақпарат
- •9.4 Бақылау сұрақтары
- •10 Зертханалық жұмыс. Үзулер
- •10.1 Зертханалық жұмыс тапсырмасы және берілгендер
- •10.3 Жұмысты орындау тәртібі
- •10.3 Жұмыс тақырыбы бойынша қысқаша теориялық ақпарат
- •10.4 Бақылау сұрақтары
- •11 Зертханалық жұмыс. Екі байттық сандарды қосу
- •11.1 Зертханалық жұмыс тапсырмасы және берілгендер
- •11.3 Жұмысты орындау тәртібі
- •11.1 Жұмыс тақырыбы бойынша қысқаша теориялық ақпарат
- •11.4 Бақылау сұрақтары
- •А қосымшасы Status регистрі
- •Б қосымшасы pic* мб нұсқауларының сипаттамасы
- •В қосымшасы Модуль tmr1 таймері
- •Г қосымшасы pic16877 микропроцессорының жады картасы
- •Д қосымшасы умк-7 сипаттамасы
- •Әдебиеттер тізімі
- •5В070200- Автоматтандыру және басқару мамандығының студенттері үшін зертханалық жұмыстарды орындауға арналған әдістемелік нұсқау
- •050013, Алматы, Байтұрсынұлы көшесі, 126
- •Сандық техниканы және микробақылауыштарды программалау
- •5В070200- Автоматтандыру және басқару мамандығының студенттері үшін зертханалық жұмыстарды орындауға арналған әдістемелік нұсқау
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-х банка өткеннен кейін үзуді өңдегіш конвейерді тоқтатып буып-түю машинасын қоса алады.