; Copyright 2006 Yamane Akira ; Program2 ; STK500のLEDを光らせる簡単なプログラムを書く ; 出力ポートの初期化 ; 時間を遅らせるサブルーチンを使用するためにスタックポインターを ; 初期化しサブルーチンコールを行う .include "m8def.inc .def Temp = R16 .def CNT1 = R17 .def CNT2 = R18 .org 0x0000 ; rjmp RESET Delay1: ldi CNT1, 0xFF ; ディレイ・サブルーチン・エントリ Loop1: ldi CNT2, 0xFF ; カウンタ値の初期化; Loop2: dec CNT2 ; カウンタ値をマイナス1、結果が0になるとSREG:Z=1 brbc 1, Loop2 ; SREGのビット1(Z)がクリヤされていればLoop2へブランチ dec CNT1 brbc 1, Loop1 ; ret ; サブルーチン・リターン RESET: ldi Temp, low(RAMEND) ; RAMの最終番地をバイト単位で out SPL, Temp ; スタック・ポインタへセット ldi Temp, high(RAMEND) ; RAMENDは各.defファイルの中で定義されている out SPH, Temp ldi Temp, 0xFF out DDRB, Temp ; PORTBのデータ・ディレクション・レジスタを出力にセット Loop: out PORTB, Temp ; TempレジスタのデータをPORTBにセット rcall Delay1 ; ディレイ・サブルーチンを相対コール com Temp ; Tenpレジスタのデータをビットごとに反転 rjmp Loop ;プログラム2