faster
[fw/altos] / blink.c
1
2 sfr at 0x80 P0;
3 sfr at 0x90 P1;
4 sfr at 0xA0 P2;
5
6 #define PERCFG  SFR(0xF1)
7 #define ADCCFG  SFR(0xF2)
8 #define P0SEL   SFR(0xF3)
9 #define P1SEL   SFR(0xF4)
10 #define P2SEL   SFR(0xF5)
11
12 sfr at 0xFD P0DIR;
13 sfr at 0xFE P1DIR;
14 sfr at 0xFE P2DIR;
15 sfr at 0x8F P0INP;
16 sfr at 0xF6 P1INP;
17 sfr at 0xF7 P2INP;
18
19 #define P0IFG   SFR(0x89)
20 #define P1IFG   SFR(0x8A)
21 #define P2IFG   SFR(0x8B)
22
23 #define nop()   _asm \
24                 nop \
25                 _endasm;
26
27 void
28 delay (int n)
29 {
30         int i, j, k;
31
32         for (k = 0; k < n; k++) {
33                 for (j = 0; j < 50; j++)
34                         for (i = 0; i < 1000; i++)
35                                 nop();
36         }
37 }
38
39 void
40 dit() {
41         P1 = 0xff;
42         delay(1);
43         P1 = 0xfd;
44         delay(1);
45 }
46
47 void
48 dah () {
49         P1 = 0xff;
50         delay(3);
51         P1 = 0xfd;
52         delay(1);
53 }
54
55 void
56 charspace () {
57         delay(2);
58 }
59
60 void
61 wordspace () {
62         delay(8);
63 }
64
65 main ()
66 {
67         /* Set p1_1 to output */
68         P1DIR = 0x02;
69         P1INP = 0x00;
70         P2INP = 0x00;
71         for (;;) {
72                 dah(); dit(); dah(); dit(); charspace ();
73                 dah(); dah(); dit(); dah(); wordspace();
74         }
75 }