parisa707
13th November 2011, 08:51 PM
سلام
برای اینکه بتونید مقاومت های pull up داخلی رو فعال کنید باید مستقیما در رجیسترهای پورت بنویسید و خود بسکام دستوری برای انجام این کار نداره! البته نوشتن روی رجیستر خیلی بهتر هم هست. من یه آموزش کوچولو اینجا میذارم :
هر پورت در میکروکنترلرهای AVR سه تا رجیستر داره که عبارتند از :
1. رجیستر DDRX : این رجیستر جهت درگاه رو مشخص می کنه ، یعنی اگه برابر 0 باشه پورت بصورت ورودی تعریف میشه و اگه 1 باشه پورت ما خروجی خواهد بود.
این رجیستر بصورت پورت یا پین در دسترس هست ، به مثال های زیر توجه کنید:
DDRA=&hFF این دستور کل پورت A را ورودی تعریف می کند.
DDRA.2=1 این دستور پین A.2 را خروجی تعریف می کند.
2. رجیستر PORTx : این رجیستر درواقع رجیستر خروجی پورت هست ، به این معنی که مقدارهایی که قراره روی پورت قرار بگیرن در خودش نگه می داره! اصطلاحا میگیم روی پورت می نویسه. این رجیستر بصورت پورت و پین در دسترسه.
Portb=&h0F این دستور عدد 15 رو روی پورت B می نویسه.
Portc.1=0 این دستور مقدار 0 رو روی پین C.1 می نویسه.
3. رجیستر PINx : این رجیستر در حقیقت همون رجیستر ورودی هست که مقدار سخت افزاری موجود روی پورت رو می خونه و در خودش نگه می داره. اصطلاحا میگیم از روی پورت می خونه. این رجیستر هم ، بصورت پورت و پین در دسترس هست.
S=PinA این دستور مقدار فیزیکی موجود روی پورت A رو می خونه و در متغیر S می ریزه.
W=Pinb.3 این دستور مقدار موجود روی پین B.3 رو می خونه و در متغیر W می ریزه.
از طرفی در حالت ورودی هر یک از پین های AVR می تونن pull up یا HiZ (های ضد - امپدانس بالا) باشن ، برای pull up کردن یک پین کافیه اونو ورودی تعریف کنید و بعد مقدار 1 رو روی اون بنویسید. (اگه مقدار 0 رو بنویسید اون پین HiZ میشه)
بنابراین کافیه به صورت زیر عمل کنید :
مثلا برای ورودی تعریف کردن پین : DDRB.1=0
و برای فعال کردن مقاومت pull up داریم : Portb.1=1
برای اینکه بتونید مقاومت های pull up داخلی رو فعال کنید باید مستقیما در رجیسترهای پورت بنویسید و خود بسکام دستوری برای انجام این کار نداره! البته نوشتن روی رجیستر خیلی بهتر هم هست. من یه آموزش کوچولو اینجا میذارم :
هر پورت در میکروکنترلرهای AVR سه تا رجیستر داره که عبارتند از :
1. رجیستر DDRX : این رجیستر جهت درگاه رو مشخص می کنه ، یعنی اگه برابر 0 باشه پورت بصورت ورودی تعریف میشه و اگه 1 باشه پورت ما خروجی خواهد بود.
این رجیستر بصورت پورت یا پین در دسترس هست ، به مثال های زیر توجه کنید:
DDRA=&hFF این دستور کل پورت A را ورودی تعریف می کند.
DDRA.2=1 این دستور پین A.2 را خروجی تعریف می کند.
2. رجیستر PORTx : این رجیستر درواقع رجیستر خروجی پورت هست ، به این معنی که مقدارهایی که قراره روی پورت قرار بگیرن در خودش نگه می داره! اصطلاحا میگیم روی پورت می نویسه. این رجیستر بصورت پورت و پین در دسترسه.
Portb=&h0F این دستور عدد 15 رو روی پورت B می نویسه.
Portc.1=0 این دستور مقدار 0 رو روی پین C.1 می نویسه.
3. رجیستر PINx : این رجیستر در حقیقت همون رجیستر ورودی هست که مقدار سخت افزاری موجود روی پورت رو می خونه و در خودش نگه می داره. اصطلاحا میگیم از روی پورت می خونه. این رجیستر هم ، بصورت پورت و پین در دسترس هست.
S=PinA این دستور مقدار فیزیکی موجود روی پورت A رو می خونه و در متغیر S می ریزه.
W=Pinb.3 این دستور مقدار موجود روی پین B.3 رو می خونه و در متغیر W می ریزه.
از طرفی در حالت ورودی هر یک از پین های AVR می تونن pull up یا HiZ (های ضد - امپدانس بالا) باشن ، برای pull up کردن یک پین کافیه اونو ورودی تعریف کنید و بعد مقدار 1 رو روی اون بنویسید. (اگه مقدار 0 رو بنویسید اون پین HiZ میشه)
بنابراین کافیه به صورت زیر عمل کنید :
مثلا برای ورودی تعریف کردن پین : DDRB.1=0
و برای فعال کردن مقاومت pull up داریم : Portb.1=1