ايران ويج

نسخه‌ی کامل: سوالهای برنامه نویسی با کامپایلر BASCOM
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
صفحه‌ها: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
سلام به همگیQuestion
من میخوام با Bascom یه برنامه بنویسم اولین بارمه و زیاد بلد نیستمAmaze
صورت سوال اینه:
ساعت روی lcd نمایش داده بشه و و هنگامی که b.2 زده میشه امکان تنظیم ساعت از روی کامپیوتر فراهم بشه
ارتباط سریال 2 سیمه هست!!و از پروتیوس برای شبیه سازیش کمک گرفتم
من برنامه را نوشتم اما ارور داره نمیتونم مشکلشو بفهممSad
ممنون میشم اگه کسی بگه ارورش چیه
کد:
$regfile = "m32def.dat"
$crystal = 8000000
Config Portc = Output
Config Lcd = 16 * 2
Config Lcdbus = 4
Config Lcdpin = Pin , Rs = Portc.0 , E = Pinc.2 , Db4 = Pinc.4 , Db5 = Pinc.5 , Db6 = Pinc.6 , Db7 = Pinc.7
Config Clock = Soft

$baud = 9600
Enable Interrupts
Cls : Home
Main:
Do
Home = Led Time$ = "12.00.00"
Debounce Pinb.4 , 0 , Set Time
Loop
Set Time:
Cls : Home : Lcd "set time with"
Input " <hh:mm:ss> " , A
Time$ = A
Goto Main
اولین مشکلی که هست اینه که نباید از اسم های حساس به جای اسم زیر برنامه استفاده کنین
دوم اینکه به نظر من یه جور دیگه این کارو بکنین شاید جواب بده
بیایان سه تا متغییرsec,min.hour رو از کامپیوتر بگیرین
و بعد با دستورات
کد php:
-sec=sec
-min=min
-hour=hour 
اعداد این متغییر ها رو به عنوان عدد اولیه rtcداخلی بزارین تا با اون شروع کنه
با این یه تست بکنین
فقط باید اعداد متغییر ها با اختلاف 2 ثانیه ارسال بشن
کد php:
$regfile "m32def.dat"
$crystal 8000000
$baud 
9600
Config Portc 
Output
Config Lcd 
16 2
Config Lcdbus 
4
Config Lcdpin 
Pin Rs Portc.0 Pinc.2 Db4 Pinc.4 Db5 Pinc.5 Db6 Pinc.6 Db7 Pinc.7
Config Clock 
Soft
Enable Interrupts
Dim Meen 
As Byte Seco As Byte Hour As Byte
Cls 
Home
Main
:
Do
Time$ = "02:20:00"
Debounce Pinb.4 Mehrdad
Loop
mehrdad
:
Do
Meen Waitkey()
Seco Waitkey()
Hour Waitkey()
 
_sec Seco
 _min 
Meen
 _hour 
Hour
Loop
end 
'end program 

در ضمن تو این میکرو وقتی کریستال رو 8 مگ معرفی کردین
بهتره تو خود پروتئوسم کریستالو براین رو 8
در ضمن مطمئن نیستم ولی فکر کنم بشه اون کلیدرو بعدشو پول آپ کرد
نقل قول: يه سري مشكلات ابتدايي دارم كه چون نمي خوام تاپيك هاي اينطوري زياد بزنم ، سوالاتم رو تو اين تاپيك مطرح مي كنم. ممنون مي شم كمك كنيد...
----------------------------------------------
1-برنامه ي يه پروژه ي ساده رو با بسكام نوشتم و بعد تو پروتوس شبيه سازي كردم . اما نتيجه ي دلخواه رو نداد.
يعني روي سومين دستور BITWAIT ايست نمي كنه !!!
فايل هاي .bas و .hex و .dsn رو در لينك زير گذاشتم.

http://www.4shared.com/file/1Q1TIntr/character_LCD.html


2 برنامه نويسي هست كه نتيجه ي هر 2 مشابه است !!
با BITWAIT اول و دوم مشكلي نداره ، اما با سومي ...
بنظرم اگر پروتوس مشكلي نداشته باشه ، تنها زماني همچين اتفاقي مي يفته كه دستورات از BITWAIT دوم تا آخر همگي در يك پالس ساعت انجام بشن !!!
ممنون مي شم كمك كنيد...
دوست عزیز بهتره برنامه شامل یه اسکلت قابل فهم باشه
و شامل یه حلقه
کد:
Main:
Do
.
.
.
Loop
End program

شما که توی هلپ بسکام نگاه کنید میبینید که برای ال سی دی پاره ها رو به port تعریف کرده .اینجوری:
کد:
Config Lcdpin = Pin , Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6 , Db7 = Porta.7 , E = Portc.7 , Rs = Portc.6

در صورتی که شما با pin تعریف کردید :
کد:
Config Lcdpin = Pin , Db4 = Pina.0 , Db5 = Pina.1 , Db6 = Pina.2 , Db7 = Pina.3 , Rs = Pina.4 , E = Pina.5

جدا از مبحث 4 پین یا 8 پین درایو کردن ال سی دی

بهتره قبل از نوشته روی ال سی دی اول ال سی دی رو پاک کنید تا اطلاعات روی هم نوشته نشه ، در غیر این صورت اطلاعات پشت سر هم قرار میگیره و بعد از تموم کردن سطر اول ، به سطر دوم میره
کد:
Cls

نکته دیگه این که:
هر وقت از پورتی استفاده میکنید در صورتی که پورت به صورت خروجی تعریف شده باشه ، اول برنامه روی پورت صفر بریزید
در صورتی که پورت رو ورودی تعریف کردین ، روی پورت 1 بریزید .چرا؟
چون این جوری مقاومت بالاکش پورت رو فعال میکنید و باعث جلو گیری از خوندن اطلاعات اشتباه از پورت توسط میکرو میشید

نقل قول: 2-فرق بين PORTA.0 و PINA.0 چي هست ؟؟
( گاهي اوقات به اشتباه جاي همديگه استفاده مي كنم :دي )
در صورتی که پورت مورد نظر خروجی تعریف شده باشه و بخوایم روش اطلاعاتی بریزیم ازport استفاده میکنیم
البته برای خروجی تعریف کردن پورت ها هم از port استفاده میکنیم

در صورتی که بخویام از پورت میکرو اطلاعاتی بخونیم ،اون پایه رو باید ورودی تعریف کنیم دیگه
در این صورت باید برای کار کردن از پورت های مورد نظر از pin استفاده میکنیم

نقل قول: -------------------------------------------
3-پروتوس با دستور WAIT... چه مشكلي داره ؟؟
هر وقت مقداري بيشتر از 1ms استفاده كردم ، جواب نداد ( يعني زمان اش نگذشت )
این که مال شبیه سازیه
وقتی میخواین برنامه ای رو که نوشتید شبیه سازی کنید برای اینکه میکرو توی تاخیر ها نمونه باید از دستور زیر استفاده کنید
کد:
$Sim

موقع پروگرام کردن حواستون باشه قبل از کامپایل کردن این خط دستور رو پاک کنید



داداش کرکتری که طراحی کردی چه شکلی اون مشکل داره
بعد طرحت یک cls بزار بین هر نمایش یک تایم انتظار بزار waitms 500
ببین درست میشه
نقل قول: شما که توی هلپ بسکام نگاه کنید میبینید که برای ال سی دی پاره ها رو به port تعریف کرده .اینجوری:
ممنون از جوابتون.
حقيقت اش بعد از مدت زيادي كه يه كلياتي از ميكرو ها و ساختار و ... شون پيدا كردم ، حدود 2 روز كه با كتاب آموزشيي كه آقاي 1nafar گذاشته ، شروع به يادگيريه بسكام و ... كردم .

اين code هايي كه مي نويسم فقط جهت تمرين و كسب تجربست ...
در اون آموزشي هم كه باهاش دارم مي رم جلو ، همرو با pin نوشته بود. اما گفته ي شما صحيحه ، تو help بسكام با port گفته شده ...
البته بايد بگم با pin جواب گرفتم و مشكلي نداشت . ( مشكل رو فهميدم از كجا بود. تو پست بعديم اونطرف توضيح دادم. )

نقل قول: هر وقت از پورتی استفاده میکنید در صورتی که پورت به صورت خروجی تعریف شده باشه ، اول برنامه روی پورت صفر بریزید
در صورتی که پورت رو ورودی تعریف کردین ، روی پورت 1 بریزید .چرا؟
چون این جوری مقاومت بالاکش پورت رو فعال میکنید و باعث جلو گیری از خوندن اطلاعات اشتباه از پورت توسط میکرو میشید
مي شه بيشتر توضيح بديد ...
منظورتون از port0 و port 1 چي هست ؟؟
مقاومت بالاكش پورت چي هست ؟؟ فعال شدنش چه معنيي مي ده ؟

نقل قول: داداش کرکتری که طراحی کردی چه شکلی اون مشکل داره
بعد طرحت یک cls بزار بین هر نمایش یک تایم انتظار بزار waitms 500
ببین درست میشه

ايول داداشي .
درست شد . نكته اش همون cls بود.
البته خط آخر كاراكتري رو كه طراحي كردم نشون نميده . كاراكتر ه حرف " ي " بود :دي
tanx.
نقل قول: البته بايد بگم با pin جواب گرفتم و مشكلي نداشت . ( مشكل رو فهميدم از كجا بود. تو پست بعديم اونطرف توضيح دادم. )
میشه یه نمونه از اون کدها رو بذارین
راستش من کتاب 1nafar جان رو نخوندم

نقل قول: مي شه بيشتر توضيح بديد ...
منظورتون از port0 و port 1 چي هست ؟؟
مقاومت بالاكش پورت چي هست ؟؟ فعال شدنش چه معنيي مي ده ؟

اصلاح میکنم:
هر وقت از پورتی استفاده میکنید در صورتی که پورت به صورت خروجی تعریف شده باشه ، اول برنامه روی پورت ،مقدار صفر بریزید
در صورتی که پورت رو ورودی تعریف کردین ، روی پورت ،مقدار1 بریزید .چرا؟
چون این جوری مقاومت بالاکش پورت رو فعال میکنید و باعث جلو گیری از خوندن اطلاعات اشتباه از پورت توسط میکرو میشید

منظورم از مقاومت های بالاکش همون مقاومت هاییه که توی پروتئوس کشیدی

اگر كتابشون رو دانلود كرديد صفحه ي 25 اش رو نگاه كنيد.
اين فايلي هم كه پيوست كردم ، همون برنامه قبليه هست كه مشكلاتش به كمك شما و حامد خان حل شد ( در اون قسمت جاي port از pin استفاده شده )... :دي

نقل قول: هر وقت از پورتی استفاده میکنید در صورتی که پورت به صورت خروجی تعریف شده باشه ، اول برنامه روی پورت ،مقدار صفر بریزید
در صورتی که پورت رو ورودی تعریف کردین ، روی پورت ،مقدار1 بریزید .چرا؟
چون این جوری مقاومت بالاکش پورت رو فعال میکنید و باعث جلو گیری از خوندن اطلاعات اشتباه از پورت توسط میکرو میشید
مي شه يه نمونه ي كوچولو بذاري ؟؟ فكر كنم آخر شبي ضريب هوشيم اومده پايين :دي ، IQ ضعيفه ديگه :دي

تشكر تشكر.
موفق باشيد.
يا علي.
نقل قول: اصلاح میکنم:
هر وقت از پورتی استفاده میکنید در صورتی که پورت به صورت خروجی تعریف شده باشه ، اول برنامه روی پورت ،مقدار صفر بریزید
در صورتی که پورت رو ورودی تعریف کردین ، روی پورت ،مقدار1 بریزید .چرا؟
چون این جوری مقاومت بالاکش پورت رو فعال میکنید و باعث جلو گیری از خوندن اطلاعات اشتباه از پورت توسط میکرو میشید

آها ... ، حالا فهميدم منظورتون چيه !!! :دي
گفتم كه ديشب ...
بله ، اين هم نكته ي خوبيه ...
ممنون.
سلام
من با برنامه اي كه نوشتم موتور dc رو از راه دور كنترل ميكنم(چپ گرد وراست گرد) من ميدونم كه براي كنترل سرعت موتور بايد ازpwm استفاده كنم
ولي نميدونم بايد برنامشو چه جوري بنويسم؟
لطفا كمكم كنيد
ممنون
سلام.
چرا هر وقت به جاي دستور dim x as byte از دستور defbyte x استفاده مي كنم ،‌ بسكام از برنامه ام ايراد مي گيره ؟؟!!

پيشاپيش از جواب اتون ممنونم .

کد:
$regfile = "m16def.dat"
$crystal = 12000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.4 , Rs = Portd.5
Defbyte A
Defbyte B
A = 10
b = 20
Cls
Swap A , B
Locate 1 , 1
Lcd A
Locate 2 , 1
Lcd B
End

----------------------------
راستي قبلا گفتم كه در كتاب آقاي 1nafar كه LCD رو به صورت زير كانفيگ كرده ...
... , config lcdpin = pin , db4=pind.0

اما در ادامه ي اون از همون فرمي كه در help استفاده شده ، استفاده كردن ،‌ يعني :
... , config lcdpin = pin , db4=portd.0
احتمالا در صفحه ي 25 ، اشتباه چاپي بوده ، گر چه به صورت pin هم جواب مي ده !!
(۱۵-بهمن-۱۳۸۹, ۰۰:۲۲:۲۸)sharin نوشته است: [ -> ]سلام.
چرا هر وقت به جاي دستور dim x as byte از دستور defbyte x استفاده مي كنم ،‌ بسكام از برنامه ام ايراد مي گيره ؟؟!!

پيشاپيش از جواب اتون ممنونم .

کد:
$regfile = "m16def.dat"
$crystal = 12000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.4 , Rs = Portd.5
Defbyte A
Defbyte B
A = 10
b = 20
Cls
Swap A , B
Locate 1 , 1
Lcd A
Locate 2 , 1
Lcd B
End

----------------------------
راستي قبلا گفتم كه در كتاب آقاي 1nafar كه LCD رو به صورت زير كانفيگ كرده ...
... , config lcdpin = pin , db4=pind.0

اما در ادامه ي اون از همون فرمي كه در help استفاده شده ، استفاده كردن ،‌ يعني :
... , config lcdpin = pin , db4=portd.0
احتمالا در صفحه ي 25 ، اشتباه چاپي بوده ، گر چه به صورت pin هم جواب مي ده !!
برای نام گزاری از دو کاراکتر استفاده کن

Defbyte aA



----
مهم نیست از pin یا port برای شناسایی استفاده کنی

صفحه‌ها: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23