Feuer.asm


1
.include "2313def.inc"
2
.device ATiny2313
3
4
.def  Temp  =r20    ;temporary register
5
6
.def  Delay1  =r21
7
.def  Delay2  =r22
8
9
.def  RndSeed1=r16
10
.def  RndSeed2=r17
11
.def  RndSeed3=r18
12
13
.def  RndTemp =r19
14
15
.equ    Time    = 75
16
17
;***** Initialization
18
19
RESET:
20
  ser    Temp
21
  out    DDRB,Temp    ;PORTB = all outputs
22
  out    DDRD,Temp    ;PORTD = all outputs
23
 
24
start:
25
  rcall  RandomInit23
26
    clr     Delay1
27
  ldi     Delay2,Time
28
29
;**** Test input/output
30
31
loop:
32
  rcall  Random23
33
  out    PORTB,RndSeed1    ;output data to PORTB
34
  out    PORTD,RndSeed2    ;output data to PORTD
35
    rcall   delay
36
    rjmp   loop
37
38
;**** No wait a while to make LED changes visible.
39
40
delay:
41
  dec  Delay1
42
  brne  delay
43
  dec  Delay2
44
  brne  delay
45
  ldi Delay2,Time    
46
  ret       
47
48
; The seed register has to be loaded with a value not
49
; equal to zero!
50
51
RandomInit15:
52
53
  clr  RndSeed2
54
  ser  RndSeed1  
55
  ret
56
57
Random15:
58
  mov  rndTemp,RndSeed1  
59
  sbrc  RndSeed2,6    
60
  com  RndTemp    ;bit 0 eor bit 14
61
  lsr  RndTemp
62
  rol  rndSeed1
63
  rol  rndSeed2
64
  ret
65
66
67
RandomInit23:
68
69
  clr  RndSeed3
70
  clr  RndSeed2
71
  ser  RndSeed1  
72
  ret
73
74
Random23:
75
  mov  rndTemp,RndSeed1  
76
  swap  rndTemp
77
  sbrc  RndSeed3,6    
78
  com  RndTemp    ;bit 4 eor bit 22
79
  lsr  RndTemp
80
  rol  rndSeed1
81
  rol  rndSeed2
82
  rol  rndSeed3
83
  ret