۲۶-آذر-۱۳۹۰, ۱۴:۰۴:۴۹
سلام خدمت همه دوستان و سروران
من همونطوریکه قبلا گفتم تازه با ای وی آر آشنا شدم و توی این مدت تقریبا یک هفته ای شروع کردم به آموختن برنامه نویسی که چند تا برنامه ساده چشمک زن و این جور چیز ها هم نوشتم که توی پروتئوس وقتی شبیه سازی کردم خوب کار کرد.
سوالی که دارم اینه:
من میخوام اتمگا 8 یکی از پین های خودش رو زیر نظر بگیره و وقتی اون پایه set یا 1 شد، یکی از پایه های دیگر خود رو set یا 1 بکنه و بر عکس، برنامش هم نوشتم که اینطوری میشه:
$regfile = "m8def.dat"
$crystal = 1000000
Config Portb.0 = Input
Config Portd.0 = Output
Bitwait Pinb.0 , Set
Set Portd.0
Bitwait Pinb.0 , Reset
Reset Portd.0
End
و همینطوری که اون پایه رو تحت نظر داره میخوام این برنامه رو که در زمانهای مختلف هی بعضی از پایه ها رو 1 و 0 میکنه رو انجام بده. یعنی دو برنامه رو بطور همزمان و جدا از هم!
سوال اینه که آیا میتونم این کار رو بکنم و اگر میتونم لطفا بگید چطوری؟
برنامه ای که گفتم اینه:
$regfile = "m8def.dat"
$crystal = 1000000
Config Portd = Output
Do
Waitms 5
Set Portd.0
Waitms 3600
Set Portd.3
Waitms 1800
Reset Portd.3
Set Portd.1
Waitms 600
Reset Portd.1
Set Portd.2
Waitms 300
Reset Portd.2
Waitms 3600
Set Portd.3
Waitms 1800
Reset Portd.3
Set Portd.1
Waitms 600
Reset Portd.1
Set Portd.2
Waitms 300
Reset Portd.2
Waitms 3600
Set Portd.3
Waitms 1800
Reset Portd.3
Set Portd.1
Waitms 600
Reset Portd.1
Set Portd.2
Waitms 300
Reset Portd.2
Waitms 3600
Set Portd.3
Waitms 1800
Reset Portd.3
Set Portd.1
Waitms 600
Reset Portd.1
Set Portd.2
Waitms 300
Reset Portd.2
Waitms 3600
Set Portd.3
Waitms 1800
Reset Portd.3
Set Portd.1
Waitms 600
Reset Portd.1
Set Portd.2
Waitms 300
Reset Portd.2
Waitms 3600
Set Portd.3
Waitms 1800
Reset Portd.3
Set Portd.1
Waitms 600
Reset Portd.1
Set Portd.2
Waitms 300
Reset Portd.2
Waitms 3600
Set Portd.3
Waitms 1800
Reset Portd.3
Set Portd.1
Waitms 600
Reset Portd.1
Set Portd.2
Waitms 300
Reset Portd.2
Waitms 3600
Set Portd.3
Waitms 1800
Reset Portd.3
Set Portd.1
Waitms 600
Reset Portd.1
Set Portd.2
Waitms 300
Reset Portd.2
Waitms 3600
Set Portd.3
Waitms 1800
Reset Portd.3
Set Portd.1
Waitms 600
Reset Portd.1
Set Portd.2
Waitms 300
Reset Portd.2
Waitms 3600
Set Portd.3
Waitms 1800
Reset Portd.3
Set Portd.1
Waitms 600
Reset Portd.1
Set Portd.2
Waitms 300
Reset Portd.2
Waitms 3600
Set Portd.3
Waitms 1800
Reset Portd.3
Set Portd.1
Waitms 600
Reset Portd.1
Set Portd.2
Waitms 300
Reset Portd.2
Waitms 3600
Set Portd.3
Waitms 1800
Reset Portd.3
Set Portd.1
Waitms 600
Reset Portd.1
Set Portd.2
Waitms 300
Reset Portd.2
Waitms 300
Reset Portd.0
Waitms 3600
Set Portd.3
Waitms 1800
Reset Portd.3
Set Portd.1
Waitms 600
Reset Portd.1
Set Portd.2
Waitms 300
Reset Portd.2
Waitms 3600
Set Portd.3
Waitms 1800
Reset Portd.3
Set Portd.1
Waitms 600
Reset Portd.1
Set Portd.2
Waitms 300
Reset Portd.2
Waitms 3600
Set Portd.3
Waitms 1800
Reset Portd.3
Set Portd.1
Waitms 600
Reset Portd.1
Set Portd.2
Waitms 300
Reset Portd.2
Waitms 3600
Set Portd.3
Waitms 1800
Reset Portd.3
Set Portd.1
Waitms 600
Reset Portd.1
Set Portd.2
Waitms 300
Reset Portd.2
Waitms 3600
Set Portd.3
Waitms 1800
Reset Portd.3
Set Portd.1
Waitms 600
Reset Portd.1
Set Portd.2
Waitms 300
Reset Portd.2
Waitms 3600
Set Portd.3
Waitms 1800
Reset Portd.3
Set Portd.1
Waitms 600
Reset Portd.1
Set Portd.2
Waitms 300
Reset Portd.2
Waitms 3600
Set Portd.3
Waitms 1800
Reset Portd.3
Set Portd.1
Waitms 600
Reset Portd.1
Set Portd.2
Waitms 300
Reset Portd.2
Waitms 3600
Set Portd.3
Waitms 1800
Reset Portd.3
Set Portd.1
Waitms 600
Reset Portd.1
Set Portd.2
Waitms 300
Reset Portd.2
Waitms 3600
Set Portd.3
Waitms 1800
Reset Portd.3
Set Portd.1
Waitms 600
Reset Portd.1
Set Portd.2
Waitms 300
Reset Portd.2
Waitms 3600
Set Portd.3
Waitms 1800
Reset Portd.3
Set Portd.1
Waitms 600
Reset Portd.1
Set Portd.2
Waitms 300
Reset Portd.2
Waitms 3600
Set Portd.3
Waitms 1800
Reset Portd.3
Set Portd.1
Waitms 600
Reset Portd.1
Set Portd.2
Waitms 300
Reset Portd.2
Waitms 3600
Set Portd.3
Waitms 1800
Reset Portd.3
Set Portd.1
Waitms 600
Reset Portd.1
Set Portd.2
Waitms 300
Reset Portd.2
Waitms 300
Loop
End
و سوال آخر اینکه من چطوری زمان تاخیر رو بدم؟ یعنی وقتی مینویسم wait 60 یعنی 60 ثانیه تاخیر انجام بده، ولی فکر میکنم بستگی به فرکانس میکرو هم داره ، درسته؟ یعنی من اگه بخوام تاخیر 60 ثانیه ای انجام بشه در این فرکانس و این برنامه باید چی بنویسم؟
ببخشید سوال هام زیاد شدند. امیدوارم کمکم کنید.
با تشکر
من همونطوریکه قبلا گفتم تازه با ای وی آر آشنا شدم و توی این مدت تقریبا یک هفته ای شروع کردم به آموختن برنامه نویسی که چند تا برنامه ساده چشمک زن و این جور چیز ها هم نوشتم که توی پروتئوس وقتی شبیه سازی کردم خوب کار کرد.
سوالی که دارم اینه:
من میخوام اتمگا 8 یکی از پین های خودش رو زیر نظر بگیره و وقتی اون پایه set یا 1 شد، یکی از پایه های دیگر خود رو set یا 1 بکنه و بر عکس، برنامش هم نوشتم که اینطوری میشه:
$regfile = "m8def.dat"
$crystal = 1000000
Config Portb.0 = Input
Config Portd.0 = Output
Bitwait Pinb.0 , Set
Set Portd.0
Bitwait Pinb.0 , Reset
Reset Portd.0
End
و همینطوری که اون پایه رو تحت نظر داره میخوام این برنامه رو که در زمانهای مختلف هی بعضی از پایه ها رو 1 و 0 میکنه رو انجام بده. یعنی دو برنامه رو بطور همزمان و جدا از هم!
سوال اینه که آیا میتونم این کار رو بکنم و اگر میتونم لطفا بگید چطوری؟
برنامه ای که گفتم اینه:
$regfile = "m8def.dat"
$crystal = 1000000
Config Portd = Output
Do
Waitms 5
Set Portd.0
Waitms 3600
Set Portd.3
Waitms 1800
Reset Portd.3
Set Portd.1
Waitms 600
Reset Portd.1
Set Portd.2
Waitms 300
Reset Portd.2
Waitms 3600
Set Portd.3
Waitms 1800
Reset Portd.3
Set Portd.1
Waitms 600
Reset Portd.1
Set Portd.2
Waitms 300
Reset Portd.2
Waitms 3600
Set Portd.3
Waitms 1800
Reset Portd.3
Set Portd.1
Waitms 600
Reset Portd.1
Set Portd.2
Waitms 300
Reset Portd.2
Waitms 3600
Set Portd.3
Waitms 1800
Reset Portd.3
Set Portd.1
Waitms 600
Reset Portd.1
Set Portd.2
Waitms 300
Reset Portd.2
Waitms 3600
Set Portd.3
Waitms 1800
Reset Portd.3
Set Portd.1
Waitms 600
Reset Portd.1
Set Portd.2
Waitms 300
Reset Portd.2
Waitms 3600
Set Portd.3
Waitms 1800
Reset Portd.3
Set Portd.1
Waitms 600
Reset Portd.1
Set Portd.2
Waitms 300
Reset Portd.2
Waitms 3600
Set Portd.3
Waitms 1800
Reset Portd.3
Set Portd.1
Waitms 600
Reset Portd.1
Set Portd.2
Waitms 300
Reset Portd.2
Waitms 3600
Set Portd.3
Waitms 1800
Reset Portd.3
Set Portd.1
Waitms 600
Reset Portd.1
Set Portd.2
Waitms 300
Reset Portd.2
Waitms 3600
Set Portd.3
Waitms 1800
Reset Portd.3
Set Portd.1
Waitms 600
Reset Portd.1
Set Portd.2
Waitms 300
Reset Portd.2
Waitms 3600
Set Portd.3
Waitms 1800
Reset Portd.3
Set Portd.1
Waitms 600
Reset Portd.1
Set Portd.2
Waitms 300
Reset Portd.2
Waitms 3600
Set Portd.3
Waitms 1800
Reset Portd.3
Set Portd.1
Waitms 600
Reset Portd.1
Set Portd.2
Waitms 300
Reset Portd.2
Waitms 3600
Set Portd.3
Waitms 1800
Reset Portd.3
Set Portd.1
Waitms 600
Reset Portd.1
Set Portd.2
Waitms 300
Reset Portd.2
Waitms 300
Reset Portd.0
Waitms 3600
Set Portd.3
Waitms 1800
Reset Portd.3
Set Portd.1
Waitms 600
Reset Portd.1
Set Portd.2
Waitms 300
Reset Portd.2
Waitms 3600
Set Portd.3
Waitms 1800
Reset Portd.3
Set Portd.1
Waitms 600
Reset Portd.1
Set Portd.2
Waitms 300
Reset Portd.2
Waitms 3600
Set Portd.3
Waitms 1800
Reset Portd.3
Set Portd.1
Waitms 600
Reset Portd.1
Set Portd.2
Waitms 300
Reset Portd.2
Waitms 3600
Set Portd.3
Waitms 1800
Reset Portd.3
Set Portd.1
Waitms 600
Reset Portd.1
Set Portd.2
Waitms 300
Reset Portd.2
Waitms 3600
Set Portd.3
Waitms 1800
Reset Portd.3
Set Portd.1
Waitms 600
Reset Portd.1
Set Portd.2
Waitms 300
Reset Portd.2
Waitms 3600
Set Portd.3
Waitms 1800
Reset Portd.3
Set Portd.1
Waitms 600
Reset Portd.1
Set Portd.2
Waitms 300
Reset Portd.2
Waitms 3600
Set Portd.3
Waitms 1800
Reset Portd.3
Set Portd.1
Waitms 600
Reset Portd.1
Set Portd.2
Waitms 300
Reset Portd.2
Waitms 3600
Set Portd.3
Waitms 1800
Reset Portd.3
Set Portd.1
Waitms 600
Reset Portd.1
Set Portd.2
Waitms 300
Reset Portd.2
Waitms 3600
Set Portd.3
Waitms 1800
Reset Portd.3
Set Portd.1
Waitms 600
Reset Portd.1
Set Portd.2
Waitms 300
Reset Portd.2
Waitms 3600
Set Portd.3
Waitms 1800
Reset Portd.3
Set Portd.1
Waitms 600
Reset Portd.1
Set Portd.2
Waitms 300
Reset Portd.2
Waitms 3600
Set Portd.3
Waitms 1800
Reset Portd.3
Set Portd.1
Waitms 600
Reset Portd.1
Set Portd.2
Waitms 300
Reset Portd.2
Waitms 3600
Set Portd.3
Waitms 1800
Reset Portd.3
Set Portd.1
Waitms 600
Reset Portd.1
Set Portd.2
Waitms 300
Reset Portd.2
Waitms 300
Loop
End
و سوال آخر اینکه من چطوری زمان تاخیر رو بدم؟ یعنی وقتی مینویسم wait 60 یعنی 60 ثانیه تاخیر انجام بده، ولی فکر میکنم بستگی به فرکانس میکرو هم داره ، درسته؟ یعنی من اگه بخوام تاخیر 60 ثانیه ای انجام بشه در این فرکانس و این برنامه باید چی بنویسم؟
ببخشید سوال هام زیاد شدند. امیدوارم کمکم کنید.
با تشکر