;| Title : Grundgerüst für SiSy-AVR-Board | ;+--------------------------------------------------------------------------+ ;| Funktion : wandelt analogwert in 8Bit Zahl und variiert mit ergebnis eine ; hörbare frequenz | ;| Schaltung : PC.0->Poti,PB.0->Speaker,AVCC,AVREF,AGND | ;+--------------------------------------------------------------------------+ ;| Prozessor : ATmega8 3,6864 MHz | ;| Sprache : Assembler | ;| Datum : ... | ;| Version : ... | ;| Autor : ... | ;+--------------------------------------------------------------------------+ .include "AVR.H" ;--------------------------------------------------------------------------- ;Register r16 - r25 verwenden!!! ;ADCSRA - r25 ;Startwert reint - r24 ;abwechseld HI LO frequenz r23 ;ADCL - r21 ;ADCH - r22 ;r17 - Wert zur ausgabe ;r16 - für initialisiertungen ; Reset and Interrupt vector Beschreibung rjmp main ;POWER ON RESET reti ;Int0-Interrupt reti ;Int1-Interrupt reti ;TC2 Compare Match reti ;TC2 Overflow reti ;TC1 Capture reti ;TC1 Compare Match A reti ;TC1 Compare Match B reti ;TC1 Overflow rjmp onTC0 ;TC0 Overflow 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 sbi UCSRB,3 ;UART TX enable ldi r16,23 ;Baudrate generieren out UBRRL,r16 ;Baudrate 9600 ldi r16,0 ;ADC Channel 0 out ADMUX,r16 ;PC.0 ADC Channel 0 ldi r16,0b11011010 ;ADC ein und 115Khz Taktrate out ADCSRA,r16 ;Single Staep und Interrupt, erste Konvertierung mov r25,r16 ;Timer einstellung für Tonausgabe 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 ;Speaker out auf LOW sbi DDRB,1 ldi r24,0x20 ;Startwert für Reinitialisierung ;--------------------------------------------------------------------------- mainloop: wdr ; Hier den Quellcode eintragen. mov r17,r23 rcall put rjmp mainloop ;--------------------------------------------------------------------------- onTC0: com r23 ;Frequenz durch HI/LO Wechsel out PORTB,r23 ;Speaker Ausgabe out TCNT0,r24 ;Reinitialisierung Timer0 reti;--------------------------------------------------------------------------- onADC: cli ;Interrupts Sperren in r21,ADCL ;LowTeil auslesen in r22,ADCH ;HighTeil auslesen asr r22 ror r21 asr r22 ror r21 mov r24,r21 ;Reintwert für Timer sbi ADCSRA,6 ;starte nächste Konvertierung sei reti ;--------------------------------------------------------------------------- put: ;mov r17,r23 sbis UCSRA, 5 ; USR=UCSRA=0x0B UDRE=Bit5 rjmp put ; warten, bis UDR bereit out UDR, r17 ret ;---------------------------------------------------------------------------