
; Funkció: 
;	PIC  soros kommunikáció tesztje, az RX - TX lábak hurokba kötésével. A program kettős feltételes elágazással teszteli és kijelzi az adat megérkezését és helyességét.

; Leírás: 
;	A "TS1" regiszterbe feltöltjük  a "referencia" értéket, majd ugyanezt a karaktert elküldjük a soros vonalon. A vételi oldalon megjelenő adatot letároljuk a "K1" regiszterbe, majd a két regiszter 
;	(TS1 és K1) értékét kivonással összehasonlítjuk. Az eredmnényt a PORTA,3 és a PORTB,3 kimenetekre kötött vörös és zöld LED ek jelzései jelzik ki.
; 	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. 

 ;Megjegyzés:
;	Ez a program Watt "SorosPortPelda_16F627.asm" forrásának részben átírt, módosított változata.



	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

				CBLOCK	0X020
						VAR1
						VAR2
						S1					; 24 BITES SZÁMLÁLÓ CIKLUS 1. REGISZTERE 
						S2					; 24 BITES SZÁMLÁLÓ CIKLUS 2. REGISZTERE 
						S3					; 24 BITES SZÁMLÁLÓ CIKLUS 3. REGISZTERE 
						K1					; IDE KERÜL RCREG ÉRTÉKE
						TS1					; "REFERENCIA" ÉRTÉK
						STATUS_TEMP			; INT SAVE REGISZTER ("STATUS")
						W_TEMP				; INT SAVE REGISZTER ("W")
				ENDC

;---------------------------------------------------------- RESET PONTOK KIJELÖLÉSE --------------------------------------------
			
				ORG	0X0000
				GOTO	INI
				ORG	0X0004
				GOTO	INT
	


;---------------------------------------------------------- PIC INICIALIZÁLÁSA -------------------------------------------------

INI
				BANK1
				MOVLW	B'11110011'			
				MOVWF	TRISB					
				MOVLW	B'11110011'			 
				MOVWF	TRISA
				BSF		INTCON,GIE
				BSF		INTCON,PEIE
						
				BSF		PCON,OSCF				; 4MHz belső RC oszci		
				CLRF	VRCON					; Referencia feszültségeket beállító reg.
			
		
				CALL	PIC_COMM_SET		

				CLRF	PORTB
				CLRF	PORTA

			

;--------------------- "REFERENCIA" FELTÖLTÉSE (ESETÜNKBEN ASCII "CR" KARAKTER) A TS1 TÁROLÓ REGISZTERBE ----------------------------


				MOVLW	0x0D						; (SCII "CR")
				MOVWF	TS1	
		
			

;------------------------------------------------------------------------------------------------------------------------------------		
			
			
BEKAPCS			BSF		PORTA,2						;GSM  MODUL BEKAPCSOLÁSA "PWRKEY" BEMENETEN KERESZTÜL
			
				MOVLW 	0x01 	;W =  255			;KB 2 SEC KÉSLELTETÉS
			  	MOVWF	S1 		;S3 = 255
			   	MOVLW 	0x01 	;W =  255
			  	MOVWF 	S2		;S3 = 255
			  	MOVLW 	0x09	;W =  255
			  	MOVWF 	S3 		;S3 = 255
		
				CALL	T1

				BCF		PORTA,2
			
			
				
			
			
;----------------------- GSM MODUL AUTO BAUD RATE JÉNEK BEÁLLÍTÁSA TETSZŐLEGES "AT" PARANCSOK KÜLDÉSÉVEL -----------------------
			
;				CALL	AT
;				CALL	AT
;				CALL	AT
;				CALL	AT
		 



			
;-------  FŐPROGRAM -------
	X			CALL	T1
				CALL	VILL
				GOTO	X

;------ MEGSZAKÍTÁS --------


INT



;-------------------------------------------------------------- REGISZTEREK MENTÉSE ------------------------------------------

				BANK0
				MOVWF 	W_TEMP   			
				SWAPF	STATUS,W			
				MOVWF 	STATUS_TEMP 			
	
;------------------------------------------------------ MEGSZAKÍTÁSBAN VÉGREHAJTANDÓ FELADAT -----------------------------------


				BTFSS	PIR1,RCIF					;USART VÉTELI MEGSZAKÍTÁS?
				GOTO	OUT							;NEM, KILÉPUNK A MEGSZAKÍTÁSBÓL

			
			  	movlw 	0x20 	;
			  	movwf 	FSR 	;
ujra 			clrf 	INDF 	;a közvetve kijelölt memóriahely törlése
			  	incf 	FSR,F 	;
			  	btfss 	FSR,7 	;
			  	goto 	ujra 	;ugrás, ha a cím < 2Fh
			






				BSF		STATUS,IRP 						;a 2-3 . lappár kiválasztása
				MOVLW 	0X120 							;a 120h kezdőcím bevitele a munkaregiszterbe
				MOVWF 	FSR 							;a kezdőcím bevitele a címregiszterbe
NEXT 			MOVF 	RCREG,W 						;RCREG MENTÉSE A W BE
				MOVWF	INDF							;W BŐL AZ INDF BE
				INCF 	FSR 							;a címregiszter növelése 1-gyel
				BTFSS 	FSR,7 							;a címregiszter vizsgálata (ELÉRTE A 140h -t ?)
				GOTO 	NEXT 							;NEM, FOLYTATJUK AZ RCREG MENTÉSÉT
														;IGEN, TOVÁBB....



		







			
;--------------------------------------------------------- REGISZTER MENTÉSEK VISSZAÁLLÍTÁSA -----------------------------------
OUT		
		
			
				SWAPF	STATUS_TEMP,W				
				MOVWF 	STATUS
				SWAPF	W_TEMP,F
				SWAPF	W_TEMP,W
			
				RETFIE									;VISSZA A PROGRAMBA
	


;----SZUBRUTINOK -----



;----------------------------------------------- USART BEÁLLÍTÁSA  ------------------------------------------------------
PIC_COMM_SET

		
				
				BANK1
				MOVLW	D'25'				;BAUD RATE 9600
				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 
			
				BSF		PIE1,5				; USART VÉTELI MEGSZAKÍTÁS ENGEDÉLYEZÉSE



;---------------------------------------------- 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, HA "1" AKKOR  A VÉTELI PUFFER TELE VAN)
					;		1 = VÉTELI PUFFER TELE  (A "RCSTA,CREN" BIT "0" BA ÁLLÍTÁSÁVAL TÖRÖLHETŐ)
					;		0 = NINCS VÉTELI PUFFER HIBA
			
				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
				MOVF	RCREG,W
			
				RETURN						; LEHET VENNI
				
	

;----------------------------------------------------------------- KÉSLELTETÉS 0,5 SEC ---------------------------------------
		
T1			
		

A	 			DECFSZ 	S1,1 	;S1 = S1 - 1; zérus vizsgálat
			  	GOTO 	A	 	;visszaugrik, ha S1 nem nulla
			
			  	DECFSZ 	S2,1 	;S2 = S2 - 1; zérus vizsgálat
			  	GOTO	A	 	;visszaugrik, ha S2 nem nulla
			
				DECFSZ 	S3,1 	;S2 = S2 - 1; zérus vizsgálat
			  	GOTO	A	 	;visszaugrik, ha S2 nem nulla
			
			 	RETURN

			 
;---------------------------------------------------------------------- ASCII "AT" KÜLDÉSE ---------------------------------

AT				MOVLW	H'041'						; "A"
				MOVWF	TXREG						
				CALL 	TX_OK
				MOVLW	H'054'						; "T"
				MOVWF	TXREG
				CALL 	TX_OK

				MOVLW	H'00D'						; "CR(CARRIAGE RETURN" (ENTER)
				MOVWF	TXREG
				CALL 	TX_OK	

				RETURN

;--------------------------------------------------------------- GSM MODUL SOROS "ECHO MODE" TILTÁSA ---------------------------

ATE
				MOVLW	H'041'						; "A"
				MOVWF	TXREG						
				CALL 	TX_OK
				MOVLW	H'054'						; "T"
				MOVWF	TXREG
				CALL 	TX_OK
				MOVLW	H'045'						; "E"
				MOVWF	TXREG
				CALL 	TX_OK
				MOVLW	H'030'						; "0"
				MOVWF	TXREG
				CALL 	TX_OK
			
			
				MOVLW	H'00D'						; "CR(CARRIAGE RETURN" (ENTER)
				MOVWF	TXREG
				CALL 	TX_OK	

				RETURN				

;------------------------------------------------------------------------------------------------------------------------------------

VILL
				BSF		PORTB,3
				CALL	PRELL	
			
				BCF		PORTB,3
				
			
				RETURN



PRELL								
				MOVLW	D'255'	
				MOVWF	VAR1		
PRE1
				MOVLW	D'255'
				MOVWF	VAR2
PRE2
				NOP
				DECFSZ	VAR2,F
				GOTO	PRE2	
				DECFSZ	VAR1,F
				GOTO	PRE1
				RETURN

				END

Számláló regiszterek értékadása


				MOVLW 	0xFF 	;W =  255
			  	MOVWF	S1 		;S3 = 255
			   	MOVLW 	0xFF 	;W =  255
			  	MOVWF 	S2		;S3 = 255
			  	MOVLW 	0xFF 	;W =  255
			  	MOVWF 	S3 		;S3 = 255