-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathBlinky87.c
154 lines (140 loc) · 3.4 KB
/
Blinky87.c
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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
/* Blinky.C - LED Fla+-
sher for the Keil LPC900 EPM Emulator/Programmer Module */
#include <REG936.H> // register definition
#include <LIMITS.H>
#include <INTRINS.H>
#include <STDIO.H>
#include <CTYPE.H>
#include "ITRIP.H"
/******************************* GLOBALS**************************************/
/****************************BH141* instruction*******************************/
volatile word bdata txState;
sbit stereo = txState^3;
sbit phaseMode0 = txState^4;
sbit phaseMode1 = txState^5;
sbit test0 = txState^6;
sbit test1 = txState^7;
/***********************************8MAIN????????????????????????*****************/
void main() {
/**************LOCALS****************************/
word station = 870;
/**************SETUP++***************************************/
setup();
setFreq(station);
/****************LOOP*****************************************/
for(;;) {
delay(UINT_MAX);
if (midButt == 0) {
LED ^= 1;
txVcc ^= 1;
}
delay(UINT_MAX);
if (LED) {
if (hiButt == 0) {
LED = 0;
delay(UINT_MAX);
station++;
setFreq(station);
LED = 1;
delay(UINT_MAX);
}
else if (loButt == 0) {
LED = 0;
delay(UINT_MAX);
--station;
setFreq(station);
LED = 1;
delay(UINT_MAX);
}
if (station < MIN_FREQ) {
station = 700;
LED = 0;
delay(UINT_MAX);
LED = 1;
delay(UINT_MAX);
LED = 0;
delay(UINT_MAX);
LED = 1;
delay(UINT_MAX);
LED = 0;
delay(UINT_MAX);
LED = 1;
delay(UINT_MAX);
LED = 0;
delay(UINT_MAX);
LED = 1;
delay(UINT_MAX);
}
if (station > MAX_FREQ) {
station = 1080;
LED = 0;
delay(UINT_MAX);
LED = 1;
delay(UINT_MAX);
LED = 0;
delay(UINT_MAX);
LED = 1;
delay(UINT_MAX);
LED = 0;
delay(UINT_MAX);
LED = 1;
delay(UINT_MAX);
LED = 0;
delay(UINT_MAX);
LED = 1;
delay(UINT_MAX);
}
}
}
}
/*******************SETUP FUNCTION*********************/
void setup() {
P0M1 = 0x17; //input for buttons and audioN, output for audioL
P1M1 = 0; //quasi-bidirectional pins or inputs
P2M1 = 0;
P3M1 = 0;
midButt = 1; //pull up resistors on the button inputs
hiButt = 1;
loButt = 1;
LED = 1; //LED on
txVcc = 0; //transmitter off
CE = 0; //serial input inable for transmitter
stereo = 0;
audioL = 0;
test0 = 1; //always
test1 = 0; //always
phaseMode0 = 0; //?
phaseMode1 = 0; //?
}
/*****************TEST SETUP***************************************/
/********************SETTERS****************************/
void setFreq (word freq) { //takes
if (freq > MAX_FREQ || freq < MIN_FREQ) return; //out of bounds, do-over
else {
word temp = freq;
EA = 0; //Disable interrupts for tuning
temp += (txState & 0xF800); //keep phase cntrl, channels, and test bits
txState = temp; //return or sorts
txProg();
EA = 1; //resume interrupt service
}
}
/*********************8CEREAL***************************/
void txProg() { //shift out txState to the transmitter
word i = 0x01;
EA = 0;
txVcc = 0; // TX on
txClk = 0;
CE = 0;
CE = 1;
for(i = 0x01; i != 0; i <<= 1) {
txData = txState & i;
txClk = 1;
txClk = 0;
}
CE = 0;
EA = 1;
}
void delay (word cnt) { //2.17 us * cnt
while (--cnt);
}