
	title "Demonstrace zákmitů tlačítek"

; Seriál "Mikrokontroléry PIC", díl 33
; PE 09/2010
;
; 
;

     LIST		p=16F887				; nastavení typu procesoru
     #INCLUDE	<P16F887.INC>		; definice proměnných pro tento procesor


__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ů
		BCF		STATUS,RP0	; výběr banky 0
	CLRF	PORTB
	MOVLW	B'00000001'
	MOVWF	PORTD
	CLRF	PORTD	
	BSF	STATUS,RP0
	CLRF	ANSEL
	MOVLW	B'00000001'
	MOVWF	TRISB
	CLRF	TRISD

		

; Inicializace interního oscilátoru
		MOVLW	b'01110000'
		MOVWF	OSCCON		; nastavení kmitočtu interního oscilátoru na 8 MHz

		BCF		STATUS, RP0	; výběr banky 0
; Hlavní smyčka programu
LOOP_M
		BTFSC	PORTB,0	; PORTB<0> = 0?
		GOTO	LOOP_M		;  - ne: skok na LOOP_M
LOOP1						;  - ano: tlačítko bylo sepnuto, pokračuj
		BTFSS	PORTB,0	; PORTB<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 vlevo
		RETURN

		END