;+--------------------------------------------------------------------------+ ;| Funktion : wandelt analogwert in 8Bit Zahl und variiert mit ergebnis eine ; frequenz | ;| Schaltung : PC.0->Poti,PB.0->auf eingang amanderen Board | ;+--------------------------------------------------------------------------+ ;| Prozessor : ATmega8 3,6864 MHz | ;| Sprache : Assembler | ;| Datum : ... | ;| Version : ... | ;| Autor : ... | ;+--------------------------------------------------------------------------+ .include "AVR.H" ;--------------------------------------------------------------------------- ; Reset and Interrupt vector Beschreibung rjmp main ;POWER ON RESET reti ;Int0-Interrupt reti ;Int1-Interrupt reti ;TC2 Compare Match reti ;TC2 Overflow rjmp onTC1 ;TC1 Capture reti ;TC1 Compare Match A reti ;TC1 Compare Match B reti ;TC1 Overflow ; rjmp onTC0 ;TC0 Overflow reti reti ;SPI, STC Serial Transfer Complete reti ;UART Rx Complete reti ;UART Data Register Empty reti ;UART Tx complete rjmp onADC ;ADC Conversion Complete reti ;EEPROM Ready reti ;Analog Comparator reti ;TWI (I²C) Serial Interface reti ;Strore Program Memory Redy ;--------------------------------------------------------------------------- ; Start, Power ON, Reset main: ldi r16,lo8(RAMEND) out SPL,r16 ldi r16,hi8(RAMEND) out SPH,r16 ; Hier Init-Code eintragen. sei ;Globale Interrupts erlauben ;Baudrate setzen und UART aktivieren sbi UCSRB,3 ;UART TX enable ldi r16,23 ;Baudrate generieren out UBRRL,r16 ;Baudrate 9600 ;------------------------------------ ;ADC Channel festlegen und Takteinstellung ldi r16,0 ;ADC Channel 0 out ADMUX,r16 ;PC.0 ADC Channel 0 ldi r25,0b11011010 ;ADC ein und 115Khz Taktrate out ADCSRA,r25 ;Single Staep und Interrupt, erste Konvertierung ;------------------------------------ ;Timer einstellung für Frequenzausgabe ldi r16,0b00000101 ;Vorteiler Timer0 64 245 für 15000Hz ;ldi r16,0b00000100 out TCCR0,r16 ;Timer 0 Setup ldi r16,0b00000001 ;Timer Overflow out TIMSK,r16 ;Interrupt Timer 0 sbi DDRB,0 ;Frequenz out auf LOW sbi DDRB,0 ;Frequenz out auf LOW ; ldi r25,0x20 ;Startwert für Reinitialisierung mov r25,r24 ;--------------------------------------------------------------------------- mainloop: wdr ; Hier den Quellcode eintragen. ldi r17,64 add r24,r17 mov r17,r25 ;aktuellen Timerwert in r17 Kopieren rcall put ;unterprog zum senden rjmp mainloop ;--------------------------------------------------------------------------- onTC1: com r23 ;Frequenz durch HI/LO Wechsel out PORTB,r23 ;Frequenz Ausgabe out TCNT0,r25 ;Reinitialisierung Timer0 reti ;--------------------------------------------------------------------------- onADC: cli ;Interrupts Sperren in r26,ADCL ;LowTeil auslesen in r27,ADCH ;HighTeil auslesen asr r27 ror r26 asr r27 ror r26 mov r25,r26 sbi ADCSRA,6 sei reti ;--------------------------------------------------------------------------- put: sbis UCSRA, 5 ; USR=UCSRA=0x0B UDRE=Bit5 rjmp put ; warten, bis UDR bereit out UDR, r17 ret ;---------------------------------------------------------------------------