أساس برمجة مسجل الإزاحة 74HCH164
الدائرة الكهربية :
كود البرنامج والتعليق عليه :
كود:
/* إستخدام مسجل الإزاحة 74164 فى إنشاء عداد ثنائى من الصفر حتى 255
يحتاج هذا المسجل إلى خطين فقط لتفيذ تحويل البينات التسلسلية إلى تفرعية
*/
// تعريف الخطين بأسماء متعارف عليها لتسهيل فهم البرنامج وسوف نستخدم موجه التعريف
# Define Data_pin PORTB.B0 // يستخدم هذا الطرف لإرسال البيانات التسلسلية من الميكروكونترولر إلى مسجل الإزاحة
# Define Clock_pin PORTB.B1 // يستخدم هذا الطرف لتوصيل نبضات الساعة من الميكروكونترولر إلى مسجل الإزاحة
// تسهيلا للعمل نعرف الدالة التى تقوم بإجراء الإرسال التسلسلى
//sipo_out اسم الدالة
//dat بارامتر أو دليل الدالة الذى من خلاله يتم تمرير البيانات
void sipo_out ( unsigned char dat )
{
unsigned char value = 0 ; //تعريف متغير يحتفظ بالقيمة بعد الإزاحة
unsigned char shift = 0 ; //ومتغير كعداد لبيان مقدار إزاحة البيانات
for ( shift = 0 ; shift < 8 ; shift ++ ) // إنشاء حلقة تكرار 8 مرات كل مرة تختص ببت من البتات الثمانية للعدد أو الحرف
{ // فى كل تكرار يتم تنفيذ ما يلى
value = dat >> shift ; // إزاحة بينات العدد أو الحرف جهة اليمين بمقدار ترتيب التكرار وحفظ النتيجة فى متغير القيمة
if ( value & 1 ) // للتعامل مع بت واحدة فقط تتم عملية و المنطقية مع الواحد وتسمى بعملية القناع إو الإخفاء
{
Data_pin = 1 ; // إن كان الناتج صوب يكون بت البيانات بواحد ومن ثم يتم رفع حالة خط البيانات
}
else // وإن لم تكن صواب
{
Data_pin = 0 ; // يتم خفض حالة خط البيانات
}
Clock_pin = 1 ; // ثم رفع حالة خط الساعة
Clock_pin = 0 ; // وخفضه للسماح بإخراج البيانات [/Bر كبارامتر أو دليل للدالة لتمريره أى تنفيذه وفقا لكود هذه الدالة السابق كتابته بأعلى [/SIZE]
Delay_Ms ( 100 ) ; // تأخير زمنى بسيط
} // نهاية حلقة التكرار التى تتكرر من الصفر إلى 255
}while(1); // تكرار عملية إضاءة كل الليدات ثم أضاءة الليدات حسب عداد ثنائى من الصفر وحتى 255
} // نهاية الدالة الرئيسية
|
الاستاذ القدير
نحن هنا نعمل اخراج قيمة للداتا dat .
وهي عبارة عن 8 بت
لكن لو اريد فقط اخراج ال2 بت الاولى فقط بدون البقية ويتوقف المسجل ويعيد اخراج الداتا واختار الب2 بت الاوسط تخرج فقط والبقية لا
فكيف يمكنني ذلك ..
انا غيرت في قيمة shift لكن الداتا الخارجية لاتساوي القيمة المفترضة
يعني لو اختر ت shif 0 to 2 فتخرج البتات الرابع والسادس رغم انة المفروض ان يخرج البت الاول والثاني فقط ...
الرجاء المساعده