Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить

Re: Мелкие вопросы по МК-51 а-ка MCS-51, ASM и не только..

Пт янв 05, 2024 11:29:06

обращусь к спецам по i51
Решил скрестить ужа и ежа: STC8H1K08 на bascom-51
Осилил режимы портов , резистор-подтяжку устанавливаю, кнопку опрашиваю, светодиодом управляю, Int0/Int1 работают и режим реакции задаю.
Работа uart 1 и 2 (через регистры, а не через встроенную команду PRINT)

Смутил факт: не могу в компиляторе создать переменные суммарно больше 30 байт - компилятор выдаёт ошибку нехватки памяти.
Переменные в IRAM. Попробовал перенести некоторые в XRAM (она есть в МК) - объём кода программы резко растёт, почти на треть!
До этого с i51 не работал.
Но в описании к МК указано:

SRAM
• 128 bytes internal direct access RAM (DATA, use keyword data to declare in C language program)
• 128 bytes internal indirect access RAM (IDATA, use keyword idata to declare in C language program)
• 1024 bytes internal extended RAM (internal XDATA, use keyword xdata to declare in C language program)

что я не так делаю и где рыть?...
Переходить в Кейл очень не хочется по множеству причин...
Последний раз редактировалось aleksandr-zh Пт янв 05, 2024 15:00:34, всего редактировалось 1 раз.

Re: Мелкие вопросы по МК-51 а-ка MCS-51, ASM и не только..

Пт янв 05, 2024 14:29:35

Насчет basocm-51ничего сказать не могу - работаю с mcs51 под ассемблером (c51asm от атмел).
Относительно распределения ОЗУ...
Для 51й актуальны первые 128 байт(0х00 - 0х7F DATA ) - доступ как для прямой, так и для косвенной адресации.
Расширенная область 0х80 - 0хFF IDATA используется только командами косвенной адресации (чаще для стека).
Для доступа к встроенной дополнительной ОЗУ помимо команд доступа к внешней памяти может использоваться и специальный механизм из нескольких команд (естественно увеличивает объем программы).
Кристаллы с такой начинкой редкость - надо детально документацию на конкретный кристалл изучать.
Доступ к XDATA обычно подразумевает доступ к Внешней Памяти Данных, а расширенное встроенное ОЗУ может именоваться как ESEG (internal extended data memory).
Так по крайней мере у моего юзерс мануал по компилятору (аналогичен кейловскому за некоторыми отличиями).
Ну и помимо того может быть встроена не ОЗУ, а ЕЕПРОМ ...
Тогда имеем дело с FDATA (internal non volatile data memory) и соответственно наиболее "навороченный" способ доступа в этом случае будет.
:roll:
Ну и изучить детально документ из 1502 страниц на китайском... Дабы чего-то в том STC8H1K08-36I-TSSOP20 понимать можно было...
Это таки весьма напряжно...
:(
Последний раз редактировалось BOB51 Пт янв 05, 2024 15:01:05, всего редактировалось 1 раз.

Re: Мелкие вопросы по МК-51 а-ка MCS-51, ASM и не только..

Пт янв 05, 2024 14:55:08

А посоветуете disassembler? Глянуть, что генерирует компилятор...

На просторах нашел комментарий про данный компилятор:
Внутренне используется максимум 32 байта. Это зависит от используемых операторов.
Стек также использует некоторое пространство. Таким образом, количество переменных, которые вы можете использовать, зависит от используемых операторов. В худшем случае используется (32+16+8) = 56 байт.

A maximum of 32 bytes is used internally. This depends on the used statements.
The stack uses some space too. So it depends on the used statements how much variables you can use. In the worst case (32+16+8) = 56 bytes are used.


STC8H-en.pdf

Встроенное расширенное ОЗУ
В дополнение к 256 байтам внутренней оперативной памяти в микроконтроллерах серии STC8H интегрировано встроенное расширенное ОЗУ.
Метод доступа к встроенной расширенной оперативной памяти такой же, как и у традиционного микроконтроллера 8051, обращающегося к внешней расширенной оперативной памяти. Однако порт P0 (шина данных и шина младшего адреса), порт P2 (шина адреса старшего уровня), RD, WR и ALE не затрагиваются.
На языке ассемблера доступ к встроенной расширенной оперативной памяти осуществляется с помощью инструкции MOVX.
Обратите внимание, что pdata — это младшие 256 байтов xdata.
После объявления переменной как типа pdata в программе C компилятор автоматически разместит переменные в диапазоне от 0000H до 00FFH в XDATA и будет использовать MOVX @ Ri, A и MOVX A @ Ri.
для доступа.
Бит управления EXTRAM, расположенный в регистре AUXR, используется для управления доступом к встроенной расширенной оперативной памяти.

7.2.3 On-chip extended RAM
In addition to 256 bytes of internal RAM, on-chip extended RAM is integrated in STC8H series of microcontrollers.
The method of accessing the on-chip extended RAM is the same as that of the traditional 8051 MCU accessing the external extended RAM. However, the P0 port (data bus and low-order address bus), P2 port (high-order address bus), RD, WR and ALE are not affected.

In assembly language, the on-chip extended RAM is accessed through the MOVX instruction,
MOVX A,@DPTR
MOVX @DPTR,A
MOVX A,@Ri
MOVX @Ri,A
In C language, xdata / pdata can be used to declare the storage type, such as,
unsigned char xdata i;
unsigned int pdata j;
Note that pdata is the lower 256 bytes of xdata.
After declaring a variable as the pdata type in C program, the compiler will automatically allocate the variables in the 0000H to 00FFH of XDATA and use MOVX @ Ri, A and MOVX A @ Ri
to access.
The control bit EXTRAM located in AUXR register is used to control the access of on-chip extended RAM can be used or not.

Re: Мелкие вопросы по МК-51 а-ка MCS-51, ASM и не только..

Пт янв 05, 2024 15:25:54

STC8H-en.pdf у меня нету.
Судя по приведенному Вами - стандартный набор команд доступа к ВПД.
Но там должен использоваться механизм разделения областей доступа. Для малолапых "по умолчанию" это раздел ВПД, а для "полноформатных" с Р0, и Р2 видимо флаг в каком- нибудь из РОН ( тот же AUXR или чего еще), возможны и варианты...
МК эти относительно новые так что компилятор может их просто не знать.
А каким образом добавить новшества - зависит от глубины знаний конкретного компилятора.
Для ассемблера это самостоятельное написание *.inc файла, для Си или другого компилятора - что-то свое...
:dont_know:
По STC микроконтроллерам есть отдельная ветка
viewtopic.php?f=62&t=44497
может там чего подскажут...
:roll:

Re: Мелкие вопросы по МК-51 а-ка MCS-51, ASM и не только..

Пт янв 05, 2024 16:21:16

Для ассемблера это самостоятельное написание *.inc файла, для Си или другого компилятора - что-то свое...

в Баском это DAT файл, я его раскурил на примерах и сделал свой. Компилятор проглотил и в железе мои творения работают.
вот с памятью пока не вкуриваю... Нашел у себя несколько книг по i51, пробую понять.
И не очень понятно, почему Баском даёт возможность сделать только 32 байта в переменных. Это очень сильная для меня подстава.
Автор не отвечает: с начала СВО написал гневное сообщение на своём сайте, потом залочил всех по IP и RU. На письма не отвечает, хъотя у меня лицензия и клиентов я ему подгонял, и донатил пару раз. Такая она, пропаганда ... ((


По STC микроконтроллерам есть отдельная ветка
viewtopic.php?f=62&t=44497
может там чего подскажут...
:roll:

В морге веселее и движухи больше, чем там: моё сообщение висит там с 3 декабря )))

Re: Мелкие вопросы по МК-51 а-ка MCS-51, ASM и не только..

Пт янв 05, 2024 18:41:58

Допустим ЯВУ...
Для 51й это SDCC (Си)...
У Яву свое понимание стека и рабочей области ОЗУ.
Ежли в компиляторе жестко заложено использование "стандартного ОЗУ", то обойти данное ограничение довольно сложно.
К примеру, помимо собственного файлика описания ресурсов иногда требуется отменить "шаблон по умолчанию" (обе "добавки" вводятся в текст исходника или в опции запуска компилятора).
8)

Re: Мелкие вопросы по МК-51 а-ка MCS-51, ASM и не только..

Пт янв 05, 2024 23:31:11

STC8H-en.pdf у меня нету.
:roll:

https://www.stcmicro.com/stc/stc8h1k08.html
внизу - ссылка на PDF

Re: Мелкие вопросы по МК-51 а-ка MCS-51, ASM и не только..

Сб янв 06, 2024 11:27:21

Ну уж "хрен редьки не слаще" - те же 1177 страничек без перспектив работы с данным кристаллом.
Когда-то с трудом приобрел пару STC15F204EA 351 - так и вылеживаются "до возможно лучших времен".
Поигрался только с их программатором (STC-ISP V6.86) да сделал добавочный файлик для работы под с51asm (атмелевский ассемблер для 51-х).
Для STC8H, кстати, требуется более современная версия той софт - оболочки.
Причем софтинка только на прошивку рассчитана - читать код она не умеет (основана на встроенном при изготовлении бутлоадере).
Второй нюенс - описание примеров в даташитах от STC дается или для ассемблера или для SDCC - следовательно так или иначе надо данные компиляторы осваивать. Ежли с ассемблером проблем нету, то SDCC таки чуток посложнее (с учетом самостоятельного написания make файлов для запуска).
8)
Гляну как нибудь по настроению/возможности ту даташитину, может чего интересного найдется.
:roll:
Ответить