Микроконтроллеры

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Микроконтроллеры » Архив » Turbo51


Turbo51

Сообщений 1 страница 28 из 28

1

Turbo51 is a free Pascal compiler for the 8051 family of microcontrollers - http://turbo51.com

http://sa.uploads.ru/OSEBd.png

Дистрибутив 470К в архиве, free, но не open source.

Main features:
* Win32 console application
* Fast single-pass optimizing compiler
* Borland Turbo Pascal 7 syntax
* Full floating point support
* Mixed Pascal and assembler code
* Full use of register banks
* Advanced multi-pass optimizer
* Smart linker
* Generates compact high quality code
* Output formats: BIN, HEX, OMF
* Assembler source code generation
* Source-level debugging with absolute
* OMF-51 extended object file

Used optimizations:
* Constant folding
* Integer arithmetic optimizations
* Dead code elimination
* Branch elimination
* Code-block reordering
* Loop-invariant code motion
* Loop inversion
* Induction variable elimination
* Instruction selection
* Instruction combining
* Register allocation
* Common subexpression elimination
* Peephole optimization

Мигалка:

Код:
program blinky;

procedure init;
begin
    tmod := 1;
    tr0 := true;
    et0 := true;
    ea := true;
end;

procedure systick; interrupt timer0;
var
    led : boolean absolute p1.1;
begin
    led := not led;
end;

begin
    init;
end.

Это всё, никаких доп файлов не требуется, компилируется в bin просто turbo51 blinky.pas

Сгенерированный ассемблер:

Код:
; Turbo51 version 0.1.3.17, Copyright 2000 - 2013 Igor Funa

$REGISTERBANK (0)

_CODE         SEGMENT  CODE

              EXTRN    IDATA (StackStart)

; program blinky;
; 
; procedure init;


RSEG _CODE

USING 0

init:
; begin
;     tmod := 1;
              MOV       TMOD, #1

;     tr0 := true;
              SETB      TCON.4

;     et0 := true;
              SETB      IE.1

;     ea := true;
              SETB      IE.7

; end;
              RET

; 
; procedure systick; interrupt timer0;
; var
;     led : boolean absolute p1.1;
led                             BIT      P1.1


CSEG AT $000B

systick:
; begin
              PUSH      PSW
              MOV       PSW, #0

;     led := not led;
              CPL       P1.1

; end;
              POP       PSW
              RETI


CSEG AT $0000

              AJMP     blinky


RSEG _CODE

blinky:
; 
; begin
              MOV       SP, #StackStart-1

;     init;
              LCALL     init

; end.
L_0009:
              SJMP      L_0009

RSEG _CONST


              END

2

То же самое в двух файлах

blinky.pas

Код:
program blinky;

uses module;

procedure systick; interrupt timer0;
var
    led : boolean absolute p1.1;
begin
    led := not led;
end;

begin
    module.init;
end.

module.pas

Код:
unit module;

interface

procedure init;

implementation

procedure init;
begin
    tmod := 1;
    tr0 := true;
    et0 := true;
    ea := true;
end;

end.

Компиляция по прежнему просто turbo51 blinky.pas
Файлы и связи между файлами компилятор находит сам

А так добавляется нестандартная для 8051 периферия [это пример прямо из дистрибутива]

Код:
{$IDATA }

Var
  T2CON:    Byte absolute $C8;
  T2MOD:    Byte absolute $C9;
  RCAP2L:   Byte absolute $CA;
  RCAP2H:   Byte absolute $CB;
  TL2:      Byte absolute $CC;
  TH2:      Byte absolute $CD;

{ T2CON }
  TF2:      Boolean absolute T2CON.7;
  EXF2:     Boolean absolute T2CON.6;
  RCLK:     Boolean absolute T2CON.5;
  TCLK:     Boolean absolute T2CON.4;
  EXEN2:    Boolean absolute T2CON.3;
  TR2:      Boolean absolute T2CON.2;
  C_T2:     Boolean absolute T2CON.1;
  CP_RL2:   Boolean absolute T2CON.0;

{ IE}
  ET2:      Boolean absolute IE.5;

{ IP }
  PT2:      Boolean absolute IP.5;

{ P1 }
  T2EX:     Boolean absolute P1.1;
  T2:       Boolean absolute P1.0;

3

Читаю книжку Зуева про turbo pascal, кто бы мог подумать, что tp настигнет меня в 2018 )

4

vt написал(а):

Читаю книжку Зуева про turbo pascal, кто бы мог подумать, что tp настигнет меня в 2018 )

Детей в школе и в 2018-м все еще учат паскалю (к тому же это их первый язык программирования)

5

Я как раз и хочу попробовать сделать детский фреймворк для ch55x под pascal и scratch
У меня и бета-тестер как раз есть подходящий )

Отредактировано vt (2018-01-13 11:02:59)

6

vt написал(а):

Я как раз и хочу попробовать сделать детский фреймворк для ch55x под pascal и scratch
У меня и бета-тестер как раз есть подходящий )

Интересно. Если можно - подробнее.

7

Scratch extension [ https://wiki.scratch.mit.edu/wiki/Scratch_Extension ], но не как обычно для какого-то определённого девайса с фиксированными свойствами, а для абстрактного универсального гаджета [набор интерфейсных переменных фиксирован, но предназначение этих переменных зависит от гаджета]
Сами гаджеты - платки в форм-факторе флешки [не более 15x50], прямо с usb-разъёмами А-типа, предельно простые и дешёвые [они будут ломаться и гореть, их должно быть не жалко выбрасывать и легко делать]
Детская часть программы на паскале для гаджета - привязка переменных из scratch к магическим переменным гаджета [выбранным из полного набора всех магических переменных гаджета] ну и какие-то простые манипуляции с ними

8

Интересно, но не понятно :) Когда будут результаты - пожалуйста просветите. Скоро приедут и мне ch55x - будет о чем поговорить :)

9

Ну это примерно вот что
https://playarduino.ru/uroki-arduino/pr … e-scratch/
http://forum.amperka.ru/threads/arduino-для-самых-маленьких-s4a.1813/
Только делается там всё, имхо, хоть может и из лучших побуждений, но совершенно отвратительно )
Люди просто не понимают, что такое scratch и подгоняют всё под примитивные стереотипы и шаблоны

10

Мда
Turbo Pascal - это совсем не Modula-2 [которую я когда-то хорошо знал и любил], а какой-то изврат
Turbo51 - это не совсем Turbo Pascal [и въезжать во все нюансы автор предлагает на примерах вместо мануала]

11

А в чем сам прикол Pascal'а ? он ничем не лучше си.

Я вот например стараюсь забыть Pascal (и перейти на Си) и Delphi (перейти на что-то Си подобное)

12

Прикол паскаля - в паскале, прикол си - в си, 8051 - в 8051, stm32 - в stm32 и т.д.
"Когда горизонт взглядов человека сужается в точку, человек называет это своей точкой зрения" )

13

Не, я не спорю что кругозор взглядов это очень хорошо, сам любознательный.  Просто если человек знает паскаль и знает си, то гораздо приятнее писать на си.
Популярность паскаля и делфи в частности обусловлена лишь потому что, по непонятной для меня причине, именно паскаль (а затем delphi) очень часто преподавали в школах и затем в институтах в 90х и 200х. хотя на соседнем факультете мучили людей Фортраном :)

P.S я десктопные приложения для винды делаю именно на Delphi . Делаю только потому что привык и лучше всего это знаю. особенно когда надо быстренько сделать приложение которое что-то автоматом конвертирует или принимает и отображает данные с ком порта. Но с "расширением кругозора" я понимаю что это не правильно и надо уходить от этого всего. правда пока не знаю куда :)))

14

Atomic-dm Ну Delphi не такой уж и "мертвый", сам пишу только на нем (т.к. на других не умею), думаю еще C# изучить, все-таки его создал папка Delphi, такая смесь C и Pascal получилась. Говорят десктопные проги под С++ не очень удобно писать, он больше под железо заточен.

15

MasterElectric написал(а):

Atomic-dm Ну Delphi не такой уж и "мертвый", сам пишу только на нем (т.к. на других не умею), думаю еще C# изучить, все-таки его создал папка Delphi, такая смесь C и Pascal получилась. Говорят десктопные проги под С++ не очень удобно писать, он больше под железо заточен.

Вот как раз изучая другие языки и паттерны проектирования программ , мне крайне трудно бывает перестроить мышления после Delphi. Я не считаю себя хорошим программистом, но волей судьбы иногда пишу разные программки для себя и вроде как бы получается и тоже привык. Но когда я стал интересоваться другими языками и подходами, каждый раз ломаю свое мировозрение. потому что начинал c Delphi.  Крайне трудно не программировать без помощи "магической кнопки"
Си неспешно изучаю 1.5 года и чем больше изучаю тем больше он мне нравится.

Хотя опять же это мой взгляд "дилетанта широкого профиля" и я врятли смогу доказать свое мнение специалисту.

16

Чем дальше въезжаю в turbo51, тем больше восхищаюсь
Для x51 теперь у меня будет только паскаль, никаких си )

Код:
var 
    a : word absolute $FE;
    b : array [1..5] of record c,d : byte end;
    e : word absolute b[3];

a - объявляется по фиксированному адресу
b - массив структур
e - объявляется как union слова к структуре из третьего элемента массива b

Код:
b[3].c := 0;
a := e;

и соотв код

Код:
;     b[3].c := 0;
              MOV       b+4, #0
;     a := e;
              MOV       $FE, #0
              MOV       $FF, b+5

MOV $FE, #0 - ещё и оптимизация по известному компилятору значению

Ну и фича с forward:

You can also declare variables in units with directive absolute Forward which means some (from the unit) unknown memory address.
Example:

Код:
Unit I2C;
Interface
Var
    SDA: Boolean absolute Forward;
    SCL: Boolean absolute Forward;

A main program which uses this unit declares these absolute Forward variables at correct address.

Код:
Program Test;
Uses I2C;
Var
    I2C.SCL: Boolean absolute P3.4;
    I2C.SDA: Boolean absolute P3.5;

17

После разборок с usb [ CH554 ] могу сказать - компилятор великолепен
Автор не просто фанат, а супер спец [ вот, кстати, его сайт про компиляторы паскаля - http://turbopascal.org ]

18

Turbo51 поддерживает файловый (!) ввод-вывод
Объявляется переменная файлового типа [в примере ниже это SerialPort]
Дальше она ассоциируется с процедурой, которая каким угодно способом делает ввод или вывод байта [в файловую переменную просто помещается адрес этой процедуры]
И дальше уже просто работают стандартные процедуры ввода-вывода [read, write] из системной библиотеки
Ассемблер в примере прилеплен только для демонстрации ассемблерной вставки, всё точно так же делается и без ассемблера
Похоже без ассемблера не обойтись - процедура должна быть без параметров, а байт передаваться через аккумулятор

Код:
{
    This file is part of the Turbo51 examples.
    Copyright (C) 2008 - 2011 by Igor Funa
    http://turbo51.com/
    This file is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
}

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.

Отредактировано vt (2018-04-01 19:02:37)

19

vt т.е. это я могу на нем силабсы 8 битные писать?

20

MasterElectric написал(а):

vt т.е. это я могу на нем силабсы 8 битные писать?

Да, конечно, любые x51

21

Блин, я так никогда от delphi в голове не избавлюсь (((
B я тем более не думал что снова  буду что-то писать для  8051 ))
Впрочем  единственное что я написал  5  лет назад  было мигалка на процессоре китайской конторы STC ну там прикольно, программаторов тоже не надо  через USB-UART переходник шилось.
А вот  IDE вообще не помню какое было и компилятор.

22

selevo Я вот тоже думаю еще что-то изучить под ПК. Какой сейчас самый хороший C#? Хотя и Delphi всем вроде бы устраивает.

23

Для дельфи вроде же есть модули для работы c usb, и будет полная гармония с паскалем в мк )
Имхо, си не подходит для простых мк, в си слишком много ритуальных плясок с бубном, а "зачем делать сложным то, что проще простого"

24

Мне сейчас больше интересен тот который  заставляет меньше писать, быстрее результат.
Пишу раз в год правда сейчас.
Считаю изучение паскаля студентами в корне не верным.
Яб давал сразу  три языка Basic  Pascal и С
для  понимания  идеологий, дальше студенты, которым интересно будет,  сами в жизни  выберут и определятся.
Я на компе Delphi, конечно, использую - раз опыт есть и куча примеров, такой кучи нет ни на одном другом языке.
А на микроконтроллерах, Си приходится использовать, тоже по причине  максимального количества примеров.
Меня не напрягает, грустно что  каждый раз когда  берусь писать снова, смотрю что означают те или иные закорючки, настройки компилятора и прочие мелочи не зная которых, составление программы  и особенно чтение  чужой,  заставляет терять много нервов.

Отредактировано selevo (2018-04-17 10:14:53)

25

selevo написал(а):

Мне сейчас больше интересен тот который  заставляет меньше писать, быстрее результат.

Тогда Tcl/Tk вне конкуренции, а следующий Python/Tk

26

vt написал(а):

Python/Tk

Пример приводил с энкодером и программкой на питоне...

27

CERGEI написал(а):

Пример приводил с энкодером и программкой на питоне...

Да, кстати, вот и пример
И может питон даже и лучше, с учётом что после дельфи

28

vt написал(а):

Сами гаджеты - платки в форм-факторе флешки [не более 15x50], прямо с usb-разъёмами А-типа, предельно простые и дешёвые

Только подумаешь - и уже сделали )
https://www.cnx-software.com/2018/04/16 … -and-i-os/
http://s5.uploads.ru/zwOng.jpg


Вы здесь » Микроконтроллеры » Архив » Turbo51