diff options
author | VG <vg@devys.org> | 2015-08-26 18:45:01 +0200 |
---|---|---|
committer | VG <vg@devys.org> | 2015-08-26 18:45:01 +0200 |
commit | 7346cfaad4d969db060f3c7ae242ea93f4fff5c0 (patch) | |
tree | 3d3a09a29f783270b8da931e3c879234553ec43f /softserial.c | |
download | avr-7346cfaad4d969db060f3c7ae242ea93f4fff5c0.tar.gz avr-7346cfaad4d969db060f3c7ae242ea93f4fff5c0.tar.bz2 avr-7346cfaad4d969db060f3c7ae242ea93f4fff5c0.zip |
first commitboo-standby-watcher-last-with-amp
Diffstat (limited to 'softserial.c')
-rw-r--r-- | softserial.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/softserial.c b/softserial.c new file mode 100644 index 0000000..cbec672 --- /dev/null +++ b/softserial.c @@ -0,0 +1,33 @@ + +#define baud 9600 +#define serial_bit_delay 1000000/baud +#define SERIAL_LOW() PORTB &= ~_BV(PB4) +#define SERIAL_HIGH() PORTB |= _BV(PB4) + +// write out a byte as software emulated Uart +void serial_putchar(uint8_t byte) +{ + uint8_t mask; + SERIAL_LOW(); // signal start bit + _delay_us(serial_bit_delay); + for (mask = 0x01; mask; mask <<= 1) { + if (byte & mask) { // choose bit + SERIAL_HIGH(); // send 1 + } else { + SERIAL_LOW(); // send 0 + } + _delay_us(serial_bit_delay); + } + SERIAL_HIGH(); //signal end bit + _delay_us(serial_bit_delay); +} + +void serial_puts(const char* str) +{ + while (*str) { + serial_putchar((uint8_t)*str); + ++str; + } + serial_putchar('\r'); + serial_putchar('\n'); +} |