Hallo,
habe noch zufällig irgendwelchen ADC-Code für den 90S4433 gefunden, den ich mal zum Test geschrieben habe.
Es hat definitiv funktioniert, allerdings wurde der Code danach noch etwas modifiziert. Ich kann also keine Funktionsgarantie geben.
Allerdings ist das ganze nicht wirklich schwer. Das meiste findet in der ISR statt (Ergebnis in r18:r17), allerdings habe ich die Displayausgabe auskommentiert.
Das sollte Dir einen groben Überblick verschaffen. Das Lesen des Datenblattes ist natürlich immer Pflicht.
JensCode:.include "4433def.inc" .CSEG .org 0x0000 ; code segment start ; Interrupt vectors rjmp RESET ; 0x00 external reset rjmp NO_INTERRUPT ; 0x01 external int0 rjmp NO_INTERRUPT ; 0x02 external int1 rjmp NO_INTERRUPT ; 0x03 timer1 capture event rjmp NO_INTERRUPT ; 0x04 timer1 compare match rjmp NO_INTERRUPT ; 0x05 timer1 overflow rjmp NO_INTERRUPT ; 0x06 timer0 overflow rjmp NO_INTERRUPT ; 0x07 SPI serial transfer complete rjmp NO_INTERRUPT ; 0x08 UART, Rx complete rjmp NO_INTERRUPT ; 0x09 UART data register empty rjmp NO_INTERRUPT ; 0x0a UART, Tx complete rjmp ADC_INTERRUPT ; 0x0b ADC conversion complete rjmp NO_INTERRUPT ; 0x0c EEPROM ready rjmp NO_INTERRUPT ; 0x0d Analog comparator ;-------------------------------------------------------------------- ; ISRs ;-------------------------------------------------------------------- RESET: rjmp main ADC_INTERRUPT: in r20, SREG push r16 push r17 push r18 in r17, ADCL in r18, ADCH ; skip 2 LSB ; asr r18 ; ror r17 ; asr r18 ; ror r17 ; display output ; mov r16, r18 ; rcall lcd_printdec ; print high byte ; mov r16, r17 ; rcall lcd_printdec ; print low byte ; ldi r16, ' ' ; rcall lcd_data ; start next conversion sbi ADCSR, 6 pop r18 pop r17 pop r16 out SREG, r20 reti NO_INTERRUPT: reti ;-------------------------------------------------------------------- ; MAIN ;-------------------------------------------------------------------- main: ldi r16, low(RAMEND) ; initialise stack pointer out SPL, r16 sei ; global interrupt enable ; analog input 0 ldi r16, 0x00 out ADMUX, r16 ; enable, start dummy conversion, no free run, interrupt, factor 128 ldi r16, 0b11011111 out ADCSR, r16 loop: rjmp loop








Zitieren
Lesezeichen