;; ;; 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=16F887 include "p16f887.inc" __config _CONFIG1, _DEBUG_OFF & _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_NSLEEP & _CPD_OFF & _CP_OFF & _MCLRE_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC __config _CONFIG2, _BOR21V & _WRT_OFF ;; ------------------------------------- ;; DEFINES ;; constants ;; I/O Pins DTMF_D0 EQU 0 DTMF_D1 EQU 1 DTMF_D2 EQU 2 DTMF_D3 EQU 3 DTMF_PWRDWN EQU 4 TTX_RESET EQU 5 TTX_SCL EQU 6 TTX_SDA EQU 7 ;; variables ;; page 0 only TMP EQU H'0020' ;; all pages W_TEMP EQU H'007E' STATUS_TEMP EQU H'007F' ;; bits ;; ------------------------------------- ;; Reset Vector org 0 goto init ;; ------------------------------------- ;; Interrupt Vector org 4 ;; save context movwf W_TEMP swapf STATUS,W movwf STATUS_TEMP bcf STATUS,RP0 bcf STATUS,RP1 btfsc PIR1,RCIF goto int_uart_rx goto interrupt_end int_uart_rx call uart_rx_byte btfsc PIR1,RCIF call uart_rx_byte btfss RCSTA,OERR goto int_uart_rx_oe goto interrupt_end int_uart_rx_oe bcf RCSTA,CREN bsf RCSTA,CREN interrupt_end ;; restore context swapf STATUS_TEMP,W movwf STATUS swapf W_TEMP,F swapf W_TEMP,W retfie ;; ------------------------------------- ;; INIT init ;; bank 3 bsf STATUS,RP0 bsf STATUS,RP1 movlw b'00000000' movwf BAUDCTL ;; bank 1 bsf STATUS,RP0 bcf STATUS,RP1 movlw b'11000111' movwf OPTION_REG clrf PSTRCON movlw b'00010000' movwf OSCCON movlw b'00001111' movwf TRISD movlw b'00100100' movwf TXSTA movlw .12 movwf SPBRG clrf SPBRGH movlw b'00100000' movwf PIE1 clrf PIE2 ;; bank 0 bcf STATUS,RP0 bcf STATUS,RP1 movlw b'10010000' movwf RCSTA movlw B'01000000' movwf INTCON bcf PORTD,TTX_RESET ;reset TTX nop nop bsf PORTD,TTX_RESET clrf TMR0 bsf INTCON,GIE movlw .1 movwf TMP goto main ;; ------------------------------------- ;; TABLES ;; TODO: add lookup tables if needed ;; ------------------------------------- ;; SUBROUTINES uart_rx_byte btfsc RCSTA,FERR goto uart_rx_fe movf RCREG,w ; TODO: move to input string movwf TXREG bsf TMP,0 return uart_rx_fe movf RCREG,w return ;; ------------------------------------- ;; MAINLOOP main btfss TMP,0 goto main bcf TMP,0 bcf PORTD,DTMF_PWRDWN bcf INTCON,T0IF clrf TMR0 loop btfss INTCON,T0IF goto loop bsf PORTD,DTMF_PWRDWN goto main powerdown sleep nop goto main ;; ------------------------------------- ;; END end