; Copyright 2006 Yamane Akira ; ビット単位でON/OFFするためのプログラム例 ; I/Oピンのビット・セット:sbi命令 ; I/Oピンのビット・クリア:cbi命令  ; 2ビット以上のビットをセット/クリアする場合: Read/Modify/Write .include "m48def.inc" ; 定義ファイルをインクルード .def Temp = R16 ; レジスタにシンボル名をつける擬似命令 .def Data1 = R18 .org 0x0000 ; プログラム・コードのロケーションを宣言 rjmp RESET ; リセット時にプログラムはここからスタートする INIT_PORT: ldi Temp, 0xFF ; PORTBの初期化 out PORTB, R16 out DDRB, Temp out PORTD, R16 ; PORTDの初期化 out DDRD, Temp ldi Temp, 0x7F ; PORTCの初期化 out PORTC, Temp ldi Temp, 0x07; out DDRC, Temp ret ; サブルーチン・リターン RESET: ldi Temp, low(RAMEND) ; RAMの最終番地をバイト単位で out SPL, Temp ; スタック・ポインタへセット ldi Temp, high(RAMEND) ; RAMENDは各.defファイルの中で定義されている out SPH, Temp ; rjmp Main Write: ; 周辺インターフェース・チップにデータを書き込むサブルーチン out PORTB, Data1 ; Dataをセット ser Temp ; PORTBを出力ポートに out DDRB, Temp ; 設定 cbi PORTC, PC2 ; CS/ をアクティブに cbi PORTC, PC1 ; Write/ をアクティブに in Temp, PINC ; Read(読み出し) ori Temp, 0b00000101 ; Modify(修正)--CS/、Write/ を元に戻す out PINC, Temp ; Write(書き込み)     clr Temp out DDRB ret Read: ; 周辺インターフェース・チップからデータを読み出すサブルーチン clr Temp ; PORTBを入力に out DDRB, Temp ; 設定 cbi PORTC, PC2 ; CS/ をアクティブに(ビット・クリア命令) cbi PORTC, PC0 ; Read コマンド in Data1, PINB ; データの読み出し in Temp, PINC ; Read(読み出し) ori Temp, 0b00000011 ; Modify(修正)--CS/、Read/ を元に戻す out PINC, Temp ; Write(書き込み) ret - main: ; ----------- ; ----------- ld Data1, X+ rcall Write ; ----------- ; ----------- rcall Read st Y+, Data1 ; ---------- ; ----------