int main(void){ usart_init(BAUDRATE); TCCR1A |= (1<<COM1A1)|(1<<COM1B1)|(1<<WGM11); TCCR1B |= (1<<WGM12)|(1<<WGM13)|(1<<CS10); ICR1=0xFFFF; sei(); #ifdef MASTER rx_check = 1; usart_write("atz0\r"); _delay_ms(500); usart_write("atn=lelamp"); _delay_ms(200); usart_write("atp=1234"); _delay_ms(200); usart_status.usart_ready = 0; rx_check = 0; #endif while(1){ if(usart_status.usart_ready){ uint16_t val = usart_rx_buffer[1]<<8|usart_rx_buffer[2]; if(usart_rx_buffer[0] == OA_NUM){ OCR1A = val; }else if(usart_rx_buffer[0] == OB_NUM){ OCR1B = val; }else{ //if command not found: echo. usart_write_str(usart_rx_buffer); } usart_status.usart_ready = 0; } } }
//------------------------------------------------------------------------------ void usart_write_P (const char *Buffer,...) { va_list ap; va_start (ap, Buffer); int format_flag; char str_buffer[10]; char str_null_buffer[10]; char move = 0; char Base = 0; int tmp = 0; char by; char *ptr; //Ausgabe der Zeichen for(;;) { by = pgm_read_byte(Buffer++); if(by==0) break; // end of format string if (by == '%') { by = pgm_read_byte(Buffer++); if (isdigit(by)>0) { str_null_buffer[0] = by; str_null_buffer[1] = '\0'; move = atoi(str_null_buffer); by = pgm_read_byte(Buffer++); } switch (by) { case 's': ptr = va_arg(ap,char *); while(*ptr) { usart_write_char(*ptr++); } break; case 'b': Base = 2; goto ConversionLoop; case 'c': //Int to char format_flag = va_arg(ap,int); usart_write_char (format_flag++); break; case 'i': Base = 10; goto ConversionLoop; case 'o': Base = 8; goto ConversionLoop; case 'x': Base = 16; //**************************** ConversionLoop: //**************************** itoa(va_arg(ap,int),str_buffer,Base); int b=0; while (str_buffer[b++] != 0){}; b--; if (b<move) { move -=b; for (tmp = 0;tmp<move;tmp++) { str_null_buffer[tmp] = '0'; } //tmp ++; str_null_buffer[tmp] = '\0'; strcat(str_null_buffer,str_buffer); strcpy(str_buffer,str_null_buffer); } usart_write_str (str_buffer); move =0; break; } } else {