summaryrefslogtreecommitdiff
path: root/software
diff options
context:
space:
mode:
authorChristian Pointner <equinox@mur.at>2012-02-25 23:57:20 +0000
committerChristian Pointner <equinox@mur.at>2012-02-25 23:57:20 +0000
commit2cd30b5702576a2a5d1c08aa0973a7406db95e57 (patch)
tree4520f222b971881e9372fb7b46c583617e9975b1 /software
parentadded new ttx_crx code tree (ported morse to new processor) (diff)
splitted code info include files
added i2c code (not tested yet) git-svn-id: https://svn.spreadspace.org/mur.sat@253 7de4ea59-55d0-425e-a1af-a3118ea81d4c
Diffstat (limited to 'software')
-rw-r--r--software/ttx_crx/i2c.inc148
-rw-r--r--software/ttx_crx/tables.inc208
-rw-r--r--software/ttx_crx/ttx.inc294
-rw-r--r--software/ttx_crx/ttx_crx.asm453
4 files changed, 662 insertions, 441 deletions
diff --git a/software/ttx_crx/i2c.inc b/software/ttx_crx/i2c.inc
new file mode 100644
index 0000000..52c90e3
--- /dev/null
+++ b/software/ttx_crx/i2c.inc
@@ -0,0 +1,148 @@
+ ;;
+ ;; mur.sat
+ ;;
+ ;; Somewhen in the year 2012, 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 <equinox@mur.at>
+ ;;
+ ;; 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 <http://www.gnu.org/licenses/>.
+ ;;
+
+ ;; -------------------------------------
+i2c_start
+ movlb .1
+ bcf TRISB,I2C_SDA
+ nop
+ bcf TRISB,I2C_SCL
+ movlb .0
+ return
+
+ ;; ------------------
+i2c_restart
+ movlb .1
+ bsf TRISB,I2C_SDA
+ nop
+ bsf TRISB,I2C_SCL
+ nop
+ nop
+ nop
+ bcf TRISB,I2C_SDA
+ nop
+ bcf TRISB,I2C_SCL
+ movlb .0
+ return
+
+ ;; ------------------
+i2c_stop
+ movlb .1
+ bsf TRISB,I2C_SCL
+ nop
+ bsf TRISB,I2C_SDA
+ movlb .0
+ return
+
+ ;; ------------------
+i2c_send_byte
+ movwf I2C_BYTE
+ movlw .8
+ movwf I2C_BIT_CNT
+ movlb .1
+i2c_send_byte_next
+ btfss I2C_BYTE,7
+ bcf TRISB,I2C_SDA
+ btfsc I2C_BYTE,7
+ bsf TRISB,I2C_SDA
+ nop
+ bsf TRISB,I2C_SCL
+ nop
+ nop
+ bcf TRISB,I2C_SCL
+ rlf I2C_BYTE,f
+ decfsz I2C_BIT_CNT,f
+ goto i2c_send_byte_next
+
+ nop
+ nop
+ bsf TRISB,I2C_SDA
+ bsf TRISB,I2C_SCL
+ movlb .0
+ movf PORTB,w
+ movlb .1
+ bcf TRISB,I2C_SCL
+ bcf TRISB,I2C_SDA
+ movlb .0
+ andlw b'00010000'
+ movwf I2C_BYTE
+ swapf I2C_BYTE,f
+ return
+
+ ;; ------------------
+i2c_recv_byte
+ clrf I2C_BYTE
+ movlw .8
+ movwf I2C_BIT_CNT
+ movlb .1
+ bsf TRISB,I2C_SDA
+i2c_recv_byte_loop
+ bsf TRISB,I2C_SCL
+ movlb .0
+ btfsc PORTB,I2C_SDA
+ bsf I2C_BYTE,0
+ movlb .1
+ bcf TRISB,I2C_SCL
+ decfsz I2C_BIT_CNT,f
+ goto i2c_recv_byte_next
+
+ bcf TRISB,I2C_SDA
+ movlb .0
+ return
+
+i2c_recv_byte_next
+ bcf STATUS,C
+ rlf I2C_BYTE,f
+ goto i2c_recv_byte_loop
+
+ ;; ------------------
+i2c_ack
+ movlb .1
+ bcf TRISB,I2C_SDA
+ bsf TRISB,I2C_SCL
+ nop
+ nop
+ bcf TRISB,I2C_SCL
+ movlb .0
+ return
+
+ ;; ------------------
+i2c_nack
+ movlb .1
+ bsf TRISB,I2C_SDA
+ bsf TRISB,I2C_SCL
+ nop
+ nop
+ bcf TRISB,I2C_SCL
+ bcf TRISB,I2C_SDA
+ movlb .0
+ return
+
+ ;; -------------------------------------
diff --git a/software/ttx_crx/tables.inc b/software/ttx_crx/tables.inc
new file mode 100644
index 0000000..4adf432
--- /dev/null
+++ b/software/ttx_crx/tables.inc
@@ -0,0 +1,208 @@
+ ;;
+ ;; mur.sat
+ ;;
+ ;; Somewhen in the year 2012, 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 <equinox@mur.at>
+ ;;
+ ;; 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 <http://www.gnu.org/licenses/>.
+ ;;
+
+ ;; -------------------------------------
+ ;; 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
+
+ ;; -------------------------------------
+ ;; Base32 Code
+base32
+ addwf PCL,f
+ retlw 'A'
+ retlw 'B'
+ retlw 'C'
+ retlw 'D'
+ retlw 'E'
+ retlw 'F'
+ retlw 'G'
+ retlw 'H'
+ retlw 'I'
+ retlw 'J'
+ retlw 'K'
+ retlw 'L'
+ retlw 'M'
+ retlw 'N'
+ retlw 'O'
+ retlw 'P'
+ retlw 'Q'
+ retlw 'R'
+ retlw 'S'
+ retlw 'T'
+ retlw 'U'
+ retlw 'V'
+ retlw 'W'
+ retlw 'X'
+ retlw 'Y'
+ retlw 'Z'
+ retlw '2'
+ retlw '3'
+ retlw '4'
+ retlw '5'
+ retlw '6'
+ retlw '7'
+
+ ;; -------------------------------------
+ ;; fixed strings
+callsign
+ addwf PCL,f
+ nop
+ retlw 'R'
+ retlw 'U'
+ retlw 'M'
+ retlw '6'
+ retlw 'E'
+ retlw 'O'
+
+ ;; -------------------------------------
diff --git a/software/ttx_crx/ttx.inc b/software/ttx_crx/ttx.inc
new file mode 100644
index 0000000..2e45f28
--- /dev/null
+++ b/software/ttx_crx/ttx.inc
@@ -0,0 +1,294 @@
+ ;;
+ ;; mur.sat
+ ;;
+ ;; Somewhen in the year 2012, 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 <equinox@mur.at>
+ ;;
+ ;; 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 <http://www.gnu.org/licenses/>.
+ ;;
+
+ ;; -------------------------------------
+dottime
+ movwf TMR0
+ bcf INTCON,T0IF
+dot_inner
+ btfss INTCON,T0IF
+ goto dot_inner
+ clrwdt
+ return
+
+ ;; -------------------------------------
+send_char
+ movwf CHAR
+ movlw 'Z' + 1
+ subwf CHAR,w
+ btfsc STATUS,C
+ return
+ movlw ' '
+ subwf CHAR,f
+ btfss STATUS,C
+ return
+ btfsc STATUS,Z
+ return
+
+ movf CHAR,w
+ call getcw
+ movwf ELEMENT
+ movf CHAR,w
+ call getcwlen
+ movwf ELECNT
+ movf ELECNT,f
+ btfsc STATUS,Z
+ return
+ movf CHAR,w
+ xorwf PARITY,f
+
+char_next_element
+ bsf PORTA,CW_OUT
+ btfss ELEMENT,7
+ movf DOT,w
+ btfsc ELEMENT,7
+ movf DASH,w
+ call dottime
+ bcf PORTA,CW_OUT
+
+ rlf ELEMENT,f
+
+ decfsz ELECNT,f
+ goto char_espace
+ return
+
+char_espace
+ movf ESPACE,w
+ call dottime
+ goto char_next_element
+
+ ;; -------------------------------------
+send_callsign
+ movlw .6
+ movwf CHARCNT
+
+callsign_next_char
+ call callsign
+ call send_char
+ decfsz CHARCNT,f
+ goto callsign_cspace
+ return
+
+callsign_cspace
+ movf CSPACE,w
+ call dottime
+ movf CHARCNT,w
+ goto callsign_next_char
+
+ ;; -------------------------------------
+send_base32
+ movwf PENTLECNT
+
+case0
+ rrf INDF0,w
+ movwf PENTLE0
+ rrf PENTLE0,f
+ rrf PENTLE0,w
+ andlw b'00011111'
+ call base32
+ call send_char
+ decfsz PENTLECNT,f
+ goto case1
+ return
+
+case1
+ movf CSPACE,w
+ call dottime
+ rlf INDF0,w
+ movwf PENTLE0
+ rlf PENTLE0,w
+ andlw b'00011100'
+ movwf PENTLE0
+ incf FSR0L,f
+ swapf INDF0,w
+ movwf PENTLE1
+ rrf PENTLE1,f
+ rrf PENTLE1,w
+ andlw b'00000011'
+ iorwf PENTLE0,w
+ call base32
+ call send_char
+ decfsz PENTLECNT,f
+ goto case2
+ return
+
+case2
+ movf CSPACE,w
+ call dottime
+ rrf INDF0,w
+ andlw b'00011111'
+ call base32
+ call send_char
+ decfsz PENTLECNT,f
+ goto case3
+ return
+
+case3
+ movf CSPACE,w
+ call dottime
+ swapf INDF0,w
+ andlw b'00010000'
+ movwf PENTLE0
+ incf FSR0L,f
+ swapf INDF0,w
+ andlw b'00001111'
+ iorwf PENTLE0,w
+ call base32
+ call send_char
+ decfsz PENTLECNT,f
+ goto case4
+ return
+
+case4
+ movf CSPACE,w
+ call dottime
+ rlf INDF0,w
+ andlw b'00011110'
+ movwf PENTLE0
+ incf FSR0L,f
+ btfsc INDF0,7
+ bsf PENTLE0,0
+ movf PENTLE0,w
+ call base32
+ call send_char
+ decfsz PENTLECNT,f
+ goto case5
+ return
+
+case5
+ movf CSPACE,w
+ call dottime
+ rrf INDF0,w
+ movwf PENTLE0
+ rrf PENTLE0,w
+ andlw b'00011111'
+ call base32
+ call send_char
+ decfsz PENTLECNT,f
+ goto case6
+ return
+
+case6
+ movf CSPACE,w
+ call dottime
+ swapf INDF0,w
+ movwf PENTLE0
+ rrf PENTLE0,w
+ andlw b'00011000'
+ movwf PENTLE0
+ incf FSR0L,f
+ swapf INDF0,w
+ movwf PENTLE1
+ rrf PENTLE1,w
+ andlw b'00000111'
+ iorwf PENTLE0,w
+ call base32
+ call send_char
+ decfsz PENTLECNT,f
+ goto case7
+ return
+
+case7
+ movf CSPACE,w
+ call dottime
+ movf INDF0,w
+ andlw b'00011111'
+ call base32
+ call send_char
+ decfsz PENTLECNT,f
+ goto caseend
+ return
+
+caseend
+ movf CSPACE,w
+ call dottime
+ incf FSR0L,f
+ goto case0
+
+ ;; -------------------------------------
+send_cnt
+ rlf BEACONCNTL,w
+ movwf TMP2
+ rlf BEACONCNTH,w
+ movwf TMP1
+ movlw TMP1
+ movwf FSR0L
+ clrf FSR0H
+ movlw .3
+ call send_base32
+ return
+
+ ;; -------------------------------------
+send_parity
+ movf PARITY,w
+ btfsc PARITY,5
+ xorlw b'00000001'
+ andlw b'00011111'
+ call base32
+ call send_char
+
+ movf WSPACE,w
+ call dottime
+ return
+
+ ;; -------------------------------------
+send_beacon
+ bsf PORTA,CW_ENABLE
+ movf TUNE,w
+ call dottime
+ clrf PARITY
+
+ movlw START_CHAR
+ call send_char
+
+ movf WSPACE,w
+ call dottime
+
+ call send_callsign
+
+ movf WSPACE,w
+ call dottime
+
+ call send_cnt
+
+ movf WSPACE,w
+ call dottime
+
+ call send_parity
+
+ incfsz BEACONCNTL,f
+ goto beacon_end
+ incf BEACONCNTH,f
+ ;; TODO write new cnt value to EEPROM
+
+beacon_end
+ bcf PORTA,CW_ENABLE
+ return
+ ;; -------------------------------------
diff --git a/software/ttx_crx/ttx_crx.asm b/software/ttx_crx/ttx_crx.asm
index c80535d..066379f 100644
--- a/software/ttx_crx/ttx_crx.asm
+++ b/software/ttx_crx/ttx_crx.asm
@@ -63,8 +63,8 @@ CLK_1HZ EQU 0
IHU_SDI EQU 1
CRX_INT EQU 3
IHU_SCK EQU 4
-CRX_SDA EQU 6
-CRX_SCL EQU 7
+I2C_SDA EQU 6
+I2C_SCL EQU 7
;; variables
@@ -91,6 +91,9 @@ CSPACE EQU DASH
WSPACE EQU H'0074'
TUNE EQU H'0075'
+I2C_BYTE EQU H'0077'
+I2C_BIT_CNT EQU H'0078'
+
NVSTATE EQU H'007A'
BEACONCNTH EQU H'007B'
BEACONCNTL EQU H'007C'
@@ -121,179 +124,16 @@ interrupt_end
;; -------------------------------------
;; 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
+ include "tables.inc"
- ;; 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
+ ;; -------------------------------------
+ ;; SUBROUTINES
- ;; Base32 Code
-base32
- addwf PCL,f
- retlw 'A'
- retlw 'B'
- retlw 'C'
- retlw 'D'
- retlw 'E'
- retlw 'F'
- retlw 'G'
- retlw 'H'
- retlw 'I'
- retlw 'J'
- retlw 'K'
- retlw 'L'
- retlw 'M'
- retlw 'N'
- retlw 'O'
- retlw 'P'
- retlw 'Q'
- retlw 'R'
- retlw 'S'
- retlw 'T'
- retlw 'U'
- retlw 'V'
- retlw 'W'
- retlw 'X'
- retlw 'Y'
- retlw 'Z'
- retlw '2'
- retlw '3'
- retlw '4'
- retlw '5'
- retlw '6'
- retlw '7'
+ ;; -------------------------------------
+ include "ttx.inc"
- ;; fixed strings
-callsign
- addwf PCL,f
- nop
- retlw 'R'
- retlw 'U'
- retlw 'M'
- retlw '6'
- retlw 'E'
- retlw 'O'
+ ;; -------------------------------------
+ include "i2c.inc"
;; -------------------------------------
;; INIT
@@ -348,275 +188,6 @@ init
movlw TUNE_DEF
movwf TUNE
- goto main
-
- ;; -------------------------------------
- ;; SUBROUTINES
-
- ;; -------------------------------------
-dottime
- movwf TMR0
- bcf INTCON,T0IF
-dot_inner
- btfss INTCON,T0IF
- goto dot_inner
- clrwdt
- return
-
- ;; -------------------------------------
-send_char
- movwf CHAR
- movlw 'Z' + 1
- subwf CHAR,w
- btfsc STATUS,C
- return
- movlw ' '
- subwf CHAR,f
- btfss STATUS,C
- return
- btfsc STATUS,Z
- return
-
- movf CHAR,w
- call getcw
- movwf ELEMENT
- movf CHAR,w
- call getcwlen
- movwf ELECNT
- movf ELECNT,f
- btfsc STATUS,Z
- return
- movf CHAR,w
- xorwf PARITY,f
-
-char_next_element
- bsf PORTA,CW_OUT
- btfss ELEMENT,7
- movf DOT,w
- btfsc ELEMENT,7
- movf DASH,w
- call dottime
- bcf PORTA,CW_OUT
-
- rlf ELEMENT,f
-
- decfsz ELECNT,f
- goto char_espace
- return
-
-char_espace
- movf ESPACE,w
- call dottime
- goto char_next_element
-
- ;; -------------------------------------
-send_callsign
- movlw .6
- movwf CHARCNT
-
-callsign_next_char
- call callsign
- call send_char
- decfsz CHARCNT,f
- goto callsign_cspace
- return
-
-callsign_cspace
- movf CSPACE,w
- call dottime
- movf CHARCNT,w
- goto callsign_next_char
-
- ;; -------------------------------------
-send_base32
- movwf PENTLECNT
-
-case0
- rrf INDF0,w
- movwf PENTLE0
- rrf PENTLE0,f
- rrf PENTLE0,w
- andlw b'00011111'
- call base32
- call send_char
- decfsz PENTLECNT,f
- goto case1
- return
-
-case1
- movf CSPACE,w
- call dottime
- rlf INDF0,w
- movwf PENTLE0
- rlf PENTLE0,w
- andlw b'00011100'
- movwf PENTLE0
- incf FSR0L,f
- swapf INDF0,w
- movwf PENTLE1
- rrf PENTLE1,f
- rrf PENTLE1,w
- andlw b'00000011'
- iorwf PENTLE0,w
- call base32
- call send_char
- decfsz PENTLECNT,f
- goto case2
- return
-
-case2
- movf CSPACE,w
- call dottime
- rrf INDF0,w
- andlw b'00011111'
- call base32
- call send_char
- decfsz PENTLECNT,f
- goto case3
- return
-
-case3
- movf CSPACE,w
- call dottime
- swapf INDF0,w
- andlw b'00010000'
- movwf PENTLE0
- incf FSR0L,f
- swapf INDF0,w
- andlw b'00001111'
- iorwf PENTLE0,w
- call base32
- call send_char
- decfsz PENTLECNT,f
- goto case4
- return
-
-case4
- movf CSPACE,w
- call dottime
- rlf INDF0,w
- andlw b'00011110'
- movwf PENTLE0
- incf FSR0L,f
- btfsc INDF0,7
- bsf PENTLE0,0
- movf PENTLE0,w
- call base32
- call send_char
- decfsz PENTLECNT,f
- goto case5
- return
-
-case5
- movf CSPACE,w
- call dottime
- rrf INDF0,w
- movwf PENTLE0
- rrf PENTLE0,w
- andlw b'00011111'
- call base32
- call send_char
- decfsz PENTLECNT,f
- goto case6
- return
-
-case6
- movf CSPACE,w
- call dottime
- swapf INDF0,w
- movwf PENTLE0
- rrf PENTLE0,w
- andlw b'00011000'
- movwf PENTLE0
- incf FSR0L,f
- swapf INDF0,w
- movwf PENTLE1
- rrf PENTLE1,w
- andlw b'00000111'
- iorwf PENTLE0,w
- call base32
- call send_char
- decfsz PENTLECNT,f
- goto case7
- return
-
-case7
- movf CSPACE,w
- call dottime
- movf INDF0,w
- andlw b'00011111'
- call base32
- call send_char
- decfsz PENTLECNT,f
- goto caseend
- return
-
-caseend
- movf CSPACE,w
- call dottime
- incf FSR0L,f
- goto case0
-
- ;; -------------------------------------
-send_cnt
- rlf BEACONCNTL,w
- movwf TMP2
- rlf BEACONCNTH,w
- movwf TMP1
- movlw TMP1
- movwf FSR0L
- clrf FSR0H
- movlw .3
- call send_base32
- return
-
- ;; -------------------------------------
-send_parity
- movf PARITY,w
- btfsc PARITY,5
- xorlw b'00000001'
- andlw b'00011111'
- call base32
- call send_char
-
- movf WSPACE,w
- call dottime
- return
-
- ;; -------------------------------------
-send_beacon
- bsf PORTA,CW_ENABLE
- movf TUNE,w
- call dottime
- clrf PARITY
-
- movlw START_CHAR
- call send_char
-
- movf WSPACE,w
- call dottime
-
- call send_callsign
-
- movf WSPACE,w
- call dottime
-
- call send_cnt
-
- movf WSPACE,w
- call dottime
-
- call send_parity
-
- incfsz BEACONCNTL,f
- goto beacon_end
- incf BEACONCNTH,f
- ;; TODO write new cnt value to EEPROM
-
-beacon_end
- bcf PORTA,CW_ENABLE
- return
-
;; -------------------------------------
;; MAINLOOP
main