Хотел тебе написать прогу но у самого голова опухла   

  я тоже новичек в этом деле.
Думаю тебя устроит простой вариант :  
 
 кнопки a и s прибовляют z и x уменшают 
 
 Написано в AVR Studio 5 если будут проблемы с модулем delay.h то надо включит оптимизацию.
хотя его можно удалить он сдесь ненужен
// DEFINE___________________________________________________________
#define F_CPU 8000000UL // Скорость мк 8 Мгц
#define BAUD 9600L
#define CR 0x13
#define LF 0x10
// INCLUDE__________________________________________________________
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <stdlib.h>
// VARIABLES________________________________________________________
volatile char temp;
// INTERRUPT________________________________________________________
ISR(USART_RX_vect)
{
	temp=UDR;
	switch (temp)
	{
	case 'a': OCR0A=OCR0A+10; break;
	case 'z': OCR0A=OCR0A-10; break;
	case 's': OCR0B=OCR0B+10; break;
	case 'x': OCR0B=OCR0B-10; 
	}
}
// INIT FUNCTIONS___________________________________________________
void port_init(void)
{
	DDRB=0xff;
	PORTB=0x00;
	DDRD=0xff;
	PORTD=0x00;
}
void pwm_init(void) // Выводы OC0A и OC0B шим
{
	TCCR0A|=_BV(WGM00)|_BV(WGM01)|_BV(COM0B1)|_BV(COM0A1);
	TCCR0B|=_BV(CS02);
	OCR0A=0x00;
	OCR0B=0x00;
}
void usrt_init(void)  // 8bit 1stop NOParity
{
	UCSRB|=_BV(RXEN)|_BV(TXEN)|_BV(RXCIE);
	UCSRC|=_BV(UCSZ0)|_BV(UCSZ1);
	UBRRH=(F_CPU/16/BAUD-1)>>8;
    UBRRL=(F_CPU/16/BAUD-1)&0xff;
	sei();
}
// FUNCTIONS________________________________________________________
void usrt_send(char data)
{
	while(!(UCSRA&_BV(UDRE)));
	UDR=data;
}
// MAIN FUNCTION____________________________________________________
int main(void)
{
	port_init();
	usrt_init();
	pwm_init();
	usrt_send('o');
	usrt_send('k');
    	
    while(1)
    {
       
    }
}