Hier gibts auch einen für Assembler. Ist für den Mega32, sollte sich jedoch problemlos umschreiben lassen:
Code:
;**********************************************
;*
;* 10 bits A/D converter demo
;*
;**********************************************
.include "C:\VMLAB\include\m32def.inc"
; Registers definitions
;
.def temp = r16
; my Def
;**********************************************
;.equ ADTS2 =7
;.equ ADTS1 =6
;.equ ADTS0 =5
;**********************************************
; Reset and interrupt vectors
;
.cseg
;*********************************************************************
.org $00 ; 1 $000 Reset Go to Reset handler
rjmp start
.org $02
rjmp dummy
.org $04
rjmp dummy
.org $06
rjmp dummy
.org $08
rjmp dummy
.org $10
rjmp dummy
.org $12
rjmp dummy
.org $14
rjmp dummy
.org $16
rjmp dummy
.org $18
rjmp dummy
.org $20
rjmp ad_vector ; ADC complete
.org $22
rjmp dummy
.org $24
rjmp dummy
.org $26
rjmp dummy
.org $28
rjmp dummy
; rjmp ad_vector ; ADC
;***********************************************
dummy:
nop
nop
nop
nop
reti
;***********************************************
;***********************************************
; ADC complete interrupt service
;
ad_vector:
in temp, ADCH
sbi ADCSR,ADSC ; StartConversion
sei
ret
;***********************************************
; Reset handler
;
start:
clr temp ; first clear all registers
out ACSR,temp
out ADMUX,temp
out ADCSR,temp
out SFIOR,temp
ldi temp,high(RAMEND)
out sph,temp
ldi temp,low(RAMEND)
out spl,temp
; ldi temp, $AB ; Power on ADC; select prescaler (/8); free running
; out ADCSR,temp ; and enable end of conversion interrupt
sbi ADCSR,ADEN ; ADC-Enable
sbi ADCSR,ADIE ; ADC-EnableEnable Interrupt
sbi ADCSR,ADPS2 ; SET Prescale to //
cbi ADCSR,ADPS1 ; Divisions Factor //
cbi ADCSR,ADPS0 ; by 16
sbi ACSR,ACIE ; ACIE: Analog Comparator Interrupt Enable
sbi ACSR,ACIS1 ; ACIS1, ACIS0: Analog Comparator //
sbi ACSR,ACIS0 ; Interrupt Mode Select //
sbi ADMUX, ADLAR ; Get 8 most significant bits in ADCL
nop
nop
nop ; Leave some time to stabilize before starting
nop
sbi ADCSR,ADSC ; StartConversion
sei ; A warning must be issued here!!. 8 is not enough
; as prescaler factor to obtain a 50-200 KHz
; recommended ADC clock
forever:
rjmp forever ; Infinite loop, interrupted by ADC conversions
Ich hab den Code jedoch nicht ausprobiert - beim groben überfliegen sieht es jedoch recht gut aus ...
Grüße
Flite
Lesezeichen