;***************************************************************** ;* FLEDS.ASM: Let 2 or 8 LEDs walk on PORTB using data from the ;* internal Flash memory of the AT90S2313. ;* ;* RES can be reached by email: http://www.attiny.com/contact.htm ;* Website: http://www.attiny.com ;* ;* Version :1.0 ;* Data :27-Oct-2002 ;* Target MCU :AT90S2313@4MHz ;***************************************************************** .include "2313def.inc" rjmp RESET ;reset handle ;* Delay ;* Register variables .def T1 = r1 ;lower registers .def T2 = r2 .def temp = r16 ;higher register ;* Defines ;* Code longDelay: clr T1 ;T1 used as delay 2nd count clr T2 ;T2 used as delay 3d count delay1: dec T2 brne delay1 dec T1 brne delay1 dec temp ;temp must be preset as brne delay1 ; delay master count ret ;* Walk 8 LEDs on PORTB back and forth, reading data from Flash memory ;* Register variables .def LEDdata = r0 ;Flash memory load register ;* Code RESET: ldi temp, RAMEND ;point stack in RAM out SPL, temp ser temp out DDRB, temp ;set PORTB i/o's as outputs init: ldi ZL, LOW(tabel*2) ;set Low memory pointer ldi ZH, HIGH(tabel*2) ;set High memory pointer ;* Main program loop: lpm ;load data from Flash into r0 out PORTB, LEDdata ;set data on PORTB ldi temp, 10 rcall longDelay ;wait 10 x 49.3 msec = approx. 0.5 sec inc ZL lpm ;check data at this moment mov temp, LEDdata cpi temp, '#' ;if # reached in memory, breq init ; -> restart + reset memory rjmp loop ;flash or walk LEDs ;* Data ;* 8 + 8 bits data sits in Flash like this ;* set '#' at end for walking LEDs tabel: .db 0b00000001,0b00000010 ;data 0, 1 .db '#' ;set end position .db 0b00000100,0b00001000 ;data 2, 3 .db 0b00010000,0b00100000 ;data 4, 5 .db 0b01000000,0b10000000 ;data 6, 7