;; アナログコンパレータの出力によりLEDを点灯/消灯する ;; ACSRの(ACIE)をクリアしてから、ACSRの(ACD)をクリアする ;; 電源ON時はこの(上)状態 ;; アナログコンパレータ割り込みを使用しない場合は ;; 1. PD6,PD7を入力に設定 ;; 2. コンパレータ出力[ACSRのビット5(ACO)]を読む ;; ;; ;*************************************************************** ;*  デバイスの定義ファイルのインクルード * ;*************************************************************** ; .include "m88def.inc" ; ;*************************************************************** ;*    レジスターにシンボル名を定義    * ;*************************************************************** ; .def temp =r16 .def cnt2 =r17 .def cnt3 =r18 ; ; ;;*************************************************************** ;* ベクトルエリア * ;*************************************************************** ; .cseg ; プログラムエリア開始 rjmp reset ; reset vector reti ; INT0 vector reti ; INT1 vector reti ; PCINT0 reti ; PCINT1 reti ; PCINT2 reti ; WDT reti ; Timer2 COMPA reti ; Timer2 COMPB reti ; Timer2 overflow reti ; Timer1 capture reti ; Timer1 COMPA reti ; Timer1 COMPB reti ; Timer1 overflow reti ; Timer0 COMPA reti ; Timer0 COMPB reti ; Timer0 overflow reti ; SPI STC reti ; USART/Rx complete reti ; USART/ Data register empty reti ; USART/Tx complete reti ; ADC reti ; EEPROM EE_RDY reti ; Analog comparator reti ; TWI reti ; SPM_RDY ; ;*************************************************************** ;* リセットルーチン             * ;*************************************************************** reset: ldi temp,high(RAMEND) out SPH,temp ; set stuck pointer ldi temp,low(RAMEND) out SPL,temp ; set stuck pointer ldi temp,$FF out DDRB,temp ; portB はすべて出力 ldi temp, $00 out DDRD, temp ; portD は入力 ldi temp,(1< AIN0) の時スキップ sbi PORTB,1 ; LED 消灯 sbrs temp, ACO ; ACO=1 (AIN1 < AIN0) の時スキップ cbi PORTB,1 ; LED 点灯 rcall delay rjmp main ; ;*************************************************************** ;* 10 m sec. ディレイ ルーチン * ;* * ;* dl3: 5 clock * 200回 - 1 = 999 clock * ;* dl2: (dl3 + 4 clock) * 80 回 - 1 + 5 + 3 = 80,247 clock * ;* * ;*************************************************************** ; delay: ;about 10 ms * cnt1 delay ldi cnt2,80 ;80->10 msec, dl2: ldi cnt3,200 ;200->125usec dl3: ;5clock/1loop 625 nsec nop ;1 clock nop ;1 clock dec cnt3 ;1 clock brne dl3 ; if non-zero jump to dl3 2clock dec cnt2 brne dl2 ; if non-zero jump to dl2 ret ; ;