Урок 8.2. Прехвърляне на данни чрез UART в AVR микроконтролери. Продължение

По искане на работниците беше решено урокът за трансфер на данни чрез UART да продължи. Според мен основният проблем при комуникацията между два микроконтролера е получаването на данни.

Да вземем за пример два Atmega8. Задачата на първия микроконтролер е да изпрати масив от символи, а задачата на втория е да ги получи и да ги покаже на LCD екрана. Диаграмата ще изглежда така:

урок

Предаващият код на микроконтролера ще изглежда така:

#include #include void main (void) < char massiv[5]=; bit on=0; int i=0; PORTC=0x01; DDRC=0x00; UCSRA=0x00; UCSRB=0x08; UCSRC=0x86; UBRRH=0x00; UBRRL=0x33; while (1) < if(PINC.0==0 && on==0) < UDR=massiv[i]; i++; if(i>4) < i=0; >включено = 1; > ако (PINC.0! = 0) < on=0; >>; >

При натискане на бутона се предава 1 елемент от масива от символи, при повторно натискане на бутона следващият символ и т.н. В резултат на това трябва да се предаде масивът "здравей". Променливата on е необходима, за да се изключи подскачането на бутона (за предаване на следващия знак, освободете бутона и след това натиснете).

Вторият микроконтролер получава данни в прекъсване. Кодът за прекъсване CodeWizard създава автоматично. Обработката е достатъчно голяма, не трябва да се страхувате. Можете да видите този код отделно, като поставите отметки в квадратчетата, както е показано на фигурата, и щракнете върху Файл - Преглед на програмата.

следващия знак

Нека да разберем нашия алгоритъм, за нас най-важното е самото прекъсване:

Приемането се извършва в прекъсване, т.е. веднага след като символът пристигне, се задейства прекъсване - характерът се записва в първия елемент на масива, броячът се увеличава. Следващото прекъсване получава следващия знак и т.н. Веднага ще направя резервация, че броят на входящите знаци е известен предварително.

Сега остава само да се покаже резултатът на екрана, за това всички символи се показват в цикъла.