;Beacon.asm     11 12 24
;ver 0
;
;SM7UCZ, Johnny Apell

;PROGRAM FÖR ATT STYRA EN BEACONSÄNDARE SOM SÄNDER: 
;
;"SM7UCZ/SPUTNIK BEACON INFO WWW.SM7UCZ.SE"
;
;VÄNTAR LITE OCH SEN SÄNDER IGEN.
;PINNE GP2 STYR SÄNDAREN


;PIC-krets 12F675 med RC oscillator r=4-100k C=1nF, med R kan klockhastigheten
;justeras och därmed morsehastigheten.
;Varför den kretsen?...Den fanns i lådan...

;pinnarnas fördelning på kretsen 12F675

;Pinne 1 = +V
;Pinne 2 = GP5 RC oscillatorn
;Pinne 3 = GP4 anv ej
;Pinne 4 = GP3 anv ej
;Pinne 5 = GP2 styr sändaren
;Pinne 6 = GP1 anv ej
;Pinne 7 = GP0 anv ej
;Pinne 8 = 0V



;Ingen Watchdog eller andra finesser


;########################################################################

;Här börjar programmet

        list    p=12F675        ;val av processor
		#include <p12f675.inc>  ; processor specific variable definitions
		__CONFIG B'11000000010110'  ;ställ no watchdog, RC-osc, osv...
		
        org     0                ;reset och power on startadress
        goto    init             ;gå till initiering av kretsen...längst ner på sidan.

;----------------------------------------------------------------------------
;Subrutin för prick i morse-signalering

dot	    bsf     5,2             ;sätt utgång för morseton pinne GP2
	    call    delay1          ;tid för en pricks längd
        bcf     5,2             ;stäng av morsetonen      pinne GP2
        call    delay1          ;tid efter pricken, paus innan nästa tecken
        return                  ;tebaks dit anropet kom ifrån
;----------------------------------------------------------------------------
;Subrutin för streck i morse-signalering

dash	bsf     5,2             ;sätt utgång för morseton  pinne GP2
        call    delay3          ;tid för ett strecks längd
        bcf     5,2             ;stäng av morsetonen       pinne GP2
        call    delay1          ;tid efter strecket,  paus innan nästa tecken
        return                  ;tebaks dit anropet kom ifrån
;----------------------------------------------------------------------------
;Subrutin för en pricks längd, dot time
;tidsfördröjning   låt register 20 räkna 255 gånger

delay1  clrf    20              ;rensa register 20  =0
loop1   decfsz  20,1            ;minska reg 20 med ett och kolla om det är 0
        goto    loop1           ;om inte 0 gå ett varv till runt loop1
        return                  ;tebaks till dit anropet kom ifrån
;----------------------------------------------------------------------------
;Subrutin för ett strecks längd, även avstånd mellan bokstäver, dash time

delay3  call    delay1          ;anropa en pricks fördröjning 3 ggr
        call    delay1
        call    delay1
        return                  ;tebaks dit anropet kom ifrån

;----------------------------------------------------------------------------
		
ton		bsf		5,2				;lägg ut en lång ton, long beep
		movlw	.100			;välj mellam .1 - .255 (. =decimaltal)
		movwf	25		
		decfsz	26,1			;låt registren räkna...det tar tid...
		goto	$-1
		decfsz	25,1
		goto	$-3
		bcf		5,2				;stäng av tonen
		return					;tillbaka till main
;-------------------------------------------------------------------------------
wait	movlw	.100			;vänta en stund innan nästa sändningspass, waiting time
		movwf	25				;välj mellan .1 - .255 som paustid
		decfsz	26,1
		goto	$-1				;låt registren räkna och förbruka tid
		decfsz	25,1
		goto	$-3
		return					;tillbaka till main

;-------------------------------------------------------------------------------
;Huvudprogrammet!!! Mainprogram
;Här snurrar programmet efter uppstart, och hoppar ut till berörda subrutiner

main    
		call	ton			;skicka en lång ton, long beep
		call	delay3		;hia sig lite innan texten sänds, wait a little
		call	delay3
		call	delay3
		call    text		;sänd texten
      	call	wait		;vänta mellan passen
        goto    main    	;ett nytt varv i mainprogrammet

;---------------------------------------------------------------------------
						;Här är texten som sänds.... 


text    call    _S	          
        call    _M       
        call    _7          
        call    _U  		
		call    _C
		call	_Z         
        call	_slash
		call	_S
		call	_P
		call	_U
		call	_T
		call	_N
		call	_I
		call	_K
        call    delay3		  	;ordmellanrum
		call	delay3

	    call    _B			
		call	_E
		call	_A
        call	_C
		call	_O
		call	_N
		call	delay3
		call	delay3
		call	delay3
		call	delay3

		call	_I
		call	_N
		call	_F
		call	_O
		call	delay3
		call	delay3

		call	_W
		call	_W
		call	_W
		call	_.
		call	delay3
		call	delay3

		call	_S
		call	_M
		call	_7
		call	_U
		call	_C
		call	_Z
		call	_.
		call	_S
		call	_E
		call	delay3
		call	delay3
		call	delay3
			
        return                  ;tebaks till main



;******************************************************************************************
;Alfabetet....lite lättare ovan att ändra texten

_A		call	dot
		call	dash
		call	delay3
		return

_B		call	dash
		call	dot
		call	dot
		call	dot
		call	delay3
		return

_C		call	dash
		call	dot
		call	dash
		call	dot
		call	delay3
		return

_D		call	dash
		call	dot
		call	dot
		call	delay3
		return

_E		call	dot
		call	delay3
		return

_F		call	dot
		call	dot
		call	dash
		call	dot
		call	delay3
		return

_G		call	dash
		call	dash
		call	dot
		call	delay3
		return

_H		call	dot
		call	dot
		call	dot
		call	dot
		call	delay3
		return

_I		call	dot
		call	dot
		call	delay3
		return

_J		call	dot
		call	dash
		call	dash
		call	dash
		call	delay3
		return

_K		call 	dash
		call	dot
		call	dash
		call	delay3
		return

_L		call	dot
		call	dash
		call	dot
		call	dot
		call	delay3
		return

_M		call	dash
		call	dash
		call	delay3
		return

_N		call	dash
		call	dot
		call	delay3
		return

_O		call	dash
		call	dash
		call	dash
		call	delay3
		return

_P		call	dot
		call	dash
		call	dash
		call	dot
		call	delay3
		return

_Q		call	dash
		call	dash
		call	dot
		call	dash
		call	delay3
		return

_R		call	dot
		call	dash
		call	dot
		call	delay3
		return

_S		call	dot
		call	dot
		call	dot
		call	delay3
		return

_T		call	dash
		call	delay3
		return

_U		call	dot
		call	dot
		call	dash
		call	delay3
		return

_V		call	dot
		call	dot
		call	dot
		call	dash
		call	delay3
		return

_W		call	dot
		call	dash
		call	dash
		call	delay3
		return

_X		call	dash
		call	dot
		call	dot
		call	dash
		call	delay3
		return

_Y		call	dash
		call	dot
		call	dash
		call	dash
		call	delay3
		return

_Z		call	dash
		call	dash
		call	dot
		call	dot
		call	delay3
		return

_Å		call	dot
		call	dash
		call	dash
		call	dot
		call	dash
		call	delay3
		return

_Ä		call	dot
		call	dash
		call	dot
		call	dash
		call 	delay3
		return

_Ö		call	dash
		call	dash
		call	dash
		call	dot
		call	delay3
		return

_1		call	dot
		call	dash
		call	dash
		call	dash
		call	dash
		call	delay3
		return


_2		call	dot
		call	dot
		call	dash
		call	dash
		call	dash
		call	delay3
		return

_3		call	dot
		call	dot
		call	dot
		call	dash
		call	dash
		call	delay3
		return

_4		call	dot
		call	dot
		call	dot
		call	dot
		call	dash
		call	delay3
		return

_5		call	dot
		call	dot
		call	dot
		call	dot
		call	dot
		call	delay3
		return

_6		call	dash
		call	dot
		call	dot
		call	dot
		call	dot
		call	delay3
		return

_7		call	dash
		call	dash
		call	dot
		call	dot
		call	dot
		call	delay3
		return

_8		call	dash
		call	dash
		call	dash
		call	dot
		call	dot
		call	delay3
		return

_9		call	dash
		call	dash
		call	dash
		call	dash
		call	dot
		call	delay3
		return

_0		call	dash
		call	dash
		call	dash
		call	dash
		call	dash
		call	delay3
		return

_slash		call	dash
		call	dot
		call	dot
		call	dash
		call	dot
		call	delay3
		return

_.		call	dot
		call	dash
		call	dot
		call	dash
		call	dot
		call	dash
		call	delay3
		return
		



;---------------------------------------------------------------------------
;Initiering av portarna i kretsen
;Denna subrutin anropas bara vid "power-on"
;Här fördelas kretsens pinnar, om de skall vara IN eller UT-gångar osv...
;Vi gör det enkelt för oss...sätt alla portar till utgångar

init    bsf     3,5     	;anropa sida 1 i registren
        clrf    5       	;gör alla portar till utgångar, all ports as OUT
		bcf     3,5     	;gå tillbaka till register sida 0
        clrf    5       	;rensa utgångarna, nollställ, clear ports
        goto    main    	;gå till huvudprogrammet

        end
;----------------------------------------------------------------------------
