ايران ويج

نسخه‌ی کامل: مولتی ترد نویسی روی میکرو
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
چطوری میشه همزمان چند پروسیجر مختلف را استفاده کرد ؟
قصد دارم از یک ورودی مثلا 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]
مهندس کاری نداره !

با وقفه و تایمرها !

البته در همین حد و میکرو در اون حدی نیست که چند پروسه رو همزمان اجرا کنه !!
(۲۱-اردیبهشت-۱۳۸۹, ۱۰:۵۹:۰۶)t3r!p3000 نوشته است: [ -> ]مهندس کاری نداره !

با وقفه و تایمرها !

البته در همین حد و میکرو در اون حدی نیست که چند پروسه رو همزمان اجرا کنه !!

یه سمپل بی زحمت......
(۲۱-اردیبهشت-۱۳۸۹, ۱۱:۲۷:۲۱)t3r!p3000 نوشته است: [ -> ]http://www.iranled.com/forum/showthread....#pid111795


حجی مطمئنی این همزمانه ؟ ظاهرا با کلید S هربار توی یک مد میره
حاجی منظور من این نبود که هر لحظه فقط یه کارو انجام میده !

مثلا مد فرکانس متر رو در نظر بگیر :
با تایمر دو زمان دقیق یه ثانیه ساخته شده تا پالس ها رو تو همین مدت بشمره !
تو حلقه اصلی برنامه دیتای دریافتی از کلیدها گرفته میشه ! ( واسه رفتن به مد بعدی و ... )
تو وقفه تایمر صفر هم سون سگمنت ها رفرش میشن !
از تایمر یک و وقفه اش هم برای شمارش پالس های دریافتی استفاده شده !!