; *********************************************************** ; * R/2R-Netzwerk produziert eine Dreieckspannung an Port D * ; * (C)2005 by info@avr-asm-tutorial.net * ; *********************************************************** ; .INCLUDE "8515def.inc" ; ; Register Definitionen ; .DEF rmp = R16 ; Multipurpose Register .DEF rdl = R17 ; Verzoegerungszaehler ; ; Konstanten ; .EQU maxAmp = 127 ; Maximum Amplitude .EQU delay = 1 ; Verzoegerung, hoehere Werte machen niedrigere Frequenz ; ldi rmp,0xFF; Alle Port-D-Pins als Ausgang out DDRD,rmp triangle: clr rmp ; bei Null anfangen loopup: out PORTD,rmp ; an Port ausgeben ldi rdl,delay ; Verzoegerung einstellen delayup: dec rdl ; Zaehler herunterzaehlen brne delayup ; weiter mit zaehlen inc rmp ; naechstgroesserer Wert cpi rmp,maxAmp ; mit maximaler Amplitude vergleichen brcs loopup ; wenn noch nicht erreicht, weiter hoch loopdwn: out PORTD,rmp ; Ausgabe rueckwaerts ldi rdl,delay ; wieder verzoegern delaydwn: dec rdl ; herunterzaehlen brne delaydwn ; weiter verzoegern dec rmp ; naechstniedrigeren Wert einstellen brne loopdwn ; wenn noch nicht Null, dann weiter rjmp triangle ; und wieder von vorne fuer immer