قسم الميكروكنترولر والروبوت ودوائر الاتصال بالحاسب الالي قسم المتحكمات الـ microcontroller و المعالجات microprocessor و التحكم الرقمي بالكمبيوتر CNC والانظمة الآلية والروبوت Robots

أدوات الموضوع

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:328
قديم 06-11-2011, 05:12 PM المشاركة 1   
افتراضي أساس برمجة مسجل الإزاحة 74HCH164 Twitter FaceBook Google+



أساس برمجة مسجل الإزاحة 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 ; // وخفضه للسماح بإخراج البيانات
} } unsigned char a ; // تعريف متغير لعداد حلقة التكرار void main() // بداية الدالة الرئيسية { TRISB = 0 ; //تهيئة هذه الأطراف كمخارج Data_pin = 0 ; // يتم تهيئة هذه الأطراف باصفار Clock_pin = 0 ; //لضمان ضع البداية do{ //أخيرا عندما نريد نقل بايت من خلال SIPO نستدعى الدالة ونمرر (نضع) بها البيانات المراد نقلها . على سبيل المثال sipo_out ( 255 ) ; // نبدأ بإضاءة جميع الليدات كخطوة اختياريةلبيان عمل الدالة for(a=0;a<255;a++ ) // بعد ذلك ننشأ حلقة بعداد كبارامتر لدالة الدخل التسلسلى الخرج التفرعى من الصفر وحتى 255 { // فى كل تكرار يتم الآتى sipo_out ( a ) ; // تخصيص رقم التكرار كبارامتر أو دليل للدالة لتمريره أى تنفيذه وفقا لكود هذه الدالة السابق كتابته بأعلى Delay_Ms ( 100 ) ; // تأخير زمنى بسيط } // نهاية حلقة التكرار التى تتكرر من الصفر إلى 255 }while(1); // تكرار عملية إضاءة كل الليدات ثم أضاءة الليدات حسب عداد ثنائى من الصفر وحتى 255 } // نهاية الدالة الرئيسية

اعلانات

ramiyasmin
:: مهندس ::
تاريخ التسجيل: Apr 2006
الدولة: https://t.me/pump_upp
المشاركات: 10
نشاط [ ramiyasmin ]
قوة السمعة:0
قديم 19-11-2011, 10:47 PM المشاركة 2   
افتراضي


الف شكر كتير مفيد هذا الموضوع

اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )
  

menem_saad
:: مهندس ::
تاريخ التسجيل: Sep 2011
المشاركات: 13
نشاط [ menem_saad ]
قوة السمعة:0
قديم 21-11-2011, 09:28 AM المشاركة 3   
افتراضي


شكرا جزيلا


سعد الجسري
:: مهندس متواجد ::
تاريخ التسجيل: Mar 2005
الدولة: UAE
المشاركات: 144
نشاط [ سعد الجسري ]
قوة السمعة:0
قديم 21-11-2011, 05:10 PM المشاركة 4   
افتراضي


السلام عليكم
جزاك الله كل خير
أود أن أسألك لو سمحت
على فرض لدي معالج نوع pic16f877a الذي يدعم uart
وقمت بإرسال بشكل متكرر مثلا (( b11110000))

unsigned short i;
} () void main
UART_init(19200);
}(while (1
}( )(if (UART_Data_Ready
; () i = UART_Read

الان قيمة i هي (11110000)

فا لديك أي فكرة كيفيت عرض قيمة i على مسجل الازاحة
ولك جزيل الشكر
والله ولي التوفيق


الصورة الرمزية fathi-mohmed
fathi-mohmed
:: مهندس متميز ::
تاريخ التسجيل: Aug 2010
الدولة: القاهرة
المشاركات: 518
نشاط [ fathi-mohmed ]
قوة السمعة:0
قديم 23-11-2011, 01:17 AM المشاركة 5   
افتراضي


الف شكر ااااااااااااااااا


khoklland007
:: مهندس ::
تاريخ التسجيل: Feb 2010
المشاركات: 24
نشاط [ khoklland007 ]
قوة السمعة:0
قديم 03-12-2011, 07:30 PM المشاركة 6   
افتراضي


شكرا كثيرا


zoro238
:: مهندس جيد ::
تاريخ التسجيل: Apr 2006
المشاركات: 290
نشاط [ zoro238 ]
قوة السمعة:0
قديم 20-01-2012, 05:28 AM المشاركة 7   
افتراضي


مشكر استاذنا الكبير على الشرح

لقد جربت نفس العملية لكن غير ت المايكرو الى 16f877a
ولكن المايكروسي رفض الامر #define

وطلع ايرو علية ..
فكيف يمكنني تطبيق نفس المثال على الماكيرو 16f877a

ثانيا :
لو انا ارسلت الية الرقم 2 فكيف سيكون الخرج هل سيحول القيمة الى عدد ثناثي ام عشري ام ماذا ؟؟

ومشكور مقدما


zoro238
:: مهندس جيد ::
تاريخ التسجيل: Apr 2006
المشاركات: 290
نشاط [ zoro238 ]
قوة السمعة:0
قديم 06-02-2012, 11:38 AM المشاركة 8   
افتراضي


كيف يمكنني عمل تاخير في سرعه اظهار الرقم
انا جربت الدائرة وعملت لكن هناك سرعه كبيرة في اظهرا العدد

وانا اريد مثلا ان يظهر العدد لمده ثانية ثم العدد الذي بعده وهكذا فكيف يمكنني ذلك .
كمثال نفس المثال المستخدم

إضافة رد

العلامات المرجعية

«     الموضوع السابق       الموضوع التالي    »
أدوات الموضوع

الانتقال السريع إلى


الساعة معتمدة بتوقيت جرينتش +3 الساعة الآن: 08:44 AM
موقع القرية الالكترونية غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء
فعلى كل شخص تحمل مسئولية نفسه إتجاه مايقوم به من بيع وشراء وإتفاق وأعطاء معلومات موقعه
التعليقات المنشورة لا تعبر عن رأي موقع القرية الالكترونية ولايتحمل الموقع أي مسؤولية قانونية حيال ذلك (ويتحمل كاتبها مسؤولية النشر)

Powered by vBulletin® Version 3.8.6, Copyright ©2000 - 2024