Вот фрагмент реально работающей программы с переводом АЦП в спящий режим, разбирайтесь (для удобства этот фрагмент в приложении как PDF файл):
.include "tn26def.inc"
.................................................
;======================== *** CODE SEGMENT ***==============================
.CSEG ;begin of program memory
.org 0
;-----------------SETUP INTERRUPTS HANDLERS---------------------------------
reset: rjmp start ; 00 Reset Handler
reti ; 01 External Interrupt0 Vector Address
reti ; 02 Pin change interrupt
reti ; 03 Output Compare1A Interrupt Vector Address
reti ; 04 Output Compare1B Interrupt Vector Address
reti ; 05 Overflow1 Interrupt Vector Address
rjmp TimeKey ; 06 Overflow0 Interrupt Vector Address (Main INT Programm)
reti ; 07 Universal Seria Bus Start Interrupt Address
reti ; 08 Universal Seria Bus Overflow Interrupt Address
reti ; 09 EEPROM Ready Interrupt Vector Address
reti ; 0A Analog Comparator Interrupt Vector Address
reti ; 0B ADC conversion complete Interrupt Vector Address
.................................................. ..............
;----------------------- BEGIN OF PROGRAMM ---------------------------------
;---------------------- *** SETUP PART *** ---------------------------------
start:
ldi r16,RAMEND ;stack init SP=0xdf (RAMEND)
out sp,r16 ;
sbi ACSR,ACD ;Analog comparator off
;------------------ Init Port A ------------------------
ldi r16,0xFF ;Set Ini Ports func (DIRECTION)
out ddra,r16 ; DDRA
; ldi r16,0x00 ;(INV) Set Ini Ports value (VALUE)
ldi r16,0xFF ;(NO INV) ;Set Ini Ports value (VALUE)
out porta,r16 ; PORTA
;--------------------------------------------------------
;------------------ Init Port B ------------------------
ldi r16,0x38 ;Set Ini Ports func (DIRECTION)
out ddrb,r16 ; DDRB
; ldi r16,0xBF ;(INV) Set Ini Ports value (VALUE)
ldi r16,0x87 ;(NO INV) Set Ini Ports value (VALUE)
out portb,r16 ; PORTB
;--------------------------------------------------------
;------------------ Init Timer0 (main INT) ------------
ldi r16,0x03
out TCCR0,r16 ;T/C0 CK/64
ldi r16,0x02
out TIMSK,r16 ;T/C0 Overflow INT enable
;--------------------------------------------------------
;--------------- init ADC converter ---------------------
ldi r16,0x9E ;Single conversion, clear flag,enable INT, prescaler :64 (62.5kHz)
out ADCSR,r16
ldi r16,0xA9 ;set MUX chanel=9, INT Ref=2.56V, Left Adjust results
out ADMUX,r16
;--------------------------------------------------------
...............................................
;--------------- Make ADC conversion ------------
;-------- Enable "ADC Noise Reduction" mode -------------
ldi r16,0x28 ;Enable "ADC Noise Reduction" mode & Sleep mode
out MCUCR,r16 ;Write to MCU control register
;--------------------------------------------------------
Sleep
;-------- Disable "ADC Noise Reduction" mode -------------
ldi r16,0x00 ;Disable "ADC Noise Reduction" mode & Sleep mode
out MCUCR,r16 ;Write to MCU control register
;--------------------------------------------------------
in BINL,ADCL ;Read LOW data byte from ADCL
in BINH,ADCH ;Read HIGH data byte from ADCH
;--------------------------------------------------------
..............................................
;=================== END OF MAIN PROGRAMM =====================
Прикрепленный файл:
7149504.pdf