; ********************************************************** ; * Produziert einen Sinus an einem R/2R-Netzwerk an PORTD * ; * (C)2005 by avr-asm-tutorial.net * ; ********************************************************** ; .INCLUDE "8515def.inc" ; ; Register Definition ; .DEF rmp = R16 ; Multipurpose Register ; ; Beginn des Programms ; ldi rmp,0xFF ; Alle Pins von Port D sind Ausgang out DDRD,rmp ldi ZH,HIGH(2*SineTable) ; Z auf Tabelle im Flash ldi ZL,LOW(2*SineTable) clr rmp loop1: nop nop nop loop2: lpm ; Lesen aus der Tabelle out PORTD,R0 ; Tabellenwert an Port D adiw ZL,1 ; naechster Tabellenwert dec rmp ; Ende der Tabelle erreicht? brne loop1 ; nein ldi ZH,HIGH(2*SineTable) ; Z wieder auf Tabellenanfang ldi ZL,LOW(2*SineTable) rjmp loop2 ; weiter so ; ; Ende Instruktionen ; ; Include der Sinustabelle ; .INCLUDE "sine8_25.txt" ; ; Ende Programm ;