Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Микроконтроллеры (MCU) и микропроцессоры (MPU) > Генерация случайных чисел на PIC16F627


Автор: Partizan 20.3.2007, 11:15
задача: обеспечить генерацию последовательности псевдослучайных чисел с равномерным распределением величиной от 0h до FFh

как реализовать? 

Автор: black_priest 26.4.2007, 14:23
Смотри как в IAR сделано для пиков, может натолкнет на что:
Цитата

#include "stdlib.h"

unsigned long int __next_rand = 1;

int rand(void)
{
  __next_rand = __next_rand * 1103515245 + 12345;
  return (unsigned int) (__next_rand >> 16) & RAND_MAX;
}


Еще одна идея, которая приходит на ум - оцифровка тепловых шумов (где-то с таким уже сталкивался), т. е. использовать АЦП, но здесь конкретно ничего не могу посоветовать, надо пробовать. Так что мегаомный резак на вход и вперед  smile .
ЗЫ: самого давно интересовал данный вопрос, но на практике с таким дело иметь не приходилось, поэтому если чего получиться интересного напиши. Удачи.

Автор: EnergoHokum 27.4.2007, 15:14
Делал на сях для AVR, но алгоритм общий, в пиковый асм перевести, думаю, проблем не составит. Итак:

Код

#define LOW(int_var)  (char)(int_var)
#define HIGH(int_var) (char)(int_var>>8)

uint16_t Shift;

char RandNum;

char Rand(void)
{//генерируем случайный char
    if(Shift==0x0000) Shift=0xFFFF;
    Shift>>=1;
    if((LOW(Shift)&0x01)^((HIGH(Shift)>>2)&0x01)) Shift|=0x4000;
    else Shift&=0xBFFF;
    RandNum=LOW(Shift);
    return RandNum;
}


Коротко говоря, это регистр сдвига, из двух разрядов которого выдираются и XOR-ятся два бита, результат подаётся на вход регистра

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)