You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

73 lines
1.3 KiB

;
; tinyblink
; Blinks an LED on pin 4 (PB2)
;
.DEVICE ATtiny10
; variables
.EQU delayMult1 = 0xff ; the delay is delay3*delaymult2*delaymult1
.EQU delayMult2 = 0xff
.EQU delayMult3 = 0x0f
.CSEG ; code section
.ORG $0000 ; the starting address
main:
; set up the stack
ldi r16, high(RAMEND)
out SPH, r16
ldi r16, low(RAMEND)
out SPL, r16
; set clock divider
ldi r16, 0x00 ; clock divided by 1
ldi r17, 0xD8 ; the key for CCP
out CCP, r17 ; Configuration Change Protection, allows protected changes
out CLKPSR, r16 ; sets the clock divider
; initialize port
ldi r16, 1<<PB2 ; sets pin 4 (PB2) to putput
out DDRB, r16 ; data direction
ldi r16, 0x00 ; sets all pins low
out PORTB, r16
; nop for sync
nop
loop:
; turn on and delay
ldi r16, (1<<PB2)
out PORTB, r16
rcall delay
; turn off and delay
ldi r16, 0x00
out PORTB, r16
rcall delay
rjmp loop
delay:
; not really needed, but keep r16-r18
push r16
push r17
push r18
ldi r16, delayMult1
ldi r17, delayMult2
ldi r18, delayMult3
; start delay loop
delayLoop:
subi r16, 1 ; subtract 1
sbci r17, 0 ; if r16 was 0, subtract 1
sbci r18, 0 ; if r17 was 0, subtract 1
brne delayLoop ; while r18 is not 0, loop
; end delay loop
pop r17
pop r16
pop r18
ret