Начало работы
Turbo51 - консольное приложение, поэтому работать в эмуляторе ДОС с ним не очень-то удобно. Возможно, из-за этого у кого-то могут возникнуть сомнения по поводу использования компилятора. Но все не так плохо, даже наоборот. Проблема легко решается с помощью текстового редактора PSPad, который позволяет запускать внешние программы с командной строки, что делает комбинацию PSPad + Turbo51 удобной средой разработки программ для микроконтроллеров MCS-51 на языке Паскаль.
Поэтому не нужно бояться, все достаточно просто и приятно.
Естественно, перед началом работы нужно скачать указанные программы:
Turbo51 можно также скачать ОТСЮДА.
Установку редактора производим обычным порядком. Тут есть одна заморочка, о которой я сейчас расскажу. Выше приведена ссылка на скачивание редактора PSPad последней текущей версии, но я рекомендую скачать более раннюю версию: Скачать PSPad 4.5.3. Дело в том, что, как будет описано ниже, при запуске компиляции программы в нижней части экрана монитора появляется окно, отображающее поток сообщений от компилятора. Это окно редактора, который перехватывает этот поток и выводит в собственном окне. Но есть разница в отображении версиями 4.5.3 и 4.5.4. Если версия 4.5.3 сама прокручивает сообщения и завершает вывод отображением последнего, то версия 4.5.4 прокрутку не производит, приходится делать это вручную, что неудобно. А важно видеть именно последние строки сообщений, поскольку в них присутствует информация о длине кода, используемом объеме памяти и результатах компиляции, в том числе об обнаруженных ошибках.
Распаковываем архив с Turbo51 в директорию, какую определим и создадим сами. В этой директории мы имеем два подкаталога: Bin и Rtl, которые содержат нужные нам файлы, а именно:
Turbo51.exe
Turbo51.L51
System.U51
i8032.pas
i8032.inc.
Файлы i8032.pas и i8032.inc необходимы, если мы программируем микроконтроллер с расширениями MCS52, в частности, для работы с таймером/счетчиком 2. В них же можно зарезервировать и другие имена регистров специальных функций, если используется микроконтроллер, имеющий какие-то дополнительные регистры. В подкаталоге ABS содержатся файлы, необходимые в том случае, если у нас наверняка объем программы не превысит 2К и мы хотим несколько сэкономить память программ, используя AJMP и ACALL вместо LJMP и LCALL. Я этот вариант не использую. Для начала, чтобы не заморачиваться с путями, которые можно определить в командной строке, просто копируем перечисленные файлы в каталог нашего проекта, где они будут размещаться вместе с файлами исходных текстов нашей программы и модулей.
Теперь запускаем редактор PSPad, настраиваем подсветку по шаблону Object Pascal, выбрав цвета, которые нам нравятся, и создаем файл программы с расширением pas. Окно редактора будет выглядеть примерно так:
Затем создаем и сохраняем файлы нужных нам модулей, не забыв сохранить проект. Теперь пора заняться компилированием программы. Для этого ищем кнопочку
и нажимаем ее.
В результате появляется окно "Командная строка".
Прописываем командную строку и путь к каталогу, содержащему наш проект, выбираем все checkbox, нажимаем кнопку Ok, и тут же начинается процесс компиляции, при этом в нижней части окна программы появляется дополнительное окно, которое отображает поток сообщений ДОС от компилятора.
В командной строке должны содержаться:
- спецификация файла Turbo51.exe
- ключи программы
- спецификация файла нашей программы.
Назначение ключей можно и нужно изучить по документации.
Все окно редактора будет выглядеть примерно так:
Ну, а теперь все в ваших руках - отладка ...
В общем, по описанной схеме я вначале и работал, но потом появилось множество модулей, которые использовались разными программами. Естественно, эти модули время от времени подвергались модернизации, поэтому приходилось следить за их обновлением в каждом каталоге проектов, что весьма затруднительно. Как я уже отметил, по указанной схеме ВСЕ файлы, включая Turbo51, хранились в одном каталоге. Когда мне это надоело, я поступил следующим образом, благо, компилятор позволяет это сделать. Я создал каталог C:\Turbo51, который в числе прочего содержал подкаталог C:\Turbo51\Bin, который, в свою очередь, содержал файлы и два каталога C:\Turbo51\Bin\Unit и C:\Turbo51\Bin\Inc.
В первом я разместил файлы исходных текстов моих модулей, во втором - тексты включаемых файлов. Естественно, командная строка сильно удлинилась, так как в ней были прописаны пути к указанным директориям. Чтобы не набирать каждый раз эту длинную строку, я разместил ее в тексте программы как комментарий, а затем, в начале каждого сеанса работы копировал эту строку в "Команда" окна "Командная строка".
Примерно так выглядит командная строка с указанием путей:
c:\turbo51\bin\turbo51 -h -a -o -b -g -uc:\turbo51\bin -uc:\turbo51\bin\unit -ic:\turbo51\bin\inc c:\turbo51\pol9a\pol9a,
где ключ -u определяет путь к модулям (Unit), а ключ -i путь к включаемым файлам.
В данном случае модули находятся в каталогах c:\turbo51\bin и c:\turbo51\bin\unit, а включаемые файлы в каталоге c:\turbo51\bin\inc. c:\turbo51\pol9a\pol9a - путь к файлу моей программы.
Компиляцию программы в составе проекта можно производить еще более удобным способом. Через меню "Проект" - "Параметры проекта" открываем окно "Параметры проекта" и выбираем закладку "Компилятор":
В строке "Компилятор" прописываем или выбираем путь и имя файла Turbo51.exe,
в строке "Параметры" прописываем параметры командной строки компилятора,
в строке "Папка по умолчанию" выбираем каталог (скорее всего, это каталог проекта), в который будут помещаться выходные файлы программы.
Выбираем все СheckBox.
Закрываем окно "Параметры проекта", а затем нажимаем кнопочку
или комбинацию клавиш Ctrl F9 и производим компиляцию.
Этот метод хорош тем, что параметры командной строки сохраняются в проекте.
По ссылке можно скачать основной файл программы для примера с расписанными заготовками подпрограмм обработки прерываний stenc.pas.
Синтаксис командной строки компилятора:
Option | Description |
---|---|
-A | Генерировать ассемблерный файл |
-B | Перекомпилировать все модули |
-C | Показывать номер не только строки, но и столбца с ошибкой |
-D | Define conditionals |
-E | Каталог вывода BIN/HEX/U51/OMF |
-F | Найти исходную строку по адресу |
-G | Генерировать файл map |
-H | Генерировать файл Intel HEX |
-I | Задать каталог с включаемыми файлами |
-J | Задать каталог объектного файла |
-LA | Использовать библиотеку Turbo51A.l51 |
-M | Модифицировать модули |
-MG | Установить по умолчанию тип памяти для глобальных переменных (type = D, I or X) |
-ML | Установить по умолчанию тип памяти для локальных переменных (type = D, I or X) |
-MP | Установить по умолчанию тип памяти для параметрических переменных (type = D, I or X) |
-MT | Установить по умолчанию тип памяти для временных переменных (type = D, I or X) |
-O | Генерировать файл OMF-51 |
-OX | Генерировать расширенный файл OMF-51 (needed for source-level debugging) |
-Q | Быстрая компиляция |
-S | Проверять синтаксис |
-T | L51/CFG directory |
-U | Задать каталог с файлами модулей |
-$ | Command line compiler switch |