; Példaprogram v1.0b
; Felhasználható PIC-ek módosítás nélkül: 
	;PIC16F27A,628A,628
; A megfelelő PIC headerfájl sorok elől a megjegyzéseket ki kell venni. 
; Az MPLAB projectben a megfelelő PIC-et ki kell választani.

; Funkció: 
	;PIC-PC soros kommunikáció
; Leírás: 
;	Megszakítás nélküli adat vétel a PC-ről, majd a vett adatok azonnali visszaküldése
; 	A vett adatok nem kerülnek letárolásra és feldolgozásra sem.
; 	A példa a konfigurációt, az USART beállítását, a Makrók használatát és a Reset pont megfelelő kialakítását mutatja be.
; 	Az RX_OK és a TX_OK rutinok nincsenek felkészítve a soros adat elmaradása ill. hibája esetén elmaradó feltételek helyes lekezelésére, 
;	ezért más programokban való felhasználásra csak korlátozottan alkalmas. 

 

;	LIST P=16F627A, F=INHX32	
;	#include <P16F627A.INC>	

	LIST P=16F628, F=INHX32	
	#include <P16F628.INC>
	
;	LIST P=16F628A, F=INHX32	
;	#include <P16F628A.INC>	


;----------------------------------------------------------
;--				CONFIGURÁCIÓS BITEK BEÁLLÍTÁSA			 --	
;----------------------------------------------------------	
	__CONFIG _INTRC_OSC_NOCLKOUT&_WDT_OFF&_CP_OFF&_PWRTE_ON&_MCLRE_OFF&_LVP_OFF&_BODEN_OFF


;----------------------------------------------------------
;--							MAKRÓK						 --	
;----------------------------------------------------------
BANK0	MACRO
	BCF		STATUS,RP0
	BCF		STATUS,RP1
	ENDM
BANK1	MACRO
	BSF		STATUS,RP0
	BCF		STATUS,RP1	
	ENDM



;----------------------------------------------------------
;--						.RESET PONT.					 --	
;----------------------------------------------------------
	ORG	0X0000
	GOTO	INI
	ORG	0X0004
	GOTO	MEGSZAK
	

;----------------------------------------------------------
;--					PORTOK BEÁLLÍTÁSA					 --	
;----------------------------------------------------------
INI
	BANK1
	MOVLW	B'11111011'				; RB0->kettőspont, RB1->RX BE, RB2->TX KI, 
	MOVWF	TRISB					
	MOVLW	B'11111111'				; MIND BEMENET, 
	MOVWF	TRISA
		
	BSF		PCON,OSCF				; 4MHz belső RC oszci			(B1)
	CLRF	VRCON					; Referencia feszültségeket beállító reg.

;	USART Beállítása
	CALL	PIC_COMM_SET			; BANK0-AL TÉR VISSZA


;----------------------------------------------------------
;--						 FŐ CIKLUS 						 --	
;----------------------------------------------------------
DO
	CALL 	RX_OK			; VÉTEL KÉSZ?
	MOVF	RCREG,W			; VETT ADAT W-BE
	
	CALL	TX_OK			; ADÁSRA KÉSZ?
	MOVWF	TXREG			; VETT ADAT VISSZAKÜLDÉSE
	GOTO 	DO



;----------------------------------------------------------
;--					 USART BEÁLLÍTÁSA 					 --	
;----------------------------------------------------------
PIC_COMM_SET

	#DEFINE	orajel	D'4000000'	
	#DEFINE	BAUD(X)	((orajel/X)/D'16')-1	; X-BE IRANDÓ A BAUD RATE KIVANT ERTEKE, BRGH = 1 !!
;	#DEFINE	BAUD(X)	((orajel/X)/D'64')-1	; X-BE IRANDÓ A BAUD RATE KIVANT ERTEKE, BRGH = 0 !!
	; RÉSZLETEK AZ ADATLAP TÁBLÁZATAIBAN		
	
	BANK1
	MOVLW	BAUD(D'9600') 		; BAUD RATE BEALLITASA
	MOVWF	SPBRG

						; ADÁS (TXSTA) beállításai	
	BCF		TXSTA,TX9			; 8 BITES ÁTVITELI MÓD BEÁLLÍTVA
	BSF		TXSTA,TXEN			; TRANSMIT ENGEDÉLYEZÉS
	BCF		TXSTA,SYNC			; Asynchronous mode	
	BSF		TXSTA,BRGH			; BaudRate tartomány 
	;		TXSTA,TRMT : Transmit Shift Register Status bit
	;		TXSTA,TX9D : 9th bit of Transmit Data / Can be address/data bit or a parity bit	(9. BIT HELYE)

						; VÉTEL (RCSTA) beállításai
	BANK0
	BSF		RCSTA,SPEN			; SOROS PORT ENGEDÉLYEZÉSE
	BCF		RCSTA,RX9			; 8-bites VÉTELI MÓD 
	BSF		RCSTA,CREN			; Continuous Receive Enable bit	ENGEDÉLYEZÉSE
	BCF		RCSTA,ADEN			; Address Detect Enable bit 
			; 1 = Enables address detection, enables interrupt and load of the receive buffer when RSR<8> is set
			; 0 = Disables address detection, all bytes are received, and ninth bit can be used as parity bit
			; Ha ez a bit be van kapcsolva, akkor soros megszakítás csak akkor van, ha a 9. bit 1!
		
	;		RCSTA,FERR : Framing Error bit (KERET HIBA)
		;		1 = Framing error (can be updated by reading RCREG register and receive next valid byte)
		;		0 = No framing error
	
	; 		RCSTA,OERR: Overrun Error bit  (ELÁRASZTÁST JELEZŐ BIT)
		;		1 = Overrun error (can be cleared by clearing bit CREN)
		;		0 = No overrun error
	; 		RX9D: 9th bit of Received Data (A FOGADOTT 9.-BIT VAN BENNE)
		; 		Can be address/data bit or a parity bit
	RETURN

	
;----------------------------------------------------------
;--		 USART ADÁS ELŐTTI BUFFER VIZSGÁLAT				 --	
;----------------------------------------------------------
TX_OK	
	BANK1
BUFFER_T
	BTFSS	TXSTA,TRMT			; ADÁS MŰVELET KÉSZ? BUFFER Empty (Üres) BIT = 1
	GOTO	BUFFER_T
	BANK0
	RETURN						; BUFFER KIÜRÜLT				


;----------------------------------------------------------
;--			USART VÉTEL LEHETŐSÉGÉT VIZSGÁLJA			 --	
;----------------------------------------------------------
RX_OK						
	BTFSS	PIR1,RCIF			; VÉTEL MEGSZAKÍTÁS FLAG BIT (HA A VÉTEL TELJES, A BIT = TRUE)
	GOTO	RX_OK
	RETURN						; LEHET VENNI
	
	
;............ MEGSZAKÍTÁS LEKEZELÉSE ..................	
MEGSZAK
	RETFIE	
	
	END