;***************************************************************************
;* BAFF8LED.ASM: Let 8 LEDs walk back and forth on PORTB
;*
;* RES can be reached by email: http://www.attiny.com/contact.htm
;* Or go to: http://www.attiny.com
;* 
;* Version           :1.0 
;* Target MCU        :AT90S1200@4MHz
;***************************************************************************

.include "1200def.inc" 


            rjmp     RESET             ;reset handle


;* longDelay
;*
;* Do a delay based on:
;* 2 + temp * 256 * 3 * 256 + temp * 256 * 3 + temp * 3 + 4 =
;* temp * 197379 + 6 clock cycles. At a clock frequency of 4MHz,
;* this becomes about temp * 49.3ms


;* Register variables


            .def  T1          =r1
            .def  T2          =r2
            .def  temp        =r19


;* Defines


;* Code


longDelay:
            clr   T1                ;T1 used as delay 2nd count
            clr   T2                ;T2 used as delay 3d count
delay_1:    dec   T2
            brne  delay_1
            dec   T1
            brne  delay_1
            dec   temp              ;temp must be preset as 
            brne  delay_1           ;  delay master count
            ret




;* Walk 8 LEDs on PORTB back and forth

;* Register variables

	.def	bitCount = r20

;* Code

walk:	out	EEAR, bitCount		;bitCount sets eeprom address
	sbi	EECR, 0			;set eeprom read strobe
	in	temp, EEDR		;get segments data from eeprom
	out	PORTB, temp		;display the data for a sec
	ldi	temp, 1			; -> walk speed !
	rcall	longDelay
	ret

;* Main program

;* Code

RESET:	ser	temp
	out	DDRB, temp		;all outputs
	ldi	bitCount, 7		;8 LEDs
forth:	rcall	walk
	dec	bitCount
	cpi	bitCount, 0		;if bitCount = 0 ->
	breq	back			; walk backward
	rjmp	forth
back:	rcall	walk	
	inc	bitCount
	cpi	bitCount, 7		;if bitCount = 8 ->
	breq	forth			; walk forward
	rjmp	back


;* 8 LED positions

;* Data

.ESEG
table:
	.db 0b00000001		;data 0
	.db 0b00000010		;data 1
	.db 0b00000100		;data 2
	.db 0b00001000		;data 3
	.db 0b00010000		;data 4
	.db 0b00100000		;data 5
	.db 0b01000000		;data 6
	.db 0b10000000		;data 7
