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

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

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


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


Turbo51

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

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
У меня и бета-тестер как раз есть подходящий - крутющая 10-летняя программистка )

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

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;

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