Листинг программы

Файл макроопределений 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

^define INTERNAL_CG_ROM_MODE 0x80

tfdefine EXTERNAL_CG_RAM MODE 0x88

// Константы режима дисплея

#define DISPLAY_OFF0x90

^define CURSOR_ON_BLIHK_OFF0x92

^define CURSOR_ON_BLINK_OK0x93

#define TEXT_ON_GRAPHIC_OFF0x94

#define TEXT OFF_GRAPHIC_ON0x98

^define TEXT_ON_GRAPHIC_OnOX9C

// Размер курсора

#define ONE_LINE OxAO

tfdefine TWO_LINE OxAl

^define THREE_LINEOxA2

ttdefine FOUR_LINE ОхАЗ

^define FIVE_LINE OxA4

^define SIX_LINE OxA5

^define SEVEN_LINEOxA6

^define EIGHT_LINEOxA7

// Автоматическое чтение/данных

tfdefine SET_DATA_AUTO_WRITE_COMMAND OxBO

^define SET_DATA_AUTO_READ_COMMAND OxBl

^define AUTO_RESET_COMMANDOxB2

//

#define SCREEN_PEEK_CCMMANDOxEO

#define SCREEN_COPY_CC»1MANDOxE8

// Установка/сброс Оитов

tfdefine SET_BIT OxFO

^define RESET_BIT OxF8

^define BIT_0 OxFO

#define BIT_1 OxFl

ttdefine BIT_2 OxF2

^define BIT_3 OxF3

idefine BIT_4 OxF4

#define BIT_5 OxFS

^define BIT_6 OxF6

^define BIT_7OxF7

Файл главкой программы kurs.c;

/* Includes */ ^include <iom!28.h> ^include <ina90.h>

Sinclude "my_header.h"

^define USART_RX_BUFFER_SI2E 128

itdefine TmrOReload 4

static unsigned char TmrOFlag;

Static unsigned char USART_RxBuf[USART_RX_BUFFER_SIZE];

static volatile unsigned char USART_RxHead; static volatile unsigned char USART_RxTail;

static BYTE OutString[128];

// Процедуры инициализации устройств

void InitAVR(void);

void USART_Init( unsigned int baudrate );

void InitLCD(void);

void InitTimer(void);

void InitPortARead(void);

void InitPortAWrite(void)?

void InitPortCWrite(void);

// Процедуры для работы с УСАПП и LCD

unsigned char USART_Receive( void );

void Data«rite<BYTE Data);

void CommandWrite(BYTE Command);

void ReadStatus(void);

void ReadStatus2(void);

void SendCoimand{BYTE Command);

void SendlByteCommand(BYTE Data, BYTE Command);

void Send2ByteCommand(WORD Data, BYTE Command);

void SetCursorPointer(WORD Position)

void SetAddressPointer(WORD Address)

void ByteWriteToRam(WORD AddressPointer, BYTE Data)

void AutoWrite(BYTE Data);

void mainf void )

f

BYTE HumBytes = 0;

InitAVR();

_SEI(); /* Разрешить прерывания */

while (!)

{

if(TmrOFlag) // Произошло срабатывание таймера

{

BYTE rec = 0;

while(DatalnReceiveBuffer() != 0) // Пока буффер не пуст

{

rec = USART_Receive(); // Приняли байт из буффера

OutString[NumBytes] = Rebuild(rec); // Записали его в строку NumBytes-n-;// Увеличить счетчик принятых байт

if (rec == OxOD)// Конец строки - ?

f

/* Выводим строку на LCD в режиме AutoWrite*/

AutoWriteModefO, —NumBytes)

for(int i = 0; i <= NumBytes; i++) OutStringU] = 0;

NumBytes = 0; }

\

TmrOFlag = 0;

} )

}

/* Процедура инициализации USART */ void USART_Init( unsigned int baudrate ) t

unsigned char x;

/* Установить частоту */

UBRROH = (unsigned char) (baudrate»8) ;

UBRROL = (unsigned char) baudrate;

/* Включить приемник UART */ UCSRB = { (1 « RXCIE) | (1«RXEH) ) ;

У/Формат приема данных: 8 бит данных, 1 стоп-бит, проверка на четность UCSRC = (1«URSEL) I (3«UCSZO) | (1«UPM1) ;

/* Обнулить буффер приемника */ х = 0;

USARTJbcTail = х; USART_RxHead = х;

)

/* Процедура чтения из приемника */ BYTE USART_Receive( void }

{

unsigned char tmptail;

while ( USART_RxHead == USART_RxTail ) /* Ждем поступления данных */ ;

tmptail = USART_RxTail + 1; /* Рассчет индекса буффера */ USART_RxTail = tmptail;/* Сохранить новели индекс */

return USART_RxBuf[tmptail]; /* Вернуть данные */

>

unsigned char DatalnReceiveBuffer( void )

{

return ( USART_RxHead != USART_RxTail ); /* Возвращает О если буффер пуст */

}

/* Обработчик прерывания от приемника */ #pragma vector=USART_RXC_vect _interrupt void USART_RX_interrupt( void ) {

unsigned char data;

unsigned char tmphead;

/* Прочесть полученные данные */

data = UDR;

/* Рассчет нового индекса */

Перейти на страницу: 1 2

Другие публикации

Выбор и обоснование среды передачи данных
Среды передачи данных разделяются на две категории. Кабельная среда передачи (носитель) - с центральным проводником, заключенным в пластиковую оболочку. ...

Определение параметров модели биполярного транзистора в программе OrCAD 9.2
В настоящее время машинные методы все шире используются при разработке радиоэлектронной аппаратуры. Особенно большое эти методы имеют при проектировании интегральных ...

Меню

Copyright @2020, TECHsectors.ru.