INCLUDE	"P16F84A.INC"
		LIST 	P=16F84A, R=DEC

		__CONFIG   _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC

;- nastavení COM portu: -----------------------------------------
;
;                     2400 Baud
;                     8 bit
;                     none parity
;                     none handshake (pomocné linky)
;
;- Proměnné ----------------------------------------------------

c1		EQU		h'20'		;proměnné pro cykly
pocet		EQU		h'23'		;počet bitů
datt		EQU		h'24'		;data z portu
tatt		EQU		h'25'		;temp data

;- Nastavení v/v -----------------------------------------------
			
		BSF		STATUS,RP0	;přesun do banky 1
		MOVLW		b'00000001'	;nastavení v/v
		MOVWF		TRISA
		MOVLW		b'00000000'
		MOVWF		TRISB
		BCF		STATUS,RP0	;přesun zpět do banky 0

;- Vlastní program ---------------------------------------------

zacatek		BTFSC		PORTA,0		;čekání na start bit
		GOTO		get		
		GOTO		zacatek		

;- přijem dat --------------------------------------------------
		
get		CALL		prodleva
		CALL		prodleva
		CALL		prodleva
		MOVLW		8
		MOVWF		pocet
		MOVLW		255
		MOVWF		datt
		
next		BTFSS		PORTA,0
		BCF		STATUS,C
		BTFSC		PORTA,0
		BSF		STATUS,C
		RRF		datt,1		;ukládání do datt
		CALL		prodleva
		CALL		prodleva
		DECFSZ		pocet,1
		GOTO		next
		CALL		prodleva
		CALL		prodleva

;- čekání na stop bit ------------------------------------------

konec		BTFSC		PORTA,0	
		GOTO		konec

;- zpracovaní přijatých dat ------------------------------------

		COMF		datt,1		;inverze datt
		MOVLW		b'00000001'	;výchozí pozice
		MOVWF		pocet		;maskovacího bitu počet
		MOVF		datt,0
		ANDLW		b'00000111'	;maskovaní na hodnotu 0-7
		MOVWF		tatt		;bity b3-b7 se vynulují 
		
repe		MOVF		tatt,1		;nastavení maskovacího
		BTFSC		STATUS,Z	;bytu počet 
		GOTO		output
		BCF		STATUS,C
		RLF		pocet,1
		DECF		tatt,1
		GOTO		repe

output		MOVF		datt,0		;rozhodnutí zda se
		ANDLW		b'10000000'	;má bit nulovat
		BTFSC		STATUS,Z	;nebo nastavit
		GOTO		output0

output1		MOVF		pocet,0		;maskování portu
		IORWF		PORTB,1		;na nastavení bitu
		GOTO		zacatek
				

output0		COMF		pocet,0		;maskování portu
		ANDWF		PORTB,1		;na nulování bitu
		GOTO		zacatek

;- podprogram prodlevy ---------------------------------------------

prodleva	MOVLW		63
		MOVWF		c1
wait		DECFSZ		c1,1
		GOTO		wait
		RETURN	
				
		END
