Hallo Ihr Lieben hier im Forum, ich bin das erste mal hier mit vieleicht einer simplen frage.
Wie geschrieben habe ich einen Xmega 128a1u. Ich brauche eine simple Funktion des Timer D0 aber irgendwie bin ich zu doof oder habe das Brett vor dem Kopf.
Die idee ist den Timer zu starten und auch zu stoppen und logisch wieder neu zu starten.
Ablauf
Ueber den loop wird mir momentan der Timer wert ausgedruckt wie ich sehe ist der immer der gleiche, logisch Timer ist noch nicht gestartet.
Jetzt schicke ich im auf der Serial ein zeichen. So soll der Timer anlaufen und nach dem letzten emfangenen byte ca. 400ms einen Interrupt auslösen und nach RX springen. Dort soll der Timer gestoppt werden. In der Interruption wird den Timer wieder die 5000 vergeben, ein LED am Ausgang Q3 soll mir anzeigen, das die Interruption angelaufen wurde. Was ich sehe ist, der Timer im Anlauf hat 5000, schicke ich im ueber serial un oder mehr byte's, wechselt der Timer wert auf 1000. Von dem wechsel weiß ich, die Interruption serial ist in betrieb und wird richtig aus geführt. Aber der Timer will nicht auslösen. Wo ist der Hund begraben. Ueber Eure Hilfe währe ich dankbar. Dietmar
mein Code ist dieser:
$Regfile="xm128a1udef.dat"
$Crystal=32000000
$hwstack=40
$swstack=16
$framesize=32
Config Osc = Disabled , 32mhzosc = Enabled
Config Sysclock = 32mhz , Prescalea = 1 , Prescalebc = 1_1
Config Portq.3 = Output 'Led
'Serialport
Config Com1 = 115200 , Mode = Asynchroneous , Parity = None , Stopbits = 1 , Databits = 8
config serialin0 = Buffered , Size = 255 , Bytematch = all
Open "COM1:" For Binary As #1
'Timer Port D0
Config tcd0 = Normal , Prescale = 256
Tcd0_per = 5000 'Periode einstellen 0,4 sec
On Tcd0_ovf RX
Enable Tcd0_ovf , Lo
enable interrupts
stop tcd0
dim i as byte
Do
wait 1
print #1, Tcd0_per
loop
Serial0bytereceived:
start tcd0
Tcd0_per = 1000
return
'timer interrupt
rx:
Tcd0_per = 2000
stop tcd0
toggle portq.3
Print #1,"byte IN"; _rs_bufcountr0; "Byte total in Buffer"
for i = 1 to _rs_bufcountr0
Print #1,"byte IN" ;chr(_rs232inbuf0(i)); "Byte in Buffer"
next
return
end 'end program