Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 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 для передачи команды */
Поделиться с друзьями: