USARTつうしん
デバッグをしているとキャラクタ液晶だけじゃ情報量表示が足りなくなってしまうことがよくありますよね。そういう時はシリアル通信を使いましょう。単発送信と単発受信、連続送信が一個のパックになってます。ペリフェラル0番を利用します、1番を使いたい場合は書き換えてください。;割り込みベクタにラベルをセット;USART240: 受信完了;USART260: 送信バッファ空;USART280: 送信完了;.dsegに展開;USART0_recv: .db 0x00 ;受信バイト用バッファ;USART0_dat: .byte 0x20 ;送信配列バッファ;UCSR0A:RXC0 TXC0 UDRE0 FE0 DOR0 UPE0 U2X0 MPCM0;.EQU UCSR0A_ =0b00000000;UCSR0B:RXCIE0 TXCIE0 UDRIE0 RXEN0 TXEN0 UCSZ02 RXB80 TXB80;.EQU UCSR0B_ =0b10011000;UCSR0C:UMSEL01 UMSEL00 UPM01 UPM00 USBS0 UCSZ01 UCSZ00 UCPOL0;.EQU UCSR0C_ =0b00000110;USARTボーレートレジスタH;.EQU UBRR0H_ =0x00;USARTボーレートレジスタL;.EQU UBRR0L_ =0x81USART0_set:;USART利用開始___________________________________________ ldi r16,UCSR0A_ sts UCSR0A,r16 ldi r16,UCSR0B_ sts UCSR0B,r16 ldi r16,UCSR0C_ sts UCSR0C,r16 ldi r16,UBRR0H_ sts UBRR0H,r16 ldi r16,UBRR0L_ sts UBRR0L,r16 ret;__________________________________________________________________;r16に1バイトSENDUSART0:;1バイト送信_______________________________________________ push r16 push r17sendusart00: lds r17,UCSR0A sbrs r17,5 ;送信バッファ空フラグ JMP sendusart00 sts UDR0,r16sendusart01: lds r17,UCSR0A sbrs r17,6 ;送信完了フラグ検査 jmp sendusart01 ;フラグ1の場合繰り返す andi r17,0b11110111 ori r17,0b01100000 sts UCSR0A,r17 pop r17 pop r16 ret;__________________________________________________________________USART240:;24 USART 受信完了_________________________________________ push r16 lds r16,UDR0 sts USART0_recv,r16 pop r16 reti;__________________________________________________________________;Zポインタに送信先頭アドレス、0x00がエンドポイント_____________________________STRUSART0:;連続文字列を送信 lds r17,UCSR0B ;送信バッファ空割り込み許可 ori r17,0b00100000 sts UCSR0B,r17 ret;__________________________________________________________________USART260:;26 USART 送信バッファ空______________________________________ push r10 push r16 push r17 in r10,sreg ld r16,z+ cpi r16,0x00 ;デミリタ0x00の場合割り込み禁止で終了 breq USART2801 sts UDR0,r16 ;データレジスタに送信データストア jmp USART2803USART2801: lds r17,UCSR0B ;送信バッファ空割り込み禁止 andi r17,0b11011111 sts UCSR0B,r17USART2803: out sreg,r10 pop r17 pop r16 pop r10 reti;__________________________________________________________________USART280:;28 USART 送信完了_________________________________________ push r10 pop r10 reti;__________________________________________________________________