<?xml version="1.0" encoding="utf-8"?>
<!-- generator="FeedCreator 1.7.2-ppt DokuWiki" -->
<?xml-stylesheet href="http://wiki.pic24.ru/lib/exe/css.php?s=feed" type="text/css"?>
<rdf:RDF
    xmlns="http://purl.org/rss/1.0/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
    xmlns:dc="http://purl.org/dc/elements/1.1/">
    <channel rdf:about="http://wiki.pic24.ru/feed.php">
        <title>PIC24 articles:mchp:pic18_to_pic24_migration:core</title>
        <description></description>
        <link>http://wiki.pic24.ru/</link>
        <image rdf:resource="http://wiki.pic24.ru/lib/images/favicon.ico" />
       <dc:date>2023-02-11T03:48:32+03:00</dc:date>
        <items>
            <rdf:Seq>
                <rdf:li rdf:resource="http://wiki.pic24.ru/doku.php/articles/mchp/pic18_to_pic24_migration/core/core?rev=1221218132"/>
                <rdf:li rdf:resource="http://wiki.pic24.ru/doku.php/articles/mchp/pic18_to_pic24_migration/core/data_mem?rev=1221218230"/>
                <rdf:li rdf:resource="http://wiki.pic24.ru/doku.php/articles/mchp/pic18_to_pic24_migration/core/instruction_set?rev=1221218174"/>
                <rdf:li rdf:resource="http://wiki.pic24.ru/doku.php/articles/mchp/pic18_to_pic24_migration/core/intro?rev=1221211937"/>
                <rdf:li rdf:resource="http://wiki.pic24.ru/doku.php/articles/mchp/pic18_to_pic24_migration/core/programm_mem?rev=1221218198"/>
            </rdf:Seq>
        </items>
    </channel>
    <image rdf:about="http://wiki.pic24.ru/lib/images/favicon.ico">
        <title>PIC24</title>
        <link>http://wiki.pic24.ru/</link>
        <url>http://wiki.pic24.ru/lib/images/favicon.ico</url>
    </image>
    <item rdf:about="http://wiki.pic24.ru/doku.php/articles/mchp/pic18_to_pic24_migration/core/core?rev=1221218132">
        <dc:format>text/html</dc:format>
        <dc:date>2008-09-12T15:15:32+03:00</dc:date>
        <title>Ядро</title>
        <link>http://wiki.pic24.ru/doku.php/articles/mchp/pic18_to_pic24_migration/core/core?rev=1221218132</link>
        <description>




&lt;h1&gt;&lt;a name=&quot;ядро&quot; id=&quot;ядро&quot;&gt;Ядро&lt;/a&gt;&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;

Контроллеры семейства PIC24F имеют 16-разрядную шину данных, поэтому их архитектура значительно отличается от архитектуры семейства PIC18. Основные отличия заключаются в размере слова инструкции, конвейере выполнения инструкций, организации стека, наборе служебных регистров ядра, схемы прерываний, функционировании АЛУ. Основные различия приведены в таблице:

&lt;/p&gt;
&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0 centeralign&quot;&gt;  Параметры  &lt;/th&gt;&lt;th class=&quot;col1 centeralign&quot;&gt;  PIC18  &lt;/th&gt;&lt;th class=&quot;col2 centeralign&quot;&gt;  PIC24H  &lt;/th&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; Размер слова инструкции &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; 16 бит &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; 24 бита &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; Частота выполнения инструкций &lt;sup&gt;&lt;a href=&quot;#fn__1&quot; name=&quot;fnt__1&quot; id=&quot;fnt__1&quot; class=&quot;fn_top&quot;&gt;1)&lt;/a&gt;&lt;/sup&gt; &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; F&lt;sub&gt;CY&lt;/sub&gt; = F&lt;sub&gt;OSC&lt;/sub&gt;/4 &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; F&lt;sub&gt;CY&lt;/sub&gt; = F&lt;sub&gt;OSC&lt;/sub&gt;/2 &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; Кол-во регистров общего назначения &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; 1 (&lt;code&gt;WREG&lt;/code&gt;) &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; 16 (&lt;code&gt;W0&lt;/code&gt;-&lt;code&gt;W15&lt;/code&gt;) &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row4&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; Регистры статуса и управления ядром &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; 1 (&lt;code&gt;STATUS&lt;/code&gt;) &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; 2 (&lt;code&gt;STATUS&lt;/code&gt; и &lt;code&gt;CORCON&lt;/code&gt;) &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row5&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; Стек &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Аппаратный (31 уровень) &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; Программный &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row6&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; Аппаратный умножитель &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; 8 × 8 бит &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; 17 × 17 бит &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row7&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; Аппаратный делитель &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; нет &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; Аппаратная поддержка деления (с помощью инструкций &lt;code&gt;DIV&lt;/code&gt; и &lt;code&gt;REPEAT&lt;/code&gt;) &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row8&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; Инструкции сдвига, циклического сдвига &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Только циклический сдвиг, влево или вправо на один бит &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; Сдвиг, циклический сдвиг влево и вправо на произвольное число бит (до 15-и) &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row9&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; Отображение памяти программ в память данных (PSV &lt;sup&gt;&lt;a href=&quot;#fn__2&quot; name=&quot;fnt__2&quot; id=&quot;fnt__2&quot; class=&quot;fn_top&quot;&gt;2)&lt;/a&gt;&lt;/sup&gt;) &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; нет &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; да &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Ядро&quot; [12-2047] --&gt;
&lt;h2&gt;&lt;a name=&quot;размер_слова_инструкции&quot; id=&quot;размер_слова_инструкции&quot;&gt;Размер слова инструкции&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;

Размер слова инструкции семейства PIС18 – 16 бит (для однословных инструкций), размер слова инструкции PIC24F – 24 бита. Для получения более подробной информации см. п. &lt;a href=&quot;http://wiki.pic24.ru/doku.php/articles/mchp/pic18_to_pic24_migration/core/instruction_set&quot; class=&quot;wikilink1&quot; title=&quot;articles:mchp:pic18_to_pic24_migration:core:instruction_set&quot;&gt;&amp;quot;Набор инструкций&amp;quot;&lt;/a&gt;.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Размер слова инструкции&quot; [2048-2500] --&gt;
&lt;h2&gt;&lt;a name=&quot;конвейер_выполнения_инструкций&quot; id=&quot;конвейер_выполнения_инструкций&quot;&gt;Конвейер выполнения инструкций&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;

Микроконтроллеры PIC18 и PIC24F выполняют одну инструкцию за фиксированный интервал времени, кратный периоду тактовой частоты (и всегда больший этого периода), обозначенный как T&lt;sub&gt;CY&lt;/sub&gt;. Конвейер выполнения как PIC18, так и PIC24  подразумевает выборку из памяти одной инструкции с (как правило) одновременным выполнением предыдущей за время равное 1 T&lt;sub&gt;CY&lt;/sub&gt;. Отличие состоит в том, что в микроконтроллерах семейства PIC18 длительность интервала T&lt;sub&gt;CY&lt;/sub&gt; равна четырем периодам тактовой частоты (при этом инкремент счетчика команд происходит по заднему фронту такта генератора), а в PIC24 длительность интервала T&lt;sub&gt;CY&lt;/sub&gt; равна двум периодам тактовой частоты. Инкремент счетчика команд происходит по переднему фронту такта генератора:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;http://wiki.pic24.ru/lib/exe/detail.php/articles/mchp/pic18_to_pic24_migration/core/fig.1.png?id=articles%3Amchp%3Apic18_to_pic24_migration%3Acore%3Acore&quot; class=&quot;media&quot; title=&quot;articles:mchp:pic18_to_pic24_migration:core:fig.1.png&quot;&gt;&lt;img src=&quot;http://wiki.pic24.ru/lib/exe/fetch.php/articles/mchp/pic18_to_pic24_migration/core/fig.1.png&quot; class=&quot;mediacenter&quot; title=&quot;Отличия конвейеров выполнения инструкций PIC18 и PIC24F&quot; alt=&quot;Отличия конвейеров выполнения инструкций PIC18 и PIC24F&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Это отличие важно с позиции кода, в котором критические части зависят от времени выполнения инструкций. Так же следует обратить внимание на работу с периферийными модулями, использующими в качестве тактового интервала T&lt;sub&gt;CY&lt;/sub&gt;.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Конвейер выполнения инструкций&quot; [2501-4467] --&gt;
&lt;h2&gt;&lt;a name=&quot;рабочие_регистры&quot; id=&quot;рабочие_регистры&quot;&gt;Рабочие регистры&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;

Микроконтроллеры PIC18 имеют только один рабочий регистр &lt;code&gt;W&lt;/code&gt; (&lt;code&gt;WREG&lt;/code&gt;), который используется в качестве операнда большинства инструкций. Также регистр &lt;code&gt;W&lt;/code&gt; используется для сохранения результата выполнения большинства инструкций.
&lt;/p&gt;

&lt;p&gt;
Микроконтроллеры PIC24F имеют регистровый файл, состоящий из 16 полностью ортогональных для большинства команд рабочих регистров (&lt;code&gt;W0&lt;/code&gt;-&lt;code&gt;W15&lt;/code&gt;). Некоторые инструкции используют в качестве операнда или результата только регистр &lt;code&gt;W0&lt;/code&gt;, однако большинство инструкций могут работать с любым регистром &lt;code&gt;W0&lt;/code&gt;-&lt;code&gt;W15&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
Некоторые рабочие регистры PIC24F имеют специальные функции. Регистры &lt;code&gt;W0&lt;/code&gt;-&lt;code&gt;W1&lt;/code&gt; используются для выполнения аппаратного деления, регистры &lt;code&gt;W2&lt;/code&gt; и &lt;code&gt;W3&lt;/code&gt; – как результат аппаратного умножения. Регистр &lt;code&gt;W15&lt;/code&gt; является указателем на программный стек, регистр – &lt;code&gt;W14&lt;/code&gt; – указателем на фрейм стека.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Рабочие регистры&quot; [4468-5994] --&gt;
&lt;h2&gt;&lt;a name=&quot;регистр_статуса&quot; id=&quot;регистр_статуса&quot;&gt;Регистр статуса&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;

Микроконтроллеры PIC18 имеют только один регистр статуса выполнения операций в АЛУ. Он содержит флаги выполнения бинарных операций, все флаги доступны как для чтения, так и для записи.
&lt;/p&gt;

&lt;p&gt;
Семейство PIC24F имеет два статус-регистра, которые содержат флаги выполнения двоичных операций, а так же биты, управляющие работой ядра. Регистр &lt;code&gt;STATUS&lt;/code&gt; содержит те же флаги, что и регистр &lt;code&gt;STATUS&lt;/code&gt; в семействе PIC18, флаг &lt;code&gt;RA&lt;/code&gt;, индицирующий работу аппаратного цикла &lt;code&gt;REPEAT&lt;/code&gt;, и флаги управления приоритетом ядра &lt;code&gt;IPL2:IPL0&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
Кроме регистра &lt;code&gt;STATUS&lt;/code&gt; семейство PIC24 имеет регистр &lt;code&gt;CORCON&lt;/code&gt;. Он содержит бит &lt;code&gt;IPL3&lt;/code&gt;, позволяющий эффективно управлять разрешением периферийных прерываний, и бит &lt;code&gt;PSV&lt;/code&gt;, разрешающий отображение памяти программ в область памяти данных (более подробно в п. &lt;a href=&quot;http://wiki.pic24.ru/doku.php/articles/mchp/pic18_to_pic24_migration/core/data_mem&quot; class=&quot;wikilink1&quot; title=&quot;articles:mchp:pic18_to_pic24_migration:core:data_mem&quot;&gt;&amp;quot;Память данных&amp;quot;&lt;/a&gt;)
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Регистр статуса&quot; [5995-7469] --&gt;
&lt;h2&gt;&lt;a name=&quot;стек&quot; id=&quot;стек&quot;&gt;Стек&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;

Семейство PIC18 имеет аппаратный стек для сохранения адреса возврата при вызове функции. Стек имеет размер 32 уровня, и только верхний уровень может быть доступен коду пользователя. Помещение адреса и извлечение адреса производиться только при выполнении соответствующих инструкций. Может генерироваться сброс при переполнении и опустошении стека.
&lt;/p&gt;

&lt;p&gt;
Семейство PIC24 имеет полностью программный стек, реализуемый в памяти данных. Рабочий регистр &lt;code&gt;W15&lt;/code&gt; является указателем на вершину стека, рабочий регистр &lt;code&gt;W14&lt;/code&gt; является указателем на фрейм стека, используемый при передаче параметров в функцию. Стек ограничивается программно (используется регистр &lt;code&gt;SPLIM&lt;/code&gt;). При переполнении или опустошении стека генерируется исключение (немаскируемое прерывание).
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Стек&quot; [7470-8856] --&gt;
&lt;h2&gt;&lt;a name=&quot;умножитель&quot; id=&quot;умножитель&quot;&gt;Умножитель&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;

Оба семейства PIC18 и PIC24F имеют в составе АЛУ аппаратный умножитель. Умножитель PIC18 реализует знаковое, беззнаковое и смешанное умножение 8 × 8 бит. Для выполнения беззнакового умножения 8 × 8 бит требуется 1 командный такт. Для выполнения знакового или смешанного умножения требуется большее количество командных тактов.
&lt;/p&gt;

&lt;p&gt;
Умножитель PIC24 реализует знаковое, беззнаковое и смешанное умножение 17 × 17 бит. Для выполнения умножения любого типа 16 × 16 бит требуется 1 командный такт.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Умножитель&quot; [8857-9754] --&gt;
&lt;h2&gt;&lt;a name=&quot;делитель&quot; id=&quot;делитель&quot;&gt;Делитель&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;

Семейство PIC18 не обеспечивает аппаратную поддержку операции деления целых чисел. Типовая операция деления 16/16 бит и 16/8 бит с использованием стандартной библиотеки математических функций PIC18 занимает как минимум 38 командных тактов.
&lt;/p&gt;

&lt;p&gt;
Семейство PIC24F не имеет аппаратного делителя как такового. Однако АЛУ семейства имеет аппаратную поддержку деления (инструкция &lt;code&gt;DIV&lt;/code&gt;). Использование инструкции &lt;code&gt;DIV&lt;/code&gt; в сочетании с инструкцией аппаратного цикла &lt;code&gt;REPEAT&lt;/code&gt; позволяет производить итерационную операцию деления 32/16 бит и 16/16 бит за 19 командных тактов. При этом поддерживается знаковое, беззнаковое, смешанное деление целых чисел и чисел с фиксированной точкой. Следует заметить, что операция деления занимает всего два слова программ.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Делитель&quot; [9755-11111] --&gt;
&lt;h2&gt;&lt;a name=&quot;операции_сдвига&quot; id=&quot;операции_сдвига&quot;&gt;Операции сдвига&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;

Семейство PIC18 поддерживает вращение (младший бит перемещается в старший) влево или вправо с использование бита переноса (&lt;code&gt;C&lt;/code&gt; в регистре &lt;code&gt;STATUS&lt;/code&gt;), или без использования бита переноса. Поэтому алгоритмы, использующие сдвиг на число бит большее одного можно реализовать только последовательным вращением со сбросом бита &lt;code&gt;C&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
АЛУ семейства PIC24F содержит сдвиговый регистр, позволяющий производить операции сдвига или вращения вправо или влево, с использованием или без использования бита переноса. При этом сдвиг или вращение производятся на произвольное количество бит от 1 до 15.
&lt;br/&gt;
 
&lt;br/&gt;
 
&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;

&lt;a href=&quot;http://wiki.pic24.ru/doku.php/articles/mchp/pic18_to_pic24_migration/contents&quot; class=&quot;wikilink1&quot; title=&quot;articles:mchp:pic18_to_pic24_migration:contents&quot;&gt;К содержанию&lt;/a&gt;
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Операции сдвига&quot; [11112-] --&gt;&lt;div class=&quot;footnotes&quot;&gt;
&lt;div class=&quot;fn&quot;&gt;&lt;sup&gt;&lt;a href=&quot;#fnt__1&quot; id=&quot;fn__1&quot; name=&quot;fn__1&quot; class=&quot;fn_bot&quot;&gt;1)&lt;/a&gt;&lt;/sup&gt; 
F&lt;sub&gt;CY&lt;/sub&gt; - частота выполнения инструкций&lt;/div&gt;
&lt;div class=&quot;fn&quot;&gt;&lt;sup&gt;&lt;a href=&quot;#fnt__2&quot; id=&quot;fn__2&quot; name=&quot;fn__2&quot; class=&quot;fn_bot&quot;&gt;2)&lt;/a&gt;&lt;/sup&gt; 
&lt;strong&gt;PSV&lt;/strong&gt; - Programm Space Visibility&lt;/div&gt;
&lt;/div&gt;
</description>
    </item>
    <item rdf:about="http://wiki.pic24.ru/doku.php/articles/mchp/pic18_to_pic24_migration/core/data_mem?rev=1221218230">
        <dc:format>text/html</dc:format>
        <dc:date>2008-09-12T15:17:10+03:00</dc:date>
        <title>Память данных</title>
        <link>http://wiki.pic24.ru/doku.php/articles/mchp/pic18_to_pic24_migration/core/data_mem?rev=1221218230</link>
        <description>




&lt;h1&gt;&lt;a name=&quot;память_данных&quot; id=&quot;память_данных&quot;&gt;Память данных&lt;/a&gt;&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;

Организация памяти данных семейства PIC24F значительно отличается от карты памяти данных микроконтроллеров PIC18. Основные различия представлены в таблице:

&lt;/p&gt;
&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0 centeralign&quot;&gt;  Параметр  &lt;/th&gt;&lt;th class=&quot;col1 centeralign&quot;&gt;  PIC18  &lt;/th&gt;&lt;th class=&quot;col2 centeralign&quot;&gt;  PIC24F  &lt;/th&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; Шина адреса памяти данных (адресуемый объем) &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; 12 бит (максимум 4096 байт) &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; 16 бит (максимум 65536 байт) &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; Сегментация &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Линейный доступ, банковая сегментация. Полностью линейный доступ только для некоторых инструкций &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; Линейный доступ без сегментации &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; Области специального доступа &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Access RAM (первый и последний банки) &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; Near Data Space (область ближней памяти - первые 8 кБ) &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row4&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; Размещение регистров специального назначения &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Нижняя половина последнего банка памяти &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; Размешены в области ближней памяти &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row5&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; Стек &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Аппаратный, 32 уровня, не отображается в память данных &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; Программный стек. Вершина стека – &lt;code&gt;0x0800&lt;/code&gt;, глубина стека ограничивается программно &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row6&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; Доступ к памяти &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Побайтный (прямой или косвенный) &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; Побайтный, доступ к слову (16 бит), доступ к двойному слову (32 бита) – прямой и косвенный &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row7&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; Аппаратное отображение памяти программ в память данных (PSV &lt;sup&gt;&lt;a href=&quot;#fn__1&quot; name=&quot;fnt__1&quot; id=&quot;fnt__1&quot; class=&quot;fn_top&quot;&gt;1)&lt;/a&gt;&lt;/sup&gt;) &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Нет &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; Да, в верхнюю часть области памяти данных &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Память данных&quot; [12-2017] --&gt;
&lt;h2&gt;&lt;a name=&quot;адресуемый_объем_и_сегментация&quot; id=&quot;адресуемый_объем_и_сегментация&quot;&gt;Адресуемый объем и сегментация&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;

Все микроконтроллеры PIC18 могут адресовать до 4 кБ ОЗУ. Теоретически, память данных линейна и может быть прозрачно доступна некоторым инструкциям. Однако для использования большинство инструкций применяется сегментная модель памяти данных, разделенной на банки. Это связано с ограниченным размером машинного кода инструкции – большинство инструкций имеют 8-битное поле адреса операнда. Таким образом, для этих инструкций память данных делится на 16 банков по 256 байт. Для обращения к определенному банку используется служебный регистр выбора банка &lt;code&gt;BSR&lt;/code&gt;, который содержит четыре старших бита адреса операнда. Максимальный объем памяти данных для семейства PIC18 составляет 4 кБ, на кристалле может быть реализована вся или часть адресуемой памяти данных.
&lt;/p&gt;

&lt;p&gt;
Для семейства PIC24F вся память данных может быть представлена как линейный массив. Большинство инструкций могут адресовать первые 8 кБ памяти данных, так как слово инструкции содержит 13 бит для прямой адресации операнда. Остальная часть памяти данных может быть адресована косвенно. Максимальный адресуемый объем памяти для семейства PIC24F составляет 64 кБ, память данных может иметь объем 32 кБ. Оставшиеся 32 кБ используются для отображения части программной памяти в ОЗУ (PSV). Сравнение карт памяти данных для семейств PIC18 и PIC24F приведено на рисунке:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;http://wiki.pic24.ru/lib/exe/detail.php/articles/mchp/pic18_to_pic24_migration/core/fig.4.png?id=articles%3Amchp%3Apic18_to_pic24_migration%3Acore%3Adata_mem&quot; class=&quot;media&quot; title=&quot;articles:mchp:pic18_to_pic24_migration:core:fig.4.png&quot;&gt;&lt;img src=&quot;http://wiki.pic24.ru/lib/exe/fetch.php/articles/mchp/pic18_to_pic24_migration/core/fig.4.png&quot; class=&quot;mediacenter&quot; title=&quot;Сравнение карт памяти данных семейств PIC18 и PIC24F&quot; alt=&quot;Сравнение карт памяти данных семейств PIC18 и PIC24F&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Адресуемый объем и сегментация&quot; [2018-4617] --&gt;
&lt;h2&gt;&lt;a name=&quot;расположение_регистров_специального_назначения_sfr&quot; id=&quot;расположение_регистров_специального_назначения_sfr&quot;&gt;Расположение регистров специального назначения (SFR)&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;

В микроконтроллерах PIC18 регистры специального назначения (регистры управления ядром, периферией, и т. п.) расположены обычно в самом низу памяти данных, как правило, по адресам с &lt;code&gt;0xF60&lt;/code&gt; по &lt;code&gt;0xFFF&lt;/code&gt; включительно.
&lt;/p&gt;

&lt;p&gt;
В микроконтроллерах PIC24F регистры специального назначения расположены в самом верху памяти данных и занимают 2 кБ (адреса с &lt;code&gt;0x0000&lt;/code&gt; по &lt;code&gt;0x07FF&lt;/code&gt; включительно).
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Расположение регистров специального назначения (SFR)&quot; [4618-5383] --&gt;
&lt;h2&gt;&lt;a name=&quot;области_специального_доступа&quot; id=&quot;области_специального_доступа&quot;&gt;Области специального доступа&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;

Определенный способ расположения сегментов памяти данных в архитектуре PIC18 делает возможным быстрый доступ без переключения банков к регистрам специального назначения и к данным приложения. Это осуществляется выделением виртуального банка, который называется &lt;em&gt;Access RAM&lt;/em&gt; и в который входит верхняя половина нулевого банка и нижняя половина пятнадцатого банка (область SFR). Такая реализация доступа к памяти позволяет всегда, вне зависимости от значения регистра &lt;code&gt;BSR&lt;/code&gt; получать быстрый доступ к регистрам SFR. Для доступа к банку &lt;em&gt;Access RAM&lt;/em&gt; используется специальный синтаксис ассемблера, область доступа (память данных или &lt;em&gt;Access RAM&lt;/em&gt;) задается в машинном коде инструкции.
&lt;/p&gt;

&lt;p&gt;
В микроконтроллерах семейства PIC24F верхняя часть памяти данных объемом 8 кБ (&lt;code&gt;0x0000&lt;/code&gt; – &lt;code&gt;0x1FFF&lt;/code&gt;) называется &lt;em&gt;Near Data Space&lt;/em&gt; («пространство близких данных»). Доступ к этому блоку данных (в который входят и регистры SFR) может осуществляться с помощью прямой адресации любой инструкцией (если конечно инструкция имеет возможность прямой адресации операндов).
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Области специального доступа&quot; [5384-7302] --&gt;
&lt;h2&gt;&lt;a name=&quot;аппаратное_отображение_памяти_программ_в_память_данных&quot; id=&quot;аппаратное_отображение_памяти_программ_в_память_данных&quot;&gt;Аппаратное отображение памяти программ в память данных&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;

Архитектура PIC18 подразумевает доступ к памяти программ с помощью инструкций табличного чтения &lt;code&gt;TBLRD&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
Архитектура PIC24F так же имеет инструкции табличного чтения, однако кроме этого возможно прямое отображение памяти программ в область памяти данных (&lt;strong&gt;PSV&lt;/strong&gt; – Program Space Visibility). Когда используется данная опция, сегмент памяти программ объемом 32 кБ может быть отображен в физически не реализуемый сегмент памяти данных. В этом случае возможен прозрачный доступ к ПЗУ как к ОЗУ (только на чтение). Регистр &lt;code&gt;PSVPAG&lt;/code&gt; определяет часть памяти программ, отображаемую в ОЗУ, бит &lt;code&gt;PSV&lt;/code&gt; (&lt;code&gt;CORCON&amp;lt;2&amp;gt;&lt;/code&gt;) используется для разрешения/запрещения отображения ПЗУ в ОЗУ.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Аппаратное отображение памяти программ в память данных&quot; [7303-8585] --&gt;
&lt;h2&gt;&lt;a name=&quot;программный_стек&quot; id=&quot;программный_стек&quot;&gt;Программный стек&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;

Как было отмечено в пункте &lt;a href=&quot;http://wiki.pic24.ru/doku.php/articles/mchp/pic18_to_pic24_migration/core/core&quot; class=&quot;wikilink1&quot; title=&quot;articles:mchp:pic18_to_pic24_migration:core:core&quot;&gt;&amp;quot;Ядро&amp;quot;&lt;/a&gt;, микроконтроллеры PIC18 имеют аппаратный стек для сохранения адреса возврата, который не отображен в память данных и имеет глубину 32 уровня.
&lt;/p&gt;

&lt;p&gt;
В архитектуре PIC24F используется программный стек в области данных. Область стека начинается с адреса &lt;code&gt;0x800&lt;/code&gt; сразу после области SFR. Стек растет вниз, в качестве указателя стека используется регистр &lt;code&gt;W15&lt;/code&gt;. Размер стека ограничивается программно значением регистра &lt;code&gt;SPLIM&lt;/code&gt;. При переполнении стека возникает аппаратное исключение (прерывание).
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Программный стек&quot; [8586-9616] --&gt;
&lt;h2&gt;&lt;a name=&quot;доступ_к_данным&quot; id=&quot;доступ_к_данным&quot;&gt;Доступ к данным&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;

Как было отмечено в пункте &lt;a href=&quot;http://wiki.pic24.ru/doku.php/articles/mchp/pic18_to_pic24_migration/core/instruction_set&quot; class=&quot;wikilink1&quot; title=&quot;articles:mchp:pic18_to_pic24_migration:core:instruction_set&quot;&gt;&amp;quot;Набор инструкций&amp;quot;&lt;/a&gt;, микроконтроллеры PIC18 имеют атомарные инструкции только для работы с байтами. 
&lt;/p&gt;

&lt;p&gt;
Микроконтроллеры PIC24 имеют атомарные инструкции как для работы с байтами, так и для работы со словами (16 бит) и двойными словами (32 бита).
&lt;br/&gt;
 
&lt;br/&gt;
 
&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;

&lt;a href=&quot;http://wiki.pic24.ru/doku.php/articles/mchp/pic18_to_pic24_migration/contents&quot; class=&quot;wikilink1&quot; title=&quot;articles:mchp:pic18_to_pic24_migration:contents&quot;&gt;К содержанию&lt;/a&gt;

&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Доступ к данным&quot; [9617-] --&gt;&lt;div class=&quot;footnotes&quot;&gt;
&lt;div class=&quot;fn&quot;&gt;&lt;sup&gt;&lt;a href=&quot;#fnt__1&quot; id=&quot;fn__1&quot; name=&quot;fn__1&quot; class=&quot;fn_bot&quot;&gt;1)&lt;/a&gt;&lt;/sup&gt; 
Program Space visibility&lt;/div&gt;
&lt;/div&gt;
</description>
    </item>
    <item rdf:about="http://wiki.pic24.ru/doku.php/articles/mchp/pic18_to_pic24_migration/core/instruction_set?rev=1221218174">
        <dc:format>text/html</dc:format>
        <dc:date>2008-09-12T15:16:14+03:00</dc:date>
        <title>Набор инструкций</title>
        <link>http://wiki.pic24.ru/doku.php/articles/mchp/pic18_to_pic24_migration/core/instruction_set?rev=1221218174</link>
        <description>




&lt;h1&gt;&lt;a name=&quot;набор_инструкций&quot; id=&quot;набор_инструкций&quot;&gt;Набор инструкций&lt;/a&gt;&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;

Набор инструкций ядра PIC24F значительно расширен по сравнению с набором инструкций микроконтроллеров PIC18. Так как величина слова инструкции PIC24F составляет 24 бита, увеличено как количество инструкций, так и методов адресации и поддерживаемых типов данных (двойное слово данных – 32 бита, слово данных – 16 бит, байт). Основные различия в наборах инструкций PIС18 и PIC24F приведены в таблице:

&lt;/p&gt;
&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0 centeralign&quot;&gt;  Параметры  &lt;/th&gt;&lt;th class=&quot;col1 centeralign&quot;&gt;  PIC18  &lt;/th&gt;&lt;th class=&quot;col2 centeralign&quot;&gt;  PIC24F  &lt;/th&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; Величина слова инструкции &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; 16 бит &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; 24 бита &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; Количество базовых инструкций &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; 75 &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; 76 &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; Поддерживаемая разрядность данных &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Байт &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; Байт, слово, двойное слово &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row4&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; Количество операндов &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; До двух (b = a + b) &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; До трех (c = a + b) &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row5&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; Режимы адресаций &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Прямая, косвенная (5 видов) &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; Прямая, косвенная (6 видов) &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row6&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; Косвенная адресация &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Используются регистры косвенной адресации &lt;code&gt;FSR&lt;/code&gt; – максимум три указателя &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; Как указатель используется любой регистр общего назначения – до 16 указателей &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row7&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; Адресация памяти данных &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Прямая адресация – ограничено текущим банком. Вся память данных адресуется за несколько инструкций &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; Прямая адресация – ограничено областью ближней памяти &lt;sup&gt;&lt;a href=&quot;#fn__1&quot; name=&quot;fnt__1&quot; id=&quot;fnt__1&quot; class=&quot;fn_top&quot;&gt;1)&lt;/a&gt;&lt;/sup&gt;. Вся память данных – косвенная адресация &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Набор инструкций&quot; [13-2103] --&gt;
&lt;h2&gt;&lt;a name=&quot;изменение_набора_инструкций_pic24f_по_сравнению_с_pic18&quot; id=&quot;изменение_набора_инструкций_pic24f_по_сравнению_с_pic18&quot;&gt;Изменение набора инструкций PIC24F по сравнению с PIC18&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;

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

&lt;/p&gt;
&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0 centeralign&quot;&gt;  Инструкции ядра PIC24F  &lt;/th&gt;&lt;th class=&quot;col1 centeralign&quot;&gt;  Описание  &lt;/th&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;code&gt;DIV&lt;/code&gt; &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Деление двух чисел, знаковое и беззнаковое, 32 бита на 16 бит и 16 бит на 16 бит &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;code&gt;LNK&lt;/code&gt;, &lt;code&gt;ULNK&lt;/code&gt; &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Фиксировать и освободить указатель стекового фрейма (&lt;code&gt;W14&lt;/code&gt;) &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;code&gt;LSR&lt;/code&gt;, &lt;code&gt;ASR&lt;/code&gt; &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Двоичный и арифметический сдвиг вправо (от 1 до 15 бит). Аргументом, определяющим величину сдвига, может являться константа или переменная &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row4&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;code&gt;MUL.SS&lt;/code&gt;, &lt;code&gt;MUL.SU&lt;/code&gt;, &lt;code&gt;MUL.UU&lt;/code&gt; &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Умножение (знаковое, смешанное, беззнаковое) &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row5&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;code&gt;PUSH&lt;/code&gt;, &lt;code&gt;&lt;acronym title=&quot;Post Office Protocol&quot;&gt;POP&lt;/acronym&gt;&lt;/code&gt; &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Обе инструкции имеют произвольный аргумент, что позволяет сохранять в стеке значение, отличное от текущего значения счетчика команд &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row6&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;code&gt;REPEAT&lt;/code&gt; &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Повтор следующей инструкции определенное количество раз &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row7&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;code&gt;SL&lt;/code&gt; &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Сдвиг влево (от 1 до 15 бит). Аргументом, определяющим величину сдвига, может являться константа или переменная &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;

&lt;p&gt;

Однако некоторые инструкции ядра PIC18 не могут быть заменены атомарной инструкцией ядра PIC24F. Как правило, аналогичный (но не идентичный, вследствие различия флагов в &lt;code&gt;STATUS&lt;/code&gt; регистре) результат можно получить, используя одну или две инструкции PIC24F. К таким инструкциям ядра PIC18 относятся:
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;CPFSEQ&lt;/code&gt;, &lt;code&gt;CPFSGT&lt;/code&gt;, &lt;code&gt;CPFSLT&lt;/code&gt;, &lt;code&gt;MOVSF&lt;/code&gt;, &lt;code&gt;MOVSS&lt;/code&gt;, &lt;code&gt;INFSNZ&lt;/code&gt;, &lt;code&gt;DCFSNZ&lt;/code&gt;, &lt;code&gt;DECFSZ&lt;/code&gt;, &lt;code&gt;SUBULNK&lt;/code&gt;, &lt;code&gt;INCFSZ&lt;/code&gt;, &lt;code&gt;TSTFSZ&lt;/code&gt;, &lt;code&gt;PUSHL&lt;/code&gt;, &lt;code&gt;MOVFF&lt;/code&gt; (все режимы исключая перемещение с использованием косвенной адресации источника и приемника), &lt;code&gt;SWAPF&lt;/code&gt; (все режимы за исключением использования с &lt;code&gt;WREG&lt;/code&gt;)
&lt;/p&gt;

&lt;p&gt;
За исключением перечисленных выше, все инструкции PIC18 имеют аналоги в наборе инструкций PIC24F. Более подробная информация приведена в &lt;a href=&quot;http://wiki.pic24.ru/doku.php/articles/mchp/pic18_to_pic24_migration/addon_a&quot; class=&quot;wikilink2&quot; title=&quot;articles:mchp:pic18_to_pic24_migration:addon_a&quot; rel=&quot;nofollow&quot;&gt;приложении А.&lt;/a&gt;.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Изменение набора инструкций PIC24F по сравнению с PIC18&quot; [2104-5403] --&gt;
&lt;h2&gt;&lt;a name=&quot;поддерживаемые_типы_данных&quot; id=&quot;поддерживаемые_типы_данных&quot;&gt;Поддерживаемые типы данных&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;

Кроме бит-ориентированных инструкций, инструкции ядра PIC18 поддерживают только работу с данными величиной 1 байт. Любые действия с данными разрядностью более 8 бит требуют корректной последовательности выполнения нескольких инструкций.
&lt;/p&gt;

&lt;p&gt;
Ядро PIC24F имеет 16-битную шину данных, что определяет основной формат операндов как 16-битное слово (2 байта). Помимо этого большинство инструкций могут прозрачно использовать 8-битные и 32-битные операнды. При использовании ассемблера суффикс мнемоники &lt;span class=&quot;important&quot;&gt;&lt;code&gt;.b&lt;/code&gt;&lt;/span&gt; указывает, что операция производится с 8-битными данными, а суффикс &lt;span class=&quot;important&quot;&gt;&lt;code&gt;.d&lt;/code&gt;&lt;/span&gt; – что операция производится с двойным 32-битным словом. Выравнивание, определяемое разрядностью операнда производиться автоматически.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Поддерживаемые типы данных&quot; [5404-6755] --&gt;
&lt;h2&gt;&lt;a name=&quot;операнды&quot; id=&quot;операнды&quot;&gt;Операнды&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;

В набор инструкций PIC18 входят команды, поддерживающие только унарные и бинарные операции. Унарная операция подразумевает, что результат сохраняется непосредственно в операнд (например, инкремент регистра &lt;code&gt;WREG&lt;/code&gt;). Бинарная операция позволяет производить действия с двумя операндами (например, сложение) с последующим сохранением результата в один из операндов.
&lt;/p&gt;

&lt;p&gt;
Набор инструкций PIC24F кроме унарных и бинарных операций поддерживает команды с тремя операндами. При этом результат операции с двумя операндами сохраняется в третий. Операции с тремя операндами могут выполнять большинство математических инструкций и инструкций сдвига.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Операнды&quot; [6756-7948] --&gt;
&lt;h2&gt;&lt;a name=&quot;режимы_адресации&quot; id=&quot;режимы_адресации&quot;&gt;Режимы адресации&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;

Основное отличие в системах команд PIC18 и PIC24F заключается в количестве способов адресации данных и реализации этих способов. PIC18 и PIC24F поддерживают одни и те же методы адресаций (за исключением отсутствия в PIC18 косвенной адресации с пре-декрементом).
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Режимы адресации&quot; [7949-8449] --&gt;
&lt;h3&gt;&lt;a name=&quot;прямая_адресация&quot; id=&quot;прямая_адресация&quot;&gt;Прямая адресация&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;

Архитектура PIC18 позволяет адресовать любой байт из памяти данных. Однако так как для прямой адресации в большинстве инструкций в качестве операнда используется 8-битная константа, память данных PIC18 условно разделена на 16 банков. Текущий банк определяется значением служебного регистра &lt;code&gt;BSR&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
Набор инструкций PIC24F разработан таким образом, чтобы любая команда, использующая прямую адресацию, имела доступ к первым 8 кБ памяти данных (NDS - Near Data Space: &lt;code&gt;0x0000&lt;/code&gt; – &lt;code&gt;0x1FFF&lt;/code&gt;), то есть для прямой адресации используется 13-битная константа. Это позволяет использовать прямую адресацию регистров специального назначения (которые все расположены в NDS). Память данных, расположенная выше NDS (адреса, превышающие &lt;code&gt;0x1FFF&lt;/code&gt;) адресуется косвенно.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Прямая адресация&quot; [8450-9809] --&gt;
&lt;h3&gt;&lt;a name=&quot;косвенная_адресация&quot; id=&quot;косвенная_адресация&quot;&gt;Косвенная адресация&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;

В ядре PIC18 для косвенной адресации используется набор регистров специального назначения (указателей) и набор виртуальных регистров. При этом в три указателя &lt;code&gt;FSR0&lt;/code&gt;, &lt;code&gt;FSR1&lt;/code&gt; и &lt;code&gt;FSR2&lt;/code&gt; может быть загружена 12-битная константа. Для выполнения косвенной адресации, в качестве операнда используется один из виртуальных регистров. В зависимости от того, какой из виртуальных регистров является операндом, может быть выполнена дополнительная операция над указателем, например инкремент или декремент. Таким образом, только три указателя и соответствующие им виртуальные регистры могут быть использованы для косвенной адресации.
&lt;/p&gt;

&lt;p&gt;
В PIC24F в качестве указателя может использоваться любой из 16-и регистров общего назначения &lt;code&gt;W0&lt;/code&gt;-&lt;code&gt;W15&lt;/code&gt;. Ассемблер предусматривает специальный синтаксис записи косвенной адресации, в том числе и операции над указателем (адресация со смещением, инкремент и декремент указателя). Помимо пре-инкремента, пре-декремента, пост-инкремента указателя, возможен пре-декремент, недоступный в архитектуре PIC18.
&lt;/p&gt;

&lt;p&gt;
Следует заметить, что при использовании косвенной адресации с изменением указателя, для байтовых инструкций указатель будет изменен на 1. Для инструкций, оперирующих со словом, указатель будет изменен на 2, что обеспечивает корректное выравнивание указателя.
&lt;/p&gt;

&lt;p&gt;
Сравнение режимов косвенной адресации и их реализации приведены в таблице:

&lt;/p&gt;
&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0 centeralign&quot;&gt;  Косвенная адресация  &lt;/th&gt;&lt;th class=&quot;col1 centeralign&quot;&gt;  Виртуальный регистр PIC18, используемый в качестве операнда  &lt;/th&gt;&lt;th class=&quot;col2 centeralign&quot;&gt;  Синтаксис ассемблера PIC24F  &lt;/th&gt;&lt;th class=&quot;col3 centeralign&quot;&gt;  Изменение &lt;code&gt;Wn&lt;/code&gt; или &lt;code&gt;FSR&lt;/code&gt; после байтовой инструкции  &lt;/th&gt;&lt;th class=&quot;col4 centeralign&quot;&gt;  Изменение &lt;code&gt;Wn&lt;/code&gt; или &lt;code&gt;FSR&lt;/code&gt; после инструкции работы со словом  &lt;/th&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; Без модификации &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; &lt;code&gt;INDFx&lt;/code&gt; &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; &lt;code&gt;[Wn]&lt;/code&gt; &lt;/td&gt;&lt;td class=&quot;col3&quot;&gt; &lt;code&gt;Wn = Wn&lt;/code&gt; &lt;/td&gt;&lt;td class=&quot;col4&quot;&gt; &lt;code&gt;Wn = Wn&lt;/code&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; С пре-инкрементом &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; &lt;code&gt;PREINCx&lt;/code&gt; &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; &lt;code&gt;[++Wn]&lt;/code&gt; &lt;/td&gt;&lt;td class=&quot;col3&quot;&gt; &lt;code&gt;Wn = Wn + 1&lt;/code&gt; &lt;/td&gt;&lt;td class=&quot;col4&quot;&gt; &lt;code&gt;Wn = Wn + 2&lt;/code&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; С пре-декрементом &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; - &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; &lt;code&gt;[–Wn]&lt;/code&gt; &lt;/td&gt;&lt;td class=&quot;col3&quot;&gt; &lt;code&gt;Wn = Wn - 1&lt;/code&gt; &lt;/td&gt;&lt;td class=&quot;col4&quot;&gt; &lt;code&gt;Wn = Wn – 2&lt;/code&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row4&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; С пост-инкрементом &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; &lt;code&gt;POSTINCx&lt;/code&gt; &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; &lt;code&gt;[Wn++]&lt;/code&gt; &lt;/td&gt;&lt;td class=&quot;col3&quot;&gt; &lt;code&gt;Wn = Wn + 1&lt;/code&gt; &lt;/td&gt;&lt;td class=&quot;col4&quot;&gt; &lt;code&gt;Wn = Wn + 2&lt;/code&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row5&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; С пост-декрементом &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; &lt;code&gt;POSTDECx&lt;/code&gt; &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; &lt;code&gt;[Wn–]&lt;/code&gt; &lt;/td&gt;&lt;td class=&quot;col3&quot;&gt; &lt;code&gt;Wn = Wn - 1&lt;/code&gt; &lt;/td&gt;&lt;td class=&quot;col4&quot;&gt; &lt;code&gt;Wn = Wn – 2&lt;/code&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row6&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; Со смещением &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; &lt;code&gt;PLUSWx&lt;/code&gt; &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; &lt;code&gt;[Wn + Wb]&lt;/code&gt; &lt;/td&gt;&lt;td class=&quot;col3&quot;&gt; &lt;code&gt;Wn = Wn&lt;/code&gt; &lt;/td&gt;&lt;td class=&quot;col4&quot;&gt; &lt;code&gt;Wn = Wn&lt;/code&gt; &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;

&lt;p&gt;

Типовая операция копирования массивов для семейства PIC18:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;LoopSetup    MOVLW 0x10, LoopCount      ;set up loop counter
             LFSR 0, myArray0           ;set up pointer 0
             LFSR 1, myArray1           ;set up pointer 1
CopyLoop     MOVFF POSTINC0, POSTINC1   ;copy myArray1 to myArray0
             DECFSZ LoopCount, F        ;decrement loop counter
             BRA CopyLoop&lt;/pre&gt;
&lt;p&gt;
Типовая операция копирования массивов для семейства PIC24F: 
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;LoopSetup    MOV #myArray0, W0          ;set up pointer 0
             MOV #myArray1, W1          ;set up pointer 1
             REPEAT #15                 ;loop 16 times
             MOV [W1++], [W0++]         ;copy array1 to array&lt;/pre&gt;
&lt;/div&gt;
&lt;!-- SECTION &quot;Косвенная адресация&quot; [9810-14120] --&gt;
&lt;h3&gt;&lt;a name=&quot;нарушение_последовательности_чтение-модификация-запись&quot; id=&quot;нарушение_последовательности_чтение-модификация-запись&quot;&gt;Нарушение последовательности «чтение-модификация-запись»&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;

Расширенные возможности косвенной адресации в архитектуре PIC24F в некоторых случаях могут привести к нарушению последовательности «чтение-модификация-запись». Нарушения возникают в том случае, когда переменная, необходимая для выполнения инструкции, выборка которой происходит в данный момент, еще не изменена.
&lt;/p&gt;

&lt;p&gt;
В общем случае это происходит тогда, когда сразу за инструкцией, изменяющей регистр общего назначения, следует инструкция, использующая этот регистр как указатель. Ядро PIC24F предусматривает такую опасность, и автоматически выполняет одну или более пустых инструкций (&lt;code&gt;NOP&lt;/code&gt;) до момента завершения операции изменения указателя:

&lt;/p&gt;
&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0 centeralign&quot;&gt;  Метод адресации первой инструкции  &lt;/th&gt;&lt;th class=&quot;col1 centeralign&quot;&gt;  Метод адресации второй инструкции  &lt;/th&gt;&lt;th class=&quot;col2 centeralign&quot;&gt;  Количество пустых командных тактов &lt;sup&gt;&lt;a href=&quot;#fn__2&quot; name=&quot;fnt__2&quot; id=&quot;fnt__2&quot; class=&quot;fn_top&quot;&gt;2)&lt;/a&gt;&lt;/sup&gt;  &lt;/th&gt;&lt;th class=&quot;col3 centeralign&quot;&gt;  Пример (&lt;code&gt;Wn&lt;/code&gt; = &lt;code&gt;W2&lt;/code&gt;)  &lt;/th&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;td class=&quot;col0 centeralign&quot;&gt;  Прямая  &lt;/td&gt;&lt;td class=&quot;col1 centeralign&quot;&gt;  Прямая  &lt;/td&gt;&lt;td class=&quot;col2 centeralign&quot;&gt;  0  &lt;/td&gt;&lt;td class=&quot;col3&quot;&gt; &lt;pre class=&quot;code&quot;&gt;ADD.w W0, W1, W2                
MOV.w W2, W3&lt;/pre&gt;
&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;td class=&quot;col0 centeralign&quot;&gt;  Косвенная  &lt;/td&gt;&lt;td class=&quot;col1 centeralign&quot;&gt;  Прямая  &lt;/td&gt;&lt;td class=&quot;col2 centeralign&quot;&gt;  0  &lt;/td&gt;&lt;td class=&quot;col3&quot;&gt; &lt;pre class=&quot;code&quot;&gt;ADD.w W0, W1, [W2]                
MOV.w W2, W3&lt;/pre&gt;
&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;td class=&quot;col0 centeralign&quot;&gt;  Косвенная  &lt;/td&gt;&lt;td class=&quot;col1 centeralign&quot;&gt;  Косвенная  &lt;/td&gt;&lt;td class=&quot;col2 centeralign&quot;&gt;  0  &lt;/td&gt;&lt;td class=&quot;col3&quot;&gt; &lt;pre class=&quot;code&quot;&gt;ADD.w W0, W1, [W2]                
MOV.w [W2], W3&lt;/pre&gt;
&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row4&quot;&gt;
		&lt;td class=&quot;col0 centeralign&quot;&gt;  Косвенная  &lt;/td&gt;&lt;td class=&quot;col1 centeralign&quot;&gt;  Косвенная, с модификацией указателя  &lt;/td&gt;&lt;td class=&quot;col2 centeralign&quot;&gt;  0  &lt;/td&gt;&lt;td class=&quot;col3&quot;&gt; &lt;pre class=&quot;code&quot;&gt;ADD.w W0, W1, [W2]                
MOV.w [W2++], W3&lt;/pre&gt;
&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row5&quot;&gt;
		&lt;td class=&quot;col0 centeralign&quot;&gt;  Косвенная, с модификацией указателя  &lt;/td&gt;&lt;td class=&quot;col1 centeralign&quot;&gt;  Прямая  &lt;/td&gt;&lt;td class=&quot;col2 centeralign&quot;&gt;  0  &lt;/td&gt;&lt;td class=&quot;col3&quot;&gt; &lt;pre class=&quot;code&quot;&gt;ADD.w W0, W1, [W2++]                
MOV.w W2, W3&lt;/pre&gt;
&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row6&quot;&gt;
		&lt;td class=&quot;col0 centeralign&quot;&gt;  Прямая  &lt;/td&gt;&lt;td class=&quot;col1 centeralign&quot;&gt;  Косвенная  &lt;/td&gt;&lt;td class=&quot;col2 centeralign&quot;&gt;  1  &lt;/td&gt;&lt;td class=&quot;col3&quot;&gt; &lt;pre class=&quot;code&quot;&gt;ADD.w W0, W1, W2                
MOV.w [W2], W3&lt;/pre&gt;
&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row7&quot;&gt;
		&lt;td class=&quot;col0 centeralign&quot;&gt;  Прямая  &lt;/td&gt;&lt;td class=&quot;col1 centeralign&quot;&gt;  Косвенная с модификацией указателя  &lt;/td&gt;&lt;td class=&quot;col2 centeralign&quot;&gt;  1  &lt;/td&gt;&lt;td class=&quot;col3&quot;&gt; &lt;pre class=&quot;code&quot;&gt;ADD.w W0, W1, W2                
MOV.w [W2++], W3&lt;/pre&gt;
&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row8&quot;&gt;
		&lt;td class=&quot;col0 centeralign&quot;&gt;  Косвенная  &lt;/td&gt;&lt;td class=&quot;col1 centeralign&quot;&gt;  Косвенная  &lt;/td&gt;&lt;td class=&quot;col2 centeralign&quot;&gt;  1  &lt;/td&gt;&lt;td class=&quot;col3&quot;&gt; &lt;pre class=&quot;code&quot;&gt;ADD.w W0, W1, [W2]                
MOV.w [W2], W3
; W2=04h (mapped W2)&lt;/pre&gt;
&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row9&quot;&gt;
		&lt;td class=&quot;col0 centeralign&quot;&gt;  Косвенная  &lt;/td&gt;&lt;td class=&quot;col1 centeralign&quot;&gt;  Косвенная с модификацией указателя  &lt;/td&gt;&lt;td class=&quot;col2 centeralign&quot;&gt;  1  &lt;/td&gt;&lt;td class=&quot;col3&quot;&gt; &lt;pre class=&quot;code&quot;&gt;ADD.w W0, W1, [W2]                
MOV.w [W2++], W3
; W2=04h (mapped W2)&lt;/pre&gt;
&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row10&quot;&gt;
		&lt;td class=&quot;col0 centeralign&quot;&gt;  Косвенная с модификацией указателя  &lt;/td&gt;&lt;td class=&quot;col1 centeralign&quot;&gt;  Косвенная  &lt;/td&gt;&lt;td class=&quot;col2 centeralign&quot;&gt;  1  &lt;/td&gt;&lt;td class=&quot;col3&quot;&gt; &lt;pre class=&quot;code&quot;&gt;ADD.w W0, W1, [W2++]                
MOV.w [W2], W3&lt;/pre&gt;
&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row11&quot;&gt;
		&lt;td class=&quot;col0 centeralign&quot;&gt;  Косвенная с модификацией указателя  &lt;/td&gt;&lt;td class=&quot;col1 centeralign&quot;&gt;  Косвенная с модификацией указателя  &lt;/td&gt;&lt;td class=&quot;col2 centeralign&quot;&gt;  1  &lt;/td&gt;&lt;td class=&quot;col3&quot;&gt; &lt;pre class=&quot;code&quot;&gt;ADD.w W0, W1, [W2++]                
MOV.w [W2++], W3&lt;/pre&gt;
&lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;

&lt;p&gt;

&lt;br/&gt;
 
&lt;br/&gt;
 
&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;

&lt;a href=&quot;http://wiki.pic24.ru/doku.php/articles/mchp/pic18_to_pic24_migration/contents&quot; class=&quot;wikilink1&quot; title=&quot;articles:mchp:pic18_to_pic24_migration:contents&quot;&gt;К содержанию&lt;/a&gt;
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Нарушение последовательности «чтение-модификация-запись»&quot; [14121-] --&gt;&lt;div class=&quot;footnotes&quot;&gt;
&lt;div class=&quot;fn&quot;&gt;&lt;sup&gt;&lt;a href=&quot;#fnt__1&quot; id=&quot;fn__1&quot; name=&quot;fn__1&quot; class=&quot;fn_bot&quot;&gt;1)&lt;/a&gt;&lt;/sup&gt; 
Near Data Space – 8 кБайт&lt;/div&gt;
&lt;div class=&quot;fn&quot;&gt;&lt;sup&gt;&lt;a href=&quot;#fnt__2&quot; id=&quot;fn__2&quot; name=&quot;fn__2&quot; class=&quot;fn_bot&quot;&gt;2)&lt;/a&gt;&lt;/sup&gt; 
выполняемых ядром после первой инструкции&lt;/div&gt;
&lt;/div&gt;
</description>
    </item>
    <item rdf:about="http://wiki.pic24.ru/doku.php/articles/mchp/pic18_to_pic24_migration/core/intro?rev=1221211937">
        <dc:format>text/html</dc:format>
        <dc:date>2008-09-12T13:32:17+03:00</dc:date>
        <title>Архитектура PIC24F</title>
        <link>http://wiki.pic24.ru/doku.php/articles/mchp/pic18_to_pic24_migration/core/intro?rev=1221211937</link>
        <description>


&lt;h1&gt;&lt;a name=&quot;архитектура_pic24f&quot; id=&quot;архитектура_pic24f&quot;&gt;Архитектура PIC24F&lt;/a&gt;&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://wiki.pic24.ru/doku.php/articles/mchp/pic18_to_pic24_migration/core/core&quot; class=&quot;wikilink1&quot; title=&quot;articles:mchp:pic18_to_pic24_migration:core:core&quot;&gt;Ядро&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://wiki.pic24.ru/doku.php/articles/mchp/pic18_to_pic24_migration/core/instruction_set&quot; class=&quot;wikilink1&quot; title=&quot;articles:mchp:pic18_to_pic24_migration:core:instruction_set&quot;&gt;Набор инструкций&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://wiki.pic24.ru/doku.php/articles/mchp/pic18_to_pic24_migration/core/programm_mem&quot; class=&quot;wikilink1&quot; title=&quot;articles:mchp:pic18_to_pic24_migration:core:programm_mem&quot;&gt;Память программ&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://wiki.pic24.ru/doku.php/articles/mchp/pic18_to_pic24_migration/core/data_mem&quot; class=&quot;wikilink1&quot; title=&quot;articles:mchp:pic18_to_pic24_migration:core:data_mem&quot;&gt;Память данных&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://wiki.pic24.ru/doku.php/articles/mchp/pic18_to_pic24_migration/core/reset_and_startup&quot; class=&quot;wikilink2&quot; title=&quot;articles:mchp:pic18_to_pic24_migration:core:reset_and_startup&quot; rel=&quot;nofollow&quot;&gt;Сброс и запуск&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://wiki.pic24.ru/doku.php/articles/mchp/pic18_to_pic24_migration/core/interrupt&quot; class=&quot;wikilink2&quot; title=&quot;articles:mchp:pic18_to_pic24_migration:core:interrupt&quot; rel=&quot;nofollow&quot;&gt;Контроллер прерываний&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://wiki.pic24.ru/doku.php/articles/mchp/pic18_to_pic24_migration/core/power_saving&quot; class=&quot;wikilink2&quot; title=&quot;articles:mchp:pic18_to_pic24_migration:core:power_saving&quot; rel=&quot;nofollow&quot;&gt;Режимы энергосбережения&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://wiki.pic24.ru/doku.php/articles/mchp/pic18_to_pic24_migration/core/wathdog&quot; class=&quot;wikilink2&quot; title=&quot;articles:mchp:pic18_to_pic24_migration:core:wathdog&quot; rel=&quot;nofollow&quot;&gt;Сторожевой таймер&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://wiki.pic24.ru/doku.php/articles/mchp/pic18_to_pic24_migration/core/device_integration&quot; class=&quot;wikilink2&quot; title=&quot;articles:mchp:pic18_to_pic24_migration:core:device_integration&quot; rel=&quot;nofollow&quot;&gt;Системные устройства&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
&lt;br/&gt;
 
&lt;br/&gt;
 
&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;

&lt;a href=&quot;http://wiki.pic24.ru/doku.php/articles/mchp/pic18_to_pic24_migration/contents&quot; class=&quot;wikilink1&quot; title=&quot;articles:mchp:pic18_to_pic24_migration:contents&quot;&gt;К содержанию&lt;/a&gt;

&lt;/p&gt;

&lt;/div&gt;
</description>
    </item>
    <item rdf:about="http://wiki.pic24.ru/doku.php/articles/mchp/pic18_to_pic24_migration/core/programm_mem?rev=1221218198">
        <dc:format>text/html</dc:format>
        <dc:date>2008-09-12T15:16:38+03:00</dc:date>
        <title>Память программ</title>
        <link>http://wiki.pic24.ru/doku.php/articles/mchp/pic18_to_pic24_migration/core/programm_mem?rev=1221218198</link>
        <description>




&lt;h1&gt;&lt;a name=&quot;память_программ&quot; id=&quot;память_программ&quot;&gt;Память программ&lt;/a&gt;&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;

PIC18 и PIC24F имеют похожую схему размещения памяти программ и служебных областей памяти во внутреннем Flash ПЗУ. Отличие заключается в том, что размер слова инструкции PIC24F составляет 24-бита (16-бит у PIC18), и существует возможность отображения части памяти программы в память данных.
&lt;/p&gt;

&lt;p&gt;
Адреса, по которым расположены основные блоки ПЗУ у PIC18 и PIC24F различны, это следует учитывать при портировании приложения. Основные различия представлены в таблице:

&lt;/p&gt;
&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0 centeralign&quot;&gt;  Параметр  &lt;/th&gt;&lt;th class=&quot;col1 centeralign&quot;&gt;  PIC18  &lt;/th&gt;&lt;th class=&quot;col2 centeralign&quot;&gt;  PIC24F  &lt;/th&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; Организация ПЗУ &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; 16 бит, байтовая адресация &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; 24 бита, адресация по слову &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; Максимальный объем адресуемой памяти &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; 4 МБ &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; 16 МБ &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; Максимальный объем памяти доступной пользователю &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; 2 МБ (&lt;code&gt;0xFFFFF&lt;/code&gt;) &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; 8 МБ (&lt;code&gt;0x7FFFFF&lt;/code&gt;) &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row4&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; Загрузочный блок &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Большинство устройств &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; Нет &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row5&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; Векторы сброса, прерываний, исключений &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; &lt;code&gt;0x00&lt;/code&gt;, &lt;code&gt;0x08&lt;/code&gt;, &lt;code&gt;0x18&lt;/code&gt; &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; Диапазон &lt;code&gt;0x00&lt;/code&gt; – &lt;code&gt;0x1FF&lt;/code&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row6&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; Положение блока конфигурации &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Диапазон &lt;code&gt;0x300000&lt;/code&gt; - &lt;code&gt;0x30000F&lt;/code&gt; &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; Последние два блока в программной памяти &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row7&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; Положение блока &lt;em&gt;Device ID&lt;/em&gt; &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; &lt;code&gt;0x3FFFFE&lt;/code&gt; и &lt;code&gt;0x3FFFFF&lt;/code&gt; &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; &lt;code&gt;0xFF0000&lt;/code&gt; и &lt;code&gt;0xFF0002&lt;/code&gt; &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Память программ&quot; [12-1810] --&gt;
&lt;h2&gt;&lt;a name=&quot;организация_памяти_программ&quot; id=&quot;организация_памяти_программ&quot;&gt;Организация памяти программ&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;

Память программ PIC18 организована в виде 16-битных слов, однако может адресоваться побайтно. Это означает, что старшее и младшее слово инструкции могут быть доступны при использовании косвенной адресации. Память программ выровнена по младшему байту слова, при линейном выполнении кода программный счетчик всегда увеличивается на 2.
&lt;/p&gt;

&lt;p&gt;
Семейство PIC24F имеет похожую организацию. Физически память программ представляет собой последовательность 24-битных слов, однако к ПЗУ возможна адресация по 16-битному слову. Таким образом, инструкцию можно представить как два 16 –битных слова, а не 3 байта. В этом случае младшее слово инструкции адресуется четным указателем, старшее – нечетным. Физически инструкции выровнены по четному слову, программный счетчик увеличивается на 2 в случае линейного выполнения программы.
&lt;/p&gt;

&lt;p&gt;
Так как физически инструкция представляет собой 3 байта, 4-й байт слова всегда равен &lt;code&gt;0x00&lt;/code&gt;. Физически он отсутствует:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;http://wiki.pic24.ru/lib/exe/detail.php/articles/mchp/pic18_to_pic24_migration/core/fig.2.png?id=articles%3Amchp%3Apic18_to_pic24_migration%3Acore%3Aprogramm_mem&quot; class=&quot;media&quot; title=&quot;articles:mchp:pic18_to_pic24_migration:core:fig.2.png&quot;&gt;&lt;img src=&quot;http://wiki.pic24.ru/lib/exe/fetch.php/articles/mchp/pic18_to_pic24_migration/core/fig.2.png&quot; class=&quot;mediacenter&quot; title=&quot;Организация памяти программ PIC24F&quot; alt=&quot;Организация памяти программ PIC24F&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Несмотря на то, что память программ адресуется 16-битным словами, каждый байт инструкции может быть индивидуально прочитан и записан. Инструкции &lt;code&gt;TBLRD&lt;/code&gt; и &lt;code&gt;TBLWR&lt;/code&gt; набора команд PIC24F позволяют обращаться к старшему или младшему байту слова инструкции. Заметим, что старший байт старшего слова всегда будет равен &lt;code&gt;0x00&lt;/code&gt; и не может быть записан.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Организация памяти программ&quot; [1811-4303] --&gt;
&lt;h2&gt;&lt;a name=&quot;адресуемая_и_доступная_память_программ&quot; id=&quot;адресуемая_и_доступная_память_программ&quot;&gt;Адресуемая и доступная память программ&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;

Максимальный объем адресуемой памяти как в PIC18, так и в PIC24F определяется разрядностью программного счетчика (&lt;code&gt;PC&lt;/code&gt; – Program Counter). Семейство PIC18 использует 22-битный &lt;code&gt;PC&lt;/code&gt;, что позволяет адресовать 4 МБ памяти программ, семейство PIC24F использует 24-битный &lt;code&gt;PC&lt;/code&gt;, с помощью которого можно адресовать 16 МБ памяти программ.
&lt;/p&gt;

&lt;p&gt;
Обе архитектуры имеют конфигурационное пространство (&lt;em&gt;Configuration Space&lt;/em&gt;) в верхней половине адресуемой памяти программ. В основном это пространство физически не реализуется, кроме нескольких областей, предназначенных для конфигурации микроконтроллера и идентификационного слова &lt;em&gt;Device ID&lt;/em&gt;. Таким образом, максимальный объем физически реализуемой памяти составляет для семейства PIC18 – 2 МБ, для семейства PIC24F – 8 МБ. Однако микроконтроллеров с полностью реализованной памятью программ не выпускается.
&lt;/p&gt;

&lt;p&gt;
Сравнение карт памяти программ PIC18 и PIC24F приведено на рисунке&lt;sup&gt;&lt;a href=&quot;#fn__1&quot; name=&quot;fnt__1&quot; id=&quot;fnt__1&quot; class=&quot;fn_top&quot;&gt;1)&lt;/a&gt;&lt;/sup&gt;:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;http://wiki.pic24.ru/lib/exe/detail.php/articles/mchp/pic18_to_pic24_migration/core/fig.3.png?id=articles%3Amchp%3Apic18_to_pic24_migration%3Acore%3Aprogramm_mem&quot; class=&quot;media&quot; title=&quot;articles:mchp:pic18_to_pic24_migration:core:fig.3.png&quot;&gt;&lt;img src=&quot;http://wiki.pic24.ru/lib/exe/fetch.php/articles/mchp/pic18_to_pic24_migration/core/fig.3.png&quot; class=&quot;mediacenter&quot; title=&quot;Сравнение карт памяти программ семейств PIC18 и PIC24F&quot; alt=&quot;Сравнение карт памяти программ семейств PIC18 и PIC24F&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Адресуемая и доступная память программ&quot; [4304-6448] --&gt;
&lt;h2&gt;&lt;a name=&quot;векторы_сброса_прерываний_исключений&quot; id=&quot;векторы_сброса_прерываний_исключений&quot;&gt;Векторы сброса, прерываний, исключений&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;

В семействе PIC18 три слова программы в верхней (с меньшим адресом) части доступной области памяти зарезервированы для аппаратных векторов перехода. Это вектор сброса (&lt;code&gt;0x00&lt;/code&gt;), вектор прерывания низкого приоритета (&lt;code&gt;0x08&lt;/code&gt;) и вектор прерывания высокого приоритета (&lt;code&gt;0x18&lt;/code&gt;). 
&lt;/p&gt;

&lt;p&gt;
В семействе PIC24F область, зарезервированная для аппаратных векторов значительно больше – от &lt;code&gt;0x0000&lt;/code&gt; до &lt;code&gt;0x01FF&lt;/code&gt;. Это вектор сброса (&lt;code&gt;0x0000&lt;/code&gt;), таблица векторов прерываний (&lt;code&gt;0x0006&lt;/code&gt; – &lt;code&gt;0x00FF&lt;/code&gt;), альтернативная таблица векторов прерываний (&lt;code&gt;0x0100&lt;/code&gt; – &lt;code&gt;0x01FF&lt;/code&gt;). Основная и альтернативная таблица векторов прерываний идентичны и содержат 118 векторов, из которых 8 – векторы немаскируемых аппаратных исключений (&lt;em&gt;exceptions&lt;/em&gt;). Альтернативная таблица векторов может использоваться, например, для реализации бутлоадера.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Векторы сброса, прерываний, исключений&quot; [6449-7918] --&gt;
&lt;h2&gt;&lt;a name=&quot;область_конфигурации_и_device_id&quot; id=&quot;область_конфигурации_и_device_id&quot;&gt;Область конфигурации и Device ID&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;

Архитектуры PIC18 и PIC24F имеют область конфигурации и область идентификационного номера &lt;em&gt;Device ID&lt;/em&gt;. Область конфигурации семейства PIC18 расположена в конфигурационном пространстве (диапазон адресов &lt;code&gt;0x300000&lt;/code&gt; – &lt;code&gt;0x30000F&lt;/code&gt;). Область конфигурации семейства PIC24F расположена в доступной области программ (последние два слова физически реализованной памяти программ).
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Область конфигурации и Device ID&quot; [7919-8631] --&gt;
&lt;h2&gt;&lt;a name=&quot;поддержка_загрузочного_boot_блока&quot; id=&quot;поддержка_загрузочного_boot_блока&quot;&gt;Поддержка загрузочного (boot) блока&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;

Большинство микроконтроллеров PIC18 имеют независимый блок памяти, объемом от 1 тыс. до 4 тыс. слов который может использоваться для хранения бутлоадера. Этот блок может быть защищен от чтения и табличной записи из другой части программы индивидуальным битом конфигурации.
&lt;/p&gt;

&lt;p&gt;
Семейство PIC24F не имеют такого блока, однако это не означает невозможность использования бутлоадера для загрузки пользовательской программы. Контроллеры PIC24F имеют только один конфигурационный бит защиты, влияющий на всю доступную физически реализованную память.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Поддержка загрузочного (boot) блока&quot; [8632-9690] --&gt;
&lt;h2&gt;&lt;a name=&quot;использование_внешней_памяти_программ&quot; id=&quot;использование_внешней_памяти_программ&quot;&gt;Использование внешней памяти программ&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;

Архитектура PIC18 поддерживает использование внешних устройств памяти в качестве памяти программ. Это обеспечивается наличием в некоторых микроконтроллерах модуля интерфейса с внешней памятью (&lt;strong&gt;EMI&lt;/strong&gt; – External Memory Interface), который на самом деле является частью ядра и имеет прямой доступ к шине адреса программ. Модуль EMI обеспечивает прозрачный доступ к внешней памяти, которая для пользователя является частью программного пространства объемом 2 МБ. Поддерживаются различные режимы работы, в том числе использование только внешней памяти в качестве памяти программ. Так как модуль EMI представляет собой адресуемую параллельную шину, он присутствует в микроконтроллерах с количеством выводов более 80.
&lt;/p&gt;

&lt;p&gt;
Микроконтроллеры PIC24F не поддерживают использование внешних микросхем памяти в качестве памяти программ. Максимальный объем ПЗУ ограничен Flash памятью, реализованной на кристалле.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Использование внешней памяти программ&quot; [9691-11387] --&gt;
&lt;h2&gt;&lt;a name=&quot;операции_с_flash_памятью_программ&quot; id=&quot;операции_с_flash_памятью_программ&quot;&gt;Операции с Flash памятью программ&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;

В большинство микроконтроллеров семейств PIC18 и PIC24F в качестве памяти программ используется Flash память с возможностью перепрограммирования. Доступны следующие основные операции с Flash памятью у семейств PIC18 и PIC24F:

&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; возможность перепрограммирования в ходе выполнения программы&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; возможность внутрисхемного программирования микроконтроллера смонтированного на печатную плату по последовательному интерфейсу (&lt;strong&gt;ICSP&lt;/strong&gt; – In Circuit Serial Programming). Существует возможность перепрограммирования части Flash памяти с помощью последовательного интерфейса в ходе выполнения программы (&lt;strong&gt;EICSP&lt;/strong&gt; – Enhanced In Circuit Serial Programming)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; использование блокового стирания и записи, а так же алгоритма автоматического стирания перед записью&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; начало процесса записи после заполнения буфера записи (с прерыванием выполнения программы на один или более командных тактов) &lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;

Семейства PIC18 и PIC24F используют похожий набор регистров для работы с Flash памятью в ходе выполнения программы. Различия в названиях регистров и управляющих битов приведены в таблице:

&lt;/p&gt;
&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0 centeralign&quot;&gt;  Управляющий регистр или бит  &lt;/th&gt;&lt;th class=&quot;col1 centeralign&quot;&gt;  PIC18  &lt;/th&gt;&lt;th class=&quot;col2 centeralign&quot;&gt;  PIC24F  &lt;/th&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; Регистр управления &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; &lt;code&gt;EECON1&lt;/code&gt; &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; &lt;code&gt;NVMCON&lt;/code&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; Защитный регистр &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; &lt;code&gt;EECON2&lt;/code&gt; &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; &lt;code&gt;NVMKEY&lt;/code&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; Регистр данных EEPROM &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; &lt;code&gt;EEPGD&lt;/code&gt; &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; &lt;code&gt;-&lt;/code&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row4&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; Бит выбора EEPROM или Flash &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; &lt;code&gt;CFGS&lt;/code&gt; &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; &lt;code&gt;-&lt;/code&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row5&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; Бит разрешения операции стирания &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; &lt;code&gt;FREE&lt;/code&gt; &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; &lt;code&gt;ERASE&lt;/code&gt; &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;

&lt;p&gt;

Основные биты управления записью (&lt;code&gt;WR&lt;/code&gt;, &lt;code&gt;WREN&lt;/code&gt;, &lt;code&gt;WRERR&lt;/code&gt;) в обоих семействах имеют одинаковые назначения и названия.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Операции с Flash памятью программ&quot; [11388-13941] --&gt;
&lt;h3&gt;&lt;a name=&quot;адресация_flash_памяти&quot; id=&quot;адресация_flash_памяти&quot;&gt;Адресация Flash памяти&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;

В семействе PIC18 адресация Flash памяти производиться с помощью 22-битного указателя &lt;code&gt;TBLPTR&lt;/code&gt;, который физически состоит из трех служебных 8-битных регистров &lt;code&gt;TBLPTRL&lt;/code&gt;, &lt;code&gt;TBLPTRH&lt;/code&gt; и &lt;code&gt;TBLPTRU&lt;/code&gt;. Все инструкции табличного чтения и записи используют указатель &lt;code&gt;TBLPTR&lt;/code&gt; в качестве аргумента, таким образом, адресуется вся физически реализованная Flash память, или внешняя память, если используется EMI. Однако когда старший бит указателя &lt;code&gt;TBLPTR&lt;/code&gt; равен 1 (адресуется конфигурационное пространство) доступны только команды табличного чтения.
&lt;/p&gt;

&lt;p&gt;
В семействе PIC24F для работы с памятью программ используется два регистра – 8-битный регистр указания на страницу &lt;code&gt;TBLPAG&lt;/code&gt; (который адресует блоки по 64 кБ) и любой из 16-битных регистров общего назначения &lt;code&gt;W0&lt;/code&gt;-&lt;code&gt;W15&lt;/code&gt;, адресующий слово в выбранном 64-кБ блоке. Величины двух этих регистров формируют так называемый «эффективный адрес» (&lt;strong&gt;EA&lt;/strong&gt; - Effective Address). Так же как и в семействе PIC18 при обращении к конфигурационному пространству доступны только операции чтения.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Адресация Flash памяти&quot; [13942-15746] --&gt;
&lt;h3&gt;&lt;a name=&quot;типы_данных_в_инструкциях_работы_с_памятью&quot; id=&quot;типы_данных_в_инструкциях_работы_с_памятью&quot;&gt;Типы данных в инструкциях работы с памятью&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;

Все табличные операции работы с памятью программ в архитектуре PIC18 – байт-ориентированные. Каждый байт в памяти программ адресуется независимо, что определяется младшим битом указателя &lt;code&gt;TBLPTR&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
Как уже было сказано, табличные инструкции архитектуры PIC24F могут работать как с байтами, так и с 16-битными словами. В последнем случае целевое слово указывается с помощью суффикса ассемблерной мнемоники (&lt;code&gt;TBLRDH&lt;/code&gt;/&lt;code&gt;TBLRDL&lt;/code&gt; для чтения и &lt;code&gt;TBLWTH&lt;/code&gt;/&lt;code&gt;TBLWTL&lt;/code&gt; для записи). Доступ к байту так же организуется прозрачно для пользователя. Следует помнить, что при чтении старшего байта старшего слова инструкции результат всегда будет нулевым, а операция записи в старший байт старшего слова будет проигнорирована.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Типы данных в инструкциях работы с памятью&quot; [15747-17097] --&gt;
&lt;h3&gt;&lt;a name=&quot;чтение_памяти_программ_в_ходе_выполнения&quot; id=&quot;чтение_памяти_программ_в_ходе_выполнения&quot;&gt;Чтение памяти программ в ходе выполнения.&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;

Микроконтроллеры PIC18 имеют побайтный доступ к памяти программ с помощью табличных инструкций чтения. Такая же возможность есть и у семейства PIC24F. Однако в дополнении к этому PIC24F имеет возможность отображения части памяти программ в память данных. Это позволяет использовать для доступа к ПЗУ стандартные инструкции доступа к ОЗУ (только для чтения). Более подробно эта возможность будет описана в п. &lt;a href=&quot;http://wiki.pic24.ru/doku.php/articles/mchp/pic18_to_pic24_migration/core/data_mem&quot; class=&quot;wikilink1&quot; title=&quot;articles:mchp:pic18_to_pic24_migration:core:data_mem&quot;&gt;&amp;quot;Память данных&amp;quot;&lt;/a&gt;).
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Чтение памяти программ в ходе выполнения.&quot; [17098-18006] --&gt;
&lt;h2&gt;&lt;a name=&quot;энергонезависимая_память_eeprom&quot; id=&quot;энергонезависимая_память_eeprom&quot;&gt;Энергонезависимая память EEPROM&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;

Большинство микроконтроллеров PIC18 имеют на кристалле энергонезависимую EEPROM память для хранения констант, программных настроек или записи медленно меняющихся данных. Память EEPROM доступна для чтения и записи, доступ к ней осуществляется при помощи тех же регистров, которые используются для работы с Flash памятью программ.
&lt;/p&gt;

&lt;p&gt;
Семейство PIC24F не предусматривает размещения на кристалле EEPROM памяти. Для хранения настроек, констант рекомендуется использовать не занятую программным кодом Flash память. Данные могут быть считаны и модифицированы с помощью инструкций табличного чтения и записи, или с помощью отображения памяти программ в память данных.
&lt;br/&gt;
 
&lt;br/&gt;
 
&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;

&lt;a href=&quot;http://wiki.pic24.ru/doku.php/articles/mchp/pic18_to_pic24_migration/contents&quot; class=&quot;wikilink1&quot; title=&quot;articles:mchp:pic18_to_pic24_migration:contents&quot;&gt;К содержанию&lt;/a&gt;

&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Энергонезависимая память EEPROM&quot; [18007-] --&gt;&lt;div class=&quot;footnotes&quot;&gt;
&lt;div class=&quot;fn&quot;&gt;&lt;sup&gt;&lt;a href=&quot;#fnt__1&quot; id=&quot;fn__1&quot; name=&quot;fn__1&quot; class=&quot;fn_bot&quot;&gt;1)&lt;/a&gt;&lt;/sup&gt; 
карты памяти приведены не в реальном масштабе. Дополнительные области памяти, входящие в последние кристаллы семейства PIC18FxxJ – загрузочные (boot) области, и т. п. не приведены&lt;/div&gt;
&lt;/div&gt;
</description>
    </item>
</rdf:RDF>
