微處理器 - Microchip ATtiny13 - Assembly - Compare Match Output



參考資訊:
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

完成