;The assembly language code below is written for Atmel Studio, ;which uses an ISP interface, such as the Atmel AVRISP Mk II ;to program the ATtiny13V either in-system or on a separate board ;with a DIP socket I built for programming. .device ATtiny13 .set tccr0b = 0x33 .set tcnt0 = 0x32 .set tifr0 = 0x38 .set timsk0 = 0x39 .set mcucr = 0x35 .set portb = 0x18 .set ddrb = 0x17 .set i = 7 intv: rjmp init ;reset handler rjmp init ;irq handler rjmp init ;pin change handler rjmp t0ofh ;timer0 overflow handler rjmp init ;eeprom ready handler rjmp init ;analog comparator handler init: ldi r16,0b00000001 ;initialize r16 for use as ring counter clc ;clear carry bit ldi r25,0b00001111 ;prepare to set pb4 as input, pb3..pb0 as outputs out ddrb,r25 ;write ddrb long: ldi r25,0b00000101 ;prepare to set timer prescaler to ck/1024 out tccr0b,r25 ;select timer prescaler of ck/1024 clr r25 ;prepare to clear timer out tcnt0,r25 ;clear timer in r25,tifr0 ;read tifr0 andi r25,0b00000010 ;clear tov0 flag out tifr0,r25 ;write tifr0 in r25,timsk0 ;read timsk0 ori r25,0b00000010 ;set toie0 bit out timsk0,r25 ;write timsk0 bset i ;set i-bit in status reg wait: ldi r25,0b00100000 ;prepare to set se bit in mcucr out mcucr,r25 sleep ;sleep until timer overflow interrupt sleep ;sleep another 512 * ck/1024 rise: mov r18,r16 ;copy r16 to r18 andi r18,0b00001111 ;mask out non-output bits ori r18,0b00010000 ;set pb4 pull-up resistor out portb,r18 pulse: ldi r25,0b00000001 ;prepare to set timer prescaler to ck/1024 out tccr0b,r25 ;select timer prescaler of ck/1024 ldi r25,0b11100000 ;prepare to preset timer out tcnt0,r25 ;preset timer ldi r25,0b00100000 ;prepare to set se bit in mcucr out mcucr,r25 ;sleep enable sleep ;sleep until timer overflow interrupt fall: ldi r25,0b00010000 ;prepare to stop driving all output pins out portb,r25 ;stop driving all output pins rotrc: rol r16 ;rotate r16 left through carry bit rjmp long ;go back t0ofh: in r25,tifr0 ;read tifr0 andi r25,0b00000010 ;clear tov0 flag out tifr0,r25 ;write tifr0 reti ;return from interrupt