;Program-37) USART arabirimi ile PIC16F628A’dan bilgisayara veri gönderme 
;işlemine örnek program. Şekil 16-15’deki görülen devreye göre RA0 butonuna 
;her basıldığında önceden tanımlanan 8 bit’lik veri paketleri ardı ardına 
;gönderilerek bilgisayar ekranında “ALTAS” yazdırır.  

;===PROG37.ASM====12/09/2005================================
	LIST	P=16F628A
	INCLUDE	"P16F628A.INC"     
	__CONFIG _INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_ON & _MCLRE_ON & _BODEN_OFF & _LVP_OFF & _DATA_CP_OFF & _CP_OFF
;-----------------------------------------------------------
ORG 	h'0000'
SAYAC	EQU	h'20'
SAYAC1	EQU	h'21'
SAYAC2	EQU	h'22'
MOVLW	H'07'		;PortA’nın uçları sayısal I/O
MOVWF	CMCON		;CMCON saklayıcısına yaz
CLRF		PORTA		;PORTA uçlarını sıfırla
CLRF		PORTB		;PORTB uçlarını sıfırla
BANKSEL	TRISA		;BANK1’e geç
MOVLW	h'FF'		;PORTA’nın tüm uçları giriş
MOVWF	TRISA		
MOVWF	b'11111011'	;RB1/RX=giriş, RB2/TX=çıkış
MOVWF	TRISB
MOVLW	d'25'		;9600 baud rate’lik hız için
MOVWF	SPBRG		;25 desimal sayısı yükle
MOVLW	b'00100100'	;BRGH=1, TXEN=1 (gönderme aktif)
MOVWF	TXSTA
BANKSEL	PORTB		;BANK0’e geç
BSF		RCSTA,SPEN	;SPEN=1 (seri iletişim aktif)
CLRF		SAYAC
DONGU		;--------Kısa bir süre bekletme döngüsü------
	DECFSZ	SAYAC,F
	GOTO		DONGU
TEST_RA0		;-------- RA0 ucuna basma kontrolü döngüsü----
	BTFSS	PORTA,0	;RA0 butonuna basıldı mı?
	CALL		MESAJ	;Evet, MESAJ alt programına git.
	CALL		GECIKME	;Buton arkının sönmesini bekle
GOTO		TEST_RA0	;Hayır, RA0 butonunu tekrar test et.
MESAJ	;--------Mesaj gönderme alt programı--------------
	BSF		PORTB,2	;RB2/TX ucunu start “1” durumunda.
	MOVLW	'A'		;”A” harfinin ASCII karşılığı h’65’
	CALL 	GONDER   ;8 bit’lik b’01000001’ sayısını gönder 
	MOVLW	'L'		; h’76’ sayısını W’ye yükle.
	CALL 	GONDER   ;8 bit’lik b’01001100’ sayısını gönder
	MOVLW	'T'		;h’84’ sayısını W’ye yükle.
	CALL 	GONDER
	MOVLW	'A'		;h’65’ sayısını W’ye yükle.
	CALL 	GONDER
	MOVLW	'S'		;h’83’ sayısını W’ye yükle.
	CALL 	GONDER
	MOVLW	h'0D'	;Satır sonu işareti W’ye yükle.
	CALL 	GONDER
	MOVLW	h'0A'	;Satır başına geç işareti W’ye yükle.
	CALL		GONDER
	RETURN			;Alt programdan dön.
GONDER ;------TXREG’den STA’ya veri yükleme alt programı-----
	MOVWF	TXREG	; W’deki sayıyı TXREG’e yükle
	BANKSEL	TXSTA	; BANK1’e geç
VERI_SONU_TEST
	BTFSS	TXSTA,TRMT	;STA’ya veri gönderme bitti mi?
	GOTO		VERI_SONU_TEST		;Hayır, tekrar test et
	BANKSEL	PORTB			;Evet, BANK0’a geç ve 
	RETURN					;Alt programdan dön.
GECIKME	;Gecikme alt programı
	MOVLW	h'FF'
	MOVWF	SAYAC1
DONGU1
	MOVLW	h'FF'
	MOVWF	SAYAC2
DONGU2
	DECFSZ	SAYAC2, F
	GOTO	DONGU2
	DECFSZ	SAYAC1, F
	GOTO	DONGU1
	RETURN
	END
;-----------------------------------------------------------
