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