چطوری میشه همزمان چند پروسیجر مختلف را استفاده کرد ؟
قصد دارم از یک ورودی مثلا I2C یا سریال مقادیر وارد شده را بخونم ،در یک متغییر عمومی ذخیره کنم
همزمانی که دارم این اطلاعات را میخونم بتونم مقداری که توی اون متغییر ذخیره شده مثلا یک عدد است را روی 7Segment هم نمایش بدهم
از Timer0 که استفاده میکنم اگه wait استفاده کنم ظاهرا روی کل برنامه تاثیر میذاره ، چطوری میتونه برنامه نویسیی روی میکرو را به صورت multithread یا همزمانی پروسیجرها انجام بدم ؟
پیوست : زبان bascom
وقتی میگمConfig Timer0 = Timer , Prescale = 1024
تقریبا بهم کار میده ولی چشمک زدن خیلی سریغ سون سگمنت تقریبا به چشم میاد ، وقتی پریسکار را میزارم کمتر از 256 کلا قاط میزنه و یه چند دقیقه طول میکشه تا پروسیجر بعدی که اصلا توی این تایمر هم نوشته نشده اجرا بشه ، باید چیکار کنم ؟ که هم دسترسی سریع به قطع و وصل کردن پایه هاس 7seg داشته باشم هم دیتا را موقع اومدن از دست ندم ؟
مگه هرچی پریسکال را بیاریم پائین سریعتر حلقه این تایمر نباید اجرا بشه ؟چرا برعکسه ؟
کد:
$regfile = "m16def.dat"
$crystal = 8000000
Config Timer0 = Timer , Prescale = 1024 'evry 65ms
Enable Interrupts
Enable Timer0
On Timer0 Timer_label
Start Timer0
P7g Alias Porta
Config P7g = Output
Dim Ms As Integer
Declare Sub Offall()
Declare Sub Test()
Declare Sub L0()
Declare Sub L1()
Declare Sub L2()
Declare Sub L3()
Declare Sub L4()
Declare Sub L5()
Declare Sub L6()
Declare Sub L7()
Declare Sub L8()
Declare Sub L9()
Declare Sub Lm()
Leda Alias P7g.0
Ledb Alias P7g.1
Ledc Alias P7g.2
Ledd Alias P7g.3
Lede Alias P7g.4
Ledf Alias P7g.5
Ledg Alias P7g.6
Ledh Alias P7g.7
Ms = 350
Set Portb.0
Set Portb.1
Do
Call Test()
Loop
End
Sub Offall()
Reset Leda
Reset Ledb
Reset Ledc
Reset Ledd
Reset Lede
Reset Ledf
Reset Ledg
Reset Ledh
End Sub
Sub L0()
Call Offall()
Set Leda
Set Ledb
Set Ledc
Set Ledd
Set Lede
Set Ledf
End Sub
Sub L1()
Call Offall()
Set Ledb
Set Ledc
End Sub
Sub L2()
Call Offall()
Set Leda
Set Ledb
Set Ledd
Set Ledg
Set Lede
End Sub
Sub L3()
Call Offall()
Set Leda
Set Ledb
Set Ledg
Set Ledc
Set Ledd
End Sub
Sub L4()
Call Offall()
Set Ledf
Set Ledg
Set Ledb
Set Ledc
End Sub
Sub L5()
Call Offall()
Set Leda
Set Ledf
Set Ledg
Set Ledc
Set Ledd
End Sub
Sub L6()
Call Offall()
Set Leda
Set Ledf
Set Lede
Set Ledd
Set Ledc
Set Ledg
End Sub
Sub L7()
Call Offall()
Set Leda
Set Ledb
Set Ledc
End Sub
Sub L8()
Call Offall()
Set Leda
Set Ledb
Set Ledc
Set Ledd
Set Lede
Set Ledf
Set Ledg
End Sub
Sub L9()
Call Offall()
Set Leda
Set Ledb
Set Ledc
Set Ledf
Set Ledg
End Sub
Sub Lm()
Set Ledh
End Sub
'=========
Sub Test()
Call L0()
Waitms Ms
Call L1()
Waitms Ms
Call L2()
Waitms Ms
Call L3()
Waitms Ms
Call L4()
Waitms Ms
Call L5()
Waitms Ms
Call L6()
Waitms Ms
Call L7()
Waitms Ms
Call L8()
Waitms Ms
Call L9()
Waitms Ms
'Call Lm()
Waitms 500
Reset Porta.0
Reset Porta.1
Reset Porta.2
Reset Porta.3
Reset Porta.4
Reset Porta.5
Reset Porta.6
'Reset Porta.7
Waitms 100
End Sub
'=========================
Timer_label:
Set Ledh
Waitms 10
Reset Ledh
Waitms 10
Return
[quote][/quote]