Dieses Programm funktioniert bei mir auf dem STK500 ohne irgendwelche
Anpassungen:
<avrasm>
.include "8515def.inc"
.equ F_CPU = 7372800 ; Systemtakt in Hz
.equ BAUD = 9600 ; Baudrate
.CSEG
; Stackpointer initialisieren
ldi r16, HIGH(RAMEND)
out SPH, r16
ldi r16, LOW(RAMEND)
out SPL, r16
; UART initialisieren
ldi r16, F_CPU/(BAUD*16)-1
out UBRR, r16 ; Baudrate einstellen
sbi UCR,TXEN ; TX aktivieren
; FLASH nach SRAM schreiben
ldi ZL, LOW(daten*2) ; Programmspeicher
ldi ZH, HIGH(daten*2)
ldi XH, HIGH(Test) ; SRAM
ldi XL, LOW(Test)
mov YL,XL ; X sichern
mov YH,XH
transfer:
lpm
adiw ZL,1
st X+,r0
and r0,r0 ; r0==0 (Stringende)?
brne transfer ; nein: loop
clr r16 ; sicherheitshalber eine Null schreiben
st X+,r16
mainloop:
mov XL,YL ; X wiederherstellen
mov XH,YH
rcall printX ; String schreiben, Übergabe: X
rjmp mainloop
printX:
ld r16,X+ ; SRAM nach r17
and r16,r16 ; r16==0 (Stringende)?
brne serout ; nein: Ausgabe auf RS232
ret ; ja: fertig
serout:
sbis USR,UDRE ; Warten bis UDR für das nächste Byte bereit
ist
rjmp serout
out UDR, r16 ; Ausgabe auf RS232 (TX)
rjmp printX ; nächstes Zeichen
daten:
.db "Test",13,10,0,0
.DSEG ; SRAM
Test:
.BYTE 20 ; 20 Byte unter dem Namen 'Test' reservieren
</avrasm>
Wenn dieses Programm bei Dir nicht funktioniert, dann könnte es folgende
Ursachen haben:
1) Der Quarz will nicht schwingen. Herausnehmen, wieder einsetzen. Eine
LED zur Kontrolle blinken lassen.
2) Das Protokoll ist falsch eingestellt: 9600 Baud, 8 Bit, keine Parity,
1 Stop Bit, kein Handshaking. Ich selbst komme besser mit terminal.exe
als Hyperterminal zurecht:
http://sites.google.com/site/terminalbpp/
3) Der USB/Serial-Adapter verwendet noch weitere Leitungen nach
RS232-Standard. Dann brauchst Du einen Computer mit eingebauter
COM-Schnittstelle.
viele grüße
ralph