;------------------------------------------------------------------------------- ; comptest2.asm for ATtiny15L ; 電源電圧が3Vに低下したらLEDを点灯して知らせる ; PB1: 電池分圧入力 ; PB2: 電源電圧低下時Low出力 ; スリープモード(アイドル動作)で消費電流を抑える ;------------------------------------------------------------------------------- .include "c:\avrtools\appnotes\tn15def.inc" .def temp = r16 .def status = r17 .org 0 rjmp reset reti reti reti reti reti reti rjmp ana_comp ;アナログコンパレータ出力遷移 reti reset: ldi temp, 0b00111101 out DDRB, temp ;PB1を入力に設定 ldi temp, 0b00000000 out PORTB, temp ;内部プルアップを使用しない sbi PORTB, 2 ;PB2をHighに ldi temp, 0b01001000 ; || | ||________ACIS1,ACIS0: 00 = トグル(立ち上がり、立ち下がりで出力) ; || |___________ACIE: 1 = アナログコンパレータ割り込み許可 ; ||______________ACBG: 1 = 内部基準電圧選択 ; |_______________ACD: 0 = アナログコンパレータ許可 out ACSR, temp ;割り込み処理を有効にする ldi temp, 0b00100000 ; | ||________SM1,SM0 00 = スリープ種別 アイドル動作 ; |_____________SE: 1 = Sleep Enable out MCUCR, temp ;スリープ許可 ; ldi temp, 0b10000000 ; out SREG, temp ;この2行の設定は下記 sei と同じ sei ;割り込み処理を有効にする loop: sleep ;スリープモード(アイドル動作)に移行 rjmp loop ;--- アナログコンパレータ出力遷移割り込み処理 --- ana_comp: in status, SREG ;ステータスレジスタを保存 cli ;割り込み処理を無効にする in temp, ACSR ;ACSRレジスタから入力 sbrs temp, 5 ;bit5(ACO)がセット(1)なら次をスキップ rjmp lp1 cbi PORTB, 2 ;PB2をLowに(LEDを点灯) rjmp lp2 lp1: sbi PORTB, 2 ;PB2をHighに(LEDを消灯) lp2: out SREG, status ;ステータスレジスタを復帰 reti