;	Sender maaling fra ADC, morset som byte
;	Resultat skiftes ud en bit ad gangen.

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

processor	10F322
include		p10f322.inc

	__CONFIG _WDTE_OFF & _FOSC_INTOSC

; Variablen ved navn en 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	bsf	ANSELA, ANSA2	; Port 2 = analog input
	movlw	B'11111100'
	movwf	TRISA		; Port 0 og 1 is output, port 2 er input.
	movlw	B'00000111'	; Fosc/4 and PSA and prescaler = 1:256
	movwf	OPTION_REG	; Prescaler settings
	movlw	B'10101001'	; Fosc/16, Port 2 = analog in,  GO/Done off, ADON enable
	movwf	ADCON
	call	delay		; Delay until Go/Done steady (RTM)

run	bsf	ADCON,GO_NOT_DONE	; Start A/D convert
a3	btfsc	ADCON,GO_NOT_DONE	; Wait until result ready
	goto	a3
	movfw	ADRES			; Get result fra ADC -> register W
	movwf	tmp2
	call	send8
	call	pause2
	goto	run

;       Send en byte
send8	movlw   0x09	; Der skal roteres 8 bit ud gennem carry
        movwf   k
a2      DECFSZ  k,1
        goto    a1
        return
a1	RLF     tmp2,1
        BTFSC   STATUS,C        ; Test carry, skip hvis clear
	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

