حان وقت البرمجة :
تسلسل البيانات ليس بالصعب . ببساطة نستخدم المعلومات المذكورة أعلاه وتطبيقها بشكل مناسب باستخدام حلقة for loop .
مثال توضيحى :
كود:
unsigned char shift ;
for ( shift = 0 ; shift < 8 ; shift + + )
{
value = dat >> shift ;
if ( value & 1 )
{
DATE = 1 ;
}
else
{
DATE = 0 ;
}
}
- المقصود "بالقيمة" value هى قيمة البيانات التى تريد تسلسلها dat ( متغير من نوع char أى بسعة byte ) أثناء معالجتها "لم نكتب data لأنها من ضمن الكلمات المحجوزة واستخدامه يسبب خطأ عند الترجمة ".
- يتم تشكيل حلقة تتكرر 8 مرات (بعدد البتات المراد نقلها ) باستخدام تعبير for .
كود:
for ( shift = 0 ; shift < 8 ; shift + + )
{
……
…….
}
داخل الحلقة يتم عمل إزاحة لجهة اليمين right shiftلعدد من المواقع (الأماكن) يساوى لقيمة المتغير "shift" ( فى بداية الحلقة يكون بصفر أى عدم إزاحة وفى الدورة التالية يكون بواحد والثانية يكون باثنين وهكذا ).
كود:
value = dat >> shift ;
- بعد ذلك يتم إجراء عملية AND للبايت الناتج مع القيمة "واحد 1 " (أى مع 0b00000001 ) : بهذه الطريقة يتم اختبار البت السابعة هل هى فى الحالة المرتفعة (يتحقق شرط if ) فنجعل DATE بواحد ) أو الحالة المنخفضة فنجعل DATE=0. المتغير DATE يمثل حالة أطراف إرسال البيانات التسلسلية .
كود:
value = dat >> shift ;
if ( value & 1 )
{
DATE = 1 ;
}
else
{
DATE = 0 ;
}
بعد هذه التعليمات وبفرض أن CKهو طرف إرسال إشارة الساعة ( وأنه قد تم إعدادة مسبقا بالصفر ) فببساطة نضع :
أى أن البيانات يتم إرسالها عند التحول من الحالة المنخفضة إلى الحالة المرتفعة لإشارة الساعة .
طرف الساعة بالفعل يكون فى الحالة المنخفضة من البداية ولقد قمنا بجعله فى الحالة المرتفعة لإزاحة البت الموجودة على المدخل (التى وضعناها على الطرف DATA ) ثم إعادته مرة أخرى إلى الصفر للتجهيز للدورة التالية .
بهذه الطريقة نكون قد قمنا بعمل إرسال متزامن للبيانات تسلسليا بقليل من التعليمات البسيطة .
الآن سوف نرى هيكل البرنامج بالكامل :