Перед тем как начать писать код необходимо понять структуру программы на языке микропаскаль. Выглядит она следующим образом:

Program ИмяПрограммы;
uses ОписаниеПодключаемыхМодулей;
const ОписаниеКонстант;
type ОписанияПользовательскихТиповДанных;
var ОписаниеПеременных;
label ОписаниеМеток;
 
//Раздел описания пользовательских функций и процедур
 
Begin
   //Тело программы
End.

Итак начнем разбираться по порядку. После ключевого слова Program нужно указать название нашей программы. Названием может быть произвольное слово из букв латинского алфавита не начинающееся с цифры и не содержащее пробелов и специальных символов. Рекомендуется давать осмысленные названия программам. Например:

Program LedBlinker;

Ключевое слово uses позволяет подключить к нашей программе какие либо сторонние модули содержащие некоторый набор функций и/или процедур. имена модулей могут перечисляться через запятую. Обратите внимание, что имена модулей указываются без расширения.

uses Unit2, MyUnit;

В разделе const нужно описать все константы используемые в программе. При объявлении константы тип данных можно не указывать явно. В этом случае компилятор сам догадается какой тип данных использовать.

const
a : byte = 0xFF; //Явно указываем тип данных
b=0xAB; //Не указываем тип. Так тоже можно

Раздел type предназначен для описания пользовательских типов данных (об этом подробнее ниже).  Имена переменных и их тип описываются в var. Тут комментарии излишни. И наконец в разделе label перечисляются все метки используемые в программе. Именем метки может быть число или некоторый набор символов латинского алфавита. Метки используются совместно с оператором безусловного перехода goto.  В разделе описания пользовательских функций и процедур следует (кто бы мог подумать!) разместить программный код этих самых функций и процедур. Тело программы заключено между ключевыми словами Begin и End. Программа начинает своё выполнение с оператора следующим за ключевым словом Begin. Все операторы разделяются друг от друга точкой с запятой. Минимальная программа которую проглотит компилятор и не выдаст ошибок выглядит так:

Program MyFirstProg;
 
Begin
 
End.

Программа не содержит вообще ничего и с практической точки зрения бесполезна, это всего лишь скелет который есть в любой программе на языке микропаскаль.  В любой серьёзной программе кроме этого скелета есть еще и переменные. Вот о них то сейчас и поговорим подробнее. Переменная — это некая область памяти имеющая адрес, размер,  значение и тип. Типов переменных (типов данных) в микропаскале несколько:

Тип данных Размер (в битах) Диапазон значений
bit 1 0 или 1
sbit 1 0 или 1
byte, char 8 0 .. 255
short 8 -127 .. 128
word 16 0 .. 65535
integer 16 -32768 .. 32767
dword 32 0 .. 4294967295
longint 32 -2147483648 .. 2147483647
real 32 ±1.17549435082 * 10-38 .. ±6.80564774407 * 1038

Как видно из таблицы, размеры у переменных различного типа могут существенно отличаться. Именно поэтому очень важно правильно выбрать тип данных для переменой, ведь размер оперативной  памяти у микроконтроллера совсем небольшой. Например использовать переменную типа word в цикле со счётчиком который считает максимум до 200 — не оптимально. Работать оно конечно будет, но один байт окажется бесполезно занят под переменную типа word хотя тут хватило бы и обычного byte. В микропаскале переменные объявляются после слова var (как я уже писал выше)

var
a,b:byte;
c:dword;

В микропаскале есть возможность создавать пользовательские типы данных. В отличии от классического паскаля для ПК, здесь эта возможность немного урезана. Нельзя создавать пользовательские интервальные и пользовательские перечисляемые типы данных. На практике они почти не применяются видимо поэтому их нет в микропаскале. Зато есть куда более интересные структурированные типы данных. Переменная такого типа содержит в себе сразу несколько других переменных (полей) которые могут быть любого типа. Это нужно, например для того чтоб хранить разнородные данные характеризующие какой либо объект. Приведу пример пользовательского типа данных

type
man=record
  FirstName:array[20] of char;
  LastName:array[20] of char;
  Age: byte;
 end;

Теперь если мы объявим переменную типа man то внутри нее мы сможем хранить одновременно имя, фамилию и возраст человека. Доступ к любому из этих трёх полей осуществляется через точку или при помощи слова with:

program test1;
 
type
man=record  ///Объявляем новый тип данных "Человек"
  FirstName:array[20] of char; //Тут будем хранить имя
  LastName:array[20] of char;  //Тут фамилию
  Age: byte;                   //Здесь возраст
 end;
 
var MyVar:man;  //Объявим новую переменную нашего типа man
 
begin
  //Доступ к полям осуществляется через точку
  MyVar.LastName:='Ivanov';
  MyVar.FirstName:='Ivan';
  MyVar.Age:=21;
 
  //Или при помощи ключевого слова with
  with MyVar do
   begin   // о повторно встречающихся Begin'ах и End'ах поговорим позже...
    LastName:='Ivanov';
    FirstName:='Ivan';
    Age:=21;
   end;
end.

При описании полей пользовательского типа данных, можно использовать не только стандартные простые типы данных, но и другие пользовательские типы данных определённых ранее. Еще хочу обратить внимание на то, что для присваивания значения переменной используется оператор  := Если написать просто равно, то будет ошибка.

MyVar.LastName:='Ivanov'; //правильно
MyVar.LastName='Ivanov';// ошибка

Знак равно без двоеточия используется в операторе проверки условия, но об этом позже. В примере выше, я использовал конструкцию FirstName:array[20] of char. Этой строчкой я объявил массив байт. Поговорим о массивах подробнее. Массивом обычно называют некоторую совокупность данных одного типа. Ну например, хотим мы хранить количество дней в месяце для каждого из 12 месяцев. Для того чтоб не плодить 12 переменных, можно завести один массив из 12 элементов, в котором все эти данные хранить. Объявлять массив нужно так:

var
MONTHS:array[1..12] of byte; //Объявляем массив из 12 байт

В квадратных скобках указаны номера верхнего и нижнего индекса массива. Это значит, что все номера элементов будут лежать в интервале от 1 до 12. Если  вместо интервала просто указать какое либо число, то это означает, что нумерация элементов массива начинается с нуля и идёт до указанного числа. Теперь заполним массив данными. Доступ к конкретному элементу массива осуществляется через квадратные скобки, внутри которых записывается индекс (номер) интересующего нас элемента:

program test1;
 
var
MONTHS:array[1..12] of byte; //Объявляем массив из 12 байт
 
begin
  //Присваиваем значение каждому элементу массива
  MONTHS[1]:=31; //В январе 31 день
  MONTHS[2]:=28; //В феврале 28 дней ...
  MONTHS[3]:=31;
  MONTHS[4]:=30;
  MONTHS[5]:=31;
  MONTHS[6]:=30;
  MONTHS[7]:=31;
  MONTHS[8]:=31;
  MONTHS[9]:=30;
  MONTHS[10]:=31;
  MONTHS[11]:=30;
  MONTHS[12]:=31;
end.

Если мы не планируем изменять содержимое массива то объявить массив и заполнить его одновременно:

const MONTHS : array[1..12] of byte = (31,28,31,30,31,30,31,31,30,31,30,31);

Сейчас мы рассмотрели простой одномерный массив. Кроме одномерных массивов существуют еще и многомерные. Там всё тоже самое, только для того чтоб добраться до нужного элемента массива, нужно одновременно указать несколько индексов. Например:

program test1;
var
Arr1 : array[5] of array[5] of array[5] of array[5] of byte; // 4-х мерный массив!
Arr2 : array[5] of array[5] of byte; //Двумерный массив
begin
  Arr1[3][1][4][0]:=241; //Для доступа к элементу указываем 4 индекса
  Arr2[1][2]:=12; //ну а для этого массива - два индекса
end.

Напоследок пару слов о комментариях в микропаскале. Они бывают однострочными и многострочными. Пример

//Однострочный комментарий
{а вот это уже не однострочный.
это многострочный комментарий}

P.S. Ух много букв получилось :-) Если есть какие то неточности и вопросы, пишите комменты! Да и вообще просто так пишите.