Он не генерирует предполагаемую случайность.Как посеять для генерации случайных чисел?
Я думал, начиная с семени, как $ 66 и xoring два последних младших бит, и ROR даст мне следующее случайное число и так далее, но он показывает только $ B3 и не меняется вообще.
Как я должен питаться? Строка выше случайного отображает номер на portc, поскольку я хочу, чтобы два числа отображались друг за другом.
Я использую avr studio 4 для atmega 8535 в 1Mhz.
> ;Program to random numbers on port C
>
> ;Stack and Stack Pointer Addresses .equ SPH =$3E
> ;High Byte Stack Pointer Address .equ SPL =$3D
> ;Low Byte Stack Pointer Address
>
> .equ RAMEND =$25F ;Stack Address
>
> ;Port Addresses
>
> .equ PORTC =$15 ;Port C Output Address
>
> .equ DDRC =$14 ;Port C Data Direction Register
> Address
>
> .equ numberoneddr=DDRC
>
> .equ numberoneport=portc
>
> .equ numbertwoddr=DDRC
>
> .equ numbertwoport=portc
>
> .equ delayCount=21
>
> .equ random1 =$66
>
> ;Register Definitions
>
> .def numberone =r1 ;Register to store data pointed
> to by Z
>
> .def numbertwo =r2
>
> .def temp =r16 ;Temporary storage register
>
>
>
> reset:
>
> ; initialize stack pointer. Done automatically at reset on many AVRs
>
> ldi temp, low (RAMEND)
>
> out spl, temp
>
> ldi temp, high (RAMEND)
>
> out sph, temp
>
>
>
>
> ;port initialisation
>
> ldi temp,$FF
>
> out numberoneddr,temp
>
> out numberoneport,temp
>
> out numbertwoddr,temp
>
> out numbertwoport,temp
>
>
>
> ;Program Initialisation
>
> ldi temp,$66
>
> rcall random
>
> mov numberone, temp
>
> out numberoneport,numberone
>
> rcall random
>
> mov numbertwo, temp
>
> out numberoneport,numbertwo
>
>
>
>
> random: mov r19,temp
>
> ldi r17, 0x01
>
> eor r19,r17
>
> ror r19
>
> mov temp,r19
>
> ret
>
>
>
> delay:
> clr r20
>
> clr r21
>
> ldi r22, delayCount
>
> loopDelay:
>
> dec r20
>
> brne loopDelay
>
> dec r21
>
> brne loopDelay
>
> dec r22
>
> brne loopDelay
>
> ret
использовать блок кода (или собираетесь на 4 пробелы) для исходного кода, добавьте больше информации, как MCU, что именно не так, ... ваш код работает на ПК? если не пытаться проследить его, что не так ... и порт для MCU asm, когда он работает. Если на вашем MCU есть возможности точки останова/трассировки, вы можете пропустить часть ПК. Прямо сейчас ваш вопрос на самом деле, почему этот код не работает, который не соответствует теме, поэтому голосование за закрытие на данный момент – Spektre
не генерирует предполагаемую случайность, я научился начинать с семени, как 66 долларов, и xoring два последних младших бит и ror дал бы мне следующий случайный номер и так далее, но он показывает только $ B3 и не изменится вообще. Любая помощь будет оценена по тому, как я использую только avr studio 4 для atmega 8535 на 1Mhz – alex
вы кормите 'temp = $ 66 'каждый случайный вызов, поэтому результат всегда один и тот же ... вы должны подавать температуру только один раз. также я бы добавил своп бит (а не просто 'ror'), который обычно ведет к лучшей случайности. также, какие 3 строки выше 'random:' label do ... они не выполняются на 'call random' !!! – Spektre