Читайте также: |
|
Программаны жөндеу.Қадамдық режимде Timer ішкі программасының уақытын шектеңіз, яғни W мәнін Sch3 санағышына жазатын команданы ғана қалдыру керек. Программа жөндеуден өткеннен кейін PORTC «0» битін сирена клеммасымен қосыңыз.
7.1 суретте көресетілген бақылау терезесін құру қажет.
7.2 кесте – Тапсырма нұсқасы
Нұсқа | Қондырғыны қосу биттері S1, D1, D2, L1, L2. | Нұсқа | Қондырғыны қосу биттері S1, D1, D2, L1, L2. |
1, 2, 3, 4, 5 | 6, 7, 0, 1, 2 | ||
2, 3, 4, 5, 6 | 7, 0, 1, 2, 3 | ||
3, 4, 5, 6, 7 | 0,1,2,3, 4 | ||
4, 5, 6, 7, 0 | 1, 3, 5, 7, 0 | ||
5, 6, 7, 0, 1 | 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
Дата добавления: 2015-07-19; просмотров: 128 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Зертханалық жұмыс тапсырмасы және берілгендер | | | Жұмыс тақырыбы бойынша қысқаша теориялық ақпарат |