Добавил:
Студент, если у тебя есть завалявшиеся работы, то не стесняйся, загрузи их на СтудентФайлс! Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Pz3

.docx
Скачиваний:
24
Добавлен:
16.10.2022
Размер:
359.48 Кб
Скачать

ФЕДЕРАЛЬНОЕ АГЕНТСТВО ЖЕЛЕЗНОДОРОЖНОГО ТРАНСПОРТА

Федеральное государственное бюджетное образовательное учреждение

высшего образования

«Петербургский государственный университет путей сообщения

Императора Александра I»

(ФГБОУ ВО ПГУПС)

Факультет «Автоматизация и интеллектуальные технологии»

Кафедра «Автоматика и телемеханика на железных дорогах»

Специальность 23.05.05 Системы обеспечения движением поездов

Специализация Автоматика и телемеханика на железнодорожном транспорте

Отчет по практическому заданию № 3

по дисциплине «Микропроцессорные информационно-управляющие системы 1»

М2 «Изучение принципов программирования платы расширения, содержащей Интервальный таймер с использованием интегрированной среды разработки языка программирования C++ Builder 5.»

Обучающийся

Курс IV

Группа

АР-709

дата

Баранов Д.А.

Преподаватель

Отметка о зачете, подпись, дата

доц. Чухонин В.М.

должность, Ф.И.О.

Санкт-Петербург

2020

Цель практического задания: изучение методов программирования больших интегральных схем (БИС) микроЭВМ МС2702 (KI-20):KP580BH53, KP580BB55, KP580BH59.

Назначение Интервального таймера и его структурная схема

Интервальный таймер предназначен для организации временных интервалов.

Рис. 1 – структурная схема интервального таймера

Определение числа байт константы, заданной по варианту

Вариант 1: реж. 2; n=3; дес.

215

214

213

212

211

210

29

28

27

26

25

24

23

22

21

20

0

0

0

0

0

0

0

0

0

0

0

0

0

0

1

1

По таблице определяем, что используется только младший байт. Следовательно:

n=0x03h

Составление управляющего слова интервального таймера

Выберем счётчик 0, что соответствует D7 и D6 = 00. Так как используется только младший байт, то значения D5 и D4 = 01. Для режима работы 2 значения D3, D2 и D1 устанавливаются равными соответственно 0, 1, 0. Так как по варианту код десятичный, то разряд D0 имеет значение 1. В результате получаем следующее управляющее слово:

D7

D6

D5

D4

D3

D2

D1

D0

0

0

0

1

0

1

0

1

Этапы разработки проекта «Timer»

1. Создать новый проект (методика описана в ПЗ №1,2):

2. Сохранить новый проект:

  • Открыть окно сохранения проекта: нажать быструю кнопку Save All в результате чего откроется окно Save Unit1 As.

  • В этом окне открыть директорию e:\Группа\Бригада\Фамилия\ и создать папку c именем Timer.

  • Сохранить файл реализации в папке Timer  с именем TimerUnit1.cpp.

  • Сохранить файл проекта в папке Timer с именем Timer.bpr.

3. Добавить в проект дополнительные файлы:

  • Добавление файла: Adsapi32.lib

  • Выполнить команду: Project=>Add To Project.

  • В открывшемся окне Add To Project найти и открыть папку: е:/Pcl836.

  • В данной папке найти файл: Adsapi32.lib и двойным кликом левой кнопки мыши включить его в файл проекта.

  • Добавление файла: DriverDataIO.cpp

  • Аналогично предыдущему, но без открытия папки e:/Pcl836 т.к. она уже открыта.

  • Выбрать файл: DriverDataIO и двойным кликом левой кнопки мыши включить его в файл проекта.

  • Добавление файла: DriverDataIO.h

  • Файл реализации клавишей F12 сделать активным в окне редактора кода.

  • Выполнить команду: File=>IncludUnitHdr.

  • В открывшемся окне UseUnit найти и выделить файл DriverDataIO и нажать кн. ОК и этот файл отражается в файле реализации в виде: #_include «DriverDataIO».

4. Визуальное  проектирование.

  • Перенести на форму компоненты:

  • выделить пиктограмму Button (OK) на стр. Standart

  • осуществить щелчок курсором мыши в нужном месте формы и на форме появится кнопка, которой C++Builder 5 присвоит имя Button1.

  • Занести текст в заголовки компонента Form1:

  • Щелчком левой кнопки мыши на пустом месте формы выделить компонент Form1.

  • Осуществить переход в окно Инспектора объектов на страницу Properties.

  • Изменить текст свойства Caption с Form1 на Timer.

  • Занести текст в заголовок компонента Button1:

  • Щелчком левой кнопки мыши по компоненту Button1 выделить компонент Button1.

  • Осуществить переход в окно Инспектора объектов на страницу Properties.

  • Изменить текст свойства Caption с Button1 на Пуск.

5. Создание обработчика событий для компонента Button1:

Осуществить двойной клик  левой кнопки мыши по компоненту Button1 на форме и в окне редактора кода, в файле реализации появится функция:

void_fastcall TForm1::Button1Click(TObject*Sender)

{

}

6. Программирование файла реализации:

  • #define BASE 0x240 – объявление базового адреса платы таймера (строка 5).

  • Функция Button1Click:(строки 18-38).

  • Строка 22: Открытие платы таймера (платы № 0 в списке устройств).

  • Строки 26…34: Инициализация структуры данных.

  • Строка 33: Занесение в порты таймера 6-ти (7-и) значений в порты таймера в соответствии со структурой данных (инициализация таймера)

  • Строка 37: Занесение в порты таймера 6-ти (7-ми для случая, если используется и старший байт константы n) значений в соответствии со структурой данных TDataIO DataIO[].

  • Строка 39: Закрытие платы таймера.

7. Компиляция проекта. Осуществляется нажатием быстрой клавиши Run или клавиши F9. Включение программы осуществляется одним кликом левой кнопки мыши по кнопке Пуск. Выключение программы осуществляется одним кликом левой кнопки мыши по кнопке Закрыть.

Отладка проекта – выполнение программы по шагам для выявления ошибок алгоритмического характера, которые не обнаруживаются при компиляции  и компоновке. Для этого: курсор подводится к выбранной строке кода файла реализации + клик левой кнопкой мыши, и нажимается клавиша F4.

Прекращение отладки: Ctrl+F2.

Блок-схема алгоритма проекта

Рис. 2 – блок- схема алгоритма проекта

Программный листинг файла реализации

TimerUnit.cpp 19.11.2020 16:58:36 Page 1 of 1

1: //---------------------------------------------------------------------------

2:

3: #include <vcl.h> // директива перепроцессора подключает файлы

4: // визуальных компонентов

5: #pragma hdrstop // директива перепроцессора указывает компилятору

6: // конец списка общих файлов

7: #define BASE 0x240 // объявление базового адреса платы таймера

8: #include "TimerUnit.h" // директива перепроцессора подключает в файл

9: // реализации заголовочный файл

10: #include "DriverDataIO.h" // включение в проект файла "DriverDataIO.h"

11: //---------------------------------------------------------------------------

12: #pragma package(smart_init) // директива перепроцессора указывает

13: // компилятору последовательность

14: // инициализации пакетов такой, какая

15: // устанавливается взаимными ссылками

16: // использующих их модулей

17: #pragma resource "*.dfm" // директива перепроцессора указывает

18: // компилятору, что для формы надо

19: // использовать файл .dfm с тем же именем,

20: // что и имя данного файла

21: TForm1 *Form1; // объявление указателя *Form1 для объекта формы

22: // TForm1

23: //---------------------------------------------------------------------------

24: // Объявление конструктора формы и функции конструктора формы

25: __fastcall TForm1::TForm1(TComponent* Owner)

26: : TForm(Owner)

27: {

28: }

29: //---------------------------------------------------------------------------

30:

31: // Объявление наличия кнопки Button1 (Пуск)

32: void __fastcall TForm1::Button1Click(TObject *Sender)

33: {

34: // Открытие платы Таймера

35: long HDevice = OpenDevice(0); // 0 = Номер карты в списке устройств

36: // плата таймера

37:

38: // Инициализация структуры данных

39: TDataIO DataIO[] =

40: {

41: {BASE+3, 0x14},  // Счетчик Fout "0"--режим 2, счет десятичный,

42: // младший байт

43: {BASE+0, 0x0A},  // Счетчик Fout "0"--n=3

44: {BASE+24, 0x01},  // Наблюдать сигнал Fout"0" (f=1MГц, Т=1мс)

45: {BASE+18, 0x02},  // Счетчик "0" получает Clock от счетчика Fout"0"

46: {BASE+11, 0x15}, // Счетчик "0"--режим 2, счет десятичный, младший 47: //байт

48: {BASE+8, 0x03}, // Счетчик "0"--n=3 (f=100KГц, Т=10мс)

49: };

50:

51:

52: WriteDeviceData( HDevice, &DataIO[0], 6 );

53: // Функция заносит в порты таймера 6 значений в соответствии со структурой

54: //TDataIO DataIO[]

55:

56: // Закрыть плату Таймера

57: CloseDevice(HDevice);

58: }

Вывод

В ходе выполнения практического занятия были изучены режимы работы и принципы программирования платы расширения PCL – 836 фирмы ADVANTECH на основе БИС INTEL 8254. Рассмотрена структура технических средств, позволяющих производить программирование микроЭВМ с использованием среды разработки C++ Builder 5.

На основе полученных навыков создан проект «Таймер». В процессе разработки программного кода наиболее подробно изучены 2 и 3 режимы работы таймера – деление частоты и генерация прямоугольных импульсов. Получены знания об алгоритме составления управляющих слов. В работе приведен файл реализации, полученный после сохранения проекта. Также приложена блок-схема алгоритма, реализованного в данной работе.

Соседние файлы в предмете Микропроцессорные информационно-управляющие системы