#ifndef F_CPU
#define F_CPU 16000000UL
#endif

#include <avr/io.h>
#include <util/delay.h>
static void uart_init(uint32_t baud){
  uint16_t ubrr=(F_CPU/(16UL*baud))-1; UBRR0H=ubrr>>8; UBRR0L=ubrr;
  UCSR0C=(1<<UCSZ01)|(1<<UCSZ00); UCSR0B=(1<<TXEN0);
}
static void tx(uint8_t b){ while(!(UCSR0A&(1<<UDRE0))); UDR0=b; }
static void send16(uint16_t v,uint8_t *crc){ tx(v&0xFF); tx(v>>8); *crc^=(v&0xFF); *crc^=(v>>8); }
int main(void){
  uart_init(57600);
  volatile uint16_t vbat=1680, curr=520, status=1;
  for(;;){
    uint8_t crc=0; tx(0xA5); tx(0x5A);
    send16(vbat,&crc); send16(curr,&crc); send16(status,&crc);
    tx(crc);
    _delay_ms(100);
  }
}
