Interested Article - Turbo51
- 2020-08-11
- 1
Turbo51 — компилятор для языка программирования Pascal , для семейства микроконтроллеров Intel MCS-51 (8051) .
Он имеет синтаксис Borland Turbo Pascal 7, в том числе, поддерживает объектно-ориентированное программирование. Компилятор написан на языке Object Pascal и разработан на Delphi.
В 1980 году Intel представила 8051 как первый член семейства процессоров MCS-51. Сегодня десятки предприятий производят сотни разновидностей указанного семейства микроконтроллеров со множеством изменений и добавлений, расширяющих возможности семейства. Поэтому архитектура микроконтроллеров по-прежнему вызывает интерес у профессионалов и любителей. Для микроконтроллеров MCS-51 существует множество С-компиляторов, но совсем немного компиляторов Pascal.
Turbo51 создавался как бесплатный компилятор, который работает так же быстро, как Turbo Pascal, использует тот же синтаксис и генерирует высококачественный оптимизированный код.
Автор компилятора — Игорь Фуна, Словения.
Диалект языка
Turbo51 использует диалект языка Borland Turbo Pascal 7. Синтаксис был расширен некоторыми конструкциями для поддержки особенностей микроконтроллеров MCS-51.
Var RS485_TX: Boolean absolute P3.2;
I2C.SDA: Boolean absolute P3.7;
I2C.SCL: Boolean absolute P3.4;
EEPROM_Data: TEEPROM_Data XDATA absolute 0;
ModuleAddress: Byte;
RX_LedTimer: Byte;
TX_LedTimer: Byte;
SavedOutput: TOutputData IDATA;
OutputsAuxData: Array [1..8] of Byte IDATA;
Особенности
- Консольное приложение Win32
- Быстрый однопроходный оптимизирующий компилятор
- Синтаксис Borland Turbo Pascal 7
- Полная поддержка плавающей точки
- Смешанное программирование на Pascal и ассемблере
- Полное использование банков регистров
- Расширенный многопроходный оптимизатор
- «Умный» компоновщик
- Генерирует компактный высококачественный код
- Форматы выходных файлов: Binary, Intel HEX, OMF51
Пример программы «Hello World»
Исходный текст программы:
Program HelloWorld;
Const
Osc = 22118400;
BaudRate = 19200;
BaudRateTimerValue = Byte (- Osc div 12 div 32 div BaudRate);
Var SerialPort: Text;
Procedure WriteToSerialPort; Assembler;
Asm
CLR TI
MOV SBUF, A
@WaitLoop:
JNB TI, @WaitLoop
end;
Procedure Init;
begin
TL1 := BaudRateTimerValue;
TH1 := BaudRateTimerValue;
TMOD := %00100001; { Timer1: no GATE, 8 bit timer, autoreload }
SCON := %01010000; { Serial Mode 1, Enable Reception }
TI := True; { Indicate TX ready }
TR1 := True; { Enable timer 1 }
Assign (SerialPort, WriteToSerialPort);
end;
begin
Init;
Writeln (SerialPort, 'Hello world!');
end.
Текст откомпилированной программы на ассемблере:
; Turbo51 version 0.1.3.10, Copyright 2000 - 2011 Igor Funa
$REGISTERBANK (0)
_CODE SEGMENT CODE
_CONST SEGMENT CODE
_DATA SEGMENT DATA
EXTRN DATA (CurrentIO)
EXTRN IDATA (StackStart)
EXTRN CODE (sysWriteStr_CODE)
EXTRN CODE (sysWriteLine)
; Program HelloWorld;
;
; Const
RSEG _CONST
; Osc = 22118400;
; BaudRate = 19200;
;
; BaudRateTimerValue = Byte (- Osc div 12 div 32 div BaudRate);
;
; Var SerialPort: Text;
RSEG _DATA
SerialPort: DS 4
;
; Procedure WriteToSerialPort; Assembler;
RSEG _CODE
USING 0
WriteToSerialPort:
; Asm
; CLR TI
CLR SCON.1
; MOV SBUF, A
MOV SBUF, A
; @WaitLoop:
L_001D:
; JNB TI, @WaitLoop
JNB SCON.1, L_001D
; end;
RET
;
; Procedure Init;
Init:
; begin
; TL1 := BaudRateTimerValue;
MOV TL1, #$FD
; TH1 := BaudRateTimerValue;
MOV TH1, #$FD
; TMOD := %00100001; { Timer1: no GATE, 8 bit timer, autoreload }
MOV TMOD, #$21
; SCON := %01010000; { Serial Mode 1, Enable Reception }
MOV SCON, #$50
; TI := True; { Indicate TX ready }
SETB SCON.1
; TR1 := True; { Enable timer 1 }
SETB TCON.6
;
; Assign (SerialPort, WriteToSerialPort);
MOV SerialPort, #LOW (WriteToSerialPort)
MOV SerialPort+1, #HIGH (WriteToSerialPort)
; end;
RET
RSEG _CONST
C_0071: DB 12, 'Hello world!'
CSEG AT $0000
HelloWorld:
;
; begin
MOV SP, #StackStart-1
; Init;
LCALL Init
; Writeln (SerialPort, 'Hello world!');
MOV CurrentIO, SerialPort
MOV CurrentIO+1, SerialPort+1
MOV DPTR, #C_0071
MOV R6, #0
LCALL sysWriteStr_CODE
LCALL sysWriteLine
; end.
L_0017:
SJMP L_0017
END
Интегрированная среда разработки
MC-51
Интегрированная среда разработки для микроконтроллеров 8051.
содержит:
- Текстовый редактор с подсветкой синтаксиса для создания исходных текстов программ на ассемблере и Паскале;
- Интерфейс к Turbo51 для компилирования с Паскаля;
- Интерфейс к ASEMW для ассемблирования;
- Комплексный симулятор и отладчик для всех основных функций, включая таймеры и последовательный интерфейс;
- Терминальное окно для общения с монитором программы в микроконтроллере и загрузки программ в память микроконтроллера в формате Intel Hex;
- Модуль флэш-программирования микроконтроллеров Atmel AT89S8252/53 через последовательный интерфейс.
Для компиляции исходных файлов MC-51 использует вызов командной строки программы (ASEMW или Turbo51) с адекватными параметрами. При нажатии на сообщение об ошибке редактор позволяет непосредственно перейти к строке, содержащей ошибку. Встроенный текстовый редактор использует компоненты с открытым исходным кодом SynEdit. Кроме того, многие расширенные функции редактора SynEdit поддерживают подсветку синтаксиса конкретного исходного кода. Многие из этих возможностей могут быть настроены индивидуально пользователем.
МС-51 включает в себя также симулятор/отладчик. С его помощью можно отслеживать выполнение программы без каких-либо аппаратных средств.
См. также
Ссылки
- — официальный сайт Turbo51
- 2020-08-11
- 1