;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;   Schemat podłączeń programowanego układu
;
;                 +----v----+
;           MCLR [| 1     40|] RB7 <- S1
;                [| 2     39|] 
;                [| 3     38|] 
;                [| 4     37|] 
;                [| 5     36|] 
;                [| 6     35|] 
;      D1 <- RA5 [| 7     34|] 
;                [| 8     33|] 
;                [| 9     32|] VDD
;                [|10     31|] VSS
;            VDD [|11     30|] 
;            VSS [|12     29|] 
;(20 MHz) / OSC1 [|13     28|]
;         \ OSC2 [|14     27|]
;                [|15     26|] 
;                [|16     25|] 
;                [|17     24|]
;                [|18     23|] 
;                [|19     22|] 
;                [|20     21|] 
;                 +---------+
;                 PIC16F877A
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
#include <p16F877a.inc>

;ustawienia bitów konfiguracyjnych
__CONFIG _CP_OFF&_WDT_OFF&_BODEN_OFF&_PWRTE_OFF&_HS_OSC&_WRT_OFF&_LVP_OFF&_CPD_OFF

;program
	banksel(ADCON1)				;przejdź do banku rejestru ADCON1 (bank 1)
	movlw	0x06				;prześlij wartość 0x06 do rejestru W
	movwf	ADCON1				;załaduj rejestr ADCON1 wartością z W (linie cyfrowe)
	bcf		TRISA, 5			;linia RA5 wyjściowa
	bsf 	TRISB, 7			;linia RB7 wejściowa
	bcf 	OPTION_REG, 7		;włączenie wewnętrznego pull-up dla linii portu B
	banksel(PORTA)				;przejdź do banku rejestru PORTA (bank 0)
	
;pętla nieskończona
petla:

	btfss	PORTB, 7			;pomiń nast. instrukcję, jeśli RB7 = 1
	goto	przycisk_nekany		;skocz do podprogramu obsługi przycisku nękanego
	btfsc	PORTB, 7			;pomiń nast. instrukcję, jeśli RB7 = 0
	goto	przycisk_bezrobotny	;skocz do podprogramu obsługi przycisku bezrobotnego
	
	goto 	petla

;podprogram obsługi przycisku nękanego, czyli wciśniętego
przycisk_nekany:
	bsf		PORTA, 5			;zaświeć diodę
	return						;powrót z podprogramu

;podprogram obsługi przycisku bezrobotnego
przycisk_bezrobotny:
	bcf		PORTA, 5			;zgaś diodę
	return						;powrót z podprogramu

	end
