PDA

View Full Version : یادگیری اتمل استودیو



KING AMIN
دوشنبه 02 بهمن 1391, 22:45 عصر
سلام
ما یه میکرو داریم یه led و یه کلید که led به پورتa وکلید به پورت d وصله
می خوام ب زدن کلید led روشن شه
با تشکر

farzadsw
چهارشنبه 04 بهمن 1391, 00:00 صبح
به نظر من ، قدم اول یاد گیری عملیات باینری در C هست. من چند تا از پر کاربردهاش رو می گم :

عمل OR : دو عدد رو بیت به بیت با هم OR می کنه. مثال:
A = 0x05 | 0xF2
اینجا | عملگر OR هست و مقدار A برابر OR بیت به بیت دو عدد 0x05,0xFF میشه. خود 0x مشخص میکنه که این عدد در مبنای هگز یا شانزده هست (نه مبنای 10). عدد هگز رو میشه به سادگی به صورت باینری (مبنای 2) تبدیل کرد، کافیه هر رقم هگز رو به 4 رقم باینری معادلش بنویسید. مثلا 5 هگز میشه 0101 و F هگز میشه 1111 . بنابراین 0xF2=11110010 , 0x05=00000101 خواهد بود. اگر این عددها بیت به بیت OR بشن حاصل 0xF5 میشه.

عملAND : مشابه قبلی ولی بیت به بیت با هم AND میشن. عملگرش رو با & نشون می دن. مثلا 0x18=0x18 & 0xFF

عمل NOT: بیت به بیت قرینه میکنه . با ~ نشون میدن.
----------------------------------------------------------------
خب در مورد سوال شما، فرض کنیم LED به پایه A.3 و کلید به پایه D.6 ,وصله. برنامه به این صورت میشه:
PORTA |= (~(PIND>>6)&0x01)<<3
البته این کار رو میشه به چند روش مختلف دیگه هم انجام داد (مثل استفاده از شرط و یا استفاده از عدد ثابت به جای شیفت دادن) ولی این طریق کد نوشتن 3 تا مزیت داره. اولا تعداد خطوط برنامه میاد پایین و معمولا برنامه هم سریعتر میشه ، ثانیا تغییر کد ساده هست (مثلا اگر کلید به پایه D.2 وصل بشه، کافیه 6 رو بکنید 2) و ثالثا تو خوندن کد بقیه مشکلی نخواهید داشت (اکثرا همینطوری کد می نویسن).
سعی کنید این یک خط کد رو خوب درک کنید، چون بعدا از این جور کد ها زیاد خواهید دید.

SEZAR.CO
چهارشنبه 04 بهمن 1391, 19:09 عصر
به نظر من ، قدم اول یاد گیری عملیات باینری در C هست. من چند تا از پر کاربردهاش رو می گم :

عمل OR : دو عدد رو بیت به بیت با هم OR می کنه. مثال:
A = 0x05 | 0xF2
اینجا | عملگر OR هست و مقدار A برابر OR بیت به بیت دو عدد 0x05,0xFF میشه. خود 0x مشخص میکنه که این عدد در مبنای هگز یا شانزده هست (نه مبنای 10). عدد هگز رو میشه به سادگی به صورت باینری (مبنای 2) تبدیل کرد، کافیه هر رقم هگز رو به 4 رقم باینری معادلش بنویسید. مثلا 5 هگز میشه 0101 و F هگز میشه 1111 . بنابراین 0xF2=11110010 , 0x05=00000101 خواهد بود. اگر این عددها بیت به بیت OR بشن حاصل 0xF5 میشه.

عملAND : مشابه قبلی ولی بیت به بیت با هم AND میشن. عملگرش رو با & نشون می دن. مثلا 0x18=0x18 & 0xFF

عمل NOT: بیت به بیت قرینه میکنه . با ~ نشون میدن.
----------------------------------------------------------------
خب در مورد سوال شما، فرض کنیم LED به پایه A.3 و کلید به پایه D.6 ,وصله. برنامه به این صورت میشه:
PORTA |= (~(PIND>>6)&0x01)<<3
البته این کار رو میشه به چند روش مختلف دیگه هم انجام داد (مثل استفاده از شرط و یا استفاده از عدد ثابت به جای شیفت دادن) ولی این طریق کد نوشتن 3 تا مزیت داره. اولا تعداد خطوط برنامه میاد پایین و معمولا برنامه هم سریعتر میشه ، ثانیا تغییر کد ساده هست (مثلا اگر کلید به پایه D.2 وصل بشه، کافیه 6 رو بکنید 2) و ثالثا تو خوندن کد بقیه مشکلی نخواهید داشت (اکثرا همینطوری کد می نویسن).
سعی کنید این یک خط کد رو خوب درک کنید، چون بعدا از این جور کد ها زیاد خواهید دید.
عالی بود
اگه سوالی بود بپرسید

SEZAR.CO
پنج شنبه 05 بهمن 1391, 00:53 صبح
با عرض سلام
ما یه مدار مثل شکل داریم
که میخواهیم چراغ ها طبق شکل روشن شوند
اگه میشه کدش را با اتمل استیدیو بگید با تشکر

KING AMIN
پنج شنبه 05 بهمن 1391, 01:03 صبح
بیت به بیت or یا & شوند یعنی چه
یعنی حاصل چجور پیش بینی کردید

SEZAR.CO
پنج شنبه 05 بهمن 1391, 17:03 عصر
با عرض سلام
&:مثلا داریم 1001و0101
1001
0101
_____
0001

or:مثلا همون اعداد بالا
1001
0101
_____
1101

با تشکر

KING AMIN
پنج شنبه 05 بهمن 1391, 17:53 عصر
مطمئنید درسته
بعد می تونید کد نوشته شده را توضیح بدید
نتونستم درکش کنم

SEZAR.CO
پنج شنبه 05 بهمن 1391, 18:11 عصر
مطمئنید درسته
بله

PORTA |= (~(PIND>>6)&0x01)<<3

نتونستم درکش کنم
میشه بگی کجاش نفهمیدی

KING AMIN
پنج شنبه 05 بهمن 1391, 18:55 عصر
اقا من اصلا امتحان کردم هیچی نشد اگه میشهبا پروتئوس بذارید

KING AMIN
شنبه 07 بهمن 1391, 19:17 عصر
کسی نیست توضیح بدید
به غیر از این کدی که اقا فرزاد گفت نباید چیزی بنویسیم
0xff یا 0x00 نداره یا..........
اگه میشه کمکم کنید

farzadsw
شنبه 07 بهمن 1391, 19:34 عصر
اون خط کد مربوط به الگوریتم برنامه بود. قبل از اون باید پایه های مورد نظر رو به صورت ورودی و خروجی تعریف کنید. رجیستر DDRx ورودی-خروجی پایه ها رو تعیین می کنه(x شماره پورته، مثل A,B,C,D). مثلا برای خروجی کردن 4 بیت اول پورت A باید بنویسید:
DDRA |= 0x0F
اگر این کد ها رو متوجه نمیشید باید یکم مقدمات زبان برنامه نویسی c رو مطالعه کنید.

SEZAR.CO
شنبه 07 بهمن 1391, 22:27 عصر
کسی نیست توضیح بدید
به غیر از این کدی که اقا فرزاد گفت نباید چیزی بنویسیم
0xff یا 0x00 نداره یا..........
اگه میشه کمکم کنید
مشکلتون واقعا این بود؟؟؟:متفکر::متفکر::متفکر:: تفکر::متفکر::متفکر:

KING AMIN
یک شنبه 08 بهمن 1391, 16:20 عصر
اقا
پروتئوس قرار میدید

SEZAR.CO
یک شنبه 08 بهمن 1391, 16:27 عصر
اقاپروتئوس قرار میدید
کسی نیست توضیح بدید
به غیر از این کدی که اقا فرزاد گفت نباید چیزی بنویسیم
0xff یا 0x00 نداره یا..........
اگه میشه کمکم کنید من به شما پیشنهاد می کنم یه سرچ کنید توی اینترنت چند تا نکته حرفی سخنی کتابی مقاله ای( & or پایه ای و........... ) یاد بگیری سر این موضوع 14 پت داده شده
بفرما اینم پروئوس(ولی به حرفم دقت کنید)

electro_fuzzy
سه شنبه 10 بهمن 1391, 11:58 صبح
مشکل نصب
Blocking Issues:

You must install the 32-bit Windows Imaging Component (WIC) before you run Setup. Please visit the Microsoft Download Center to install WIC, and then rerun Setup.

ویندوزم xp sp2 هست