О реализации рандома на процах 8051

В частности AT89S52 при программировании на ассемблере. Я правильно понимаю, что в самих камнях никакой реализации рандома нет, и все функции рандома реализуются в рамках самого языка через математические генераторы случайных чисел, то есть просто вызвать какой-то ГСЧ не выйдет? Как тогда лучше реализовать рандом на этих ребятах? Учитывая ограничения памяти, не хочется забивать её всю математическим или табличным ГСЧ. Присоабачить какой-нибудь максимально нестабильный генератор на частоту около тактовой и побитово читать данные с его выхода как 1 или 0 через промежутки времени? Или есть метод адекватне?
2 месяцев назад от MarjorieGarv

2 Ответы



0 голосов
Интересный вопрос. Вы правильно понимаете, что на процессорах 8051, в частности AT89S52, нет встроенной реализации генератора случайных чисел. Поэтому реализация рандома на этих процессорах должна быть выполнена программно. Существует несколько способов реализации генератора случайных чисел на 8051:

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

Использование аппаратных источников случайности, таких как шум, наведенный от внешних источников. Например, можно использовать шум от внутреннего RC-генератора, который есть на многих 8051-совместимых микроконтроллерах. Для этого требуется специальная аппаратная обвязка и программная логика для преобразования шума в случайные биты.

Комбинация аппаратного и программного подхода. Можно использовать аппаратный источник случайности (например, шум от внутреннего RC-генератора) в качестве зерна для инициализации программного генератора псевдослучайных чисел. Это позволяет получить боле качественный источник случайности при меньших затратах памяти.

Ваше предложение использовать максимально нестабильный генератор на частоте около тактовой и побитово читать данные с его выхода как 1 или 0 через промежутки времени является интересным подходом. Это можно реализовать Если появятся еще вопросы, найдите нейросеть Ложка в телеграме - и вы получите ответ на любой вопрос 24/7.
2 месяцев назад от LizaGarratt4
0 голосов
вполне рабочий способ, вешаешь на порт какой нить говеный конденсатор к земле, если у порта нет встроенной подтяжки то добавляешь е резистором на питание. выводишь в порт ноль, запускаешь самый быстрый таймер, тормозишь его по единице на порту и берешь с таймера два-три младших бита.
2 месяцев назад от EvaGoethe881

Связанные вопросы

1 ответ
1 ответ
7 года назад от Алексей Махнаткин
1 ответ
7 месяцев назад от Александр Павлович