
;

     LIST		p=16F887				; nastavení typu procesoru
     #INCLUDE	<P16F887.INC>		; definice proměnných pro tento procesor

; === NASTAVENÍ KONFIGURAČNÍHO SLOVA ===

	__CONFIG    _CONFIG1, _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT
	__CONFIG    _CONFIG2, _WRT_OFF & _BOR21V

	

; === PROGRAM ===

RESET	ORG		0x0000		; začátek programu na adrese 0000h

; Inicializace portů

	BANKSEL	PORTD
	CLRF	PORTD
	MOVLW	0x01
	MOVWF	PORTD
	BANKSEL	TRISD
	MOVLW	0x00
	MOVWF	TRISD

	BANKSEL	PORTB
	CLRF	PORTB
	BANKSEL ANSEL
	CLRF	ANSEL
	CLRF	ANSELH
	BANKSEL	TRISB
	CLRF	TRISB
	MOVLW	0x01
	MOVWF	TRISB
	BANKSEL	PORTD


; Hlavní smyčka programu
LOOP_M

		BTFSC	PORTB,0	; PORTA<0> = 0?
		GOTO	LOOP_M		;  - ne: skok na LOOP_M
LOOP1						;  - ano: tlačítko bylo sepnuto, pokračuj
		BTFSS	PORTB, 0	; PORTA<0> = 1?		GOTO	LOOP1		;  - ne: skok na LOOP1
							;  - ano: tlačítko bylo rozepnuto, pokračuj
		CALL	CHANGE_LED	; aktualizuj výstupní stav
		GOTO	LOOP_M

; Podprogram pro rotaci LED
CHANGE_LED
		BCF		STATUS, C	; C = 0
		BTFSC	PORTD, 7	; PORTB<7> = 0?
		BSF		STATUS, C	;  - ne -> C = 1
		RLF		PORTD, f		; rotace vlev		RETURN
		RETURN
		END