1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
|
;;
;; 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 <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/>.
;;
;; -------------------------------------
;; PREAMBLE
LIST p=16F887
include "p16f887.inc"
;; TODO: set correct configuration bits
__config _DEBUG_OFF & _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_OFF & _PWRTE_OFF & _WDT_OFF & _XT_OSC
;; -------------------------------------
;; DEFINES
;; constants
;; I/O Pins
LED EQU 5
;; variables
;; page 0 only
CNT0 EQU H'0020'
CNT1 EQU H'0021'
;; 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
;; TODO: implement interrupt service routines
interrupt_end
;; restore context
swapf STATUS_TEMP,W
movwf STATUS
swapf W_TEMP,F
swapf W_TEMP,W
retfie
;; -------------------------------------
;; INIT
init
;; bank 1
bsf STATUS,RP0
bcf STATUS,RP1
movlw b'11000111'
movwf OPTION_REG
clrf PSTRCON
movlw b'00010000'
movwf OSCCON
movlw b'11011111'
movwf TRISD
bcf STATUS,RP0
;; bank 0
bsf PORTD,LED
clrf TMR0
goto main
;; -------------------------------------
;; TABLES
;; TODO: add lookup tables if needed
;; -------------------------------------
;; SUBROUTINES
;; TODO: add subroutines
;; -------------------------------------
;; MAINLOOP
main
bcf INTCON,T0IF
loop
btfss INTCON,T0IF
goto loop
movlw b'00100000'
xorwf PORTD,f
goto main
powerdown
sleep
nop
goto main
;; -------------------------------------
;; END
end
|