Добрый день. Нужна помощь, не могу разобраться с UARTом. Какой код в С (я использую кодевижн) нужно написать для Тини2313, что бы посылать данные с терминала на уарт и считывать эти данные на терминале, самый простой вариант строка в несколько символов. Прочел кучу материала и не могу разобраться. тока учусь )
"Неправильно ты, дядя Федор, вопрос задаешь" Не видно собственной работы. Правильный вопрос будет таким: я тут код написал, вот он в тегах, только он не работает, потому что происходит вот это, а должно происходить вот то. Гляньте где ошибка, пожалуйста. Вам тут же скажут про симуляцию в Протеусе, про номер урока курса авр, а потом и на ошибку в коде. А когда вопрос звучит не как вопрос, а как: у меня не получается, сделайте за меня - я бы даже не почесался .
Radist писал(а):"Неправильно ты, дядя Федор, вопрос задаешь" Не видно собственной работы. Правильный вопрос будет таким: я тут код написал, вот он в тегах, только он не работает, потому что происходит вот это, а должно происходить вот то. Гляньте где ошибка, пожалуйста. Вам тут же скажут про симуляцию в Протеусе, про номер урока курса авр, а потом и на ошибку в коде. А когда вопрос звучит не как вопрос, а как: у меня не получается, сделайте за меня - я бы даже не почесался .
в том то все и дело, мастер в кодевижн создал заготовку, а дальше я не могу сообразить ) я не могу понять как инициализировать уарт на прием и передачу?
AlexNail писал(а): что нужно прописать в коде, что бы он принимал и отсылал полученые данные?
Даташит 118 страница пример передачи данных, 121 пример приёма.
я прописываю этот код, а компилятор выдает ошибку. кричит что то по поводу while, его там не должно быть. эти функции я прописываю перед void main. правильно?
// Timer/Counter 1 initialization // Clock source: System Clock // Clock value: 4000,000 kHz // Mode: Fast PWM top=0x03FF // OC1A output: Non-Inv. // OC1B output: Non-Inv. // Noise Canceler: Off // Input Capture on Falling Edge // Timer1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off
TCCR1A=0xA3; TCCR1B=0x09;
TCNT1H=0xFC; TCNT1L=0x01;
ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00;
OCR1BH=0x00; OCR1BL=0x00;
// External Interrupt(s) initialization // INT0: Off // INT1: Off // Interrupt on any change on pins PCINT0-7: Off GIMSK=0x00; MCUCR=0x00;
Один из главных вопросов, который может придти на ум после первого урока, - а что же произойдёт, когда выполнится весь код функции main()? На самом деле не произойдёт ничего особенного: микроконтроллер просто "сбросится", и вся программа выполнится снова... и снова... Потому что компилятор сразу после кода функции main() помещает специальную команду программного сброса. Во встраиваемых приложениях нам нужно, чтобы программа выполнялась бесконечно с момента включения питания и до его выключения. А если мы позволяем программе полностью выполняться, сбрасываться и снова выполняться, то это как раз похоже на такую организацию приложения, при которой программа выполняется, пока на микроконтроллер подается питание. Но такой вариант может работать только в некоторых ограниченных случаях, и, выполняя программу в таком "цикле", вы делаете её весьма ущербной. Достигнув конца программы и выполнив сброс, микроконтроллер окажется в самом начале кода, и ему придётся выполнять всю инициализацию, включая код C0. И как бы ни была коротка инициализационная часть, это сделает "цикл" неполноценным: в самом деле, нет никакой необходимости в инициализации всех SFR-регистров и глобальных переменных при каждом выполнении программы, и это, конечно же, замедлит приложение. Поэтому лучше заняться разработкой особого, т.н. "главного цикла" приложения. Давайте рассмотрим основные варианты организации циклов на языке Си.
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
// главный цикл приложения while(1) { // 1. Включаем выводы 0-7 и ждём 1/4 секунды PORTA = 0xff; TMR1 = 0; // обнуляем счётчик while (TMR1 < DELAY) { } // просто ждём
// 2. Выключаем все выводы и ждём 1/4 секунды PORTA = 0x00; TMR1 = 0; // обнуляем счётчик while ( TMR1 < DELAY) { } // просто ждём
} // главный цикл } // main
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.