;********************************************************************** ; This file is a basic code template for assembly code generation * ; on the PICmicro PIC16F874. This file contains the basic code * ; building blocks to build upon. * ; * ; If interrupts are not used all code presented between the ORG * ; 0x004 directive and the label main can be removed. In addition * ; the variable assignments for 'w_temp' and 'status_temp' can * ; be removed. * ; * ; Refer to the MPASM User's Guide for additional information on * ; features of the assembler (Document DS33014). * ; * ; Refer to the respective PICmicro data sheet for additional * ; information on the instruction set. * ; * ; Template file assembled with MPLAB V4.00 and MPASM V2.20.00. * ; * ;********************************************************************** ; * ; Filename: xxx.asm * ; Date: * ; File Version: * ; * ; Author: * ; Company: * ; * ; * ;********************************************************************** ; * ; Files required: * ; * ; * ; * ;********************************************************************** ; * ; Notes: * ; * ; * ; * ; * ;********************************************************************** list p=16f876 ; list directive to define processor #include ; processor specific variable definitions __CONFIG _CP_OFF & _WDT_ON & _BODEN_OFF & _PWRTE_ON & _HS_OSC & _WRT_ENABLE_OFF & _LVP_ON & _DEBUG_OFF & _CPD_OFF ; '__CONFIG' directive is used to embed configuration data within .asm file. ; The lables following the directive are located in the respective .inc file. ; See respective data sheet for additional information on configuration word. ;********************************************************************** ORG 0x000 ; processor reset vector clrf PCLATH ; ensure page bits are cleared goto main ; go to beginning of program ;********************************************************************** ; Îáðàáèò÷èê ïðåðûâàíèé ORG 0x004 ; interrupt vector location movwf w_temp ; save off current W register contents movf STATUS,w ; move status register into W register movwf status_temp ; save off contents of STATUS register MOVF PCLATH, W ; Only required if using pages 1, 2 and/or 3 MOVWF PCLATH_TEMP ; Save PCLATH into W bcf STATUS,RP0 ; ensure file register bank set to 0 bcf STATUS,RP1 ; ensure file register bank set to 0 ;***** Ïðîòåñòèðîâàòü ôëàãè ïðåðûâàíèÿ PAGESEL _TMR2 ; ÂÛÁÅÐÅÌ ÏÅÐÂÓÞ ÑÒÐÀÍÈÖÓ ÏÐÎÃÐÀÌÍÎÉ ÏÀÌßÒÈ btfsc PIR1,TMR2IF ; Ïðîòåñòèðîâàòü áèò ôëàãà TMR2IF goto _TMR2 btfsc PIR1,TMR1IF ; Ïðîòåñòèðîâàòü áèò ôëàãà TMR2IF goto _TMR1 GOTO end_int ;------------------------------------------------------------------------------------------------------------------------ _TMR2 BCF PIR1,TMR2IF ; Óñòàíîâèòü áèò ôëàãà â 0 TMR2 GOTO end_int ;------------------------------------------------------------------------------------------------------------------------ _TMR1 BCF PIR1,TMR1IF ; Óñòàíîâèòü áèò ôëàãà â 0 TMR1 MOVLW H'79' MOVWF TMR1L ; ÇÀÏÈØÈÌ ÍÀ×ÀËÜÍÛÅ ÏÐÅÄÓÑÒÀÍÎÂÊÈ ÒÀÉÌÅÐÀ 1 MOVLW H'EC' MOVWF TMR1H ; ÇÀÏÈØÈÌ ÍÀ×ÀËÜÍÛÅ ÏÐÅÄÓÑÒÀÍÎÂÊÈ ÒÀÉÌÅÐÀ 1 INCF TIMER,1 ; ÓÂÅËÈ×ÈÌ Ñ×ÅÒ×ÈÊ ÍÀ 1.ÒÀÉÌÅÐ ÐÅÀËÜÍÎÃÎ ÂÐÅÌÅÍÈ ;___________________ MOVLW 7 ; ÏÐÎÂÅÐÈÌ ÐÀÂÅÍÑÒÂÎ ÂÐÅÌÅÍÈ 15,5 Ñ XORWF TEST_TIMER,0 ; BTFSS STATUS,Z GOTO NOT_ MOVLW 150 XORWF TIMER,0 ; BTFSS STATUS,Z GOTO NOT_ ; ÂÐÅÌß ÏÎÄÎØËÎ, ÏÎÐÀ ÂÊËÞ×ÀÒÜ ÏÎÐÒÛ BSF PORTC,0 ; ÇÀÐßÄÊÀ ÎÊÎÍ×ÅÍÀ. ÂÊËÞ×ÈÌ ÏÎÐÒ BSF PORTC,1 ; ÇÀÐßÄÊÀ ÎÊÎÍ×ÅÍÀ. ÂÊËÞ×ÈÌ ÏÎÐÒ BSF PORTC,2 ; ÇÀÐßÄÊÀ ÎÊÎÍ×ÅÍÀ. ÂÊËÞ×ÈÌ ÏÎÐÒ BSF PORTC,3 ; ÇÀÐßÄÊÀ ÎÊÎÍ×ÅÍÀ. ÂÊËÞ×ÈÌ ÏÎÐÒ ;___________________ NOT_ MOVLW 200 ; ÒÀÉÌÅÐ ÐÅÀËÜÍÎÃÎ ÂÐÅÌÅÍÈ Ñ ÄÈÑÊÐÅÒÍÎÑÒÜÞ 0.01 Ñ. ÌÀÊÑÈÌÀËÜÍÛÌ ×ÈÑËÎÌ 1.99 Ñ. XORWF TIMER,0 BTFSS STATUS,Z ; ÅÑËÈ ÒÀÉÌÅÐ ÐÀÂÅÍ 2.00 Ñ ÒÎ ÑÁÐÎÑÈÌ ÅÃÎ. GOTO end_int CLRF TIMER INCF TEST_TIMER,1 ; ÓÂÅËÈ×ÈÌ ÍÀ 1 ÒÅÑÒ ÒÀÉÌÅÐ MOVLW 8 XORWF TEST_TIMER,0 ; ÏÐÎÂÅÐÈÌ ÐÀÂÅÍÑÒÂÎ ÒÀÉÌÅÐÀ 8, ÒÎ ÅÑÒÜ 16Ñ. BTFSS STATUS,Z GOTO NOT_1 CLRF TEST_TIMER ; Î×ÈÑÒÈÌ ÒÀÉÌÅÐ BTFSC OFF_CHAND,0 ; ÏÐÎÂÅÐÈÌ, ÎÊÎÍ×ÅÍÀ ËÈ ÇÀÐßÄÊÀ BSF OFF_CHAND,4 ; ÏÎÑÒÀÂÈÌ ÔËÀÃ, ×ÒÎ ÏÎÐÀ ÒÅÑÒÈÐÎÂÀÒÜ ÍÀÏÐßÆÅÍÈÅ ÏÎÑËÅ ÇÀÐßÄÊÈ BTFSC OFF_CHAND,1 ; ÏÐÎÂÅÐÈÌ, ÎÊÎÍ×ÅÍÀ ËÈ ÇÀÐßÄÊÀ BSF OFF_CHAND,5 ; ÏÎÑÒÀÂÈÌ ÔËÀÃ, ×ÒÎ ÏÎÐÀ ÒÅÑÒÈÐÎÂÀÒÜ ÍÀÏÐßÆÅÍÈÅ ÏÎÑËÅ ÇÀÐßÄÊÈ BTFSC OFF_CHAND,2 ; ÏÐÎÂÅÐÈÌ, ÎÊÎÍ×ÅÍÀ ËÈ ÇÀÐßÄÊÀ BSF OFF_CHAND,6 ; ÏÎÑÒÀÂÈÌ ÔËÀÃ, ×ÒÎ ÏÎÐÀ ÒÅÑÒÈÐÎÂÀÒÜ ÍÀÏÐßÆÅÍÈÅ ÏÎÑËÅ ÇÀÐßÄÊÈ BTFSC OFF_CHAND,3 ; ÏÐÎÂÅÐÈÌ, ÎÊÎÍ×ÅÍÀ ËÈ ÇÀÐßÄÊÀ BSF OFF_CHAND,7 ; ÏÎÑÒÀÂÈÌ ÔËÀÃ, ×ÒÎ ÏÎÐÀ ÒÅÑÒÈÐÎÂÀÒÜ ÍÀÏÐßÆÅÍÈÅ ÏÎÑËÅ ÇÀÐßÄÊÈ NOT_1 BTFSC CHAND,0 INCF TIMER_0,1 ;ÓÂÅËÈ×ÈÌ ÒÀÉÌÅÐ ÍÀ 1 0-ÊÀÍÀËÀ BTFSC CHAND,1 INCF TIMER_1,1 ;ÓÂÅËÈ×ÈÌ ÒÀÉÌÅÐ ÍÀ 1 1-ÊÀÍÀËÀ BTFSC CHAND,2 INCF TIMER_2,1 ;ÓÂÅËÈ×ÈÌ ÒÀÉÌÅÐ ÍÀ 1 2-ÊÀÍÀËÀ BTFSC CHAND,3 INCF TIMER_3,1 ;ÓÂÅËÈ×ÈÌ ÒÀÉÌÅÐ ÍÀ 1 3-ÊÀÍÀËÀ ;************************* ;________________________________ MOVLW 120 XORWF TIMER_0,0 ; ÑÐÀÂÍÈÌ ÇÍÀ×ÅÍÈÅ ÒÀÉÌÅÐÀ Ñ 120, ÒÎ ÅÑÒÜ 4 ÌÈÍ BTFSS STATUS,Z GOTO CH_1 CLRF TIMER_0 ; Î×ÈÑÒÈÌ ÒÀÉÌÅÐ ÂÐÅÌÅÍÈ BTFSC FIST_CHAND,0 ; ÏÐÎÂÅÐÈÌ, ÏÅÐÂÛÉ ËÈ ÏÓÑÊ ÇÀÐßÄÊÈ GOTO SKIP0 BSF FIST_CHAND,0 ; ÏÎÑÒÀÂÈÌ ÔËÀà ÒÎÃÎ, ×ÒÎ ÏÅÐÂÛÉ ÏÓÑÊ ÏÐÎØÅË MEMO_0 MOVF CHANEL_0L,0 MOVWF M_CHANEL_0L ; ÇÀÏÎÌÍÈÌ ÇÍÀ×ÅÍÈÅ ÍÀÏÐßÆÅÍÈß MOVF CHANEL_0H,0 MOVWF M_CHANEL_0H ; ÇÀÏÎÌÍÈÌ ÇÍÀ×ÅÍÈÅ ÍÀÏÐßÆÅÍÈß ; CLRF END_CH0 ; Î×ÈÑÒÈÌ Ñ×ÅÒ×ÈÊ GOTO CH_1 SKIP0 INCF END_TIMER_0,1 ;ÓÂÅËÈ×ÈÌ ÒÀÉÌÅÐ ÎÒÑ×ÅÒÀ ÂÐÅÌÅÍÈ ÎÊÎÍ×ÀÒÅËÜÍÎÉ ÇÀÐßÄÊÈ ÍÀ 1 MOVLW TIM XORWF END_TIMER_0,0 ; ÑÐÀÂÍÈÌ ÇÍÀ×ÅÍÈÅ ÒÀÉÌÅÐÀ ÎÊÎÍ×ÀÍÈß ÇÀÐßÄÊÈ Ñ ÊÎÍÑÒÀÍÒÎÉ BTFSC STATUS,Z ; BSF FLAG_END_TIMER,0 ; ÅÑËÈ ÒÀÉÌÅÐÛ ÐÀÂÍÛ, ÒÎ ÏÎÑÒÀÂÈÌ ÔËÀà "ÂÐÅÌß ÂÛØËÎ" BTFSC STATUS,Z GOTO OFF_CH_0 ; ÅÑËÈ ÒÀÉÌÅÐÛ ÐÀÂÍÛ, ÒÎ ÂÛÊËÞ×ÈÌ ÇÀÐßÄÊÓ MOVF CHANEL_0H,0 SUBWF M_CHANEL_0H,0 ; ÂÛ×ÒÈÌ ÈÇ ÇÀÏÎÌÍÅÍÎÃÎ ÇÍÀ×ÅÍÈß ÒÅÊÓØÅÅ BTFSC STATUS,Z ; ÑÐÀÂÍÈÌ ÑÒÀÐØÈÅ ÁÀÉÒÛ GOTO MIN_L0 ; ÑÒÀÐØÈÅ ÁÀÉÒÛ ÐÀÂÍÛ, ÏÐÎÂÅÐÈÌ ÌËÀÄØÈÅ BTFSC STATUS,C ; ÅÑËÈ ÐÅÇÓËÜÒÀÒ ÏÎËÎÆÈÒÅËÅÍ, ÒÎ ÓÆÅ ÄÀÂÍÎ ÏÎÐÀ ÂÛÊËÞ×ÈÒÜ ÇÀÐßÄÊÓ GOTO OFF_CH_0 ; ÂÑÅ ÍÎÐÌÀËÜÍÎ, ÇÀÐßÄÊÀ ÈÄÅÒ ÄÀËÜØÅ GOTO MEMO_0 ; ÎÁÍÎÂÈÌ ÇÍÀ×ÅÍÈß ÍÀÏÐßÆÅÍÈß MIN_L0 MOVF CHANEL_0L,0 SUBWF M_CHANEL_0L,0 ; ÂÛ×ÒÈÌ ÈÇ ÇÀÏÎÌÍÅÍÎÃÎ ÇÍÀ×ÅÍÈß ÒÅÊÓØÅÅ BTFSC STATUS,Z ; ÑÐÀÂÍÈÌ ÌËÀÄØÈÅ ÁÀÉÒÛ GOTO MEMO_0 ; ÂÑÅ ÍÎÐÌÀËÜÍÎ, ÇÀÐßÄÊÀ ÈÄÅÒ ÄÀËÜØÅ.ÎÁÍÎÂÈÌ ÇÍÀ×ÅÍÈß ÍÀÏÐßÆÅÍÈß BTFSS STATUS,C ; ÅÑËÈ ÐÅÇÓËÜÒÀÒ ÎÒÐÈÖÀÒÅËÅÍ ÈËÈ ÐÀÂÍÛ, ÒÎ ÇÀÐßÄÊÀ ÈÄÅÒ ÄÀËÜØÅ ; ÏÎËÎÆÈÒÅËÅÍ, ÒÎ ÏÐÅÐÀÒÈÒÜ ÇÀÐßÄÊÓ GOTO MEMO_0 ; ÎÁÍÎÂÈÌ ÇÍÀ×ÅÍÈß ÍÀÏÐßÆÅÍÈß ;_____________________________________________________________________________________ ;  ýòîì ìåñòå ñ÷åò÷èê ïàäåíèÿ íàïðÿæåíèÿ íà àêêóìóëÿòîðå. INCF END_CH0,1 ; ÓÂÅËÈ×ÈÌ Ñ×ÅÒ×ÈÊ ÍÀ 1 MOVLW 2 XORWF END_CH0,0 ; ÑÐÀÂÍÈÌ Ñ×ÅÒ×ÈÊ Ñ 2 BTFSC STATUS,Z GOTO OFF_CH_0 ; ÅÑËÈ Ñ×ÅÒ×ÈÊ ÐÀÂÅÍ ÄÂÓÌ, ÒÎ ÂÛÊËÞ×ÈÌ ÇÀÐßÄÊÓ MOVF CHANEL_0L,0 MOVWF M_CHANEL_0L ; ÇÀÏÎÌÍÈÌ ÇÍÀ×ÅÍÈÅ ÍÀÏÐßÆÅÍÈß MOVF CHANEL_0H,0 MOVWF M_CHANEL_0H ; ÇÀÏÎÌÍÈÌ ÇÍÀ×ÅÍÈÅ ÍÀÏÐßÆÅÍÈß GOTO CH_1 ;_____________________________________________________________________________________ OFF_CH_0 CLRF END_CH0 ; Î×ÈÑÒÈÌ Ñ×ÅÒ×ÈÊ BSF OFF_CHAND,0 ; ÏÎÑÒÀÂÈÌ ÔËÀà ÎÊÎÍ×ÀÍÈß ÇÀÐßÄÊÈ BCF CHAND,0 ; ÓÁÅÐÅÌ ÔËÀà ÍÀËÈ×Èß ÇÀÐÄÊÈ BCF PORTC,0 ; ÂÛÊËÞ×ÈÌ ÈÑÒÎ×ÍÈÊ ÒÎÊÀ. CLRF TIMER_0 ; Î×ÈÑÒÈÌ ÒÀÉÌÅÐ ÂÐÅÌÅÍÈ CLRF END_TIMER_0 ; Î×ÈÑÒÈÌ ÒÀÉÌÅÐ ÎÊÎÍ×ÀÍÈß ÇÀÐßÄÊÈ ;________________________________ CH_1 MOVLW 120 XORWF TIMER_1,0 ; ÑÐÀÂÍÈÌ ÇÍÀ×ÅÍÈÅ ÒÀÉÌÅÐÀ Ñ 120, ÒÎ ÅÑÒÜ 4 ÌÈÍ BTFSS STATUS,Z GOTO CH_2 CLRF TIMER_1 ; Î×ÈÑÒÈÌ ÒÀÉÌÅÐ ÂÐÅÌÅÍÈ BTFSC FIST_CHAND,1 ; ÏÐÎÂÅÐÈÌ, ÏÅÐÂÛÉ ËÈ ÏÓÑÊ ÇÀÐßÄÊÈ GOTO SKIP1 BSF FIST_CHAND,1 ; ÏÎÑÒÀÂÈÌ ÔËÀà ÒÎÃÎ, ×ÒÎ ÏÅÐÂÛÉ ÏÓÑÊ ÏÐÎØÅË MEMO_1 MOVF CHANEL_1L,0 MOVWF M_CHANEL_1L ; ÇÀÏÎÌÍÈÌ ÇÍÀ×ÅÍÈÅ ÍÀÏÐßÆÅÍÈß MOVF CHANEL_1H,0 MOVWF M_CHANEL_1H ; ÇÀÏÎÌÍÈÌ ÇÍÀ×ÅÍÈÅ ÍÀÏÐßÆÅÍÈß ; CLRF END_CH1 ; Î×ÈÑÒÈÌ Ñ×ÅÒ×ÈÊ GOTO CH_2 SKIP1 INCF END_TIMER_1,1 ;ÓÂÅËÈ×ÈÌ ÒÀÉÌÅÐ ÎÒÑ×ÅÒÀ ÂÐÅÌÅÍÈ ÎÊÎÍ×ÀÒÅËÜÍÎÉ ÇÀÐßÄÊÈ ÍÀ 1 MOVLW TIM XORWF END_TIMER_1,0 ; ÑÐÀÂÍÈÌ ÇÍÀ×ÅÍÈÅ ÒÀÉÌÅÐÀ ÎÊÎÍ×ÀÍÈß ÇÀÐßÄÊÈ Ñ ÊÎÍÑÒÀÍÒÎÉ BTFSC STATUS,Z ; BSF FLAG_END_TIMER,1 ; ÅÑËÈ ÒÀÉÌÅÐÛ ÐÀÂÍÛ, ÒÎ ÏÎÑÒÀÂÈÌ ÔËÀà "ÂÐÅÌß ÂÛØËÎ" BTFSC STATUS,Z GOTO OFF_CH_1 ; ÅÑËÈ ÒÀÉÌÅÐÛ ÐÀÂÍÛ, ÒÎ ÂÛÊËÞ×ÈÌ ÇÀÐßÄÊÓ MOVF CHANEL_1H,0 SUBWF M_CHANEL_1H,0 ; ÂÛ×ÒÈÌ ÈÇ ÇÀÏÎÌÍÅÍÎÃÎ ÇÍÀ×ÅÍÈß ÒÅÊÓØÅÅ BTFSC STATUS,Z ; ÑÐÀÂÍÈÌ ÑÒÀÐØÈÅ ÁÀÉÒÛ GOTO MIN_L1 ; ÑÒÀÐØÈÅ ÁÀÉÒÛ ÐÀÂÍÛ, ÏÐÎÂÅÐÈÌ ÌËÀÄØÈÅ BTFSC STATUS,C ; ÅÑËÈ ÐÅÇÓËÜÒÀÒ ÏÎËÎÆÈÒÅËÅÍ, ÒÎ ÓÆÅ ÄÀÂÍÎ ÏÎÐÀ ÂÛÊËÞ×ÈÒÜ ÇÀÐßÄÊÓ GOTO OFF_CH_1 ; ÂÑÅ ÍÎÐÌÀËÜÍÎ, ÇÀÐßÄÊÀ ÈÄÅÒ ÄÀËÜØÅ GOTO MEMO_1 ; ÎÁÍÎÂÈÌ ÇÍÀ×ÅÍÈß ÍÀÏÐßÆÅÍÈß MIN_L1 MOVF CHANEL_1L,0 SUBWF M_CHANEL_1L,0 ; ÂÛ×ÒÈÌ ÈÇ ÇÀÏÎÌÍÅÍÎÃÎ ÇÍÀ×ÅÍÈß ÒÅÊÓØÅÅ BTFSC STATUS,Z ; ÑÐÀÂÍÈÌ ÌËÀÄØÈÅ ÁÀÉÒÛ GOTO MEMO_1 ; ÂÑÅ ÍÎÐÌÀËÜÍÎ, ÇÀÐßÄÊÀ ÈÄÅÒ ÄÀËÜØÅ.ÎÁÍÎÂÈÌ ÇÍÀ×ÅÍÈß ÍÀÏÐßÆÅÍÈß BTFSS STATUS,C ; ÅÑËÈ ÐÅÇÓËÜÒÀÒ ÎÒÐÈÖÀÒÅËÅÍ ÈËÈ ÐÀÂÍÛ, ÒÎ ÇÀÐßÄÊÀ ÈÄÅÒ ÄÀËÜØÅ ; ÏÎËÎÆÈÒÅËÅÍ, ÒÎ ÏÐÅÐÀÒÈÒÜ ÇÀÐßÄÊÓ GOTO MEMO_1 ; ÎÁÍÎÂÈÌ ÇÍÀ×ÅÍÈß ÍÀÏÐßÆÅÍÈß ;_____________________________________________________________________________________ ;  ýòîì ìåñòå ñ÷åò÷èê ïàäåíèÿ íàïðÿæåíèÿ íà àêêóìóëÿòîðå. INCF END_CH1,1 ; ÓÂÅËÈ×ÈÌ Ñ×ÅÒ×ÈÊ ÍÀ 1 MOVLW 2 XORWF END_CH1,0 ; ÑÐÀÂÍÈÌ Ñ×ÅÒ×ÈÊ Ñ 2 BTFSC STATUS,Z GOTO OFF_CH_1 ; ÅÑËÈ Ñ×ÅÒ×ÈÊ ÐÀÂÅÍ ÄÂÓÌ, ÒÎ ÂÛÊËÞ×ÈÌ ÇÀÐßÄÊÓ MOVF CHANEL_1L,0 MOVWF M_CHANEL_1L ; ÇÀÏÎÌÍÈÌ ÇÍÀ×ÅÍÈÅ ÍÀÏÐßÆÅÍÈß MOVF CHANEL_1H,0 MOVWF M_CHANEL_1H ; ÇÀÏÎÌÍÈÌ ÇÍÀ×ÅÍÈÅ ÍÀÏÐßÆÅÍÈß GOTO CH_2 ;_____________________________________________________________________________________ OFF_CH_1 CLRF END_CH1 ; Î×ÈÑÒÈÌ Ñ×ÅÒ×ÈÊ BSF OFF_CHAND,1 ; ÏÎÑÒÀÂÈÌ ÔËÀà ÎÊÎÍ×ÀÍÈß ÇÀÐßÄÊÈ BCF CHAND,1 ; ÓÁÅÐÅÌ ÔËÀà ÍÀËÈ×Èß ÇÀÐÄÊÈ BCF PORTC,1 ; ÂÛÊËÞ×ÈÌ ÈÑÒÎ×ÍÈÊ ÒÎÊÀ. CLRF TIMER_1 ; Î×ÈÑÒÈÌ ÒÀÉÌÅÐ ÂÐÅÌÅÍÈ CLRF END_TIMER_1 ; Î×ÈÑÒÈÌ ÒÀÉÌÅÐ ÎÊÎÍ×ÀÍÈß ÇÀÐßÄÊÈ ;________________________________ CH_2 MOVLW 120 XORWF TIMER_2,0 ; ÑÐÀÂÍÈÌ ÇÍÀ×ÅÍÈÅ ÒÀÉÌÅÐÀ Ñ 120, ÒÎ ÅÑÒÜ 4 ÌÈÍ BTFSS STATUS,Z GOTO CH_3 CLRF TIMER_2 ; Î×ÈÑÒÈÌ ÒÀÉÌÅÐ ÂÐÅÌÅÍÈ BTFSC FIST_CHAND,2 ; ÏÐÎÂÅÐÈÌ, ÏÅÐÂÛÉ ËÈ ÏÓÑÊ ÇÀÐßÄÊÈ GOTO SKIP2 BSF FIST_CHAND,2 ; ÏÎÑÒÀÂÈÌ ÔËÀà ÒÎÃÎ, ×ÒÎ ÏÅÐÂÛÉ ÏÓÑÊ ÏÐÎØÅË MEMO_2 MOVF CHANEL_2L,0 MOVWF M_CHANEL_2L ; ÇÀÏÎÌÍÈÌ ÇÍÀ×ÅÍÈÅ ÍÀÏÐßÆÅÍÈß MOVF CHANEL_2H,0 MOVWF M_CHANEL_2H ; ÇÀÏÎÌÍÈÌ ÇÍÀ×ÅÍÈÅ ÍÀÏÐßÆÅÍÈß ; CLRF END_CH2 ; Î×ÈÑÒÈÌ Ñ×ÅÒ×ÈÊ GOTO CH_3 SKIP2 INCF END_TIMER_2,1 ;ÓÂÅËÈ×ÈÌ ÒÀÉÌÅÐ ÎÒÑ×ÅÒÀ ÂÐÅÌÅÍÈ ÎÊÎÍ×ÀÒÅËÜÍÎÉ ÇÀÐßÄÊÈ ÍÀ 1 MOVLW TIM XORWF END_TIMER_2,0 ; ÑÐÀÂÍÈÌ ÇÍÀ×ÅÍÈÅ ÒÀÉÌÅÐÀ ÎÊÎÍ×ÀÍÈß ÇÀÐßÄÊÈ Ñ ÊÎÍÑÒÀÍÒÎÉ BTFSC STATUS,Z ; BSF FLAG_END_TIMER,2 ; ÅÑËÈ ÒÀÉÌÅÐÛ ÐÀÂÍÛ, ÒÎ ÏÎÑÒÀÂÈÌ ÔËÀà "ÂÐÅÌß ÂÛØËÎ" BTFSC STATUS,Z GOTO OFF_CH_2 ; ÅÑËÈ ÒÀÉÌÅÐÛ ÐÀÂÍÛ, ÒÎ ÂÛÊËÞ×ÈÌ ÇÀÐßÄÊÓ MOVF CHANEL_2H,0 SUBWF M_CHANEL_2H,0 ; ÂÛ×ÒÈÌ ÈÇ ÇÀÏÎÌÍÅÍÎÃÎ ÇÍÀ×ÅÍÈß ÒÅÊÓØÅÅ BTFSC STATUS,Z ; ÑÐÀÂÍÈÌ ÑÒÀÐØÈÅ ÁÀÉÒÛ GOTO MIN_L2 ; ÑÒÀÐØÈÅ ÁÀÉÒÛ ÐÀÂÍÛ, ÏÐÎÂÅÐÈÌ ÌËÀÄØÈÅ BTFSC STATUS,C ; ÅÑËÈ ÐÅÇÓËÜÒÀÒ ÏÎËÎÆÈÒÅËÅÍ, ÒÎ ÓÆÅ ÄÀÂÍÎ ÏÎÐÀ ÂÛÊËÞ×ÈÒÜ ÇÀÐßÄÊÓ GOTO OFF_CH_2 ; ÂÑÅ ÍÎÐÌÀËÜÍÎ, ÇÀÐßÄÊÀ ÈÄÅÒ ÄÀËÜØÅ GOTO MEMO_2 ; ÎÁÍÎÂÈÌ ÇÍÀ×ÅÍÈß ÍÀÏÐßÆÅÍÈß MIN_L2 MOVF CHANEL_2L,0 SUBWF M_CHANEL_2L,0 ; ÂÛ×ÒÈÌ ÈÇ ÇÀÏÎÌÍÅÍÎÃÎ ÇÍÀ×ÅÍÈß ÒÅÊÓØÅÅ BTFSC STATUS,Z ; ÑÐÀÂÍÈÌ ÌËÀÄØÈÅ ÁÀÉÒÛ GOTO MEMO_2 ; ÂÑÅ ÍÎÐÌÀËÜÍÎ, ÇÀÐßÄÊÀ ÈÄÅÒ ÄÀËÜØÅ.ÎÁÍÎÂÈÌ ÇÍÀ×ÅÍÈß ÍÀÏÐßÆÅÍÈß BTFSS STATUS,C ; ÅÑËÈ ÐÅÇÓËÜÒÀÒ ÎÒÐÈÖÀÒÅËÅÍ ÈËÈ ÐÀÂÍÛ, ÒÎ ÇÀÐßÄÊÀ ÈÄÅÒ ÄÀËÜØÅ ; ÏÎËÎÆÈÒÅËÅÍ, ÒÎ ÏÐÅÐÀÒÈÒÜ ÇÀÐßÄÊÓ GOTO MEMO_2 ; ÎÁÍÎÂÈÌ ÇÍÀ×ÅÍÈß ÍÀÏÐßÆÅÍÈß ;_____________________________________________________________________________________ ;  ýòîì ìåñòå ñ÷åò÷èê ïàäåíèÿ íàïðÿæåíèÿ íà àêêóìóëÿòîðå. INCF END_CH2,1 ; ÓÂÅËÈ×ÈÌ Ñ×ÅÒ×ÈÊ ÍÀ 1 MOVLW 2 XORWF END_CH2,0 ; ÑÐÀÂÍÈÌ Ñ×ÅÒ×ÈÊ Ñ 2 BTFSC STATUS,Z GOTO OFF_CH_2 ; ÅÑËÈ Ñ×ÅÒ×ÈÊ ÐÀÂÅÍ ÄÂÓÌ, ÒÎ ÂÛÊËÞ×ÈÌ ÇÀÐßÄÊÓ MOVF CHANEL_2L,0 MOVWF M_CHANEL_2L ; ÇÀÏÎÌÍÈÌ ÇÍÀ×ÅÍÈÅ ÍÀÏÐßÆÅÍÈß MOVF CHANEL_2H,0 MOVWF M_CHANEL_2H ; ÇÀÏÎÌÍÈÌ ÇÍÀ×ÅÍÈÅ ÍÀÏÐßÆÅÍÈß GOTO CH_3 ;_____________________________________________________________________________________ OFF_CH_2 CLRF END_CH2 ; Î×ÈÑÒÈÌ Ñ×ÅÒ×ÈÊ BSF OFF_CHAND,2 ; ÏÎÑÒÀÂÈÌ ÔËÀà ÎÊÎÍ×ÀÍÈß ÇÀÐßÄÊÈ BCF CHAND,2 ; ÓÁÅÐÅÌ ÔËÀà ÍÀËÈ×Èß ÇÀÐÄÊÈ BCF PORTC,2 ; ÂÛÊËÞ×ÈÌ ÈÑÒÎ×ÍÈÊ ÒÎÊÀ. CLRF TIMER_2 ; Î×ÈÑÒÈÌ ÒÀÉÌÅÐ ÂÐÅÌÅÍÈ CLRF END_TIMER_2 ; Î×ÈÑÒÈÌ ÒÀÉÌÅÐ ÎÊÎÍ×ÀÍÈß ÇÀÐßÄÊÈ ;________________________________ CH_3 MOVLW 120 XORWF TIMER_3,0 ; ÑÐÀÂÍÈÌ ÇÍÀ×ÅÍÈÅ ÒÀÉÌÅÐÀ Ñ 120, ÒÎ ÅÑÒÜ 4 ÌÈÍ BTFSS STATUS,Z GOTO CH_4 CLRF TIMER_3 ; Î×ÈÑÒÈÌ ÒÀÉÌÅÐ ÂÐÅÌÅÍÈ BTFSC FIST_CHAND,3 ; ÏÐÎÂÅÐÈÌ, ÏÅÐÂÛÉ ËÈ ÏÓÑÊ ÇÀÐßÄÊÈ GOTO SKIP3 BSF FIST_CHAND,3 ; ÏÎÑÒÀÂÈÌ ÔËÀà ÒÎÃÎ, ×ÒÎ ÏÅÐÂÛÉ ÏÓÑÊ ÏÐÎØÅË MEMO_3 MOVF CHANEL_3L,0 MOVWF M_CHANEL_3L ; ÇÀÏÎÌÍÈÌ ÇÍÀ×ÅÍÈÅ ÍÀÏÐßÆÅÍÈß MOVF CHANEL_3H,0 MOVWF M_CHANEL_3H ; ÇÀÏÎÌÍÈÌ ÇÍÀ×ÅÍÈÅ ÍÀÏÐßÆÅÍÈß ; CLRF END_CH3 ; Î×ÈÑÒÈÌ Ñ×ÅÒ×ÈÊ GOTO CH_4 SKIP3 INCF END_TIMER_3,1 ;ÓÂÅËÈ×ÈÌ ÒÀÉÌÅÐ ÎÒÑ×ÅÒÀ ÂÐÅÌÅÍÈ ÎÊÎÍ×ÀÒÅËÜÍÎÉ ÇÀÐßÄÊÈ ÍÀ 1 MOVLW TIM XORWF END_TIMER_3,0 ; ÑÐÀÂÍÈÌ ÇÍÀ×ÅÍÈÅ ÒÀÉÌÅÐÀ ÎÊÎÍ×ÀÍÈß ÇÀÐßÄÊÈ Ñ ÊÎÍÑÒÀÍÒÎÉ BTFSC STATUS,Z ; BSF FLAG_END_TIMER,3 ; ÅÑËÈ ÒÀÉÌÅÐÛ ÐÀÂÍÛ, ÒÎ ÏÎÑÒÀÂÈÌ ÔËÀà "ÂÐÅÌß ÂÛØËÎ" BTFSC STATUS,Z GOTO OFF_CH_3 ; ÅÑËÈ ÒÀÉÌÅÐÛ ÐÀÂÍÛ, ÒÎ ÂÛÊËÞ×ÈÌ ÇÀÐßÄÊÓ MOVF CHANEL_3H,0 SUBWF M_CHANEL_3H,0 ; ÂÛ×ÒÈÌ ÈÇ ÇÀÏÎÌÍÅÍÎÃÎ ÇÍÀ×ÅÍÈß ÒÅÊÓØÅÅ BTFSC STATUS,Z ; ÑÐÀÂÍÈÌ ÑÒÀÐØÈÅ ÁÀÉÒÛ GOTO MIN_L3 ; ÑÒÀÐØÈÅ ÁÀÉÒÛ ÐÀÂÍÛ, ÏÐÎÂÅÐÈÌ ÌËÀÄØÈÅ BTFSC STATUS,C ; ÅÑËÈ ÐÅÇÓËÜÒÀÒ ÏÎËÎÆÈÒÅËÅÍ, ÒÎ ÓÆÅ ÄÀÂÍÎ ÏÎÐÀ ÂÛÊËÞ×ÈÒÜ ÇÀÐßÄÊÓ GOTO OFF_CH_3 ; ÂÑÅ ÍÎÐÌÀËÜÍÎ, ÇÀÐßÄÊÀ ÈÄÅÒ ÄÀËÜØÅ GOTO MEMO_3 ; ÎÁÍÎÂÈÌ ÇÍÀ×ÅÍÈß ÍÀÏÐßÆÅÍÈß MIN_L3 MOVF CHANEL_3L,0 SUBWF M_CHANEL_3L,0 ; ÂÛ×ÒÈÌ ÈÇ ÇÀÏÎÌÍÅÍÎÃÎ ÇÍÀ×ÅÍÈß ÒÅÊÓØÅÅ BTFSC STATUS,Z ; ÑÐÀÂÍÈÌ ÌËÀÄØÈÅ ÁÀÉÒÛ GOTO MEMO_3 ; ÂÑÅ ÍÎÐÌÀËÜÍÎ, ÇÀÐßÄÊÀ ÈÄÅÒ ÄÀËÜØÅ.ÎÁÍÎÂÈÌ ÇÍÀ×ÅÍÈß ÍÀÏÐßÆÅÍÈß BTFSS STATUS,C ; ÅÑËÈ ÐÅÇÓËÜÒÀÒ ÎÒÐÈÖÀÒÅËÅÍ ÈËÈ ÐÀÂÍÛ, ÒÎ ÇÀÐßÄÊÀ ÈÄÅÒ ÄÀËÜØÅ ; ÏÎËÎÆÈÒÅËÅÍ, ÒÎ ÏÐÅÐÀÒÈÒÜ ÇÀÐßÄÊÓ GOTO MEMO_3 ; ÎÁÍÎÂÈÌ ÇÍÀ×ÅÍÈß ÍÀÏÐßÆÅÍÈß ;_____________________________________________________________________________________ ;  ýòîì ìåñòå ñ÷åò÷èê ïàäåíèÿ íàïðÿæåíèÿ íà àêêóìóëÿòîðå. INCF END_CH3,1 ; ÓÂÅËÈ×ÈÌ Ñ×ÅÒ×ÈÊ ÍÀ 1 MOVLW 2 XORWF END_CH3,0 ; ÑÐÀÂÍÈÌ Ñ×ÅÒ×ÈÊ Ñ 2 BTFSC STATUS,Z GOTO OFF_CH_3 ; ÅÑËÈ Ñ×ÅÒ×ÈÊ ÐÀÂÅÍ ÄÂÓÌ, ÒÎ ÂÛÊËÞ×ÈÌ ÇÀÐßÄÊÓ MOVF CHANEL_3L,0 MOVWF M_CHANEL_3L ; ÇÀÏÎÌÍÈÌ ÇÍÀ×ÅÍÈÅ ÍÀÏÐßÆÅÍÈß MOVF CHANEL_3H,0 MOVWF M_CHANEL_3H ; ÇÀÏÎÌÍÈÌ ÇÍÀ×ÅÍÈÅ ÍÀÏÐßÆÅÍÈß GOTO CH_4 ;_____________________________________________________________________________________ OFF_CH_3 CLRF END_CH3 ; Î×ÈÑÒÈÌ Ñ×ÅÒ×ÈÊ BSF OFF_CHAND,3 ; ÏÎÑÒÀÂÈÌ ÔËÀà ÎÊÎÍ×ÀÍÈß ÇÀÐßÄÊÈ BCF CHAND,3 ; ÓÁÅÐÅÌ ÔËÀà ÍÀËÈ×Èß ÇÀÐÄÊÈ BCF PORTC,3 ; ÂÛÊËÞ×ÈÌ ÈÑÒÎ×ÍÈÊ ÒÎÊÀ. CLRF TIMER_3 ; Î×ÈÑÒÈÌ ÒÀÉÌÅÐ ÂÐÅÌÅÍÈ CLRF END_TIMER_3 ; Î×ÈÑÒÈÌ ÒÀÉÌÅÐ ÎÊÎÍ×ÀÍÈß ÇÀÐßÄÊÈ ;********************************* ;________________________________ CH_4 BTFSC FLAG_END_TIMER,0 ; ÏÐÎÂÅÐÈÌ , ÑÒÎÈÒ ËÈ ÔËÀà ÒÀÉÌ ÀÓÒÀ GOTO S_OFF_0 BTFSS CHAND,0 ; ÏÐÎÂÅÐÈÌ, ÂÊËÞ×ÅÍÀ ËÈ ÇÀÐßÄÊÀ GOTO S_ON_0 BTFSS PORTC,7 ; ÏÐÎÂÅÐÈÌ ÓÑÒÀÍÎÂËÅÍ ÈËÈ ÑÁÐÎØÅÍ ÁÈÒ GOTO S_ON_0 ; ÏÅÐÅÉÄÅÌ ÄËß ÓÑÒÀÍÎÂÊÈ ÁÈÒÀ S_OFF_0 BCF PORTC,7 ; Î×ÈÑÒÈÌ 0 ÁÈÒ ÏÎÐÒÀ A. ÌÅÐÖÀÍÈÅ ÑÂÅÒÎÄÈÎÄÀ GOTO S1 S_ON_0 BSF PORTC,7 ; ÓÑÒÀÍÎÂÈÌ 0 ÁÈÒ ÏÎÐÒÀ A. ÌÅÐÖÀÍÈÅ ÑÂÅÒÎÄÈÎÄÀ ;________________________________ S1 BTFSC FLAG_END_TIMER,1 ; ÏÐÎÂÅÐÈÌ , ÑÒÎÈÒ ËÈ ÔËÀà ÒÀÉÌ ÀÓÒÀ GOTO S_OFF_1 BTFSS CHAND,1 ; ÏÐÎÂÅÐÈÌ, ÂÊËÞ×ÅÍÀ ËÈ ÇÀÐßÄÊÀ GOTO S_ON_1 BTFSS PORTC,6 ; ÏÐÎÂÅÐÈÌ ÓÑÒÀÍÎÂËÅÍ ÈËÈ ÑÁÐÎØÅÍ ÁÈÒ GOTO S_ON_1 ; ÏÅÐÅÉÄÅÌ ÄËß ÓÑÒÀÍÎÂÊÈ ÁÈÒÀ S_OFF_1 BCF PORTC,6 ; Î×ÈÑÒÈÌ 0 ÁÈÒ ÏÎÐÒÀ A. ÌÅÐÖÀÍÈÅ ÑÂÅÒÎÄÈÎÄÀ GOTO S2 S_ON_1 BSF PORTC,6 ; ÓÑÒÀÍÎÂÈÌ 0 ÁÈÒ ÏÎÐÒÀ A. ÌÅÐÖÀÍÈÅ ÑÂÅÒÎÄÈÎÄÀ ;________________________________ S2 BTFSC FLAG_END_TIMER,2 ; ÏÐÎÂÅÐÈÌ , ÑÒÎÈÒ ËÈ ÔËÀà ÒÀÉÌ ÀÓÒÀ GOTO S_OFF_2 BTFSS CHAND,2 ; ÏÐÎÂÅÐÈÌ, ÂÊËÞ×ÅÍÀ ËÈ ÇÀÐßÄÊÀ GOTO S_ON_2 BTFSS PORTC,5 ; ÏÐÎÂÅÐÈÌ ÓÑÒÀÍÎÂËÅÍ ÈËÈ ÑÁÐÎØÅÍ ÁÈÒ GOTO S_ON_2 ; ÏÅÐÅÉÄÅÌ ÄËß ÓÑÒÀÍÎÂÊÈ ÁÈÒÀ S_OFF_2 BCF PORTC,5 ; Î×ÈÑÒÈÌ 0 ÁÈÒ ÏÎÐÒÀ A. ÌÅÐÖÀÍÈÅ ÑÂÅÒÎÄÈÎÄÀ GOTO S3 S_ON_2 BSF PORTC,5 ; ÓÑÒÀÍÎÂÈÌ 0 ÁÈÒ ÏÎÐÒÀ A. ÌÅÐÖÀÍÈÅ ÑÂÅÒÎÄÈÎÄÀ ;________________________________ S3 BTFSC FLAG_END_TIMER,3 ; ÏÐÎÂÅÐÈÌ , ÑÒÎÈÒ ËÈ ÔËÀà ÒÀÉÌ ÀÓÒÀ GOTO S_OFF_3 BTFSS CHAND,3 ; ÏÐÎÂÅÐÈÌ, ÂÊËÞ×ÅÍÀ ËÈ ÇÀÐßÄÊÀ GOTO S_ON_3 BTFSS PORTC,4 ; ÏÐÎÂÅÐÈÌ ÓÑÒÀÍÎÂËÅÍ ÈËÈ ÑÁÐÎØÅÍ ÁÈÒ GOTO S_ON_3 ; ÏÅÐÅÉÄÅÌ ÄËß ÓÑÒÀÍÎÂÊÈ ÁÈÒÀ S_OFF_3 BCF PORTC,4 ; Î×ÈÑÒÈÌ 0 ÁÈÒ ÏÎÐÒÀ A. ÌÅÐÖÀÍÈÅ ÑÂÅÒÎÄÈÎÄÀ GOTO S4 S_ON_3 BSF PORTC,4 ; ÓÑÒÀÍÎÂÈÌ 0 ÁÈÒ ÏÎÐÒÀ A. ÌÅÐÖÀÍÈÅ ÑÂÅÒÎÄÈÎÄÀ ;________________________________ S4 GOTO end_int ;------------------------------------------------------------------------------------------------------------------------ ;***** end_int MOVF PCLATH_TEMP, W ; Restore PCLATH MOVWF PCLATH ; Move W into PCLATH movf status_temp,w ; retrieve copy of STATUS register movwf STATUS ; restore pre-isr STATUS register contents swapf w_temp,f swapf w_temp,w ; restore pre-isr W register contents retfie ; return from interrupt main ; ÎÏÈÑÀÍÈÅ ÏÅÐÅÌÅÍÍÛÕ CBLOCK H'70' w_temp :1 ; Ïåðåìåííàÿ äëÿ îáðàáîò÷èêà ïðåðûâíèé status_temp :1 ; Ïåðåìåííàÿ äëÿ îáðàáîò÷èêà ïðåðûâíèé PCLATH_TEMP :1 ; Ïåðåìåííàÿ äëÿ îáðàáîò÷èêà ïðåðûâíèé ENDC CBLOCK H'33' ADC_NACOPH ; ÑÒÀÐØÀß ÏÅÐÅÌÅÍÍÀß ÍÀÊÎÏËÅÍÈß ÇÍÀ×ÅÍÈÉ ÀÖÏ ADC_NACOPM ; ÑÐÅÄÍßß ÏÅÐÅÌÅÍÍÀß ÍÀÊÎÏËÅÍÈß ÇÍÀ×ÅÍÈÉ ÀÖÏ ADC_NACOPL ; ÌËÀÄØÀß ÏÅÐÅÌÅÍÍÀß ÍÀÊÎÏËÅÍÈß ÇÍÀ×ÅÍÈÉ ÀÖÏ COL_ADCL ; ÊÎËÈ×ÅÑÒÂÎ ÂÛ×ÈÑËÅÍÈÉ ÀÖÏ COL_ADCH ; ÊÎËÈ×ÅÑÒÂÎ ÂÛ×ÈÑËÅÍÈÉ ÀÖÏ CHANEL_0L ; ÑÐÅÄÍÈÅ ÇÍÀ×ÅÍÈÅ ÀÖÏ 0 ÊÀÍÀËÀ CHANEL_0H ; ÑÐÅÄÍÈÅ ÇÍÀ×ÅÍÈÅ ÀÖÏ 0 ÊÀÍÀËÀ CHANEL_1L ; ÑÐÅÄÍÈÅ ÇÍÀ×ÅÍÈÅ ÀÖÏ 1 ÊÀÍÀËÀ CHANEL_1H ; ÑÐÅÄÍÈÅ ÇÍÀ×ÅÍÈÅ ÀÖÏ 1 ÊÀÍÀËÀ CHANEL_2L ; ÑÐÅÄÍÈÅ ÇÍÀ×ÅÍÈÅ ÀÖÏ 2 ÊÀÍÀËÀ CHANEL_2H ; ÑÐÅÄÍÈÅ ÇÍÀ×ÅÍÈÅ ÀÖÏ 2 ÊÀÍÀËÀ CHANEL_3L ; ÑÐÅÄÍÈÅ ÇÍÀ×ÅÍÈÅ ÀÖÏ 3 ÊÀÍÀËÀ CHANEL_3H ; ÑÐÅÄÍÈÅ ÇÍÀ×ÅÍÈÅ ÀÖÏ 3 ÊÀÍÀËÀ M_CHANEL_0L ; ÑÐÅÄÍÈÅ ÇÍÀ×ÅÍÈÅ ÀÖÏ 0 ÊÀÍÀËÀ ÇÀÏÎÌÍÅÍÎÅ M_CHANEL_0H ; ÑÐÅÄÍÈÅ ÇÍÀ×ÅÍÈÅ ÀÖÏ 0 ÊÀÍÀËÀ ÇÀÏÎÌÍÅÍÎÅ M_CHANEL_1L ; ÑÐÅÄÍÈÅ ÇÍÀ×ÅÍÈÅ ÀÖÏ 1 ÊÀÍÀËÀ ÇÀÏÎÌÍÅÍÎÅ M_CHANEL_1H ; ÑÐÅÄÍÈÅ ÇÍÀ×ÅÍÈÅ ÀÖÏ 1 ÊÀÍÀËÀ ÇÀÏÎÌÍÅÍÎÅ M_CHANEL_2L ; ÑÐÅÄÍÈÅ ÇÍÀ×ÅÍÈÅ ÀÖÏ 2 ÊÀÍÀËÀ ÇÀÏÎÌÍÅÍÎÅ M_CHANEL_2H ; ÑÐÅÄÍÈÅ ÇÍÀ×ÅÍÈÅ ÀÖÏ 2 ÊÀÍÀËÀ ÇÀÏÎÌÍÅÍÎÅ M_CHANEL_3L ; ÑÐÅÄÍÈÅ ÇÍÀ×ÅÍÈÅ ÀÖÏ 3 ÊÀÍÀËÀ ÇÀÏÎÌÍÅÍÎÅ M_CHANEL_3H ; ÑÐÅÄÍÈÅ ÇÍÀ×ÅÍÈÅ ÀÖÏ 3 ÊÀÍÀËÀ ÇÀÏÎÌÍÅÍÎÅ CHAND ; ÑÒÀÒÓÑ ÐÅÃÈÑÒÐ ÂÊËÞ×ÅÍÈß È ÂÛÊËÞ×ÅÍÈß ÇÀÐßÄÊÈ. FIST_CHAND ; ÑÒÀÒÓÑ ÐÅÃÈÑÒÐ ÏÅÐÂÎÃÎ ÏÓÑÊÀ ÇÀÐßÄÊÈ OFF_CHAND ; ÔËÀÃÈ ÎÊÎÍ×ÀÍÈß ÇÀÐßÄÊÈ ÏÎ ÑÏÀÄÓ ÍÀÏÐßÆÅÍÈß FLAG_END_TIMER ; ÔËÀÃÈ ÎÊÎÍ×ÀÍÈß ÇÀÐßÄÊÈ ÏÎ ÒÀÉÌÀÓÒÓ TIMER ; ÒÀÉÌÅÐ. ÈÑÏÎËÜÇÓÅÒÑß ÏÐÈ ÊÎÍÒÐÎËÅ ÒÅÌÏÅÐÀÒÓÐÛ ÍÀÃÐÅÂÀÒÅËÜÍÎÃÎ ÅËÅÌÅÍÒÀ TIMER_0 ; ÒÀÉÌÅÐ ÎÒÑ×ÅÒÀ ÂÐÅÌÅÍÈ ÄËß ÒÅÑÒÀ ÎÒÍÎØÅÍÈß ÍÀÏÐßÆÅÍÈß ÊÎ ÂÐÅÌÅÍÈ ÇÀÐßÄÊÈ ÄËß 0-ÊÀÍÀËÀ TIMER_1 ; ÒÀÉÌÅÐ ÎÒÑ×ÅÒÀ ÂÐÅÌÅÍÈ ÄËß ÒÅÑÒÀ ÎÒÍÎØÅÍÈß ÍÀÏÐßÆÅÍÈß ÊÎ ÂÐÅÌÅÍÈ ÇÀÐßÄÊÈ ÄËß 1-ÊÀÍÀËÀ TIMER_2 ; ÒÀÉÌÅÐ ÎÒÑ×ÅÒÀ ÂÐÅÌÅÍÈ ÄËß ÒÅÑÒÀ ÎÒÍÎØÅÍÈß ÍÀÏÐßÆÅÍÈß ÊÎ ÂÐÅÌÅÍÈ ÇÀÐßÄÊÈ ÄËß 2-ÊÀÍÀËÀ TIMER_3 ; ÒÀÉÌÅÐ ÎÒÑ×ÅÒÀ ÂÐÅÌÅÍÈ ÄËß ÒÅÑÒÀ ÎÒÍÎØÅÍÈß ÍÀÏÐßÆÅÍÈß ÊÎ ÂÐÅÌÅÍÈ ÇÀÐßÄÊÈ ÄËß 3-ÊÀÍÀËÀ END_CH0 ; ÒÀÉÌÅÐ ÂÛÊËÞ×ÅÍÈß ÇÀÐßÄÊÈ END_CH1 ; ÒÀÉÌÅÐ ÂÛÊËÞ×ÅÍÈß ÇÀÐßÄÊÈ END_CH2 ; ÒÀÉÌÅÐ ÂÛÊËÞ×ÅÍÈß ÇÀÐßÄÊÈ END_CH3 ; ÒÀÉÌÅÐ ÂÛÊËÞ×ÅÍÈß ÇÀÐßÄÊÈ END_TIMER_0 ; ÒÀÉÌÅÐ ÎÒÑ×ÅÒÀ ÂÐÅÌÅÍÈ ÎÊÎÍ×ÀÍÈß ÇÀÐßÄÊÈ 0-ÊÀÍÀËÀ END_TIMER_1 ; ÒÀÉÌÅÐ ÎÒÑ×ÅÒÀ ÂÐÅÌÅÍÈ ÎÊÎÍ×ÀÍÈß ÇÀÐßÄÊÈ 1-ÊÀÍÀËÀ END_TIMER_2 ; ÒÀÉÌÅÐ ÎÒÑ×ÅÒÀ ÂÐÅÌÅÍÈ ÎÊÎÍ×ÀÍÈß ÇÀÐßÄÊÈ 2-ÊÀÍÀËÀ END_TIMER_3 ; ÒÀÉÌÅÐ ÎÒÑ×ÅÒÀ ÂÐÅÌÅÍÈ ÎÊÎÍ×ÀÍÈß ÇÀÐßÄÊÈ 3-ÊÀÍÀËÀ CHANEL ; ÍÎÌÅÐ ÊÀÍÀËÀ ÀÖÏ PAUSE_ADC ; ÏÀÓÇÀ ÏÎÑËÅ ÏÅÐÅÊËÞ×ÅÍÈß ÊÀÍÀËÀ TEST_TIMER ; ENDC ;*************************************************** constant TIM=150 ; ÝÒÎ 10 ×ÀÑΠ; ÊÎÍÑÒÀÍÒÀ ÎÊÎÍ×ÀÍÈß ÇÀÐßÄÊÈ ÏÎ ÒÀÉÌÅÐÓ. ÄÈÑÊÐÅÒÍÎÑÒÜ ÒÀÉÌÅÐÀ 4ÌÈÍ. ;*************************************************** ; Î×ÈÑÒÈÌ ÎÇÓ Â ÏÅÐÂÎÌ ÁÀÍÊÅ BCF STATUS,IRP movlw H'20' ;initialize pointer movwf FSR ; to RAM NEXT clrf INDF ;clear INDF register incf FSR,1 ;inc pointer btfss FSR,7 ;all done? goto NEXT ;NO, clear next ; ÍÀÑÒÐÎÈÌ ÏÎÐÒ À ÊÀÊ ÀÍÀËÎÃÎÂÛÅ ÂÕÎÄÛ ÂÛÕÎÄÛ BANKSEL ADCON1 MOVLW B'10000000' ; ÓÑÒÀÍÎÂÈÌ ÂÑÅ ÂÕÎÄÛ ÏÎÐÒÀ À ÊÀÊ ÀÍÀËÎÃÎÂÛÅ, À Vref ÍÀ ØÈÍÓ ÏÈÒÀÍÈß. MOVWF ADCON1 ; ÑÊÎÍÔÈÃÓÐÈÐÓÅÌ ADCON1 BANKSEL ADCON0 MOVLW B'10000001' ; ÂÛÑÒÀÂÈÌ Fosc/32 È 0 ÊÀÍÀË ÀÖÏ MOVWF ADCON0 ; ÑÊÎÍÔÈÃÓÐÈÐÓÅÌ ADCON0 ; Î×ÈÑÒÈÌ ÏÎÐÒÛ ÂÂÎÄÀ ÂÛÂÎÄÀ BANKSEL PORTA CLRF PORTA CLRF PORTB CLRF PORTC ; ÓÑÒÀÍÎÂÊÈ ÒÀÉÌÅÐÀ 1 MOVLW H'79' MOVWF TMR1L ; ÇÀÏÈØÈÌ ÍÀ×ÀËÜÍÛÅ ÏÐÅÄÓÑÒÀÍÎÂÊÈ ÒÀÉÌÅÐÀ 1 MOVLW H'EC' MOVWF TMR1H ; ÇÀÏÈØÈÌ ÍÀ×ÀËÜÍÛÅ ÏÐÅÄÓÑÒÀÍÎÂÊÈ ÒÀÉÌÅÐÀ 1 MOVLW B'00110101' MOVWF T1CON ; ÇÀÏÈØÅÌ ÊÎÍÔÈÃÓÐÀÖÈÞ ÒÀÉÌÅÐÀ 1 ; ÓÑÒÀÍÎÂÊÈ ÒÀÉÌÅÐÀ 2 ; CLRF TMR2 ; BANKSEL PR2 ; MOVLW 99 ; MOVWF PR2 ; BANKSEL T2CON ; MOVLW B'01001101' ; ÇÀÏÈØÅÌ ÊÎÍÔÈÃÓÐÀÖÈÞ ÒÀÉÌÅÐÀ 2 ; MOVWF T2CON ; ÍÀÑÒÐÎÈÌ ÏÎÐÒÛ ÂÂÎÄÀ ÂÛÂÎÄÀ BANKSEL TRISC ; ÏÎÐÒ Ñ MOVLW B'00000000' ; ÏÎÐÒ Ñ ÂÅÑÜ ÍÀ ÂÛÂÎÄ. MOVWF TRISC ; ÏÎÐÒ À MOVLW B'11111111' MOVWF TRISA ; ÏÎÐÒ À ÂÅÑÜ ÍÀ ÂÂÎÄ ; ÏÎÐÒ Â MOVLW B'11111111' MOVWF TRISB ; ÏÎÐÒ Â ÂÅÑÜ ÍÀ ÂÂÎÄ ; ÍÀ×ÀËÜÍÛÅ ÏÐÅÄÓÑÒÀÍÎÂÊÈ BANKSEL PORTC BSF PORTC,0 BSF PORTC,1 BSF PORTC,2 BSF PORTC,3 BANKSEL OPTION_REG ; ÑÊÎÍÔÈÃÓÐÈÐÓÅÌ ÒÀÉÌÅÐ TMR0 È WDT ; ÂÊËÞ×ÈÌ ÏÎÄÒßÃÈÂÀÞÙÈÅ ÐÅÇÈÑÒÎÐÛ ÏÎÐÒÀ  MOVLW B'01010111' MOVWF OPTION_REG BSF INTCON,GIE ; ÐÀÇÐÅØÈÒÜ ÏÐÅÐÛÂÀÍÈß BSF INTCON,PEIE ; ÐÀÇÐÅØÈÒÜ ÏÐÅÐÛÂÀÍÈß ÎÒ ÏÅÐÅÔÅÐÈÈ BANKSEL PIE1 BSF PIE1,TMR1IE ; ÐÀÇÐÅØÈÒÜ ÏÐÅÐÛÂÀÍÈß ÒÀÉÌÅÐÀ 1 ; BSF PIE1,TMR2IE ; ÐÀÇÐÅØÈÒÜ ÏÐÅÐÛÂÀÍÈß ÒÀÉÌÅÐÀ 2 BANKSEL PORTA ; ÓÑÒÀÍÎÂÈÌ 0 ÁÀÍÊ ÎÇÓ BSF ADCON0,2 ; ÂÊËÞ×ÈÌ ÀÖÏ ÍÀ ÏÐÅÎÁÐÀÇÎÂÀÍÈÅ ;********* RETURN_PROGRAM CALL RUN_ADC ; ÏÎÄÏÐÎÃÐÀÌÌÀ ÈÇÌÅÐÅÍÈß ÇÍÀ×ÅÍÈß ÀÖÏ CLRWDT CALL RUN_CHAHD ; ÏÎÄÏÐÎÃÐÀÌÌÀ ÎÏÐÅÄÅËÅÍÈß ÑÒÀÐÒÀ È ÑÒÎÏÀ ÇÀÐßÄÊÈ CLRWDT GOTO RETURN_PROGRAM ;------------------------------------------------------------------------------------------------------------------------ RUN_ADC ; ÏÎÄÏÐÎÃÐÀÌÌÀ ÈÇÌÅÐÅÍÈß ÇÍÀ×ÅÍÈß ÀÖÏ BTFSC ADCON0,2 ; ÏÐÎÂÅÐÈÌ ÇÀÊÎÍ×ÈËÎÑÜ ËÈ ÏÐÅÎÁÐÀÇÎÂÀÍÈÅ RETURN ;*********** ÍÀÊÎÏÈÌ ÑÓÌÌÓ ÈÇÌÅÐÅÍÈÉ 1024 ÐÀÇ BANKSEL ADRESL MOVF ADRESL,0 ; ÏÐÎ×ÈÒÀÅÌ ÇÍÀ×ÅÍÈÅ ÀÖÏ BANKSEL ADRESH ADDWF ADC_NACOPL,1 BCF STATUS,Z BTFSC STATUS,C ; ÅÑËÈ ÁÛËÎ ÏÅÐÅÏÎËÍÅÍÈÅ, ÒÎ Ê ÑÒÀÐØÅÌÓ ÁÀÉÒÓ ÏÐÈÁÀÂÈÌ 1 INCF ADC_NACOPM,1 BTFSC STATUS,Z ; ÅÑËÈ ÁÛËÎ ÏÅÐÅÏÎËÍÅÍÈÅ Â ÑÐÅÄÍÅÌ ÁÀÉÒÅ, ÒÎ Ê ÑÒÀÐØÅÌÓ ÁÀÉÒÓ ÏÐÈÁÀÂÈÌ 1 INCF ADC_NACOPH,1 MOVF ADRESH,0 ; ÏÐÎ×ÈÒÀÅÌ ÇÍÀ×ÅÍÈÅ ÀÖÏ ADDWF ADC_NACOPM,1 BTFSC STATUS,C ; ÅÑËÈ ÁÛËÎ ÏÅÐÅÏÎËÍÅÍÈÅ, ÒÎ Ê ÑÒÀÐØÅÌÓ ÁÀÉÒÓ ÏÐÈÁÀÂÈÌ 1 INCF ADC_NACOPH,1 INCF COL_ADCL,1 ; ÓÂÅËÈ×ÈÌ Ñ×ÅÒ×ÈÊ ÍÀ 1 BTFSC STATUS,Z ; ÅÑËÈ Ñ×ÅÒ×ÈÊ ÏÅÐÅÏÎËÍÈËÑÀ ÒÎ ÓÂÅËÈ×ÈÌ ÑÒÀÐØÈÉ ÁÀÉÒ ÍÀ 1 INCF COL_ADCH,1 ; ÓÂÅËÈ×ÈÌ Ñ×ÅÒ×ÈÊ ÍÀ 1 BTFSS COL_ADCH,2 ; ÏÐÎÂÅÐÈÌ Ñ×ÅÒ×ÈÊ ÊÎËÈ×ÅÑÒÂÀ ÈÇÌÅÐÅÍÈÉ. ÅÑËÈ ÁÎËÜØÅ 1024 ÒÎ ÏÎÑ×ÈÒÀÅÌ ÑÐÅÄÍÅÅ ÇÍÀ×ÅÍÈÅ GOTO NEXT_ADC ; ***** ÐÀÇÄÅËÈÌ ÍÀÊÎÏËÅÍÍÓÞ ÑÓÌÌÓ ÍÀ 1024. ÒÎ ÅÑÒÜ ÑÄÂÈÍÈÌ ÍÀÊÎÏËÅÍÍÓÞ ÑÓÌÌÓ ÍÀ 10 ÏÎÇÈÖÛÉ Â ÏÐÀÂÎ MOVLW 10 MOVWF COL_ADCL REPIT_RRL BCF STATUS,C RRF ADC_NACOPH,1 RRF ADC_NACOPM,1 RRF ADC_NACOPL,1 DECF COL_ADCL,1 BTFSS STATUS,Z GOTO REPIT_RRL ;**********------------------------------------------------------------------------------------------------------- MOVF CHANEL,0 ; 0 ÊÀÍÀË BTFSS STATUS,Z GOTO CHANEL_1 ;********** ÂÛÑÒÀÂÈÌ 1 ÊÀÍÀË - RA1 BSF ADCON0,3 INCF CHANEL,1 ; ÓÂÅËÈ×ÈÌ Ñ×ÅÒ×ÈÊ ÊÀÍÀËÀ ÍÀ 1 MOVF ADC_NACOPM,0 ; ÇÀÏÎÌÍÈÌ ÑÐÅÄÍÅÅ ÇÍÀ×ÅÍÈÅ ÀÖÏ ÏÎ ÊÀÍÀËÓ MOVWF CHANEL_0H MOVF ADC_NACOPL,0 ; ÇÀÏÎÌÍÈÌ ÑÐÅÄÍÅÅ ÇÍÀ×ÅÍÈÅ ÀÖÏ ÏÎ ÊÀÍÀËÓ MOVWF CHANEL_0L ;********* ÂÛÄÅÐÆÈÌ ÏÀÓÇÓ 20 ìêñ. MOVLW 10 MOVWF PAUSE_ADC M1 DECFSZ PAUSE_ADC,1 GOTO M1 GOTO NEXT_CH ;**********------------------------------------------------------------------------------------------------------- CHANEL_1 MOVF CHANEL,0 ; 1 ÊÀÍÀË XORLW 1 BTFSS STATUS,Z GOTO CHANEL_2 ;********** ÂÛÑÒÀÂÈÌ 2 ÊÀÍÀË - RA2 BCF ADCON0,3 BSF ADCON0,4 INCF CHANEL,1 ; ÓÂÅËÈ×ÈÌ Ñ×ÅÒ×ÈÊ ÊÀÍÀËÀ ÍÀ 1 MOVF ADC_NACOPM,0 ; ÇÀÏÎÌÍÈÌ ÑÐÅÄÍÅÅ ÇÍÀ×ÅÍÈÅ ÀÖÏ ÏÎ ÊÀÍÀËÓ MOVWF CHANEL_1H MOVF ADC_NACOPL,0 ; ÇÀÏÎÌÍÈÌ ÑÐÅÄÍÅÅ ÇÍÀ×ÅÍÈÅ ÀÖÏ ÏÎ ÊÀÍÀËÓ MOVWF CHANEL_1L ;********* ÂÛÄÅÐÆÈÌ ÏÀÓÇÓ 20 ìêñ. MOVLW 10 MOVWF PAUSE_ADC M2 DECFSZ PAUSE_ADC,1 GOTO M2 GOTO NEXT_CH ;**********------------------------------------------------------------------------------------------------------- CHANEL_2 MOVF CHANEL,0 ; 2 ÊÀÍÀË XORLW 2 BTFSS STATUS,Z GOTO CHANEL_3 ;********** ÂÛÑÒÀÂÈÌ 3 ÊÀÍÀË - RA5 BCF ADCON0,3 BCF ADCON0,4 BSF ADCON0,5 INCF CHANEL,1 ; ÓÂÅËÈ×ÈÌ Ñ×ÅÒ×ÈÊ ÊÀÍÀËÀ ÍÀ 1 MOVF ADC_NACOPM,0 ; ÇÀÏÎÌÍÈÌ ÑÐÅÄÍÅÅ ÇÍÀ×ÅÍÈÅ ÀÖÏ ÏÎ ÊÀÍÀËÓ MOVWF CHANEL_2H MOVF ADC_NACOPL,0 ; ÇÀÏÎÌÍÈÌ ÑÐÅÄÍÅÅ ÇÍÀ×ÅÍÈÅ ÀÖÏ ÏÎ ÊÀÍÀËÓ MOVWF CHANEL_2L ;********* ÂÛÄÅÐÆÈÌ ÏÀÓÇÓ 20 ìêñ. MOVLW 10 MOVWF PAUSE_ADC M3 DECFSZ PAUSE_ADC,1 GOTO M3 GOTO NEXT_CH ;**********------------------------------------------------------------------------------------------------------- ;********** ÂÛÑÒÀÂÈÌ 0 ÊÀÍÀË - RA0 CHANEL_3 BCF ADCON0,3 BCF ADCON0,4 BCF ADCON0,5 CLRF CHANEL ; 0 ÊÀÍÀË MOVF ADC_NACOPM,0 ; ÇÀÏÎÌÍÈÌ ÑÐÅÄÍÅÅ ÇÍÀ×ÅÍÈÅ ÀÖÏ ÏÎ ÊÀÍÀËÓ MOVWF CHANEL_3H MOVF ADC_NACOPL,0 ; ÇÀÏÎÌÍÈÌ ÑÐÅÄÍÅÅ ÇÍÀ×ÅÍÈÅ ÀÖÏ ÏÎ ÊÀÍÀËÓ MOVWF CHANEL_3L ;********* ÂÛÄÅÐÆÈÌ ÏÀÓÇÓ 20 ìêñ. MOVLW 10 MOVWF PAUSE_ADC M4 DECFSZ PAUSE_ADC,1 GOTO M4 BSF CHAND,7 ; ÏÎÑÒÀÂÈÌ ÔËÀà ÒÎÃÎ, ×ÒÎ ÁÛËÎ ÑÄÅËÀÍÎ ÏÅÐÂÎÅ ÈÇÌÅÐÅÍÈÅ ;**********------------------------------------------------------------------------------------------------------- NEXT_CH CLRF ADC_NACOPH ; Î×ÈÑÒÈÌ CLRF ADC_NACOPM ; Î×ÈÑÒÈÌ CLRF ADC_NACOPL ; Î×ÈÑÒÈÌ CLRF COL_ADCL ; Î×ÈÑÒÈÌ Ñ×ÅÒ×ÈÊ CLRF COL_ADCH ; Î×ÈÑÒÈÌ Ñ×ÅÒ×ÈÊ NEXT_ADC BSF ADCON0,2 ; ÂÊËÞ×ÈÌ ÀÖÏ ÍÀ ÏÐÅÎÁÐÀÇÎÂÀÍÈÅ RETURN ;------------------------------------------------------------------------------------------------------------------------ ;------------------------------------------------------------------------------------------------------------------------ RUN_CHAHD ; ÏÎÄÏÐÎÃÐÀÌÌÀ ÎÏÐÅÄÅËÅÍÈß ÑÒÀÐÒÀ È ÑÒÎÏÀ ÇÀÐßÄÊÈ BTFSS CHAND,7 ; ÏÐÎÂÅÐÈÌ, ÁÛËÎ ËÈ ÑÄÅËÀÍÎ ÏÅÐÂÎÅ ÈÇÌÅÐÅÍÈÅ RETURN ;******************************** ;****** 0-ÊÀÍÀË MOVLW 3 XORWF CHANEL_0H,0 BTFSS STATUS,Z GOTO ON_CH0 ; ÑÒÀÐØÈÉ ÁÈÒ ÐÀÇÐßÄÀ ÀÖÏ 3! - ÍÎÐÌÀ. ÏÐÎÂÅÐÈÌ ÌËÀÄØÈÉ ÐÀÇÐßÄ MOVLW 10 SUBWF CHANEL_0L,0 BTFSC STATUS,C ; ÅÑËÈ ÐÅÇÓËÜÒÀÒ ÎÒÐÈÖÀÒÅËÜÍÛÉ, ÒÎ ÂÊËÞ×ÈÌ ÇÀÐßÄÊÓ GOTO OFF_CH0 ; ÂÊËÞ×ÈÒÜ ÇÀÐßÄÊÓ ÏÎ 0 ÊÀÍÀËÓ ON_CH0 BTFSS OFF_CHAND,0 ; ÏÐÎÂÅÐÈÌ ÁÈÒ ÎÊÎÍ×ÀÍÈß ÇÀÐßÄÊÈ BSF CHAND,0 ; ÂÊËÞ×ÈÌ ÇÀÐßÄÊÓ ÏÎ Î ÊÀÍÀËÓ BTFSC OFF_CHAND,4 BCF PORTC,0 ; ÂÛÊËÞ×ÈÌ ÏÎÐÒ, ÒÀÊ ÊÀÊ ÀÊÊÓÌÓËßÒÎÐÛ ÅÙÅ ÍÅ ÎÒÊËÞ×ÈËÈ BTFSC OFF_CHAND,4 BCF OFF_CHAND,4 ; ÓÁÅÐÅÌ ÔËÀà GOTO NEXT_1 OFF_CH0 BCF CHAND,0 ; ÂÛÊËÞ×ÈÌ ÇÀÐßÄÊÓ ÏÎ Î ÊÀÍÀËÓ CLRF TIMER_0 ; Î×ÈÑÒÈÌ ÒÀÉÌÅÐ ÒÅÑÒÀ CLRF END_TIMER_0 ; Î×ÈÑÒÈÌ ÒÀÉÌÅÐ ÎÊÍÎ×ÀÍÈß ÇÀÐßÄÊÈ ÏÎ ÒÀÓÌÀÓÒÓ BCF FIST_CHAND,0 ; Î×ÈÑÒÈÌ ÔËÀà ÏÅÐÂÎÃÎ ÏÓÑÊÀ ÇÀÐßÄÊÈ BTFSS OFF_CHAND,4 GOTO NEXT_1 BCF OFF_CHAND,4 ; ÓÁÅÐÅÌ ÔËÀà BCF FLAG_END_TIMER,0 ; ÓÁÅÐÅÌ ÔËÀà ÒÀÉÌÅÐÀ ÂÛÊËÞ×ÅÍÈß ÇÀÐßÄÊÈ BCF OFF_CHAND,0 ; ÓÁÅÐÅÌ ÔËÀà ÎÊÎÍ×ÀÍÈß ÇÀÐßÄÊÈ ;******************************** NEXT_1 ;****** 1-ÊÀÍÀË MOVLW 3 XORWF CHANEL_1H,0 BTFSS STATUS,Z GOTO ON_CH1 ; ÑÒÀÐØÈÉ ÁÈÒ ÐÀÇÐßÄÀ ÀÖÏ 3! - ÍÎÐÌÀ. ÏÐÎÂÅÐÈÌ ÌËÀÄØÈÉ ÐÀÇÐßÄ MOVLW 10 SUBWF CHANEL_1L,0 BTFSC STATUS,C ; ÅÑËÈ ÐÅÇÓËÜÒÀÒ ÎÒÐÈÖÀÒÅËÜÍÛÉ, ÒÎ ÂÊËÞ×ÈÌ ÇÀÐßÄÊÓ GOTO OFF_CH1 ; ÂÊËÞ×ÈÒÜ ÇÀÐßÄÊÓ ÏÎ 0 ÊÀÍÀËÓ ON_CH1 BTFSS OFF_CHAND,1 ; ÏÐÎÂÅÐÈÌ ÁÈÒ ÎÊÎÍ×ÀÍÈß ÇÀÐßÄÊÈ BSF CHAND,1 ; ÂÊËÞ×ÈÌ ÇÀÐßÄÊÓ ÏÎ Î ÊÀÍÀËÓ BTFSC OFF_CHAND,5 BCF PORTC,1 ; ÂÛÊËÞ×ÈÌ ÏÎÐÒ, ÒÀÊ ÊÀÊ ÀÊÊÓÌÓËßÒÎÐÛ ÅÙÅ ÍÅ ÎÒÊËÞ×ÈËÈ BTFSC OFF_CHAND,5 BCF OFF_CHAND,5 ; ÓÁÅÐÅÌ ÔËÀà GOTO NEXT_2 OFF_CH1 BCF CHAND,1 ; ÂÛÊËÞ×ÈÌ ÇÀÐßÄÊÓ ÏÎ 1 ÊÀÍÀËÓ CLRF TIMER_1 ; Î×ÈÑÒÈÌ ÒÀÉÌÅÐ ÒÅÑÒÀ CLRF END_TIMER_1 ; Î×ÈÑÒÈÌ ÒÀÉÌÅÐ ÎÊÍÎ×ÀÍÈß ÇÀÐßÄÊÈ ÏÎ ÒÀÓÌÀÓÒÓ BCF FIST_CHAND,1 ; Î×ÈÑÒÈÌ ÔËÀà ÏÅÐÂÎÃÎ ÏÓÑÊÀ ÇÀÐßÄÊÈ BTFSS OFF_CHAND,5 GOTO NEXT_2 BCF OFF_CHAND,5 ; ÓÁÅÐÅÌ ÔËÀà BCF FLAG_END_TIMER,1 ; ÓÁÅÐÅÌ ÔËÀà ÒÀÉÌÅÐÀ ÂÛÊËÞ×ÅÍÈß ÇÀÐßÄÊÈ BCF OFF_CHAND,1 ; ÓÁÅÐÅÌ ÔËÀà ÎÊÎÍ×ÀÍÈß ÇÀÐßÄÊÈ ;******************************** NEXT_2 ;****** 2-ÊÀÍÀË MOVLW 3 XORWF CHANEL_2H,0 BTFSS STATUS,Z GOTO ON_CH2 ; ÑÒÀÐØÈÉ ÁÈÒ ÐÀÇÐßÄÀ ÀÖÏ 3! - ÍÎÐÌÀ. ÏÐÎÂÅÐÈÌ ÌËÀÄØÈÉ ÐÀÇÐßÄ MOVLW 10 SUBWF CHANEL_2L,0 BTFSC STATUS,C ; ÅÑËÈ ÐÅÇÓËÜÒÀÒ ÎÒÐÈÖÀÒÅËÜÍÛÉ, ÒÎ ÂÊËÞ×ÈÌ ÇÀÐßÄÊÓ GOTO OFF_CH2 ; ÂÊËÞ×ÈÒÜ ÇÀÐßÄÊÓ ÏÎ 0 ÊÀÍÀËÓ ON_CH2 BTFSS OFF_CHAND,2 ; ÏÐÎÂÅÐÈÌ ÁÈÒ ÎÊÎÍ×ÀÍÈß ÇÀÐßÄÊÈ BSF CHAND,2 ; ÂÊËÞ×ÈÌ ÇÀÐßÄÊÓ ÏÎ Î ÊÀÍÀËÓ BTFSC OFF_CHAND,6 BCF PORTC,2 ; ÂÛÊËÞ×ÈÌ ÏÎÐÒ, ÒÀÊ ÊÀÊ ÀÊÊÓÌÓËßÒÎÐÛ ÅÙÅ ÍÅ ÎÒÊËÞ×ÈËÈ BTFSC OFF_CHAND,6 BCF OFF_CHAND,6 ; ÓÁÅÐÅÌ ÔËÀà GOTO NEXT_3 OFF_CH2 BCF CHAND,2 ; ÂÛÊËÞ×ÈÌ ÇÀÐßÄÊÓ ÏÎ 2 ÊÀÍÀËÓ CLRF TIMER_2 ; Î×ÈÑÒÈÌ ÒÀÉÌÅÐ ÒÅÑÒÀ CLRF END_TIMER_2 ; Î×ÈÑÒÈÌ ÒÀÉÌÅÐ ÎÊÍÎ×ÀÍÈß ÇÀÐßÄÊÈ ÏÎ ÒÀÓÌÀÓÒÓ BCF FIST_CHAND,2 ; Î×ÈÑÒÈÌ ÔËÀà ÏÅÐÂÎÃÎ ÏÓÑÊÀ ÇÀÐßÄÊÈ BTFSS OFF_CHAND,6 GOTO NEXT_3 BCF OFF_CHAND,6 ; ÓÁÅÐÅÌ ÔËÀà BCF FLAG_END_TIMER,2 ; ÓÁÅÐÅÌ ÔËÀà ÒÀÉÌÅÐÀ ÂÛÊËÞ×ÅÍÈß ÇÀÐßÄÊÈ BCF OFF_CHAND,2 ; ÓÁÅÐÅÌ ÔËÀà ÎÊÎÍ×ÀÍÈß ÇÀÐßÄÊÈ ;******************************** NEXT_3 ;****** 3-ÊÀÍÀË MOVLW 3 XORWF CHANEL_3H,0 BTFSS STATUS,Z GOTO ON_CH3 ; ÑÒÀÐØÈÉ ÁÈÒ ÐÀÇÐßÄÀ ÀÖÏ 3! - ÍÎÐÌÀ. ÏÐÎÂÅÐÈÌ ÌËÀÄØÈÉ ÐÀÇÐßÄ MOVLW 10 SUBWF CHANEL_3L,0 BTFSC STATUS,C ; ÅÑËÈ ÐÅÇÓËÜÒÀÒ ÎÒÐÈÖÀÒÅËÜÍÛÉ, ÒÎ ÂÊËÞ×ÈÌ ÇÀÐßÄÊÓ GOTO OFF_CH3 ; ÂÊËÞ×ÈÒÜ ÇÀÐßÄÊÓ ÏÎ 0 ÊÀÍÀËÓ ON_CH3 BTFSS OFF_CHAND,3 ; ÏÐÎÂÅÐÈÌ ÁÈÒ ÎÊÎÍ×ÀÍÈß ÇÀÐßÄÊÈ BSF CHAND,3 ; ÂÊËÞ×ÈÌ ÇÀÐßÄÊÓ ÏÎ Î ÊÀÍÀËÓ BTFSC OFF_CHAND,7 BCF PORTC,3 ; ÂÛÊËÞ×ÈÌ ÏÎÐÒ, ÒÀÊ ÊÀÊ ÀÊÊÓÌÓËßÒÎÐÛ ÅÙÅ ÍÅ ÎÒÊËÞ×ÈËÈ BTFSC OFF_CHAND,7 BCF OFF_CHAND,7 ; ÓÁÅÐÅÌ ÔËÀà RETURN OFF_CH3 BCF CHAND,3 ; ÂÛÊËÞ×ÈÌ ÇÀÐßÄÊÓ ÏÎ 3 ÊÀÍÀËÓ CLRF TIMER_3 ; Î×ÈÑÒÈÌ ÒÀÉÌÅÐ ÒÅÑÒÀ CLRF END_TIMER_3 ; Î×ÈÑÒÈÌ ÒÀÉÌÅÐ ÎÊÍÎ×ÀÍÈß ÇÀÐßÄÊÈ ÏÎ ÒÀÓÌÀÓÒÓ BCF FIST_CHAND,3 ; Î×ÈÑÒÈÌ ÔËÀà ÏÅÐÂÎÃÎ ÏÓÑÊÀ ÇÀÐßÄÊÈ BTFSS OFF_CHAND,7 RETURN BCF OFF_CHAND,7 ; ÓÁÅÐÅÌ ÔËÀà BCF FLAG_END_TIMER,3 ; ÓÁÅÐÅÌ ÔËÀà ÒÀÉÌÅÐÀ ÂÛÊËÞ×ÅÍÈß ÇÀÐßÄÊÈ BCF OFF_CHAND,3 ; ÓÁÅÐÅÌ ÔËÀà ÎÊÎÍ×ÀÍÈß ÇÀÐßÄÊÈ RETURN ;------------------------------------------------------------------------------------------------------------------------ ;------------------------------------------------------------------------------------------------------------------------ ;------------------------------------------------------------------------------------------------------------------------ ;------------------------------------------------------------------------------------------------------------------------ END ; directive 'end of program'