blob: 6789b0a665be77852c14f53f64747b7dc9db29e5 (
plain) (
blame)
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
|
#include <pic16f84a.h>
typedef unsigned char uint8_t;
// Global volatile so sdcc cannot optimise the delay loops away.
static volatile uint8_t _d0, _d1, _d2;
// Busy-wait ~500 ms at 50 MHz.
// 200 × 256 × 256 = 13 107 200 inner iterations.
// Each iteration ≈ 3 uint8_t instructions × 20 ns = 60 ns.
// Total ≈ 786 ms (tune outer count _d0 < N to taste).
static void delay(void) {
_d0 = 0;
do {
_d1 = 0;
do {
_d2 = 0;
do { _d2++; } while (_d2 != 0);
} while (++_d1 != 30);
_d0++;
} while (_d0 != 116);
}
void main(void) {
// port_b(0) drives activity_led at E8 on the Tang Primer 25K.
// port_a(0) drives led at L6. Both ports are always outputs in this CPU.
while (1) {
PORTB = 0x01; // activity_led (E8) on
PORTA = 0x01; // led (L6) on
delay();
PORTB = 0x00; // activity_led (E8) off
PORTA = 0x00; // led (L6) off
delay();
}
}
|