Функция update_task_status требует в качестве параметров идентификационного номера задачи и кода желательного изменения состояния задачи. Специфическая задача используется, чтобы конфигурировать PORTA[3:0]
PORTA[7], активируется триггер-защелка, соответствующий выбранной задаче. Это позволяет передать модифицированное состояние задачи, представленное на выходах порта T контроллера 68HC12 на светодиоды и, таким образом, показать состояние задачи на дисплее.Алгоритм программы на UML для реализации этой функции представлен на рис. 8.24.
Рис. 8.24.
Алгоритм UML для функции update_task_status//******************************************************************
//имя файла: realtime.с
//авторы: Steve Barrett and Daniel Pack
//разработан: 1 июля, 2004
//последняя редакция: 1 июля, 2004
//******************************************************************
//включенные файлы ****************************************
#include <912b32.h>
//функции-прототипы****************************************
void initialize_ports(void); //инициализация портов
void initialize_LCD(void); //инициализация ЖКД
void putchars(unsigned char); //функция поддержки ЖКД - ввести символ
void putcommands(unsigned char); // функция поддержки ЖКД - ввести команду
void delay_5ms(void); //задержка на 5 мс
void delay_100us(void); //задержка на 100 мкс
void update_task_status(unsigned char task, char task_status);
//изменить состояние задачи
//глобальные переменные************************************************
//главная программа****************************************************
void main(void) {
asm(" .area vectors(abs)\n" //inline assembly statement
" .org 0xFFF8\n" //initialize 68HC12 B32 reset vector
" .word 0x8000, 0x8000, 0x8000, 0x8000\n"
" .text");
initialize_ports(); //инициализировать порты
initialize_LCD(); // инициализировать ЖКД
update_task_status(0x00, 'R') ; //изменить состояние задачи
}
//******************************************************************
//initialize_ports: provides initial configuration for I/O ports
//******************************************************************
void initialize_ports(void) {
DDRA = 0xFF; //установить PORTA как выходной - управляющие линии
// демультиплексора
DDRT = 0xFF; // установить PORTT как выходной - состояние задачи
DDRB = 0xFF; // установить PORTB как выходной - порт данных для ЖКД
CTDRDLC = 0xFF; // установить PORT DLC как выходной - сигналы
//управления для ЖКД
DDRP = 0x0F; // установить PORTP[3:0] как выходной, PORT[7:4] как
//входной - для клавиатуры
PORTA = 0xFF; //установить для PORTA все линии декодера высокоомными (Hi-Z)
}
/****************************************************************/
/****************************************************************/