From 2cd30b5702576a2a5d1c08aa0973a7406db95e57 Mon Sep 17 00:00:00 2001 From: Christian Pointner Date: Sat, 25 Feb 2012 23:57:20 +0000 Subject: 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 --- software/ttx_crx/i2c.inc | 148 ++++++++++++++ software/ttx_crx/tables.inc | 208 ++++++++++++++++++++ software/ttx_crx/ttx.inc | 294 ++++++++++++++++++++++++++++ software/ttx_crx/ttx_crx.asm | 453 ++----------------------------------------- 4 files changed, 662 insertions(+), 441 deletions(-) create mode 100644 software/ttx_crx/i2c.inc create mode 100644 software/ttx_crx/tables.inc create mode 100644 software/ttx_crx/ttx.inc (limited to 'software') 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 + ;; + ;; 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 . + ;; + + ;; ------------------------------------- +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 + ;; + ;; 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 . + ;; + + ;; ------------------------------------- + ;; 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 + ;; + ;; 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 . + ;; + + ;; ------------------------------------- +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 -- cgit v1.2.3