Hi.
im using AVR Studio 4 with the mirco chip ATmega8535
i have attached the homework requirements.
my error is i keep getting the same number generated.
what is my problem?
this is the code i have written:
; Random Number Generator
; Using ATmega8535
.include "m8535def.inc"
.equ leftCounter = 7
.equ preSeed = $4F
.equ max_num = 59
.equ min_num = 1
.equ lot = 6 ; lot is the number of two-digit numbers to generate
.def allUse = r16
.def seed = r20 ; seed is the large number generated by software using one or more values
.def most = r22
.def least = r23
.def counter = r24
.cseg
.org $0000
rjmp reset ; INITIALISING STACK POINTERS
; Reset routine
reset:
ldi allUse, LOW(RAMEND)
out SPL, allUse
ldi allUse, HIGH(RAMEND)
out SPH, allUse
rjmp main
; Display 6 2-digit numbers
main:
ldi seed, preSeed
ldi counter, lot
loop1:
; The main calls random
rcall random
cpi seed, 0
breq endloop1
; The value is then passed on to the rcall splice
rcall splice
cpi least, max_num
brge loop1
cpi least, min_num
brge loop1
; If the values are out DDRA, most
out PORTA, most ; where portA will display
out DDRB, least ; portB will display
out PORTB, least
dec counter
cpi counter, 0
breq endloop1
rjmp loop1
endloop1:
rjmp end
; Splices 8-bit hex value
splice:
mov most, seed
mov least, seed
andi most, 0b11110000
andi least, 0b00001111
lsr most
lsr most
lsr most
lsr most
ret
; The pseudo-random number generator
random:
mov r17, seed
mov r18, seed
andi r17, 0b00000001
andi r18, 0b00000010
lsr r18
eor r17, r18
ldi r18, leftCounter
loop2:
lsl r17
dec r18
mov seed, r17
clr r17
clr r18
ret
; Endless loop
end:
rjmp end