Курсовая работа: Проектирование удаленного устройства индикации
3.6 Проектированиепроцедурыmain()
Процедураmain{) работаетследующимобразомпосле инициализациивсеузловAVRипериферийныхустройств, разрешаетсявыполнениевсехпрерываний. Послеэтогопрограмма ждетсрабатываниятаймера, которыйнастроентакимобразом, что оннемногочаще, чемможетпроисходитьпрерываниеотУСАПП. Сигналомтого, чтотаймер 0 сработалслужитфактустановки глобальнойпеременнойTmrOFlagв 1, чтоделаетсяобработчиком прерыванийтаймера.
Затем, всевремя, покакольцевойбуфернебудетпуст, происходитсчитываниеданныхизнего. Считанныйбайтпомещается встроку-массивOutString[], иувеличиваетсясчетчикпринятых байт.
Послеэтогопроверяется, анебыллипоследнийпринятыйиз буферабайтпризнакомокончаниястроки. Еслида, товрежиме автозаписиэтастрокавыводитсянадисплей (заисключением последнегосимволаконцастроки). Послеэтогострокаобнуляется исчетчикпринятыхбайтустанавливаетсявноль.
Влюбомслучаепроисходитсбросфлагатаймеравнольи происходитожиданиеследующегосрабатываниятаймера.
4. Листингпрограммы
Файлмакроопределенийmy_header.h:
^define BYTE unsigned char ttdefine WORD unsigned int
ttdefine READ_STATUS_COMMAND 0x39
ttdefine DATA_WRITE_COMMAND 0x32
tfdefine COMMANDjmTE_COMMAND ОхЗА
// Установкарегистров
^define SET_CURSOR_COMMAKD 0x21
tfdefine SET_OFFSET_COMMAND 0x22
#define SET_ADDRESS_COMMAND 0x24
// Установкаконтрольногослова
#define SET_TEXT_HOME_ADDRESS_COMMAND 0x^0
fldefine SET_TEXT_AREA_COMMAHD0x41
#define SET_GR№HIC_HOME_ADDRESS_CO№1AND 0x42
#define SET_GRAPHIC_AREA_CCMMAND0x43
// Константыустановкирежима
^define OR_MODE0x80
tfdefine EXOR_MODE0x81
^define ANDJMODE0x83
#define TEXT_ATTRIBUTE_MODE0x84