Пт авг 03, 2018 13:48:17
#include <avr/io.h>
#include <avr/interrupt.h> //для работы с прерываниями
unsigned char flag;//флаг успешного приема сообщения
ISR(USART_RXC_vect )
{
unsigned char data,status;
data = UDR0; //читаем регистр данных
status=UCSR0A; //читаем регистр флагов UCSRA в переменную status
flag=1;//поднять флаг приема данных
}//конец приема по uart
void UART_Send_Char(unsigned char c)
{//передача символа по UART
while (!(UCSR0A&(1<<UDRE0))) ;
UDR0 = c;
}
void UART_Send_Str(char str[])
{//передача строки по UART
unsigned char i = 0;
while (str[i]!='\0')
{
UART_Send_Char(str[i]);
i++;
}
}
int main(void)
{
ChipConfig();//конфигурация мк
UART_Init();//инициализация UART
flag=0; //сбросить флаг успешного приема
sei(); // Глобально разрешаем прерывания
UART_Send_Str("MKPROG.RU"); //передать строку
while(1)
{//начало бесконечного цикла
if(flag)
{
UART_Send_Str("priem"); //передать строку
flag=0;
}
}//конец бесконечного цикла
}//конец программы
void UART_Init(void)
{
UBRR0H = 0; //UBRR = 8000000/(16*9600) – 1 = 51 (при 8мгц)
UBRR0L = 0x67; //скорость обмена 9600 бод (0x67 при 16мгц)
UCSR0B = (1<<RXCIE0)|(1<<RXEN0)|(1<<TXEN0);//разр. прерыв при приеме, разр приема, разр передачи.
UCSR0C = (1<<UCSZ01)|(1<<UCSZ00);//размер слова – 8 бит (UCSR0C регистр формата пакета)
//UCSR0A = 0; //очистить все флаги
UDR0 = 0; //обнулить регистр uart
}
void ChipConfig (void)
{// конфигурация Мк
PORTB=0x00; //Обнуление портов
PORTC=0x00;
PORTD=0x00;
DDRB=0b11111111; //все линии на выход
DDRC=0b11111110; //PC0 на вход. Вход ADC0
DDRD=0b11110010; //PD2 и PD3 на вход (кнопки Power и Level) PD0 RX вход
}
Пт авг 03, 2018 13:52:02
Пт авг 03, 2018 14:00:34
Пт авг 03, 2018 15:38:45
Пт авг 03, 2018 21:53:37
Сб авг 04, 2018 07:04:29
Ну, наверное тем, что оно прописано в avr/iom168pa.h (вызывается из avr/io.h). В отличие от. Открой дерево проекта, найди в нем iom168pa.h и щелкни дважды по нему. Вектора описаны в конце.Скажите,а чем rx отличается от rxc?
Может где-то отключены? Типа дефолтное значение у новых Студий другое. Или сам отключил, да забыл.Странно,у меня не одного варнинга,все компилируется без проблем.
Любая функция перед ее вызовом должна быть объявлена. Стандартные функции, которые ты можешь вызвать, объявлены в заголовочных файлах (.h). А тут GCC компилирует main(), попадается строчкаИ так ли важно ставить маин в конец кода?
UART_Init();//инициализация UART
void UART_Init(void);
Сб авг 04, 2018 20:14:28
Вс авг 05, 2018 02:02:12
Пожалуйста. А плюсик нажать? Который слева?..огромное спасибо вам за развернутый ответ.
Вероятно, вот этопервый символ содержит в себе какой то мусор
UDR0 = 0; //обнулить регистр uart