ループでLED点滅
AVR2313を使用
LED SW入出力テストと同じ (内部発振1MHz動作)
出力 | 入力(使用せず) |
PD4--LED | PD2--SW(ON=GND |
PD5--LED | PD3--SW(ON=GND |
プログラム
PD4にLED 接続 (PORTD.B4) し
空ループ時間待ちで間隔を作り点灯させるプログラム
1.ヒューズで内部発信器設定
もともとの初期設定=工場出荷時で実行しました。プログラムは以前つくったものなので周波数、設定などのコメントが違うことあり
LED点滅loop
;****************************************************************
;ループでLED点滅
; 内蔵8MHz、1/8分周
;
; PD4にLED 接続 (PORTD.B4)
; LED(PD4:PORTD.B4)をループ時間待ちで点灯させるプログラム
;
;****************************************************************
.include "tn2313def.inc"
.def TEMP = R16 ; レジスタR16にTEMPと命名
.org 0x0000 ; リセット時にプログラムメモリの0番地から実行
RESET:
LDI R16,LOW(RAMEND) ;スタック設定 SRAMの最後
OUT SPL,R16
ldi TEMP, 0xFF ; TEMPに 0xFF を書き込む
out DDRD, TEMP ; PORTDを全出力に設定
MAIN:
LED_ON:
ldi TEMP, 0b00010000
out PORTD,TEMP ;PORTD.B4=1
RCALL wait05 ;約0.5Sウエイト
LED_OFF:
ldi TEMP, 0b00000000
out PORTD,TEMP ;PORTD.B4=0
RCALL wait05 ;約0.5Sウエイト
RJMP MAIN
;0.5s待ちループ(1MHzクロック時)
wait05:
LDI R18,5
wait052:
RCALL wait01
DEC R18
BRNE wait052
RET
;0.1s待ちループ(1MHzクロック時)
wait01:
LDI R19,100
wait012:
RCALL wait1m
DEC R19
BRNE wait012
RET
;1ミリs待ちループ(1MHzクロック時)
wait1m:
LDI R20,250
wait1m2:
NOP ;合計4クロック
DEC R20 ;
BRNE wait1m2 ;
RET
空ループ処理
1M発振設定で
- 4クロックの250回のループ = 1ms
- それを100回呼び出すループ = 0.1s
- さらにそれを5回呼び出すループ = 0.5s
で時間間隔を作る
スポンサーリンク
- twtter
- google+
- hatena