Gast
#138636
Ich habe mir einen kleinen Testaufbau mit einem AT90s2313 aufgebaut und folgendes Programm darauf geschrieben: .include "2313def.inc" ;Definitionsdatei laden .cseg ;Beginn eines Code-Segmentes .org 0 ;Startadresse=0 ; start: ldi r16,low(ramend) ;Stackpointer auf out spl,r16 ;RAM-Ende setzen ldi r16,0b00000001 ;PortB: PB0 auf Ausgang out ddrb,r16 ;setzen clr r16 ;Anfangswert setzen ; loop: out portb,r16 ;Daten an PortB ausgeben rcall wait ;Warteschleife aufrufen inc r16 ;Datenwert erhöhen rjmp loop ;Schleife neu beginnen ; ; Warteschleife (ungefähr 500ms) ; wait: ldi r19,10 ;r19, r18 und r17 clr r18 ;ergeben zusammen clr r17 ;einen 3-Byte-Zähler wait1: dec r17 ;niedrigstes Byte -1 brne wait1 ;0 erreicht? nein -> Schleife dec r18 ;mittleres Byte -1 brne wait1 ;0 erreicht? nein -> Schleife dec r19 ;höchstes Byte -1 brne wait1 ;0 erreicht? nein -> Schleife ret ;Schleifenende, Rückkehr Das ganze funktioniert, nur wenn ich statt PB0 einen anderen Pin als Ausgang nehme, oder auch zwei verschiedene gleichzeitig, dann blinken diese nicht im gleichen Takt. Sie werden von PB0 bis PB7 immer langsamer. Muss das so sein oder ist da was kaputt?