;***********************************************************************************************
; morg.asm
; Автоколебательный  мультивибратор.
; При запуске моргает с f=0,5 гц. при нажатии на кнопу моргает
; с f=1 гц, при еще одном
; нажатии опять с f=0.5 гц,   БЕЗ ИСП. ПРЕРЫВАНИЙ
; PIC16F84A      Кварц 4 мГц.
;===============================================================================================
            LIST        p=16F84A    ; Установка типа микроконтроллера.
            __CONFIG 03FF1h      ; Бит защиты выключен, WDT выключен, 
                                    ; стандартный XT - генератор.
;===============================================================================================
; Определение  положения  регистров  специального  назначения.
;===============================================================================================
STATUS      equ         03h         ; Регистр выбора банка.
TRISA	    equ		05h
TRISB       equ         06h         ; Регистр выбора направления работы выводов порта В.
PORTB       equ         06h         ; Регистр управления защелками порта В.
PORTA	    EQU		05H	
F           equ 	1
RP0         equ 	5
Z	    EQU		2

; РЕГИСТРЫ ОБЩ НАЗНАЧЕНИЯ

W_COPY 	    equ         0Ch
ST_COPY     equ         0Dh
Reg_3	    EQU		12H
Reg_2	    EQU		11H
Reg_1	    EQU		10H
L	    EQU		22H
M	    EQU         21H
H           EQU         20H
REG0_1	    EQU		15H
SRAV	    EQU		25H
TEMPM	    EQU		46H
TEMPL	    EQU		47H

; КОНСТАНТЫ
	    
            org         0         ; Начать выполнение программы с адреса 0 PC.
            goto        START       ; Переход в ПП Start.
	    ORG         100H
;***********************************************************************************************
;                          Текст рабочей части программы.
;***********************************************************************************************

START           MOVF		PORTA,F      ;Инициализация порта А
		MOVF		PORTB,F
      	        BSF     	STATUS,RP0   ;Выбор банка 1
		MOVLW		.1
		MOVWF		TRISB
		MOVLW		.0
		MOVWF		TRISA
		BCF             STATUS,RP0    ;Выбор банка 0

PP1		BTFSS		PORTB,0		;проверка замыкания кнопы
		GOTO		Pause_1S	;если замкнуто то переход в подпрограмму

 		GOTO		Pause_05S

;-------------delay = 250'000 machine cycles--------ЗАДЕРЖКА О,5 СЕК


Pause_05S   BSF		PORTB,5		;зажечь светодиод
            movlw       .169
            movwf       Reg_1
            movlw       .69
            movwf       Reg_2
            movlw       .2
            movwf       Reg_3
wr1         decfsz      Reg_1, F
            goto        wr1
            decfsz      Reg_2, F
            goto        wr1
            decfsz      Reg_3, F
            goto        wr1
            nop
            nop
	    		
;delay = 250'000 machine cycles

            BCF		PORTB,5		;потушить светодиод
            movlw       .169
            movwf       Reg_1
            movlw       .69
            movwf       Reg_2
            movlw       .2
            movwf       Reg_3
wr2         decfsz      Reg_1, F
            goto        wr2
            decfsz      Reg_2, F
            goto        wr2
            decfsz      Reg_3, F
            goto        wr2
            nop
            nop
	    GOTO	PP1
;--------------------------------------------------------------


;-------------delay = 500'000 machine cycles----------------задержка 1 сек

Pause_1S    BSF		PORTB,5		;зажечь светодиод
            movlw       .85
            movwf       Reg_1
            movlw       .138
            movwf       Reg_2
            movlw       .3
            movwf       Reg_3
wr3         decfsz      Reg_1, F
            goto        wr3
            decfsz      Reg_2, F
            goto        wr3
            decfsz      Reg_3, F
            goto        wr3
            nop
            nop

	    BCF		PORTB,5		;потушить светодиод

;delay = 500'000 machine cycles

Pause       movlw       .85
            movwf       Reg_1
            movlw       .138
            movwf       Reg_2
            movlw       .3
            movwf       Reg_3
wr4         decfsz      Reg_1, F
            goto        wr4
            decfsz      Reg_2, F
            goto        wr4
            decfsz      Reg_3, F
            goto        wr4
            nop
            nop

	    GOTO	PP1
;---------------------------------------------------------------
 		
		
		


		

	      	end
