janboejle
07.06.2005, 18:22
es ist nur ein teile test programm, mickrontrolle AT90S8535 in STK200
über RS232 mit PC verbinden. signal nach jeder 5 Sekunden sollen Daten über UART transportiert werden .
Das heisst,nach jeder 5 sekunde wird Interrupt ausgelöst,und daten über UART senden.
ich denke, bei mein Programm fehlt etwa verbindung zw Senden und Interrupt,aber ich weis nicht wie ich es korrigieren.
könnte jemand mir helfen?
.include"8535def.inc"
.def temp=r16
.def infor=r19
.def laenger=r20
.def kommando=r21
.equ quartz=2457600 ;Seite 60,64,XTAL->Baudrategenerator
.equ baud=9600
.equ start=65536-39060
.equ highvalue=high(start)
.equ lowvalue=low(start)
.org 0X000
rjmp reset ;reset handler
.org 0X008
rjmp TIM1_OVF ;time1 overflow handler
reset:
ldi temp,low(RAMEND)
out spl,temp ;Seite 21
ldi temp,high(RAMEND) ;Stackpoint initialisieren
out sph,temp
ldi temp,1<<TXEN ;Seite 63
out UCR,temp ;Seite 64
ldi temp,quartz/(baud*16)-1
out UBRR,temp ; UART initialisieren
ldi temp,1<<TOIE1
out TIMSK,temp ;time1 interrupt ein , Seite 27
ldi temp,0b00000101 ;Seite 38
out TCCR1B,temp ;bit2-0 define the Prescaling
;source of Timer/Counter1
sei ;interrupts generelle aktivieren
loop:
ldi temp,1
mov r1,temp
ldi temp,2
mov r2,temp
ldi temp,3
mov r3,temp
ldi temp,4
mov r4,temp
ldi temp,5
mov r5,temp
ldi temp,6
mov r6,temp
ldi temp,7
mov r7,temp
ldi temp,8
mov r8,temp
rjmp loop
senden:
mov temp,r1
rcall senden2
mov temp,r2
rcall senden2
mov temp,r3
rcall senden2
mov temp,r4
rcall senden2
mov temp,r5
rcall senden2
mov temp,r6
rcall senden2
mov temp,r7
rcall senden2
mov temp,r8
rcall senden2
ret
senden2:
sbis USR,UDRE ;skip if bit in I/O register set
rjmp senden2 ;warten bis UDR fuer naechster Btyte
out UDR,temp ;bereit ist, Datenblatte Seite 62
ret
TIM1_OVF:
ldi temp,highvalue
out TCNT1H,temp ;Datenblaette Seite 38
ldi temp,lowvalue ;Startwert des Timers einstellen
out TCNT1L,temp ;39060 Takt ist 5 Sekunde
;nach 5 sekunde ist interrupt ausgeloest
rcall senden ;aufrufen Senden Funktion
reti
[/list]
über RS232 mit PC verbinden. signal nach jeder 5 Sekunden sollen Daten über UART transportiert werden .
Das heisst,nach jeder 5 sekunde wird Interrupt ausgelöst,und daten über UART senden.
ich denke, bei mein Programm fehlt etwa verbindung zw Senden und Interrupt,aber ich weis nicht wie ich es korrigieren.
könnte jemand mir helfen?
.include"8535def.inc"
.def temp=r16
.def infor=r19
.def laenger=r20
.def kommando=r21
.equ quartz=2457600 ;Seite 60,64,XTAL->Baudrategenerator
.equ baud=9600
.equ start=65536-39060
.equ highvalue=high(start)
.equ lowvalue=low(start)
.org 0X000
rjmp reset ;reset handler
.org 0X008
rjmp TIM1_OVF ;time1 overflow handler
reset:
ldi temp,low(RAMEND)
out spl,temp ;Seite 21
ldi temp,high(RAMEND) ;Stackpoint initialisieren
out sph,temp
ldi temp,1<<TXEN ;Seite 63
out UCR,temp ;Seite 64
ldi temp,quartz/(baud*16)-1
out UBRR,temp ; UART initialisieren
ldi temp,1<<TOIE1
out TIMSK,temp ;time1 interrupt ein , Seite 27
ldi temp,0b00000101 ;Seite 38
out TCCR1B,temp ;bit2-0 define the Prescaling
;source of Timer/Counter1
sei ;interrupts generelle aktivieren
loop:
ldi temp,1
mov r1,temp
ldi temp,2
mov r2,temp
ldi temp,3
mov r3,temp
ldi temp,4
mov r4,temp
ldi temp,5
mov r5,temp
ldi temp,6
mov r6,temp
ldi temp,7
mov r7,temp
ldi temp,8
mov r8,temp
rjmp loop
senden:
mov temp,r1
rcall senden2
mov temp,r2
rcall senden2
mov temp,r3
rcall senden2
mov temp,r4
rcall senden2
mov temp,r5
rcall senden2
mov temp,r6
rcall senden2
mov temp,r7
rcall senden2
mov temp,r8
rcall senden2
ret
senden2:
sbis USR,UDRE ;skip if bit in I/O register set
rjmp senden2 ;warten bis UDR fuer naechster Btyte
out UDR,temp ;bereit ist, Datenblatte Seite 62
ret
TIM1_OVF:
ldi temp,highvalue
out TCNT1H,temp ;Datenblaette Seite 38
ldi temp,lowvalue ;Startwert des Timers einstellen
out TCNT1L,temp ;39060 Takt ist 5 Sekunde
;nach 5 sekunde ist interrupt ausgeloest
rcall senden ;aufrufen Senden Funktion
reti
[/list]