سلام
ما یه میکرو داریم یه led و یه کلید که led به پورتa وکلید به پورت d وصله
می خوام ب زدن کلید led روشن شه
با تشکر
Printable View
سلام
ما یه میکرو داریم یه 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) و ثالثا تو خوندن کد بقیه مشکلی نخواهید داشت (اکثرا همینطوری کد می نویسن).
سعی کنید این یک خط کد رو خوب درک کنید، چون بعدا از این جور کد ها زیاد خواهید دید.
اگه سوالی بود بپرسید
با عرض سلام
ما یه مدار مثل شکل داریم
که میخواهیم چراغ ها طبق شکل روشن شوند
اگه میشه کدش را با اتمل استیدیو بگید با تشکر
بیت به بیت 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 هست