diff options
| author | Vaino Kauppila <vaino@vke.fi> | 2026-04-19 12:32:58 +0300 |
|---|---|---|
| committer | Vaino Kauppila <vaino@vke.fi> | 2026-04-19 12:32:58 +0300 |
| commit | eb8643ddbef43547eb7bfe58789a3908926c7258 (patch) | |
| tree | fadfba88a1c71b266b8c67df166a3a6ead6b30d1 /fw/blink.c | |
| parent | 129a1c975dbd0c042576010b1f6eb40d19fc5733 (diff) | |
| download | vhdl_pic-eb8643ddbef43547eb7bfe58789a3908926c7258.tar.gz vhdl_pic-eb8643ddbef43547eb7bfe58789a3908926c7258.zip | |
refactor dir structure, add fib.c
Diffstat (limited to 'fw/blink.c')
| -rw-r--r-- | fw/blink.c | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/fw/blink.c b/fw/blink.c new file mode 100644 index 0000000..6789b0a --- /dev/null +++ b/fw/blink.c @@ -0,0 +1,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(); + } +} |
