;	Sender maaling fra internt temp, morset som nul og et taller
;	Resultat skiftes ud til.

;	gpasm -a inhx8m morse3.asm
;	Port 1 ON/OFF
;	Port 2 ADC ind
;	DB Henrik Kressner

processor	10F322
include		p10f322.inc

	__CONFIG _WDTE_OFF & _FOSC_INTOSC

; Her er det tanken variablen 1 har fem tegn, prik streg,streg,streg og streg o.s.v.

i	org	0x40	; General purpose registers start at 0x40
j	org	0x41
k	org	0x42
tmp	org	0x43
tmp2	org	0x44
nul     EQU     B'11111111'
en	EQU 	B'01111111'
to      EQU     B'00111111'
tre     EQU     B'00011111'
fire    EQU     B'00001111'
fem     EQU     B'00000111'
sex     EQU     B'10000111'
syv     EQU     B'11000111'
otte    EQU     B'11100111'
ni      EQU     B'11110111'


	org	H'00'  	; Reset vector
	goto	setup

	org	H'05'
setup	movlw	B'00000101'
	movwf	ANSELA          ; Port 0 og 2 er analog input
	movlw	B'11111101'
	movwf	TRISA		; Port 1 is output, port 0 og 2 er input.
	movlw	B'00000111'	; Fosc/4 and PSA and 1:256
	movwf	OPTION_REG	; Prescaler settings
	bsf	FVRCON, TSRNG	; Hoej oplosning (temp indikator)
	bsf	FVRCON, TSEN	; Aktiver intern temp indikator
	movlw	B'10111001'	; Fosc/16, internt temp indikator,  GO/Done off, ADON enable
	movwf	ADCON
	clrf	i		; Delay until Go/Done steady
hop	decfsz	i,1
	goto	hop

run	bsf	ADCON,GO_NOT_DONE	; Start A/D convert
	call	delay			; Er aabenbart nodvendig ?
	btfsc	ADCON,GO_NOT_DONE	; Wait until result ready
	goto	run
	movfw	ADRES			; Get result -> register W
	movwf	tmp2
	call	send8
	call	pause2
	goto	run
	; Saa er vi klar til at skifte de 8 bit ud


;       Roter 8 gange.
send8	movlw   0x09
        movwf   k
a2      DECFSZ  k,1
        goto    a1
        return
a1	RLF     tmp2,1
        BTFSC   STATUS,C        ; Test carry, skip hvis clear
        ; send 1
	goto	jmp1

jmp0	movlw	nul	; send 0
	movwf	tmp
	call	send
        call    pause2
	goto	a2

jmp1	movlw	en	; send 1
	movwf	tmp
	call	send
	call	pause2
	goto	a2

;	Roter 5 gange.
send	movlw	0x06
	movwf	j
s2	DECFSZ	j,1
	goto	c1
	return
c1	movfw	tmp
	RLF	tmp,1
	BTFSC	STATUS,C	; Test carry, skip hvis clear
	goto	streg

prik	bsf     PORTA, RA1      ; Port1 on
        call    pause1
        bcf     PORTA, RA1      ; Port1 off
        call    pause1
	goto	s2

streg	bsf     PORTA, RA1      ; Port1 on
        call    pause2
        bcf     PORTA, RA1      ; Port1 off
        call    pause1
        goto	s2


pause1	movlw	0x02
	movwf	i
l2	call	delay
	decfsz	i,1
	goto	l2
	return

pause2  movlw   07
        movwf   i
l3      call    delay
        decfsz  i,1
        goto    l3
        return


delay	clrf	TMR0
	bcf     INTCON, TMR0IF	; Enable timer1
l1	btfss   INTCON, TMR0IF	; Timer overflow ?
	goto	l1
	return

	end

