docs
[mirrors/Programs.git] / c / tv-b-gone / util.c
CommitLineData
21c4e167
H
1#include <avr/io.h> // this contains all the IO port definitions
2#include <avr/interrupt.h> // definitions for interrupts
3#include "util.h"
4
5#define TXPORT PORTB
6#define TX 1
7
8
9
10#define SERIALDELAY 66
11void serialdelay(void) {
12 uint16_t timer;
13 for (timer=0; timer <= SERIALDELAY; timer++) {
14 NOP;
15 }
16}
17
18
19void uart_putchar(char d) {
20 int i;
21 cli(); // turn off interrupts, make it nice & kleen
22
23 TXPORT &= ~_BV(TX);
24 serialdelay();
25 for (i=0; i< 8; i++) {
26 if (d & 0x1) {
27 TXPORT |= _BV(TX);
28 } else {
29 TXPORT &= ~_BV(TX);
30 }
31 serialdelay();
32 d >>= 1;
33 }
34 TXPORT |= _BV(TX);
35 sei(); // turn on interrupts
36 serialdelay();
37}
38
39void printhex(uint8_t hex) {
40 hex &= 0xF;
41 if (hex < 10)
42 uart_putchar(hex + '0');
43 else
44 uart_putchar(hex + 'A' - 10);
45}
46
47void putnum_uh(uint16_t n) {
48 if (n >> 12)
49 printhex(n>>12);
50 if (n >> 8)
51 printhex(n >> 8);
52 if (n >> 4)
53 printhex(n >> 4);
54 printhex(n);
55
56 return;
57}
58
59
60void putnum_ud(uint16_t n) {
61 uint8_t cnt=0, flag=0;
62
63 while (n >= 10000UL) { flag = 1; cnt++; n -= 10000UL; }
64 if (flag) uart_putchar('0'+cnt);
65 cnt = 0;
66 while (n >= 1000UL) { flag = 1; cnt++; n -= 1000UL; }
67 if (flag) uart_putchar('0'+cnt);
68 cnt = 0;
69 while (n >= 100UL) { flag = 1; cnt++; n -= 100UL; }
70 if (flag) uart_putchar('0'+cnt);
71 cnt = 0;
72 while (n >= 10UL) { flag = 1; cnt++; n -= 10UL; }
73 if (flag) uart_putchar('0'+cnt);
74 cnt = 0;
75 uart_putchar('0'+n);
76 return;
77}
78
79void ROM_putstring(const char *str, uint8_t nl) {
80 uint8_t i;
81
82 for (i=0; pgm_read_byte(&str[i]); i++) {
83 uart_putchar(pgm_read_byte(&str[i]));
84 }
85 if (nl) {
86 uart_putchar('\n'); uart_putchar('\r');
87 }
88}
This page took 0.247341 seconds and 4 git commands to generate.