; 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,
	#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

		CBLOCK	0X020
						
				
						T1										
						T2	
						T3
						T4
						T5
						T6
						T7
						T8
						VAR1
						VAR2
						K1	
						TS1
					
				ENDC

;----------------------------------------------------------
;--						.RESET PONT.					 --	
;----------------------------------------------------------
	ORG	0X0000
	GOTO	INI
	ORG	0X0004
	GOTO	MEGSZAK
	

;----------------------------------------------------------
;--					PORTOK BEÁLLÍTÁSA					 --	
;----------------------------------------------------------
INI
	BANK1
	MOVLW	B'11110011'				; RB0->kettőspont, RB1->RX BE, RB2->TX KI, 
	MOVWF	TRISB					
	MOVLW	B'11110011'				; 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 						 --	
;----------------------------------------------------------



;--------------------- "CR" FELTÖLTÉSE A TS1 TÁROLÓ REGISZTERBE ----------------------------


	MOVLW	H'00D'						; "CR"
	MOVWF	TS1	




;----------------------- FŐPROGRAM ------------------------------------------------------

	

DO	


	
	CALL 	RX_OK		
	MOVF	RCREG,W
	
	MOVWF	K1
	MOVF	TS1,W
	SUBWF	K1,W
	BTFSS	STATUS,Z
	GOTO	DO


	BSF		PORTB,3

	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	


PRELL						
				MOVLW	D'180'
				MOVWF	VAR1		
PRE1
				MOVLW	D'180'
				MOVWF	VAR2
PRE2
				NOP
				DECFSZ	VAR2,F
				GOTO	PRE2	
				DECFSZ	VAR1,F
				GOTO	PRE1
				RETURN	

;------------------------------------------------------------------------- DELAY3 KÉSLELTETÉS ----------------------------------------------------------------

					
DELAY3			
				MOVLW	d'255'
				MOVWF	T1
				MOVLW	d'255'
				MOVWF	T2
				MOVLW	d'003'
				MOVWF	T3
				MOVLW	d'001'
				MOVWF	T4
			
DEL33
				NOP
				NOP
				NOP
				NOP	
				NOP
				NOP
				NOP
				NOP
				NOP
				NOP
	
DEL44	
				DECFSZ	T2,f
				GOTO	DEL44
				DECFSZ	T1,f
				GOTO	DEL33
				

DEL444			DECFSZ	T4,f
				GOTO	DEL444
				DECFSZ	T3,f
				GOTO	DEL33

				RETURN

ID			
			
			
				MOVLW	'A'						; "A"
				MOVWF	TXREG						
				CALL 	TX_OK
		
				MOVLW	'T'						; "T"
				MOVWF	TXREG
				CALL 	TX_OK
			
				MOVLW	'+'						; "+"
				MOVWF	TXREG
				CALL 	TX_OK
			
				MOVLW	'C'						; "C"
				MOVWF	TXREG
				CALL 	TX_OK
		
				MOVLW	'L'						; "L"
				MOVWF	TXREG						
				CALL 	TX_OK
		
				MOVLW	'I'						; "I"
				MOVWF	TXREG
				CALL 	TX_OK
		
				MOVLW	'P'						; "P"
				MOVWF	TXREG
				CALL 	TX_OK
		
				MOVLW	'='						; "="
				MOVWF	TXREG
				CALL 	TX_OK
		
				MOVLW	'1'						; "1"
				MOVWF	TXREG
				CALL 	TX_OK
		
			
				MOVLW	H'00D'						; "CR(CARRIAGE RETURN" (ENTER)
				MOVWF	TXREG
				CALL 	TX_OK	
	
			
			
				RETURN

FORMAT

		
			
			
				MOVLW	'A'						; "A"
				MOVWF	TXREG						
				CALL 	TX_OK
		
				MOVLW	'T'						; "T"
				MOVWF	TXREG
				CALL 	TX_OK
			
				MOVLW	'+'						; "+"
				MOVWF	TXREG
				CALL 	TX_OK
			
				MOVLW	'I'						; "C"
				MOVWF	TXREG
				CALL 	TX_OK
		
				MOVLW	'P'						; "L"
				MOVWF	TXREG						
				CALL 	TX_OK
		
				MOVLW	'R'						; "I"
				MOVWF	TXREG
				CALL 	TX_OK
		
		
		
				MOVLW	'='						; "="
				MOVWF	TXREG
				CALL 	TX_OK
		
				MOVLW	'0'						; "1"
				MOVWF	TXREG
				CALL 	TX_OK
		
				MOVLW	H'00D'						; "CR(CARRIAGE RETURN" (ENTER)
				MOVWF	TXREG
				CALL 	TX_OK	
	
			
			
				RETURN



ATI



				CALL	PRELL
				MOVLW	'A'						; "A"
				MOVWF	TXREG						
				CALL 	TX_OK
				MOVLW	'T'						; "T"
				MOVWF	TXREG
				CALL 	TX_OK
				MOVLW	'I'						; "+"
				MOVWF	TXREG
			
			
				MOVLW	H'00D'						; "CR(CARRIAGE RETURN" (ENTER)
				MOVWF	TXREG
				CALL 	TX_OK	

				RETURN



				END


	K6
						K7
						K8
						K9
						K10	
						K11
						K12
						K13