در برنامه نویسی میکرو avr توسط bascom ، در دستور if چه طور می شه چند تا شرط رو با هم نوشت که اگه همش درسته بره چند تا کار رو انجام بده؟
بین شرط ها and گذاشتم ولی جواب نداد :sad:
با تشکر
زندگی تاس خوب آوردن نیست ، تاس بد را خوب بازی کردن است
درسته اینطوری جواب میده
ولی من هم یه مدت مشکل داشتم به ورژن بیسکام هم ربط داره و وضعیت صور فلکی ... نمیدونم چرا ولی ربط داره
ولی الان 10 تا and هم مینویسم درست کار میکنه
منم همین کار رو می کنم ولی کلی error می ده :sad:
ممکنه بگین ایراد برنامه زیر چیه؟
مرسی
.................................................. .....
$regfile = "m32def.dat"
$crystal = 4000000
Config Porta = Input
Config Portb = Output
Do
If Pina.0 = 1 And Pina.1 = 0 And Pina.2 = 0 Then
Portb.1 = 1 And Portb.2 = 1
Else If Pina.0 = 1 And Pina.1 = 1 And Pina.2 = 1 Then
Portb.1 = 1 And Portb.2 = 1
Else If Pina.0 = 0 And Pina.1 = 1 And Pina.2 = 1 Then
Portb.1 = 1 And Portb.2 = 1
Else If Pina.0 = 0 And Pina.1 = 0 And Pina.2 = 0 Then
Portb.1 = 1 And Portb.2 = 0
Else If Pina.0 = 1 And Pina.1 = 0 And Pina.2 = 1 Then
Portb.1 = 0 And Portb.2 = 1
Else If Pina.0 = 0 And Pina.1 = 0 And Pina.2 = 1 Then
Portb.1 = 0 And Portb.2 = 1
Else If Pina.0 = 1 And Pina.1 = 0 And Pina.2 = 0 Then
Portb.1 = 1 And Portb.2 = 0
Else If Pina.0 = 0 And Pina.1 = 1 And Pina.2 = 0 Then
Portb.1 = 1 And Portb.2 = 0
End If
Loop
End
این برنامه که کلی ایراد داره (شاید دستی نوشتی ولی غلط ویرایشی داره)
1. elseif سرهمه و space نمیخواد
2. Portb.1 = 1 And Portb.2 = 0 این یعنی چی؟ (خط بعد if ها نوشتید)
اگه میخواید تحت شرایطی کاری دو پین رو یک کنید باید اینطوری بنویسید:
Portb.1 = 1
Portb.2 = 1
نه Portb.1 = 1 And Portb.2 = 1
اینا رو توی برنامتون مارک کردم:
$regfile = "m32def.dat"
$crystal = 4000000
Config Porta = Input
Config Portb = Output
Do
If Pina.0 = 1 And Pina.1 = 0 And Pina.2 = 0 Then Portb.1 = 1 And Portb.2 = 1
Else If Pina.0 = 1 And Pina.1 = 1 And Pina.2 = 1 Then Portb.1 = 1 And Portb.2 = 1
Else If Pina.0 = 0 And Pina.1 = 1 And Pina.2 = 1 Then Portb.1 = 1 And Portb.2 = 1
Else If Pina.0 = 0 And Pina.1 = 0 And Pina.2 = 0 Then Portb.1 = 1 And Portb.2 = 0
Else If Pina.0 = 1 And Pina.1 = 0 And Pina.2 = 1 Then Portb.1 = 0 And Portb.2 = 1
Else If Pina.0 = 0 And Pina.1 = 0 And Pina.2 = 1 Then Portb.1 = 0 And Portb.2 = 1
Else If Pina.0 = 1 And Pina.1 = 0 And Pina.2 = 0 Then Portb.1 = 1 And Portb.2 = 0
Else If Pina.0 = 0 And Pina.1 = 1 And Pina.2 = 0 Then Portb.1 = 1 And Portb.2 = 0
End If
Loop
End
اینم معادل برنامه با حجم حافظه مصرفی پایین
$regfile = "m32def.dat"
$crystal = 4000000
Config Porta = Input
Config Portb = Output
Dim K As Byte
Do
K = Porta
Select Case K
Case 1
Portb.1 = 1
Portb.2 = 1
Case 6
Portb.1 = 1
Portb.2 = 1
Case 7
Portb.1 = 1
Portb.2 = 1
Case 0
Portb.1 = 1
Portb.2 = 0
Case 5
Portb.1 = 0
Portb.2 = 1
Case 4
Portb.1 = 0
Portb.2 = 1
Case 2
Portb.1 = 1
Portb.2 = 0
End Select
Loop
End
اگه مردم می دونستن زمان چقدر با ارزشه دیگه هیچ وقت کفش بند دار نمی خریدن البرت انیشتن
سلام
من برنامه زیر رو نوشتم تو پروتیوس اجرا می شه ولی هروجی اونی که می خوام نیست!!!!!!!!!!!
تو این برنامه یک سنسور دما با پتانسیومتر شبیه سازی شده و به adc0 میکرو دادم تا خروجی روی lcd نمایش داده شود، وقتی اجرا میکم فقط یک عدد 1023رو نمایش میده یه طور ثابت،یعنی وقتی مقدار پتانسیومتر رو عوض می کردم خروچی همینی که هست می مونه و تغییر نمیکنه!!!!!!!!
چه کار کنم؟
برنامه رو در زیر گذاشتم ،مممنون می شم گه ایرادی داره کمکم کنین .
با تشکر
$regfile = "m32def.dat"
$crystal = 1000000
Config Portd.0 = Output
Config Lcdpin = Db7 = Portb.7 , Db6 = Portb.6 , Db5 = Portb.5 , _
Db4 = Portb.4 , E = Portb.3 , Rs = Portb.2
Config Adc = Single , Prescaler = Auto
Dim In_0 As Word
Start Adc
Do
In_0 = Getadc(0)
Cls
Home
Lcd In_0
Waitms 100
Loop
End
زندگی تاس خوب آوردن نیست ، تاس بد را خوب بازی کردن است
[quote author=MARAL_7133 link=topic=28264.msg137980#msg137980 date=1242423729]
................
وقتی اجرا میکم فقط یک عدد 1023رو نمایش میده به طور ثابت................
[quote]
با سلام
یه احتمال :
نمایش عدد 1023 ، یعنی اینکه یا ورودی A/D ، مقدار حد اکثر ولتاژ ( 5 ولت ) رو داره ، یعنی ، دو سر کناری پتانسیومتر ، به gnd و vcc و سر وسط پتانسیومتر ، به پین ورودی میکرو ، وصل نیست
سلام
این برنامه رو بنویس جواب میده:
$regfile = "m32def.dat"
$crystal = 1000000
Config Lcdpin = Pin , Db4 = Pinb.4 , Db5 = Pinb.5 , Db6 = Pinb.6 , Db7 = Pinb.7 , Rs = Pinb.2 , E = Pinb.3
Config Lcd = 16 * 2
Dim A As Word
Dim B As Single
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Enable Adc
Enable Interrupts
On Adc Show
Start Adc
Do
(A = Getadc(0
Loop
End
Show:
B = A * 0.0048828125
Cls
"lcd "dama is
Locate 2 , 1
("#.##",Lcd Fusing(b
Waitms 200
Return
$regfile = "m32def.dat"
$crystal = 1000000
Config Lcdpin = Pin , Db4 = Pinb.4 , Db5 = Pinb.5 , Db6 = Pinb.6 , Db7 = Pinb.7 , Rs = Pinb.2 , E = Pinb.3
Config Lcd = 16 * 2
Dim A As Word
Dim B As Single
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Enable Adc
Enable Interrupts
On Adc Show
Start Adc
Do
A = Getadc(0)
Loop
End
Show:
B = A * 0.0048828125
Cls
Lcd "ADC0 VOLTAGe IS="
Locate 2 , 1
Lcd Fusing(b , "#.##"
Waitms 200
Return
پایه ی Aref و Avcc رو به هم وصل کن و بعد به 5 ولت وصلش کن .
پایه ی porta.0 رو هم با یک پتانسیومتر به 5 ولت وصل کن
درسته اینطوری جواب میده
ولی من هم یه مدت مشکل داشتم به ورژن بیسکام هم ربط داره و وضعیت صور فلکی ... نمیدونم چرا ولی ربط داره
ولی الان 10 تا and هم مینویسم درست کار میکنه
علی جان به نظر من به زمین و اسمون ربط نداره من یه بار یه برنامه داشتم که 2 3 هزار تایی hf و اگر وشاید داشت و میکرو هنگ میکرد یا درست کار نمیکرد با دست کاری کردت استک و پشته درست شد.حالا شاید مشکل دوستمون هم همین باشه
$framesize = 16
$hwstack = 24
$swstack = 16
سلام
ممنون از همگی
اشتباه زشتی کرده بودم!!!!!!!! :redface:
AREF و AVCC رو یادم رفته بود وصل کنم :redface:
حالا اگه بخوام یک معادله ریاضی بهش اضافه کنم از چه دستوری باید استفاده کنم؟
یعنی مقداری که توسط ADC گرفته می شه تو یک معادله ریاضی قرار بگیره و بعد جواب رو روی LCD نشون بده.
زندگی تاس خوب آوردن نیست ، تاس بد را خوب بازی کردن است
دیدگاه