ATtiny13 >> Assembly
UART TX(9600bps)
UART傳輸協定
9600bps每個bit時間為:1/9600 = 104.167us
main.s
.equ PINB, 0x16 .equ DDRB, 0x17 .equ PORTB, 0x18 .equ UART_TX, 2 .org 0x0000 rjmp main .org 0x0020 main: sbi DDRB, UART_TX sbi PORTB, UART_TX ldi r16, 0 loop: inc r16 rcall uart_send rcall delay rjmp loop uart_send: mov r18, r16 cbi PORTB, UART_TX rcall delay_97us ldi r17, 8 0: sbrs r18, 0 cbi PORTB, UART_TX sbrc r18, 0 sbi PORTB, UART_TX rcall delay_97us lsr r18 dec r17 brne 0b sbi PORTB, UART_TX rcall delay_97us ret ; 1 + (1 + 2) * 37) + 4 = 116 ; 116 * (1 / 1200000) = 97us delay_97us: ldi r24, 37 0: dec r24 brne 0b ret delay: ldi r24, 0xff ldi r25, 0xff 0: sbiw r24, 1 brne 0b ret
P.S. 使用出廠預設的Fuse(High=0xff, Low=0x6a),CPU=9.6MHz, Div=8
編譯和燒錄
$ 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
完成