#include <avr/io.h>
#include <avr/interrupt.h>//библиотека прерываний
void USART_Init( unsigned int baudrate );
unsigned char USART_Receive( void );
void USART_Transmit(unsigned char data);
void init_PWM(void);
void init_PWM(void)
{
TCCR1A = (1 << COM1B1) | (1 << WGM11);
TCCR1B = (1 << WGM12) | (1 << CS11);
TIMSK |= (1 << OCIE1A);
DDRB |= (1 << PB4);
}
int main( void ) //Главная функция
{
USART_Init(12); //Скорость соединения
init_PWM();
for(;;)
{
unsigned char str = UDR;
int PWM;
PWM = (int)str;//
if (str =='2')//здесь работает хорошо
{
OCR1B = 100;
}
else
OCR1B = str;//не выполняется точнее выполняется но не верно на выходе постоянно одно значение
USART_Transmit( USART_Receive() ); //так для отладки
}
}
void USART_Init( unsigned int baudrate ) //Функция инициализации USART
{
UBRRH = (unsigned char) (baudrate>>8);
UBRRL = (unsigned char) baudrate;
UCSRA = (1<<U2X); //Удвоение скорости
UCSRB = ( ( 1 << RXEN ) | ( 1 << TXEN ) ); //Разрешение на прием и н апередачу через USART
UCSRC = (1<<USBS) | (3<<UCSZ0);
}
unsigned char USART_Receive( void ) //Функция приема данных
{
while ( !(UCSRA & (1<<RXC)) ); //Ожидание приема символа
return UDR; //Возврат символа
}
void USART_Transmit( unsigned char data ) //Функция отправки данных
{
while ( !(UCSRA & (1<<UDRE)) ); //Ожидание опустошения буфера приема
UDR = data; //Начало передачи данных
}
в принципе коменты есть но повторюсь сам USART рботает без ошибок, чувствую нужно прерывае но я новичок, так что я запутался Мяу


