;	Sender en streng op asynk (RS232)
;	HUSK at disable hardware handshake og flush buffer hos modtager.
;	Opgraderet med aktiv Rx 14 maj 2026
;	DB Henrik Kressner

;	gpasm -a inhx32 seriel4.asm

	processor       16f1509
	include         p16f1509.inc

errorlevel -302

	#include	<config2.inc>

cblock 0x70
	a, tmp
endc

	ORG	0x0000
	goto	init

	org	05
init:	movlb	1               ; Bank 1
		movlw   B'01111011'     ; 16 Mhz, Intern osc.
		movwf   OSCCON
		clrf	TRISB		; Hele B er digital
		bsf	TRISB,RB5	; Rx er input
		movlb	3		; Bank 3
		clrf	ANSELB		; Port B er Digital
		; Set baudrate for 115.200 ->
		; BRG16 = 1  :  BRGH = 1  :  SPBRG = 34
		movlb 	3		; BAUDCON er i bank 3
		movlw	B'00001000'
		movwf	BAUDCON		; BRG16 = 1
		movlb	3		; SPBRG er i bank 3
		movlw	D'34'
		movwf	SPBRGL
		bsf	TXSTA, BRGH		; High Baud Rate Select bit
		bsf	TXSTA, TXEN		; Transmit enabled
		bcf	TXSTA, SYNC		; Async
		bsf	RCSTA, SPEN		; Serial Port Enable bit
		bsf	RCSTA, CREN		; Enable Rx

		movlw	0
		movwf	tmp
run:	movfw	tmp
		call	data1
		movwf	a
		call	Tx
		incf	tmp,1
		movfw	a
		sublw	'\0'
		btfss	STATUS,Z
		goto	run
		call	Rx
		goto	run

loop:	goto	loop

Rx:		banksel	PIR1
		btfss	PIR1,RCIF	; Er der noget
		goto	$-1
		banksel	RCSTA
		movfw	RCREG		; Laes byte
		return

Tx:		movlb	3
		btfss	TXSTA, TRMT	; Er der plads ?
		goto	$-1
		movwf	TXREG
		return

data1:	addwf   PCL,1
		DT "Hallo verden",'\n','\r','\0'         ; LF + CR + EOL

	end
