; ; attiny44_light ; .include "tn44def.inc" .equ led0 = PA0 ; LED sink pin .equ led1 = PA1 ; LED source pin .equ led2 = PA2 ; LED source pin .equ led3 = PA3 ; LED source pin .equ button = PB2 ; BUTTON PIN .equ txpin = PA6; transmit pin .equ rxpin = PA7; receive pin .def bitcnt = R16; bit counter .def temp = R17; temporary storage .def temp1 = R18; temporary storage .def temp2 = R21; temporary storage .def temp3 = R22; temporary storage .def temp4 = R23; temporary storage .def temp5 = R24; temporary storage .def txbyte = R19; transmit byte .def rxbyte = R20; receive byte ; ; print ; ; putbitdelay ; putchar bit delay ; 115200 baud, 20 MHz clock /8 ; .macro putbitdelay nop nop nop nop nop nop nop nop nop nop nop nop .endmacro ; ; getbitdelay ; getchar bit delay ; 115200 baud, 20 MHz clock /8 ; .macro getbitdelay nop nop nop nop nop nop nop .endmacro .cseg .org 0 rjmp reset ; ; blink ; blink the LED ; led1_on: sbi PORTA, led0 ret led2_on: sbi PORTA, led1 ret led3_on: sbi PORTA, led2 ret led4_on: sbi PORTA, led3 ret led1_off: cbi PORTA, led0 ret led2_off: cbi PORTA, led1 ret led3_off: cbi PORTA, led2 ret led4_off: cbi PORTA, led3 ret blink: ldi temp, 255 blink_loop: ldi temp1, 30 blink_loop1: dec temp1 brne blink_loop1 dec temp brne blink_loop ret ; ; main program ; reset: ; ; set fuse low byte to 0x7E for 20 MHz resonator ; ; set stack pointer to top of RAM ; ldi temp, high(RAMEND) out SPH, temp ldi temp, low(RAMEND) out SPL, temp ; ; init comm pin ; sbi PORTA, txpin sbi DDRA, txpin ; ; init LED pins ; cbi PORTA, led0 sbi DDRA, led0 cbi PORTA, led1 sbi DDRA, led1 cbi PORTA, led2 sbi DDRA, led2 cbi PORTA, led3 sbi DDRA, led3 cbi DDRB, button sbi PORTB, button ; ; start main loop ; loop: ;rcall fade_on ;rcall fade_off rcall up_down rcall up_down2 rjmp loop button_loop1: sbic PINB, button rjmp button_loop1 sbi PINB, button ret ret up_down: rcall led1_on rcall blink rcall led1_off rcall blink rcall led2_on rcall blink rcall led2_off rcall blink rcall led3_on rcall blink rcall led3_off rcall blink rcall led4_on rcall blink rcall led4_off rcall blink rcall led3_on rcall blink rcall led3_off rcall blink rcall led2_on rcall blink rcall led2_off rcall blink sbic PINB, button rjmp up_down rjmp up_down2 ret up_down2: rcall led2_on rcall led4_on rcall led1_on rcall led3_on rcall blink rcall blink rcall blink rcall led1_off rcall led2_off rcall led3_off rcall led4_off rcall blink rcall blink rcall blink sbic PINB, button rjmp up_down2 rjmp up_down3 ret up_down3: rcall led1_on rcall led2_off rcall led3_on rcall led4_off rcall blink rcall blink rcall blink rcall led1_off rcall led2_on rcall led3_off rcall led4_on rcall blink rcall blink rcall blink sbic PINB, button rjmp up_down3 rjmp fade_on ret fade_on: ldi temp3, 55 fade_on_loop: rcall leds_off rcall delay rcall leds_on rcall fade dec temp3 cpi temp3, 1 brne fade_on_loop rcall leds_off ret fade_off: ldi temp3, 1 fade_off_loop: rcall leds_off rcall delay rcall leds_on rcall fade inc temp3 cpi temp3, 120 brne fade_off_loop rcall leds_off ret leds_on: rcall led1_on rcall led2_on rcall led3_on rcall led4_on sbic PINB, button rjmp done2 rjmp up_down done2: ret leds_off: rcall led1_off rcall led2_off rcall led3_off rcall led4_off sbic PINB, button rjmp done1 rjmp up_down done1: ret fade: ldi temp, 100 delay_fade1: ldi temp1, 1 delay_fade2: mov temp2, temp3 delay_fade3: dec temp2 brne delay_fade3 dec temp1 brne delay_fade2 dec temp brne delay_fade1 ret delay: ldi temp4, 255 delay_loop1: ldi temp5, 5 delay_loop2: dec temp5 brne delay_loop2 dec temp4 brne delay_loop1 ret