(۲۶-مرداد-۱۳۹۱, ۱۴:۰۰:۴۱)parham144 نوشته است: [ -> ]با سلام خدمت اساتيد محترم .من ميخوام دو پايه رو بصورت مداوم چک کنم مثلا با کانتر يا مثلا روش افزايش و کاهش مقدار متغيرر(incr,decr) يعني مثلا اگر پايه اول 10 بار صفر ميشه اين مقدار توي يک متغيير ريخته بشه و پايه ديگر هم همينطور چک بشه و اگر تعداد صفر شدن اين دو پايه برابر شد حالا يک کاري انجام بده. فقط ميخوام اين کار به صورت مداوم انجام بشه .ممنون ميشم در برنامه نويسيش با بسکام کمکم کنيد .
سلام به همه مندسان؛
منم یه برنامه بدون تایمر نوشتم ولی نمی دونم تا چه حدی درسته؟
ممنون میشم اشکالات رو بگید؛
طریقه کارکرد؛
دو تا LED رو مرتب روشن و خاموش کردم و با هر بار خاموش شدن، یک واحد به
کاراکترهای A و B در LCD اضافه کردم و موقعی که هردو LED ده بار خاموش
شدند، یک موتور DC شروع به حرکت می کنه.
کد:
$regfile = "m32def.dat"
$crystal = 1000000
Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.4 , Rs = Portd.5
Config Porta = Output
Config Portd = Output
Dim A As Byte
Dim B As Byte
Do
Cursor Off
A = 1
B = 1
Q:
Set Porta.0
Set Porta.1
WAitms 600
Reset Porta.0
Reset Porta.1
Waitms 600
If Porta.0 = 0 Then
Incr A
End If
If Porta.1 = 0 Then
Incr B
End If
Locate 1 , 1
Lcd " A :" ; A
Locate 1 , 8
Lcd " B :" ; B
If A = 10 And B = 10 Then
Set Portd.6
End If
Goto Q
Loop
End
شبیه ساز پروتوس[/code]؛
![[تصویر: vbgztoc67y4pzvw8hfu.jpg]](http://www.niloblog.com/files/images/vbgztoc67y4pzvw8hfu.jpg)
اینم برنامه نوشته به زبان بیسیک و فایل شبیه سازی شدن در پروتوس برای دانلود؛
دانلود پروژه
نقل قول: سلام به همه مندسان؛
منم یه برنامه بدون تایمر نوشتم ولی نمی دونم تا چه حدی درسته؟
ممنون میشم اشکالات رو بگید؛
ببین دوسته من از If برای اینکارا استفاده نکن.واسه اینکه اگه اون کلید رو یک بار ولی به یک مدتی بگیری همش به متغیر اضافه میکنه.حداقل از دستور Debounce استفاده میکردی بهتر بود.
موفق باشی...
(۰۵-شهریور-۱۳۹۱, ۱۸:۳۰:۲۸)h.unique نوشته است: [ -> ]نقل قول: سلام به همه مندسان؛
منم یه برنامه بدون تایمر نوشتم ولی نمی دونم تا چه حدی درسته؟
ممنون میشم اشکالات رو بگید؛
ببین دوسته من از If برای اینکارا استفاده نکن.واسه اینکه اگه اون کلید رو یک بار ولی به یک مدتی بگیری همش به متغیر اضافه میکنه.حداقل از دستور Debounce استفاده میکردی بهتر بود.
موفق باشی...
ممنون حسین جان
درسته با if نمی شه محدودش کرد!
اصلاحش می کنم،ببینید درسته...
با تشکر از دوستان و معذرت بخاطر اینکه خیلی سوال کردم و کمتر خودم کار کردم.فقط یک سوال برای استفاده از لیزر باید در برنامه تاخیر یا debounce قرار داد. و دیگه اینکه h.unique عزیز در برنامه ای که قرار دادند از if استافده کردند میخوام بدونم اشکالی داره با if یعنی این مشکلی که گفتید باعث میشه نشه از این برنامه در عمل و با سنسور استفاده کرد ؟ ممنون
ببین دوسته گلم وقتی از if استفاده میکنی اگه کلید رو بزنی و تو if به یک متغیر یک واحد اضافه کنی کافیه که برنامه یکبار از اول اجرا شه و شما کلید رو رها نکرده باشین برنامه هم هر موقع که به if رسید یک واحد دیگه اضافه میکنه.
حالا شما اینو تصور کن که اگه یک لیموزین از جلو سنسور هات رد شد برنامه حداقل 100تا به متغیر اضافه میکنه!در صورتی که فقط 1 ماشین رد شده ولی میکرو احساس میکنه 100تا رد شده.
ولی در کانتر به مدت زمانی که یک پایه 1 یا 0 شه کاری نداره اون فقط به لبه های بالا رونده یا پایین رونده کار داره.
حله؟
(۰۷-شهریور-۱۳۹۱, ۱۲:۳۱:۴۳)h.unique نوشته است: [ -> ]ببین دوسته گلم وقتی از if استفاده میکنی اگه کلید رو بزنی و تو if به یک متغیر یک واحد اضافه کنی کافیه که برنامه یکبار از اول اجرا شه و شما کلید رو رها نکرده باشین برنامه هم هر موقع که به if رسید یک واحد دیگه اضافه میکنه.
حالا شما اینو تصور کن که اگه یک لیموزین از جلو سنسور هات رد شد برنامه حداقل 100تا به متغیر اضافه میکنه!در صورتی که فقط 1 ماشین رد شده ولی میکرو احساس میکنه 100تا رد شده.
ولی در کانتر به مدت زمانی که یک پایه 1 یا 0 شه کاری نداره اون فقط به لبه های بالا رونده یا پایین رونده کار داره.
حله؟
با تشکر از شما . یعنی با این حساب باید بی خیال کانتر بشیم؟ از چی باید استفاده کرد؟ میشه لحظه اول که مثلا لبه بالا رونده تحریک شد یک تاخیر بدیم بعد دوباره کانتر بخونه که تو این زمان مایشن رد شده باشه ؟ این دیبانس یادمه مثلا واسه این بود که مثلا موقعی که میخوایم سوئیچی رو فشار بدیم لغزشهای دست دیگه شمرده نشه اگر درسته اینو باید تو دستورات کانتر استفاده کرد یا نه ؟ممنون میشم بگید برای حل مشکل چه روشی درسته
ببین عزیز دله من.
کانتر به مدت زمانی که یک پایه 1 میشه یا 0 میشه کاری نداره.
وقتی شما کانتر رو با لبه بالا رونده کانفیگ میکنی هر موقع پایه از 0 به 1 تغیر کرد 1 واحد به ریجستر خودش اضافه میکنه.کانتر کاری با زمان 0 یا 1 شدن یک پایه نداره.یعنی اگه پایه 0 هستش بعد اونو 1 کردی میتونی کلید رو تا 1000000000.....سال دیگه بگیری اون فقط به ازای هر بار که پایه 1 شد 1واحد به ریجستر خودش اضافه میکنه.
حله؟
با تشکر از شما .ببینید من منظور شما رو متوجه شدم سوال من اینکه را حل چی هست؟آیا باید کانتر رو کنار بذاریم ؟یا با تاخیر میشه این مشکل رو حل کرد؟پیشنهاد شما چی ست ؟ ممنون
با تاخیر هم میشه ولی زیاد قابل اعتماد نیس.
من همون کانتر رو پیشنهاد میکنم.
ممنون از شما .فقط اگر قرار باشه از کانتر استفاده کنیم پس این مشکلی که گفتید یعنی اینکه ممکنه چند بار بشمره د حالی که فقط باید یک بار بشمره رو چطور حل کنیم ؟