Hier gibts auch einen für Assembler. Ist für den Mega32, sollte sich jedoch problemlos umschreiben lassen:
Ich hab den Code jedoch nicht ausprobiert - beim groben überfliegen sieht es jedoch recht gut aus ...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
Grüße
Flite







Zitieren

Lesezeichen