USART / とにかく何かを送信する

p.347
一般にLSBファースト。
f:id:ti-nspire:20200523082351p:plain
f:id:ti-nspire:20200523082425p:plain:h270 f:id:ti-nspire:20200523082457p:plain:h270
f:id:ti-nspire:20200523083225p:plain:h270 f:id:ti-nspire:20200523083258j:plain:h270

; スタックポインタの初期化マクロ
.MACRO INITSTACK
    LDI R20, HIGH(RAMEND)
    OUT SPH, R20
    LDI R20, LOW(RAMEND)
    OUT SPL, R20
.ENDMACRO

INITSTACK

; トランスミッターを有効化して(PD1端子をTXD機能にして)、
LDI R16, 1 << TXEN0
STS UCSR0B, R16

; 8N1 (8ビットデータ、パリティなし、1ストップビット)にして、 
LDI R16, 1 << UCSZ01 | 1 << UCSZ00 ; CSZはCharacter Size。
STS UCSR0C, R16

; ボーレートを9600にして、
LDI R16, 51 ; == 8MHz/(16*9600)-1
STS UBRR0L, R16 ; BRはBaud Rate。

AGAIN:
    ; 送受バッファーが空になるまで(UDRE0がセットされるまで)とどまって、
    LDS R20, UCSR0A
    SBRS R20, UDRE0 ; SBRSはSkip if Bit in Register is Set。UDREはUSART Data Register Empty。
    RJMP AGAIN

    ; 何か1文字を送信する。
    LDI R16, 'A' ; 0x41, 0b01000001
    STS UDR0, R16

    ; を繰り返す。
    RJMP AGAIN