;; ;; 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 & _INTRC_OSC_CLKOUT __config _CONFIG2, _BOR21V & _WRT_OFF ;; ------------------------------------- ;; DEFINES ;; constants ;; I/O Pins ;; variables ;; page 0 only TMP EQU H'0020' WAIT_CNT EQU H'0021' ;; all pages FSR_TEMP EQU H'007D' 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 movf FSR,w movwf FSR_TEMP bcf STATUS,RP0 bcf STATUS,RP1 ;; dispatch interrupt sources 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 goto interrupt_end interrupt_end ;; restore context movf FSR_TEMP,w movwf FSR 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'10000000' movwf OPTION_REG clrf PSTRCON movlw b'01101000' movwf OSCCON movlw b'11111111' movwf TRISA movlw b'11111111' movwf TRISB movlw b'11111111' movwf TRISC movlw b'11111111' 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 clrf TMP bsf INTCON,GIE goto main ;; ------------------------------------- ;; SUBROUTINES wait_ms movwf WAIT_CNT wait_next movlw .9 movwf TMR0 bcf INTCON,T0IF wait_loop btfss INTCON,T0IF goto wait_loop decfsz WAIT_CNT,f goto wait_next return ;; ------------------------------------- uart_rx_byte btfsc RCSTA,FERR goto uart_rx_fe movf RCREG,w ; TODO: move to input string movwf TMP return uart_rx_fe movf RCREG,w return ;; ------------------------------------- ;; MAINLOOP main ;; movf TMP,f ;; btfsc STATUS,Z ;; goto main movlw '.' movwf TXREG movlw .255 call wait_ms goto main powerdown sleep nop goto main ;; ------------------------------------- ;; END end