LIST P=16F627, R=DEC
include<P16F627.INC>
__CONFIG _PWRTE_ON & _WDT_OFF & _MCLRE_OFF & _BODEN_OFF & _LVP_OFF & _INTRC_OSC_NOCLKOUT


W_sav			EQU	20h				; záloha při přerušení
STA_sav			EQU	21h				; záloha při přerušení
PCL_sav			EQU	22h				; záloha při přerušení
FSR_sav			EQU	23h				; záloha při přerušení


MOTORD			EQU	24h				; přijatá data
PRO_MOTOR		EQU	25h				; registr prodlevy
ZPOZDENI		EQU	26h				; zpoždění

;#DEFINE		MUSTEK_P.1		PORTA,4 
;#DEFINE		MUSTEK_P.2		PORTA,5
;#DEFINE		MUSTEK_L.1		PORTA,6
#DEFINE		MUSTEK_L.2		PORTA,1

;-----------------------------------------------------------------------------------------------

			org	00h					;adresa začátku programu
			goto	INIT			;inicializace procesoru

			org	04h					;adresa pro začátek přerušení
			movwf	W_sav			;přesun W do záložního registru
			movf	STATUS,W		;přesun registru status do W
			clrf	STATUS			;nulování registru status
			movwf	STA_sav			;uložení registru status do registru Sta_sav
			movf	PCLATH,w		;přesun registru PCL do W
			movwf	PCL_sav			;uložení registru PCL do PCL_sav
			movf	FSR,w			;přesun registru FSR do W
			movwf	FSR_sav			;uložení FSR do registru FSR_sav
			goto	PRERUS			;skok na vykonaní přerušení
;-------------------------------------------------------------------------------------------------- 

PRERUS		btfsc	PIR1,RCIF		
			goto	$+2
			goto	NEDELEJ_NIC
			movf	RCREG,W			;načtení bytu
			movwf	MOTORD			;uložení bytu		

NEDELEJ_NIC	bsf		STATUS,RP0
			movlw	B'11000000'		;opetovne obnoveni preruseni
			movwf	INTCON
			movlw	B'00100000'
			movwf	PIE1
			bcf		STATUS,RP0
			clrf	STATUS	
			movf	FSR_sav,W		;obnovení registru
			movwf	FSR
			movf	PCL_sav,W
			movwf	PCLATH
			movf	STA_sav,W
			movwf	STATUS
			swapf	W_sav,f
			swapf	W_sav,W
			retfie
;---------------------------------------------------------------------------------------------------

INIT		movlw	B'00000111'		;komparator off
			movwf	CMCON
			bsf		STATUS,RP0		;banka 1
			movlw	B'00000110'
			movwf	TRISB
			movlw	B'00000000'		;nastavení portu na out in
			movwf	TRISA
			movlw	25				;nastavení serioveho kanalu rychlost 9600b pro krystal 4MHz
			movwf	SPBRG
			movlw	B'00100000'
			movwf	PIE1
			movlw	B'00000110'
			movwf	TXSTA
			bcf		STATUS,RP0		;banka 0
			movlw	B'10010000'		;povolen sériový port RS232, 8bit,asynchroní mod
			movwf	RCSTA
			movlw	B'11000000'		;povoleno přerušení od přetečení TMR0 
			movwf	INTCON
			goto	START


START		movlw	100
			movwf	ZPOZDENI
			movf	MOTORD,W		
			subwf	PRO_MOTOR,W		
			btfsc	STATUS,C		
			goto	MR_OFF
			bsf		MUSTEK_L.2
			goto	MR_NEGATIVE
MR_OFF		bcf		MUSTEK_L.2

MR_NEGATIVE	incf	PRO_MOTOR,F
			movf	PRO_MOTOR,W
			xorlw	7
			btfsc	STATUS,Z
			clrf	PRO_MOTOR
			incfsz	ZPOZDENI,1
			goto	$-1
			goto	START
					

			end		