Echter is DCC prima te doen middels een timertje (en bijbehorende interrupts). Welliswaar hier wel op een AVR, maar voor een PIC geldt deze basis ook.
#include <stdio.h>#include <strings.h>#define BUFFER_SIZE 128unsigned char buffer[BUFFER_SIZE];unsigned int buffer_length;void trans();int main( int argc, char **argv ){ int index; buffer[0] = 0xb7; /* 101110111 binary */ buffer_length = 1; for( index = 0; index < 256; index++ ) trans(); putchar( '\n' );}void trans(){ static unsigned char bit_mask = 0; static unsigned char byte = 0; static unsigned int index = 0; static unsigned char bit = 0; static unsigned char phase = 0; if( phase == 0 ) { if( bit_mask == 0 ) { bit_mask = 0xff; byte = buffer[index++]; if( index >= buffer_length ) index = 0; } bit = ( byte & 0x80 ) >> 7; phase = 4 >> bit; byte <<= 1; bit_mask <<= 1; } if( ( phase << bit ) > 2 ) putchar( '+' ); else putchar( '-' ); phase--;}