Test_Mega8515.asm
1 | ;---------------------------alte Version ohne SRAM-----------------------------------------------------------------
| 2 |
| 3 |
| 4 | ;Test_Mega8515
| 5 |
| 6 | .nolist
| 7 |
| 8 | .include "m8515def.inc"
| 9 |
| 10 |
| 11 | .equ XTAL = 16000000
| 12 |
| 13 | .def NULL = r0
| 14 | .def TEMP1 = r16
| 15 | .def TEMP2 = r17
| 16 | .def TEMP3 = r18
| 17 | .def PWM = r19
| 18 | .def Z1 = r20
| 19 | .def Z1 = r21
| 20 | .def Z1 = r22
| 21 | .def Z1 = r23
| 22 | .def Z1 = r24
| 23 | .def Z1 = r25
| 24 | .def Z1 = r26
| 25 | .def Z1 = r27
| 26 |
| 27 | .list
| 28 |
| 29 | .org $000
| 30 |
| 31 | rjmp RESET ;Reset
| 32 |
| 33 | .org $007
| 34 |
| 35 | rjmp TIMER ;Timer 0 Überlauf
| 36 |
| 37 |
| 38 | RESET:
| 39 | ldi TEMP1, LOW(RAMEND) ; Stackpointer initialisieren
| 40 | out SPL, TEMP1
| 41 |
| 42 | ldi TEMP1, HIGH(RAMEND)
| 43 | out SPH, TEMP1
| 44 |
| 45 | ldi TEMP1, 0xFF
| 46 | out DDRA, TEMP1 ;I/O setup switch PA0...PA7 to output
| 47 |
| 48 | ldi TEMP1, 0xFF
| 49 | out DDRB, TEMP1 ;I/O setup switch PB0...PB7 to output
| 50 |
| 51 | ldi TEMP1, 0xFF
| 52 | out DDRC, TEMP1 ;I/O setup switch PC0...PC7 to output
| 53 |
| 54 | ldi TEMP1, 0x00
| 55 | out DDRD, TEMP1 ;I/O setup switch PD0...PD7 to input
| 56 |
| 57 | ldi TEMP1, 0b00000101
| 58 | out TCCR0, TEMP1 ;Vorteiler Timer0 1024
| 59 |
| 60 | ldi TEMP1, 0b00000010
| 61 | out TIMSK, TEMP1 ;Interrupt wenn Timer0 Überlauf
| 62 |
| 63 | ldi Z1, 1 ;Farbwert LED1
| 64 | ldi Z2, 33 ;Farbwert LED2
| 65 | ldi Z3, 65 ;Farbwert LED3
| 66 | ldi Z4, 97 ;Farbwert LED4
| 67 | ldi Z5, 129 ;Farbwert LED5
| 68 | ldi Z6, 161 ;Farbwert LED6
| 69 | ldi Z7, 193 ;Farbwert LED7
| 70 | ldi Z8, 225 ;Farbwert LED8
| 71 |
| 72 | clr NULL ;Register auf 0 setzen
| 73 | clr PWM
| 74 |
| 75 | sei ;Interrupts einschalten
| 76 |
| 77 | LOOP:
| 78 | cpi PWM, 86
| 79 | brne LOOP1
| 80 | clr PWM
| 81 |
| 82 | out PORTA, NULL
| 83 | out PORTB, NULL
| 84 | out PORTC, NULL
| 85 |
| 86 | LOOP1:
| 87 | mov TEMP2, Z1
| 88 | mov TEMP3, Z1
| 89 | subi TEMP2, 86
| 90 | subi TEMP3, 171
| 91 |
| 92 | LED1_R:
| 93 | cpi Z1, 86
| 94 | brsh LED1_G
| 95 | sbis PORTA, 0 ;Skip wenn Rot an
| 96 | sbi PORTB, 0 ;Grün an
| 97 |
| 98 | LED1_RG:
| 99 | cp PWM, Z1
| 100 | brne LOOP2
| 101 | cbi PORTB, 0 ;Grün aus
| 102 | sbi PORTA, 0 ;Rot an
| 103 | rjmp LOOP2
| 104 |
| 105 | LED1_G:
| 106 | cpi Z1, 171
| 107 | brsh LED1_B
| 108 | sbis PORTB, 0 ;Skip wenn Grün an
| 109 | sbi PORTC, 0 ;Blau an
| 110 |
| 111 | LED1_GB:
| 112 | cp PWM, TEMP2
| 113 | brne LOOP2
| 114 | cbi PORTC, 0 ;Blau aus
| 115 | sbi PORTB, 0 ;Grün an
| 116 | rjmp LOOP2
| 117 |
| 118 | LED1_B:
| 119 | sbis PORTC, 0 ;Skip wenn Blau an
| 120 | sbi PORTA, 0 ;Rot an
| 121 |
| 122 | LED1_BR:
| 123 | cp PWM, TEMP3
| 124 | brne LOOP2
| 125 | cbi PORTA, 0 ;Rot aus
| 126 | sbi PORTC, 0 ;Blau an
| 127 |
| 128 | LOOP2:
| 129 | mov TEMP2, Z2
| 130 | mov TEMP3, Z2
| 131 | subi TEMP2, 86
| 132 | subi TEMP3, 171
| 133 | .
| 134 | .
| 135 | .
| 136 | .
| 137 | .
| 138 | .
| 139 | .
| 140 | .
| 141 |
| 142 |
| 143 | LOOP9:
| 144 | inc PWM
| 145 |
| 146 | rjmp LOOP
| 147 |
| 148 | TIMER:
| 149 |
| 150 | inc Z1,
| 151 | inc Z2,
| 152 | inc Z3,
| 153 | inc Z4,
| 154 | inc Z5,
| 155 | inc Z6,
| 156 | inc Z7,
| 157 | inc Z8,
| 158 |
| 159 | reti
| 160 |
| 161 |
| 162 |
| 163 | ;---------------------------------neue Version mit SRAM---------------------------------------------------------------
| 164 |
| 165 |
| 166 |
| 167 | ;Test_Mega8515
| 168 |
| 169 | .nolist
| 170 |
| 171 | .include "m8515def.inc"
| 172 |
| 173 |
| 174 | .equ XTAL = 16000000
| 175 |
| 176 | .def NULL = r0
| 177 | .def TEMP1 = r16
| 178 | .def TEMP2 = r17
| 179 | .def TEMP3 = r18
| 180 | .def PWM = r19
| 181 |
| 182 | .list
| 183 |
| 184 | .org $000
| 185 |
| 186 | rjmp RESET ;Reset
| 187 |
| 188 | .org $007
| 189 |
| 190 | rjmp TIMER ;Timer 0 Überlauf
| 191 |
| 192 |
| 193 | RESET:
| 194 | ldi TEMP1, LOW(RAMEND) ; Stackpointer initialisieren
| 195 | out SPL, TEMP1
| 196 |
| 197 | ldi TEMP1, HIGH(RAMEND)
| 198 | out SPH, TEMP1
| 199 |
| 200 | ldi TEMP1, 0xFF
| 201 | out DDRA, TEMP1 ;I/O setup switch PA0...PA7 to output
| 202 |
| 203 | ldi TEMP1, 0xFF
| 204 | out DDRB, TEMP1 ;I/O setup switch PB0...PB7 to output
| 205 |
| 206 | ldi TEMP1, 0xFF
| 207 | out DDRC, TEMP1 ;I/O setup switch PC0...PC7 to output
| 208 |
| 209 | ldi TEMP1, 0x00
| 210 | out DDRD, TEMP1 ;I/O setup switch PD0...PD7 to input
| 211 |
| 212 | ldi TEMP1, 0b00000101
| 213 | out TCCR0, TEMP1 ;Vorteiler Timer0 1024
| 214 |
| 215 | ldi TEMP1, 0b00000010
| 216 | out TIMSK, TEMP1 ;Interrupt wenn Timer0 Überlauf
| 217 |
| 218 | ldi TEMP1, 1 ;Farbwert LED1
| 219 | sts Z1, TEMP1
| 220 | ldi TEMP1, 33 ;Farbwert LED2
| 221 | sts Z2, TEMP1
| 222 | ldi TEMP1, 65 ;Farbwert LED3
| 223 | sts Z3, TEMP1
| 224 | ldi TEMP1, 97 ;Farbwert LED4
| 225 | sts Z4, TEMP1
| 226 | ldi TEMP1, 129 ;Farbwert LED5
| 227 | sts Z5, TEMP1
| 228 | ldi TEMP1, 161 ;Farbwert LED6
| 229 | sts Z6, TEMP1
| 230 | ldi TEMP1, 193 ;Farbwert LED7
| 231 | sts Z7, TEMP1
| 232 | ldi TEMP1, 225 ;Farbwert LED8
| 233 | sts Z8, TEMP1
| 234 |
| 235 | clr NULL ;Register auf 0 setzen
| 236 | clr PWM
| 237 |
| 238 | sei ;Interrupts einschalten
| 239 |
| 240 | LOOP:
| 241 | cpi PWM, 86
| 242 | brne LOOP1
| 243 | clr PWM
| 244 |
| 245 | out PORTA, NULL
| 246 | out PORTB, NULL
| 247 | out PORTC, NULL
| 248 |
| 249 | LOOP1:
| 250 | lds TEMP1, Z1
| 251 | lds TEMP2, Z1
| 252 | lds TEMP3, Z1
| 253 | subi TEMP2, 86
| 254 | subi TEMP3, 171
| 255 |
| 256 | LED1_R:
| 257 | cpi TEMP1, 86
| 258 | brsh LED1_G
| 259 | sbis PORTA, 0 ;Skip wenn Rot an
| 260 | sbi PORTB, 0 ;Grün an
| 261 |
| 262 | LED1_RG:
| 263 | cp PWM, TEMP1
| 264 | brne LOOP2
| 265 | cbi PORTB, 0 ;Grün aus
| 266 | sbi PORTA, 0 ;Rot an
| 267 | rjmp LOOP2
| 268 |
| 269 | LED1_G:
| 270 | cpi TEMP1, 171
| 271 | brsh LED1_B
| 272 | sbis PORTB, 0 ;Skip wenn Grün an
| 273 | sbi PORTC, 0 ;Blau an
| 274 |
| 275 | LED1_GB:
| 276 | cp PWM, TEMP2
| 277 | brne LOOP2
| 278 | cbi PORTC, 0 ;Blau aus
| 279 | sbi PORTB, 0 ;Grün an
| 280 | rjmp LOOP2
| 281 |
| 282 | LED1_B:
| 283 | sbis PORTC, 0 ;Skip wenn Blau an
| 284 | sbi PORTA, 0 ;Rot an
| 285 |
| 286 | LED1_BR:
| 287 | cp PWM, TEMP3
| 288 | brne LOOP2
| 289 | cbi PORTA, 0 ;Rot aus
| 290 | sbi PORTC, 0 ;Blau an
| 291 |
| 292 | LOOP2:
| 293 | lds TEMP1, Z2
| 294 | lds TEMP2, Z2
| 295 | lds TEMP3, Z2
| 296 | subi TEMP2, 86
| 297 | subi TEMP3, 171
| 298 | .
| 299 | .
| 300 | .
| 301 | .
| 302 | .
| 303 | .
| 304 | .
| 305 | .
| 306 |
| 307 |
| 308 | LOOP9:
| 309 | inc PWM
| 310 |
| 311 | rjmp LOOP
| 312 |
| 313 | TIMER:
| 314 | lds TEMP1, Z1
| 315 | inc TEMP1
| 316 | sts Z1, TEMP1
| 317 | lds TEMP1, Z2
| 318 | inc TEMP1
| 319 | sts Z2, TEMP1
| 320 | lds TEMP1, Z3
| 321 | inc TEMP1
| 322 | sts Z3, TEMP1
| 323 | lds TEMP1, Z4
| 324 | inc TEMP1
| 325 | sts Z4, TEMP1
| 326 | lds TEMP1, Z5
| 327 | inc TEMP1
| 328 | sts Z5, TEMP1
| 329 | lds TEMP1, Z6
| 330 | inc TEMP1
| 331 | sts Z6, TEMP1
| 332 | lds TEMP1, Z7
| 333 | inc TEMP1
| 334 | sts Z7, TEMP1
| 335 | lds TEMP1, Z8
| 336 | inc TEMP1
| 337 | sts Z8, TEMP1
| 338 |
| 339 | reti
| 340 |
| 341 | .DSEG ; Umschalten auf das SRAM Datensegment
| 342 |
| 343 | Z1: .BYTE 1 ; 1 Byte unter dem Namen "Z1" reservieren
| 344 | Z2: .BYTE 1 ; 1 Byte unter dem Namen "Z2" reservieren
| 345 | Z3: .BYTE 1 ; 1 Byte unter dem Namen "Z3" reservieren
| 346 | Z4: .BYTE 1 ; 1 Byte unter dem Namen "Z4" reservieren
| 347 | Z5: .BYTE 1 ; 1 Byte unter dem Namen "Z5" reservieren
| 348 | Z6: .BYTE 1 ; 1 Byte unter dem Namen "Z6" reservieren
| 349 | Z7: .BYTE 1 ; 1 Byte unter dem Namen "Z7" reservieren
| 350 | Z8: .BYTE 1 ; 1 Byte unter dem Namen "Z8" reservieren
|
|