سلام
ما یه میکرو داریم یه led و یه کلید که led به پورتa وکلید به پورت d وصله
می خوام ب زدن کلید led روشن شه
با تشکر
سلام
ما یه میکرو داریم یه led و یه کلید که led به پورتa وکلید به پورت d وصله
می خوام ب زدن کلید led روشن شه
با تشکر
به نظر من ، قدم اول یاد گیری عملیات باینری در 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) و ثالثا تو خوندن کد بقیه مشکلی نخواهید داشت (اکثرا همینطوری کد می نویسن).
سعی کنید این یک خط کد رو خوب درک کنید، چون بعدا از این جور کد ها زیاد خواهید دید.
عالی بودبه نظر من ، قدم اول یاد گیری عملیات باینری در 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 در 17:01 عصر
بیت به بیت or یا & شوند یعنی چه
یعنی حاصل چجور پیش بینی کردید
با عرض سلام
&:مثلا داریم 1001و0101
1001
0101
_____
0001
or:مثلا همون اعداد بالا
1001
0101
_____
1101
با تشکر
مطمئنید درسته
بعد می تونید کد نوشته شده را توضیح بدید
نتونستم درکش کنم
بلهمطمئنید درسته
PORTA |= (~(PIND>>6)&0x01)<<3میشه بگی کجاش نفهمیدینتونستم درکش کنم
اقا من اصلا امتحان کردم هیچی نشد اگه میشهبا پروتئوس بذارید
کسی نیست توضیح بدید
به غیر از این کدی که اقا فرزاد گفت نباید چیزی بنویسیم
0xff یا 0x00 نداره یا..........
اگه میشه کمکم کنید
اون خط کد مربوط به الگوریتم برنامه بود. قبل از اون باید پایه های مورد نظر رو به صورت ورودی و خروجی تعریف کنید. رجیستر DDRx ورودی-خروجی پایه ها رو تعیین می کنه(x شماره پورته، مثل A,B,C,D). مثلا برای خروجی کردن 4 بیت اول پورت A باید بنویسید:
DDRA |= 0x0F
اگر این کد ها رو متوجه نمیشید باید یکم مقدمات زبان برنامه نویسی c رو مطالعه کنید.
مشکلتون واقعا این بود؟؟؟کسی نیست توضیح بدید
به غیر از این کدی که اقا فرزاد گفت نباید چیزی بنویسیم
0xff یا 0x00 نداره یا..........
اگه میشه کمکم کنید
اقاپروتئوس قرار میدیدمن به شما پیشنهاد می کنم یه سرچ کنید توی اینترنت چند تا نکته حرفی سخنی کتابی مقاله ای( & or پایه ای و........... ) یاد بگیری سر این موضوع 14 پت داده شدهکسی نیست توضیح بدید
به غیر از این کدی که اقا فرزاد گفت نباید چیزی بنویسیم
0xff یا 0x00 نداره یا..........
اگه میشه کمکم کنید
بفرما اینم پروئوس(ولی به حرفم دقت کنید)
مشکل نصب
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 هست