سلام به همه دوستان . :smile:
من میخوام یک متغیر 64بیتی رو توی کدویژن و مگا8 بعد از اعمال چند عملیات منتطقی مثل & | و انجام چند شیفت به یک تابع بفرستم و با شیفت دادن به صورت 8 بیتی در پورت میکرو با تاخیر نمایش بدم .
من از کد زیر واسه 1 کردن بعضی از بیت های متغیر مورد نظر استفاده میکنم :
byte یک متغییر unsigned long int هس و تابع نمایش به صورت زیر :
این کدها فقط تا 16 بیت رو نشون میدن من چطور میتونم 64 بیت رو شیفت بدم.
این تابع بیت های 16 به بعد رو صفر خروجی میده...
جتی سعی کردم از stdint.h ، unsigned long uint32_t استفاده کنم کدویژن ارور میده و long long رو هم ارور میده...
میشه یکی راهنماییم کنه ؟
ولی چیزی که جالبه اینه که اگه همه بیتهای byte در هنگام تعریف متغیر یک باشه خروجی به تعداد مورد نظر 8بیت یک میده ، ولی اگه در هنگام تعریف مقدار دهی نشه یا به صورت 0b000.... مقدار دهی بشه و با تابع BV_ بیت های مورد نظرو یک کنیم مثلا 0b001011110111... ا 16 بیت اول رو درست و بقیه بیت ها صفر نمایش میده...
ممنون.
من میخوام یک متغیر 64بیتی رو توی کدویژن و مگا8 بعد از اعمال چند عملیات منتطقی مثل & | و انجام چند شیفت به یک تابع بفرستم و با شیفت دادن به صورت 8 بیتی در پورت میکرو با تاخیر نمایش بدم .
من از کد زیر واسه 1 کردن بعضی از بیت های متغیر مورد نظر استفاده میکنم :
کد:
unsigned long int _BV(int index){ unsigned long int temp = byte ; return temp|( 1 << index ); }
کد:
temp = 0b00000000; for(i=0 ; i < bytelenght/8 ; i++) { for(j=0 ; j < 8 ; j++) { if( byte & 0x1 ) temp = temp | (1 << 7-j); byte = byte >> 1 ; } PORTB = temp; delay_ms(500); temp = 0b00000000; }
این تابع بیت های 16 به بعد رو صفر خروجی میده...
جتی سعی کردم از stdint.h ، unsigned long uint32_t استفاده کنم کدویژن ارور میده و long long رو هم ارور میده...
میشه یکی راهنماییم کنه ؟
ولی چیزی که جالبه اینه که اگه همه بیتهای byte در هنگام تعریف متغیر یک باشه خروجی به تعداد مورد نظر 8بیت یک میده ، ولی اگه در هنگام تعریف مقدار دهی نشه یا به صورت 0b000.... مقدار دهی بشه و با تابع BV_ بیت های مورد نظرو یک کنیم مثلا 0b001011110111... ا 16 بیت اول رو درست و بقیه بیت ها صفر نمایش میده...
ممنون.

دیدگاه