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
|
|