logo
RAM-диск на SDRAM памяти под управлением микроконтроллера

4.2 Разработка алгоритма ПО

Шаги разработок программного обеспечения следующие:

постановка задачи;

разработка последовательности действий микропроцессора, обеспечивающей выполнение поставленных задач;

написание текстов программ по готовому алгоритму и подготовка их к трансляции с помощью текстового редактора;

компиляция программы ;

исправление ошибок, выявленных компилятором, с помощью текстового редактора, перетрансляция;

создание и сохранение библиотек часто используемых объектных модулей с именем LIB-51;

линковка результирующих перемещаемых объектных модулей и распределение памяти под объектную программу с помощью RL51;

если требуется использование программируемого ПЗУ, программа, прожигаемая в ПЗУ, создается ОН;

проверка результирующей программы осуществляется символьным отладчиком или другими программными средствами.

Выбираем следующий алгоритм работы RAM-диска:

основная программа представляет собой бесконечный цикл, в теле которого осуществляется опрос состояния байта статуса;

в зависимости от значения байта статуса выполняется вызов соответствующей подпрограммы обработки данного события и последующий возврат в основной цикл.

Таблица 4.1Значения байта статуса

Значение байта status

Значение события

01

Чтение байта из SDRAM. Адрес читаемого байта хранится в специальной переменной Adr_Read

02

Чтение блока байт из SDRAM. Адрес читаемого первого байта хранится в специальной переменной Adr_Read_From, адрес читаемого последнего байта хранится в специальной переменной Adr_Read_To

03

Запись байта в SDRAM. Адрес записываемого байта хранится в специальной переменной Adr_Write

04

Запись блока байт в SDRAM. Адрес первого записываемого байта хранится в специальной переменной Adr_Write_From, адрес последнего записываемого байта хранится в специальной переменной Adr_Write_To

На рисунках 4.1 и 4.2 приведены блок-схемы алгоритмов основной программы и прерывания от внешнего устройства RI соответственно.

Рисунок 4.1 Алгоритм основной программы

Рисунок 4.2 Алгоритм прерывания RI

Выводы

В рамках курсового проекта было разработано устройство RAM-диск, позволяющее считывать, записывать и хранить информацию в модулях динамической памяти типа SDRAM под управлением микроконтроллера.

Разработаны структурная и принципиальная схемы устройства.

Выполнен обоснованный выбор элементной базы.

Разработано программное обеспечение.

Приложение А Текст программы

компьютерное устройство диск память

GKI: PROCEDURE (V_ADR,V_END) BYTE;

DECLARE I BYTE;

DO I=0 TO V_END;

P2=V_ADR;

CALL TIME (30);

P1=01H;

V_ADR=V_ADR+1;

END;

END GKI;

SET_STATUS: PROCEDURE;

IF ADR_REC=01H THEN

DO;

STATUS=01H;

ADR_READ=ADR_REC-1;

END;

IF ADR_REC=02H THEN

DO;

STATUS=02H;

ADR_READ_FROM=ADR_REC-1;

ADR_READ_TO=ADR_REC-2;

ADR_READ=ADR_READ_FROM;

END;

IF ADR_REC=03H THEN

DO;

STATUS=03H;

ADR_WRITE=ADR_REC-1;

V_WRITE=ADR_REC-2;

END;

IF ADR_REC=04H THEN

DO;

STATUS=04H;

ADR_WRITE_FROM=ADR_REC-1;

ADR_WRITE_TO=ADR_REC-2;

ADR_WRITE=ADR_WRITE_FROM;

END;

END SET_STATUS;

RECEIVE_INT: PROCEDURE;

DECLARE I BYTE;

DECLARE V BYTE;

ADR_REC=SBUF;

IF SBUF=FFH THEN CALL SET_STATUS;

ELSE ADR_REC=ADR_REC+1;

END RECEIVE_INT;

RECEIVE_INTV:PROCEDURE INTERRUPT 5;

CALL RECEIVE_INT;

END KEY_INTV;

INIT_GKI: PROCEDURE;

DECLARE I BYTE;

CALL TIME (150);/* DELAY OF TIMER 15MS*/

P2=0CH; /*SET PARAM*/

CALL TIME (100);

P2=0CH;

CALL TIME (30);

P2=08H;

DO I=1 TO 10;

CALL TIME (100);

END;

P2=20H;

DO I=1 TO 10;

CALL TIME (100);

END;

P2=20H;

DO I=1 TO 10;

CALL TIME (100);

END;

P2=04H;

CALL TIME (40);

P2=18H;

END INIT_GKI;

STATUS_01 PROCEDURE;

CALL GKI (90H,94H);

SBUF=ADR_READ;

END STATUS_01;

STATUS_02 PROCEDURE;

DECLARE I BYTE;

CALL GKI (90H,94H);

D0 I=ADR_READ_FROM TO ADR_READ_TO;

SBUF=ADR_READ;

ADR_READ=ADR_READ+1;

END;

END STATUS_02;

STATUS_03 PROCEDURE;

CALL GKI(95H,98H);

ADR_WRITE=V_WRITE;

END STATUS_03;

STATUS_04 PROCEDURE;

DECLARE I BYTE;

CALL GKI(95H,98H);

DO I=ADR_WRITE_FROM TO ADR_WRITE_TO;

ADR_WRITE=V_WRITE;

ADR_WRITE=ADR_WRITE+1;

END;

END STATUS_03;

MAIN_PROG:DO;

DECLARE STATUS BYTE PUBLIC;

DECLARE V_TMOD BYTE AT (89H) MAIN PUBLIC;

DECLARE V_TCON BYTE AT (88H) MAIN PUBLIC;

DECLARE V_TH0 BYTE AT (8CH) MAIN PUBLIC;

DECLARE V_TL0 BYTE AT (8AH) MAIN PUBLIC;

DECLARE V_TH1 BYTE AT (8DH) MAIN PUBLIC;

DECLARE V_TL1 BYTE AT (8BH) MAIN PUBLIC;

DECLARE ADR_READ BYTE PUBLIC;

DECLARE ADR_WRITE BYTE PUBLIC;

DECLARE ADR_READ_FROM BYTE PUBLIC;

DECLARE ADR_READ_TO BYTE PUBLIC;

DECLARE ADR_WRITE_FROM BYTE PUBLIC;

DECLARE ADR_WRITE_TO BYTE PUBLIC;

DECLARE V_WRITE BYTE PUBLIC;

DECLARE MSG(9) BYTE AT (90H) MAIN;

MSG(0)=25H;/*R*/

MSG(1)=54H;/*E*/

MSG(2)=14H;/*A*/

MSG(3)=44H;/*D*/

MSG(4)=75H;/*W*/

MSG(5)=25H;/*R*/

MSG(6)=94H;/*I*/

MSG(7)=45H;/*T*/

MSG(8)=54H;/*E*/

STATUS=00H;

CALL INIT_GKI;

ENABLE;

CHECK_STATUS:DO WHILE STATUS<10H;

IF STATUS=00H THEN CALL STATUS_00;

IF STATUS=01H THEN CALL STATUS_01;

IF STATUS=02H THEN CALL STATUS_02;

IF STATUS=03H THEN CALL STATUS_03;

END CHECK_STATUS;

END MAIN_PROG;

Приложение В Таблица символьной кодировки

Приложение С Принципиальная схема устройства