;+---------------------------------------------------------------------- ;| Title : myAVR Grundgerüst für ATmega8 ;+---------------------------------------------------------------------- ;| Funktion : ... ;| Schaltung : ... ;+---------------------------------------------------------------------- ;| Prozessor : ATmega8 ;| Takt : 3,6864 MHz ;| Sprache : Assembler ;| Datum : ... ;| Version : ... ;| Autor : ... ;+---------------------------------------------------------------------- ;.include "AVR.H" .include "m8def.inc" ; ###################### NEU ;------------------------------------------------------------------------ ;Reset and Interrupt vector ;VNr. Beschreibung rjmp main ;1 POWER ON RESET reti ;2 Int0-Interrupt reti ;3 Int1-Interrupt reti ;4 TC2 Compare Match reti ;5 TC2 Overflow reti ;6 TC1 Capture reti ;7 TC1 Compare Match A reti ;8 TC1 Compare Match B reti ;9 TC1 Overflow reti ;10 TC0 Overflow reti ;11 SPI, STC Serial Transfer Complete reti ;12 UART Rx Complete reti ;13 UART Data Register Empty reti ;14 UART Tx Complete reti ;15 ADC Conversion Complete reti ;16 EEPROM Ready reti ;17 Analog Comparator reti ;18 TWI (I²C) Serial Interface reti ;19 Store Program Memory Ready ;------------------------------------------------------------------------ ;Start, Power ON, Reset main: ldi r16,lo8(RAMEND) out ioSPL,r16 ldi r16,hi8(RAMEND) out ioSPH,r16 ;Hier Init-Code eintragen. ;Konfiguration PORT = OUT ldi r16,0b11111111 out DDRD,r16 ldi r16,0b00000000 out DDRC,r16 ;adc initi. ldi r16,128 ;Vorteiler = ganz wichtig out ADCSRA,r16 ;bei 8MHz auf 128 stellen sbi ADCSRA,ADEN ;AD generell einschalten ldi r16,0 ;hier kann auch direkt die 0 o.a. eingegeben werden out ADMUX,r16 ;Kanal auswählen sbi ADCSRA,ADFR ;Free Run einschalten sbi ADCSRA,ADSC ;Start Wandlung ldi r16,0b00000000 out PORTD,r16 ;LEDs aus ;------------------------------------------------------------------------ mainloop: wdr ;Hier den Quellcode eintragen. ;ADC Teil in r16,ADCL ;Low-Byte unbedingt zuerst in r17,ADCH ;lesen, auch immer beide ;lesen, nicht einzeln out ADMUX,ADLAR ; ###################### NEU ;Vergleich anstellen cpi r16,100 brlo gn ;r16 < 100 cpi r16,200 brlo ge ;r16 < 200 cpi r16,250 brsh gr ;r16 >= 200 gr: ldi r16,0b00100000 out PORTD,r16 ;rote Led rcall myWait_500ms rcall myWait_500ms rcall myWait_500ms rjmp mainloop ge: ldi r16,0b01000000 out PORTD,r16 ;gelbe Led rcall myWait_500ms rcall myWait_500ms rcall myWait_500ms rjmp mainloop gn: ldi r16,0b10000000 out PORTD,r16 ;grüne LED rcall myWait_500ms rcall myWait_500ms rcall myWait_500ms rjmp mainloop ; LED-Lauf Teil ;myLEDrun ;------------------------------------------------------------------------ ;-------------------------------------------------------------------- ; LED Lauf-Routine ; ;-------------------------------------------------------------------- myLEDrun: ldi r16,0b00000000 out PORTD,r16 ;Konfiguration PORTBit = OUT rcall myWait_500ms ldi r16,0b10000000 out PORTD,r16 ;Konfiguration PORTBit = OUT rcall myWait_500ms ldi r16,0b01000000 out PORTD,r16 ;Konfiguration PORTBit = OUT rcall myWait_500ms ldi r16,0b00100000 out PORTD,r16 ;Konfiguration PORTBit = OUT rcall myWait_500ms ldi r16,0b01000000 out PORTD,r16 ;Konfiguration PORTBit = OUT rcall myWait_500ms ldi r16,0b10000000 out PORTD,r16 ;Konfiguration PORTBit = OUT rcall myWait_500ms ldi r16,0b11000000 out PORTD,r16 ;Konfiguration PORTBit = OUT rcall myWait_500ms ldi r16,0b11100000 out PORTD,r16 ;Konfiguration PORTBit = OUT rcall myWait_500ms ldi r16,0b01100000 out PORTD,r16 ;Konfiguration PORTBit = OUT rcall myWait_500ms ldi r16,0b00100000 out PORTD,r16 ;Konfiguration PORTBit = OUT rcall myWait_500ms ldi r16,0b10000000 out PORTD,r16 ;Konfiguration PORTBit = OUT rcall myWait_500ms ldi r16,0b01000000 out PORTD,r16 ;Konfiguration PORTBit = OUT rcall myWait_500ms ldi r16,0b00100000 out PORTD,r16 ;Konfiguration PORTBit = OUT rcall myWait_500ms ldi r16,0b01100000 out PORTD,r16 ;Konfiguration PORTBit = OUT rcall myWait_500ms ldi r16,0b11100000 out PORTD,r16 ;Konfiguration PORTBit = OUT rcall myWait_500ms ldi r16,0b11000000 out PORTD,r16 ;Konfiguration PORTBit = OUT rcall myWait_500ms ldi r16,0b10000000 out PORTD,r16 ;Konfiguration PORTBit = OUT ret ;---------------------------------------------------------------------- ;-------------------------------------------------------------------- ; Warte-Routine für 500 ms ; die Routine wartet 500ms ;-------------------------------------------------------------------- myWait_500ms: rcall myWait_20ms rcall myWait_20ms rcall myWait_20ms rcall myWait_20ms rcall myWait_20ms nop rcall myWait_20ms rcall myWait_20ms rcall myWait_20ms rcall myWait_20ms rcall myWait_20ms nop rcall myWait_20ms rcall myWait_20ms rcall myWait_20ms rcall myWait_20ms rcall myWait_20ms nop rcall myWait_20ms rcall myWait_20ms rcall myWait_20ms rcall myWait_20ms rcall myWait_20ms nop rcall myWait_20ms rcall myWait_20ms rcall myWait_20ms rcall myWait_20ms rcall myWait_20ms ret ;---------------------------------------------------------------------- ;-------------------------------------------------------------------- ; Warte-Routine für 20 ms ; die Routine wartet inclusive Aufruf 19,9 ms ;-------------------------------------------------------------------- myWait_20ms: push r16 ldi r16,1 myWait_20ms_3: push r16 ldi r16,95 myWait_20ms_2: push r16 ldi r16,255 myWait_20ms_1: dec r16 brne myWait_20ms_1 pop r16 dec r16 brne myWait_20ms_2 pop r16 dec r16 brne myWait_20ms_3 pop r16 ret ;----------------------------------------------------------------------