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

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

الصورة الرمزية remon romany
remon romany
:: عضو نشط ::
تاريخ التسجيل: Feb 2011
المشاركات: 897
نشاط [ remon romany ]
قوة السمعة:0
قديم 01-09-2013, 11:32 PM المشاركة 1   
افتراضي ارجو شرح اوامر هذا الكود Twitter FaceBook Google+



ارجو شرح هذا الكود لو سمحتو
هذا الكود كود استقبال الاشعة ما تحت الحمراء
وانا عاوز شرحة لو سمحتو
كود:
sbit ir_in at RA0_bit;                      // Infrared receiver input
sbit ir_in_direction at TRISA0_bit;         // Infrared receiver input
unsigned int retint;                        // general purpose integer
unsigned char ir_byte,COUNT,bouton;
unsigned char ir_result[3];
void interrupt()
{
     count++;
     intcon=0b00100000;
     TMR0=0;
}
unsigned int get_mark(){
      TMR0= 0; count=0;
      for(;!ir_in;){}
      retint=2*(TMR0+(count*256));
      return retint;
}

unsigned int get_space(){
      TMR0= 0; count=0;
      for(;ir_in;){}
      retint=2*(TMR0+(count*256));
      return retint;
}
unsigned char get_sony_byte(char nbits){
char n;
unsigned char ir_byte;
unsigned int temp_ir;

    ir_byte = 0;                                  // initialise
    for(n=0 ; n<nbits ; n++){
        temp_ir = get_space();                    // expect ~510uS
        temp_ir = get_mark();
          ir_byte >>= 1;                   // 650uS = 0, 1.2uS = 1
        if ((temp_ir > 1000)&&(temp_ir < 1300)) {
            ir_byte += 0x80;
        }
    }
    ir_byte >>= 8-nbits;
    return ir_byte;
}
void sony_read(){
unsigned int temp_ir;

    ir_result[0] = 0;                            // return 0, 0 if glitch
    ir_result[1] = 0;                            // return 0, 0 if glitch
    while(ir_in);                                // wait for IR to go low
    temp_ir = get_mark();
    if((temp_ir>2000)&&(temp_ir<3000)) {     // expect 2.4mS mark
        ir_result[0] = get_sony_byte(7);          // 7 bit command
        ir_result[1] = get_sony_byte(5);         // 5 bit address
        Delay_ms(10);                           // wait for repeat messages to clear

    }
}
void main() {
    TRISA=0x0F;
    TRISB=0;
    PORTB=0;
    PORTA=0;
    cmcon=7;
    option_reg=0b10000000;
    intcon=0b10100000;
    TMR0 = 0;
    while(1){
        sony_read();
        if(ir_result[1]==1){                 // Sony address 01 is TV
            bouton = ir_result[0];
            switch (bouton){
                case 0: Portb.F0 = ~Portb.F0;Delay_ms(150);break;        // button TV '0'
                case 1: Portb.F1 = ~Portb.F1;Delay_ms(150);break;        // button TV '1'
                case 2: Portb.F2 = ~Portb.F2;Delay_ms(150);break;        // button TV '2'
                case 3: Portb.F3 = ~Portb.F3;Delay_ms(150);break;        // button TV '3'
                default:break;
            }
        }
    }
    while(1);              // loop forever

اعلانات
إضافة رد

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

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

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


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

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