;; ;; mur.sat ;; ;; Somewhen in the year 2011, mur.at will have a nano satellite launched ;; into a low earth orbit (310 km above the surface of our planet). The ;; satellite itself is a TubeSat personal satellite kit, developed and ;; launched by interorbital systems. mur.sat is a joint venture of mur.at, ;; ESC im Labor and realraum. ;; ;; Please visit the project hompage at sat.mur.at for further information. ;; ;; ;; Copyright (C) 2011 Christian Pointner ;; ;; This file is part of mur.sat. ;; ;; mur.sat is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; any later version. ;; ;; mur.sat is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; ;; You should have received a copy of the GNU General Public License ;; along with mur.sat. If not, see . ;; ;; ------------------------------------- ;; PREAMBLE LIST p=12F519 include "p12f519.inc" ;; __config _IntRC_OSC & _IOSCFS_4MHz & _MCLRE_ON & _CP_OFF & _CPDF_OFF & _WDTE_OFF __config _IntRC_OSC & _IOSCFS_4MHz & _MCLRE_OFF & _CP_OFF & _CPDF_OFF & _WDTE_OFF ;; ------------------------------------- ;; DEFINES BEACON_INT EQU .5 SECCNT EQU H'0007' CHAR EQU H'0008' CHARCNT EQU H'0009' ELEMENT EQU H'000A' ELECNT EQU H'000B' DOT EQU .85 DASH EQU .255 ESPACE EQU .85 CSPACE EQU .255 CWSPEED EQU .100 DOTCNT0 EQU H'000E' DOTCNT1 EQU H'000F' CWENABLE EQU 0 CWOUT EQU 1 ;; ------------------------------------- ;; OFFSET org 0 ;; ------------------------------------- ;; INIT init movlw b'11110110' option movlw b'11111100' tris PORTB bcf PORTB,CWOUT bcf PORTB,CWENABLE clrf TMR0 movlw BEACON_INT movwf SECCNT goto main ;; ------------------------------------- ;; TABLES ;; Morse Codes: 0=dot, 1=dash getcw addwf PCL,f nop retlw b'00010000' ; ! retlw b'01001000' ; " retlw b'00000000' ; # retlw b'00010010' ; $ retlw b'00000000' ; % retlw b'01000000' ; & retlw b'01111000' ; ' retlw b'10110000' ; ( retlw b'10110100' ; ) retlw b'00000000' ; * retlw b'01010000' ; + retlw b'11001100' ; , retlw b'10000100' ; - retlw b'01010100' ; . retlw b'10010000' ; / retlw b'11111000' ; 0 retlw b'01111000' ; 1 retlw b'00111000' ; 2 retlw b'00011000' ; 3 retlw b'00001000' ; 4 retlw b'00000000' ; 5 retlw b'10000000' ; 6 retlw b'11000000' ; 7 retlw b'11100000' ; 8 retlw b'11110000' ; 9 retlw b'11100000' ; : retlw b'10101000' ; ; retlw b'00010100' ; < retlw b'10001000' ; = retlw b'10001010' ; > retlw b'00110000' ; ? retlw b'01000000' ; @ retlw b'01000000' ; A retlw b'10000000' ; B retlw b'10100000' ; C retlw b'10000000' ; D retlw b'00000000' ; E retlw b'00100000' ; F retlw b'11000000' ; G retlw b'00000000' ; H retlw b'00000000' ; I retlw b'01110000' ; J retlw b'10100000' ; K retlw b'01000000' ; L retlw b'11000000' ; M retlw b'10000000' ; N retlw b'11100000' ; O retlw b'01100000' ; P retlw b'11010000' ; Q retlw b'01000000' ; R retlw b'00000000' ; S retlw b'10000000' ; T retlw b'00100000' ; U retlw b'00010000' ; V retlw b'01100000' ; W retlw b'10010000' ; X retlw b'10110000' ; Y retlw b'11000000' ; Z ;; Morse Code Length getcwlen addwf PCL,f nop retlw .5 ; ! retlw .6 ; " retlw .0 ; # retlw .7 ; $ retlw .0 ; % retlw .5 ; & retlw .6 ; ' retlw .5 ; ( retlw .6 ; ) retlw .0 ; * retlw .5 ; + retlw .6 ; , retlw .6 ; - retlw .6 ; . retlw .5 ; / retlw .5 ; 0 retlw .5 ; 1 retlw .5 ; 2 retlw .5 ; 3 retlw .5 ; 4 retlw .5 ; 5 retlw .5 ; 6 retlw .5 ; 7 retlw .5 ; 8 retlw .5 ; 9 retlw .6 ; : retlw .6 ; ; retlw .6 ; < retlw .5 ; = retlw .7 ; > retlw .6 ; ? retlw .6 ; @ retlw .2 ; A retlw .4 ; B retlw .4 ; C retlw .3 ; D retlw .1 ; E retlw .4 ; F retlw .3 ; G retlw .4 ; H retlw .2 ; I retlw .4 ; J retlw .3 ; K retlw .4 ; L retlw .2 ; M retlw .2 ; N retlw .3 ; O retlw .4 ; P retlw .4 ; Q retlw .3 ; R retlw .3 ; S retlw .1 ; T retlw .3 ; U retlw .4 ; V retlw .3 ; W retlw .4 ; X retlw .4 ; Y retlw .4 ; Z ;; test string string addwf PCL,f nop retlw 'T' - ' ' retlw 'A' - ' ' retlw 'S' - ' ' retlw '.' - ' ' retlw 'R' - ' ' retlw 'U' - ' ' retlw 'M' - ' ' ;; ------------------------------------- ;; SUBROUTINES dottime movwf DOTCNT1 dot_outer movlw CWSPEED movwf DOTCNT0 dot_inner nop nop nop nop decfsz DOTCNT0,f goto dot_inner decfsz DOTCNT1,f goto dot_outer return ;; ------------------------------------- send_beacon movlw .7 movwf CHARCNT beacon_next_char movf CHARCNT,w call string call getcw movwf ELEMENT movf CHARCNT,w call string call getcwlen movwf ELECNT movf ELECNT,f btfsc STATUS,Z goto beacon_invalid_char beacon_next_element bsf PORTB,CWOUT btfss ELEMENT,7 movlw DOT btfsc ELEMENT,7 movlw DASH call dottime bcf PORTB,CWOUT rlf ELEMENT,f decfsz ELECNT,f goto beacon_element_space movlw CSPACE call dottime beacon_invalid_char decfsz CHARCNT,f goto beacon_next_char return beacon_element_space movlw ESPACE call dottime goto beacon_next_element ;; ------------------------------------- ;; MAINLOOP main movf TMR0,w btfss STATUS,Z goto main ;; this gets called every second decfsz SECCNT,f goto waitfor0 movlw BEACON_INT movwf SECCNT ;; this gets called every BEACON_INT seconds call send_beacon ;; is the timer above zero? waitfor0 movf TMR0,w btfsc STATUS,Z goto waitfor0 goto main ;; ------------------------------------- ;; END end