بنام خدا
باسلام
اما در ادامه..
همانجور که در مثال گذاشته دیدید،زمان شیفت دادن پورت ها،پورت ها به ترتیب روشن و خاموش میشدن،شاید یک سوال مهم برای همه پیش اماده باشد،چرا بجایی شیفت دادن، مقدار PORTB را یکی یکی افزایش نمی دادیم؟!
در مثال بالا قصد داشتیم، پورت ها را یکی یکی روشن کنیم، و اگر قرار بود،مقدار پورت B را یکی یکی افزایش دهیم،ان وقت
LED ها یکی یکی روشن نمی شدن،بلکه به حالت
BCD روشن میشدن.! که برای درک این مسئله و خیلی مسائل دیگر در اینده بهتر روش ها مقدار دهی به صورت
هگز ،هگزادسیمال،باینری را بدانید.
مبحث مبنا های هگز،دسیمال،باینری
[HIGHLIGHT=#e36c09]باینری Binary یا Bin
باینری که همان مسئله ی است که در گذشته نیز ان را توضیح داده ایم! همیشه به صورت 8 بیت یا 16 بیت یا نهایت 32 بیت نوشته میشوند.(
بسته به تعریف متغیر ما در برنامه) و مقداری برای بیت های ان،یا 0 یا 1 می باشد!
باینری به این ترتیب شروع می شوند و مقدارش افزایش پیدا می کند:
(هشت بیتی)
00000000 اول
00000001 دوم
00000010 سوم
00000011 چهارم
00000100 پنجم
00000101 ششم
00000110 هفتم
00000111 هشتم
00001000 نهم
00001001 دهم
00001010 یازده ام
00001011 دوازده ام
00001110 سیزده ام
00001101 چهارده ام
00001110 پانزده ام
00001111 شانزده ام
همانجور که در بالا می ببینید، 4 بیت اول (سمت راست) در شانزده حالت مختلف به ترتیب شمارش شدن (
این 4 بیت دیگر بیش از این حالت ندارد! (
فرمول محاسبه 2 به توان 4 ، یا به عبارتی ساده تر 2 چهاربار ضربدر خودش !) )
اما این 16 حالت،اخر کار شمارش یک متغیر 8 بیتی نیست! بلکه یک متغییر 8 بیتی می تواند تا 256 حالت مختلف دیگر شمارش باینری خود را ادامه دهد !
که در ادامه می ببینید:
Please Login or Register to see this code
در بالا ما از حالت هفده ام تا دویصد پنجاه شش حالت مختلف باینری را به ترتیب شمارش کردم! و برای یک متغیر هشت بیتی بیش از 256 حالت مختلف وجود ندارد! (0 تا 255 که جمعا میشود 256 حالت ) (2 به توان 8 یعنی 2 هشت بار ضربدر خودش !)
به این روش شمارش باینری
BCD گفته میشود !
حال اگر ما بخواهیم در برنامه ها خود مقدار متغییری را به باینری! مقداری دهی کنیم،باید
ابتدا 0b را جلویی ان بنویسیم،سپس هشت بیت مد نظرمان را جلویش چیدمان کنیم .
بدین صورت :
;unsigned char B=0b00000001
0b به برنامه می گوید،می خواهیم مقدار دهی متغیر را به روش باینری انجام دهیم!
مقداری به روش باینری برای جاهایی که نیاز است،مقدار متغیرها را شیفت دهیم و یا زمانی که می خواهیم پورت را مقدار دهی کنیم یا کارهای از این دست،بیشتر مورد استفاده قرار می گیرد.
برای درک بیشتر موضوع شمارش به روش باینری،بهترست
[External Link Removed for Guests]مثال را دانلود کنید،سپس فایل پرتئوس را اجرا کنید و خروجی ها را ببینید
[HIGHLIGHT=#0070c0]
[HIGHLIGHT=#0070c0]
مقداری دهی دسیمال DECIMAL یا DEC ([HIGHLIGHT=#00b050]
که البته نام کاملش نیز هگزا دسیمال نیز می باشد Hex Decmial )
در این روش مقدار دهی،می توان بجایی نوشتن،مقدار باینری هر متغیر!(که کار سختی نیز می باشد!) ،شماره دسیمال ان را نوشت. همانجور که در خطوط بالا گفتیم،یک متغیر باینری هشت بیت در 256 حالت مختلف شمارش میشوند! این شمارش ها در واقع همان شمارش به روش دسیمال می باشند! (
اعداد از 0 تا 255 شمارش میشوند!)
اگر به شمارش باینری در چند خط بالاتر بروید، کنار هر مقدار باینری،یک عدد نوشته شده، ان عدد ها،
مقدارها دسیمال معادل باینری می باشد!
فرض کنید مقداری باینری یک متغیر
0b00000001 ،ان وقت مقدار دسیمال ان چقدر می باشد ؟! مقداری دسیمال آن
1 می باشد !
حال فرض کنید مقداری باینری یک متغیر
0b00000010 ،ان وقت مقدار دسیمال ان چقدر می باشد ؟! مقداری دسیمال آن
2 می باشد !
حال فرض کنید مقداری باینری یک متغیر
0b11111111 ،ان وقت مقدار دسیمال ان چقدر می باشد ؟! مقداری دسیمال آن
255 می باشد !
جدول معادل باینری به دسیمال (
گرچه در بالا نیز ان را قرار داده بودیم!)
Please Login or Register to see this code
بطوری کلی،در برنامه،وقتی گفته شود 0 یا 0b00000000 تفاوتی ندارد! و مقداری دهی به دو روش صحیح می باشد و برنامه یک کار را انجام میدهد.!
;unsigned char B=0b11111111 به روش باینری
یا
;unsigned char B=255 به روش هگزا دسیمال
ولی روش دسیمال ساده تر و بهتر نیز می باشد. معمولا در اکثرا برنامه ها،بیشتر بدین شکل متغیرها مقداری دهی میشوند!
[HIGHLIGHT=#e36c09]مقداری دهی به روش هگز! HEX
اما مقداری دهی به روش هگز، با روش های دیگر تفاوت نیز دارد! در این روش مقداری دهی، شمارش حول 16 نوع مقدار دهی می چرخد!
به ترتیب :
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
جمعا 16 نوع مقداری دهی! این روش نیز خلاصه تر از دو روش قبلی می باشد! و کاربرد ها فراوان نیز دارد!
هر کدام از مقدار هایی Hex معادل باینری و دسیمال نیز دارد! که در جدول زیر می توانید ببینید!
نوشتن مقدار ها به روش هگز،
در برنامه باید 0x را قبل از ان بنویسید (به مانند باینری که باید 0b را می نوشتید) برای درک بهتر، شمارش یک متغیر هشت بیتی به سه روش باینری و هگز و دسیمال انجام را می توانید در جدول پایین ببینید:
Please Login or Register to see this code
HEX:0xff | DECIMAL:255 | BINARY:
پس در برنامه تفاوتی ندارد،که شما یک متغیر را به سه روش زیر تعریف کنید،در هر صورت مقدار ان 1 می باشد:
unsigned char B=0b00000001
unsigned char B=0x01
unsigned char B=1
* 1 یک مثال بود،طبق جدول بالا،هر مقدار و مبنایی معادلش ذکر شود، دو مبنا دیگر نیز دقیقا همان (اما به روش خودشان!) نیز می باشند.
برای دیدن شمارش به سه روش ذکر شده،به کمک پرتئوس،[External Link Removed for Guests]مثال را ببینید و اجرا کنید.
========= آشنایی بیشتر با هگز و دسیمال و باینری، فرمول های بدست اوری انها،
[External Link Removed for Guests]مقاله را مطالعه فرمایید.
جهت معادل سازی سه مبنا به هم دیگر، می توانید از این دو برنامه استفاده کنید: برنامه اولو
برنامه دوم
در پست بعدی مثال LED ها را ادامه خواهیم داد.
باتشکر.