Чтение онлайн

ЖАНРЫ

Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С

Пак Дэниэл Дж.

Шрифт:

}

//********************************************************************

//RTI_isr: подпрограмма прерывания по RTI

//********************************************************************

void RTI_isr(void) {

 unsigned int new_count;

 unsigned int pulse_count;

 float max_count = 65535.0;

 new_count = PACNT; //передается
текущее число импульсов, записанное в PA

 if (new_count > old_count) //определяется приращение числа импульсов

pulse_count = new_count - old_count;

 else pulse_count = (unsigned int)(max_count-(float)(old_count = new_count));

 RTI_int_count = RTI_int_count + 1;// изменяется показание счетчика

//RTI-прерываний

 if (RTI_int_count == 10) // изменяется показание ЖКД через

// каждые 10 прерываний

 {

display_count_LCD(pulse_count); //изменяется ЖКИ

RTI_int_count = 0; //сбрасывается счетчик прерываний RTI

 }

 old_count = new_count;

 RTIFLG = 0x80; //сбрасывается RTI

}

// ********************************************************************

// initialize_RTI:конфигурирует регистры, связанные с RTI

// - регистр RTICTL

// -- разрешает работу модуля RTI установкой бита RTIE

// -- период RTI в 32.768 мс

// - сбрасывает бит RTIF в регистре флагов (RTIFLG)

// ********************************************************************

void initialize_RTI(void) {

 RTICTL = 0x86; // устанавливается период RTI на 32.768 мс

 RTIFLG = 0x80; //сбрасывается флаг RTIF

}

// ********************************************************************

//initialize_PA: инициализация модуля аккумулятора импульсов

// ********************************************************************

void initialize_PA(void) {

 TIOS = 0x00; // Конфигурирует канал 7 для работы

 TCTL1 = 0x00; // счетчика импульсов оптического кодера

 OC7M = 0x00;

 TSCR = 0x80; // устанавливает бит разрешения работы таймера

 PACTL = 0x70; // разрешает работу РА, режим счета событий,

// по фронту импульса,

}

/********************************************************************/

/* initialize_LCD:
инициализации ЖКИ */

/* передает на ЖКИ стартовую последовательность команд управления */

/* - PORTDLC[3]: линия управления RS ЖКИ */

/* - PORTDLC[2]: линия управления E для ЖКИ */

/* - PORTB: двунаправленная магистраль данных для ЖКИ */

/********************************************************************/

void initialize_LCD(void) {

 delay_5ms;

 delay_5ms;

 delay_5ms; /*ожидание в течение 15 мс перед включением ЖКИ */

 putcommands(0x38); /*разрядность данных интерфейса 8 бит */

 delay_5ms; /*задержка */

 putcommands(0x38); /*интерфейс в 8 бит */

 delay_100us; /*задержка */

 putcommands(0x38); /* разрядность данных интерфейса 8 бит */

 putcommands(0x38); /* интерфейс в 8 бит */

 putcommands(0x0C); /*включение дисплея */

 putcommands(0x01); /*очистка дисплея */

 putcommands(0x06); /*установка режима инкремента адреса */

 putcommands(0x00);

 putcommands(0x00);

 putcommands(0xC0); /*курсор на линию 2 знакоместо 1 */

 putchars('R'); /* вывести "PRM" - скорость */

/*в об/мин на строку 2 ЖКИ */

 putchars('P');

 putchars('M');

}

/********************************************************************/

/*putchars: функция посылает ASCII код для вывода на ЖКИ */

/********************************************************************/

void putchars(unsigned char c) {

 PORTB = c; /*вывести на порт PORTB код символа */

 PORTDLC = PORTDLC|0x08; /*установить RS в 1 для передачи данных */

 PORTDLC = PORTDLC|0x04; /*установить E в 1 */

 PORTDLC = 0x00; /* установить E и RS в 0 */

 delay_100us; delay_100us;

}

/********************************************************************/

/*putcommands: функция посылает команду управления ЖКИ */

/********************************************************************/

void putcommands(unsigned char d) {

 PORTDLC = PORTDLC&0xF7; /*установить RS в 0 для передачи команды */

Поделиться с друзьями: