MicroCHIP.RU
Главная Документация Отладочные средства Справочник Поиск Ссылки
 Новости   Конференция   Контакты 
 

Помогите Hi-tech

 Нoвaя темa  |  Наверх  |  Перейти к теме  |  Поиск  |  Правила  |  Вход 

ВНИМАНИЕ!
Вы просматриваете архив форума.

Этот форум работает только в режиме просмотра и поиска.

Действующий форум переведен на новый движок и
находится по адресу www.microchip.su

 Помогите Hi-tech
Автор: Max ()
Дата:   23/05/2002 11:53

ПРивет Всем!
Помогите разобраться. Необходим простой генератор случайных чисел.

Есть
массив из 16 элементов, необходимо случайным образом выбирать элементы из массива причем
случайное число должно быть в пределе от 0 до 15 то есть 4 младших бита байтовой переменной. как
для PIC16F877 можно не очень заумно это сделать.
Я запустил TMR0 который нигде у меня не
используется запретил ему прерывания и просто в нужный момент времени произвожу чтение
регистра TMR0, однако из-за того что он работает от внутреннего генератора происходит его
синхронизация с программой. Поставить для него внешний генератор нет возможности.

С
уважением, Max.


 
 Re: Помогите Hi-tech
Автор: Alex_ ()
Дата:   23/05/2002 12:14

Можно использовать функцию RAND, затем обрезать результат до нужного числа бит.
Из описания компилятора.

The rand() function is a pseudo-random number generator. It returns an integer
in the range 0 to 32767, which changes in a pseudo-random fashion on each call.
The algorithm will produce a deterministic sequence if started from the same
point. The starting point is set using the srand() call.

С уважением, Александр.


 
 Re: Помогите Hi-tech
Автор: Max ()
Дата:   23/05/2002 12:41

Cпасибо Александр за ответ, но у меня Hi-tech ругается,
может нужно какой то .h файл
подключить.

С уважением, Max.


 
 Re: Помогите Hi-tech
Автор: Alex_ ()
Дата:   23/05/2002 12:45

Нужен
stdlib.h


Example

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
void
main (void)
{
time_t toc;
int i;
time(&toc);
srand((int)toc);
for(i =0 ;i !=10;i++)
printf("%d\t", rand());
putchar(?\n?);
}

С уважением, Александр.


 
 Re: Помогите Hi-tech
Автор: Max ()
Дата:   24/05/2002 11:24

Уважаемый Александр!
Может я тупой, может руки кривые но с примером то понятно.
Однако
компилятор его не понимает.
Там есть еще функция:
int rand(void);
ее я попробовал но
результата не было.
Я пользуюсь кампилятором HI-TECH C PIC V7.84

С уважением, Max.


 
 Re: Помогите Hi-tech
Автор: Alex_ ()
Дата:   24/05/2002 12:36

Я попробовал выполнить компиляцию с использованием функций
srand() - установить начальное значение;
rand() - получить псевдослучайное число.

Компиляция происходит нормально.
Компилятор HI-TECH C PIC V7.86

С уважением. Александр.


 
 Re: Помогите Hi-tech
Автор: Полина ()
Дата:   21/05/2004 00:54

А помогите мне


 
 Re: Помогите Hi-tech
Автор: FDA ()
Дата:   21/05/2004 00:59

Я как-то делал свой генератор псевдослучайных чисел. Он правда 8-битный, но
результат ведь несложно обрезать до нужного количества бит:-)

...

unsigned long persistent randx;

...

//------------------------------

char rand (void)
{
return (randx = randx * 1664525UL + 1013904223UL) >> 16;
}

...


 
 Поставь предделитель побольше и складывай тетрыды или ....
Автор: Picmast ()
Дата:   21/05/2004 12:15

Поставь счётчик , и считывай значение программной памяти по смещению этого
счётчика . :-)

\---------------------------------------------------/
Все-таки лень самый мощный двигатель прогресса.