參考資訊:
https://www.microchip.com/en-us/product/attiny13#Documentation
https://nerdathome.blogspot.com/2008/04/avr-as-usage-tutorial.html
本範例是,當Timer數到跟OCR0A設定的數值一樣時,觸發Compare Match中斷(CTC模式),在中斷裡面Toggle OC0B腳位(Pin1)
main.s
.equ DDRB, 0x17 .equ PORTB, 0x18 .equ OCR0B, 0x29 .equ TCCR0A, 0x2f .equ TCNT0, 0x32 .equ TCCR0B, 0x33 .equ OCR0A, 0x36 .equ TIMSK0, 0x39 .equ BTN, 0 .equ LED, 1 .org 0x0000 rjmp main reti reti reti reti reti reti rjmp compb_handler .org 0x0020 main: sbi DDRB, LED cbi DDRB, BTN sbi PORTB, LED sbi PORTB, BTN ldi r16, 0x00 out TCNT0, r16 ldi r16, 0x08 out TIMSK0, r16 ldi r16, 0x12 out TCCR0A, r16 ldi r16, 0x05 out TCCR0B, r16 ldi r16, 0xf0 out OCR0A, r16 ldi r17, 0 sei loop: rjmp loop compb_handler: sbrs r17, 0 cbi PORTB, LED sbrc r17, 0 sbi PORTB, LED ldi r16, 0x01 eor r17, r16 reti
編譯和燒錄
$ avr-as -mmcu=attiny13 -o main.o main.s $ avr-ld -o main.elf main.o $ avr-objcopy --output-target=ihex main.elf main.ihex $ sudo avrdude -c usbasp -p t13 -B 1024 -U flash:w:main.ihex:i
完成