Перейти к содержанию
    

8051 число циклов выполнения инструкции

Нужно прецезионно(равными интервалами) организовать считывание из SFR регистра и вывести сигнал на ножку.

Не могу найти достоверные растактовки для инструкций ядра 8051.  Встречаются разночтения:  в одних источниках пишут, что инструкция DJNZ занимает 2/4 цикла в зависимости от результата, а других - в обоих случаях 2 цикла.  Интересуют именно число циклов, без привязки к конкретной частоте.

У меня недоверие и вопросы:  как может инструкция с условным переходом выполняться одинаковое число тактов?  Там всегда будет 2 значения циклов - в случае если переход выполнен, и в случае если перехода не будет.

В частности меня интересует число циклов выполнения следующих инструкций:

mov	A,SFR

movx	@DPTR,A

inc	DPTR

nop			;1 цикл

djnz	R2,Label

mov	A,#0x15

movx	@R1,A

clr	A		;1 цикл ?

mov	R2,#0x18

sjmp	Label

 

 

Изменено пользователем repstosw

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 hours ago, repstosw said:

Не могу найти достоверные растактовки для инструкций ядра 8051.

В старину у 8х51 машинный цикл состоял из 12 тактов синхронизации, потом стал 6, сейчас 1.  Причём разные производители МК используют разные реализации системы команд MCS-51. Отсюда возможно разное время выполнения. Нужна точность- используйте МК с DMA.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

SI44xx, надо понимать? Это надо смотреть мануал конкретно на CIP-51 (силабсовская реализация ядра).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, tonyk_av said:

В старину у 8х51 машинный цикл состоял из 12 тактов синхронизации, потом стал 6, сейчас 1.

Меня это не интересует.

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

 

1 hour ago, tonyk_av said:

Нужна точность- используйте МК с DMA.

Нет такой возможности. Точнее - есть, но только в виде "память - SPI".   А DMA типа "SFR - память" - нет.

 

1 hour ago, Harbinger said:

SI44xx, надо понимать? Это надо смотреть мануал конкретно на CIP-51 (силабсовская реализация ядра).

Да, он самый!

Нужно выставлять ножку в 0 или 1 после заполнения буфера для SPI через DMA.  Половина - буфер 128 байт. В буфер кладутся значения SFR-регистра фазы.

Требуется очень равными интервалами читать регистр фазы и без джиттера дёргать ножку в 0 и 1 (для IRQ мастер-контроллера).

То, что я сделал - работает, фаза дампится в кольцевой буфер для мастер-контроллера, но просмотр отсчётов показал, что есть небольшой джиттер в отсчётах фазы 1-2%.

 

Я помню, умельцы делали на AVR-ках  VGA-контроллеры и всякие ГИТС для ТВ с шахматными клетками и полосками - у них всё было ровно: по тактам расчитано.

В 8051 такое возможно?

Изменено пользователем repstosw

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

22 минуты назад, repstosw сказал:

В 8051 такое возможно?

когда то было возможно, давно, но не на С. Причем на силабсе С8051F320 один друг делал TX RX  каналы на несущей 13.56 МГц ногодрыганием кодом на асме. И оно работало :)

Изменено пользователем тау

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

22 minutes ago, тау said:

когда то было возможно, давно, но не на С

Здесь пишу на ассемблере sdas8051.  Си не использую.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 3/17/2024 at 12:52 PM, repstosw said:

Здесь пишу на ассемблере sdas8051.  Си не использую.

А таймер для этих целей задействовать не получится ?

On 3/17/2024 at 12:52 PM, repstosw said:

Здесь пишу на ассемблере sdas8051.  Си не использую.

https://studfile.net/preview/7484242/page:4/

 

Вот здесь посмотрите

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

30 minutes ago, dimka76 said:

А таймер для этих целей задействовать не получится ?

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

 

31 minutes ago, dimka76 said:

https://studfile.net/preview/7484242/page:4/

Вот здесь посмотрите

Спасибо, помогло.   Всё-же у Si4463  время выполнения команд ядра 8051 отличается от дефолтного i8051.

Первоначально  я брал данные о растактовках здесь: https://mp8051.narod.ru/commands.html

 

Подытоживая:

mov	A,SFR	 ;2
movx	@DPTR,A	 ;3
inc	DPTR	 ;1
nop		 ;1
djnz	R2,Label ;2/3
mov	A,#0x15	 ;2
movx	@R1,A	 ;3
clr	A	 ;1
mov	R2,#0x18 ;2
sjmp	Label	 ;3

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, repstosw said:

Всё-же у Si4463  время выполнения команд ядра 8051 отличается от дефолтного i8051.

Так ведь и было сказано, что

 

4 hours ago, tonyk_av said:

Отсюда возможно разное время выполнения

"Дефолтный i8051" (правильно 8x51)- это MCS51 от Intel, которых сейчас днём с огнём не сыскать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 часов назад, tonyk_av сказал:

"Дефолтный i8051" (правильно 8x51)- это MCS51 от Intel, которых сейчас днём с огнём не сыскать.

Сыскать можно, 12-тактовые "legacy 8051" до сих пор делают (к примеру, их есть у Nuvoton и Megawin)... но зачем? 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...