اطلاعیه

Collapse
No announcement yet.

ارسال داده 19 بیتی

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    ارسال داده 19 بیتی

    سلام دوستان
    من 19 بیت دیتا برای ارسال دارم که باید به پایه های خروجی میکرو منترلر بفرستم
    هر کاری کردم نشد!
    C3-C2-C1-C0-D7-D6-D5-D4-D3-D1-D0-B7-B6-B5-B4-B3-B2-B1-B0(به همین ترتیب باشه - C3 پر ارزش
    ATMEGA8535
    کل پورت B - پورت D به جز اینتراپت صفر - و چهار بیت پایین پورت C
    ممنون میشم کمک کنید
    اینم دو برنامه نمونه که کار نداده-اولیش مال خودمه - دومیش مال دوستان

    PORTB = Data2 & 0x0FF;
    PORTD &=((Data2>>8) | 0x04);
    PORTD |= ((Data2>>8) & 0xfb);
    PORTC &= ((Data2>>16) | 0x0F0 );
    PORTC |= ((Data2>>16) & 0x0f); */





    void set_bits(unsigned long n) // 19 bits in use only!
    {
    unsigned char tmp;

    PORTB = (unsigned char)n; // 8 bits, B0..B7
    n >>= 8;
    tmp = (unsigned char)n & 0x0F;
    PORTC = (PORTC & (~0x0F)) | tmp; // 4 bits, C0..C3
    tmp = ((unsigned char)n >> 4) & 0x03;
    PORTD = (PORTD & (~0x03)) | tmp; // 2 bits, D0..D1
    tmp = ((unsigned char)n & (~0x03)) << 1;
    PORTD = (PORTD & (~0xF8)) | tmp; // 5 bits, D3..D7
    }

    #2
    پاسخ : ارسال داده 19 بیتی

    اون سورس "دوستان" قاعدتا باید کار کنه مگه اینکه پورتهای مربوطه رو خروجی تعریف نکرده باشین یا ترتیب پین ها جابجا باشه یا مورد سخت افزاری باشه (دیگه کد به این سادگی که تست نمیخواد). حالا با فرض اینکه پورتها رو خروجی تعریف کرده باشین میتونین این سورس مسخره رو تست کنین. سرعتش بالا نیست ولی کار میکنه:


    void set_bits(unsigned long n)
    {
    DDRB = 0xFF;
    DDRD|= 0xFB;
    DDRC|= 0x0F;

    #define _upd_bit(bit,port,pin) \
    do{if(n&(1UL<<bit)) port |= 1<<pin; else port&=~(1<<pin);}while(0)

    _upd_bit( 0, PORTB, 0);
    _upd_bit( 1, PORTB, 1);
    _upd_bit( 2, PORTB, 2);
    _upd_bit( 3, PORTB, 3);
    _upd_bit( 4, PORTB, 4);
    _upd_bit( 5, PORTB, 5);
    _upd_bit( 6, PORTB, 6);
    _upd_bit( 7, PORTB, 7);
    _upd_bit( 8, PORTD, 0);
    _upd_bit( 9, PORTD, 1);
    _upd_bit(10, PORTD, 3);
    _upd_bit(11, PORTD, 4);
    _upd_bit(12, PORTD, 5);
    _upd_bit(13, PORTD, 6);
    _upd_bit(14, PORTD, 7);
    _upd_bit(15, PORTC, 0);
    _upd_bit(16, PORTC, 1);
    _upd_bit(17, PORTC, 2);
    _upd_bit(18, PORTC, 3);
    #undef _upd_bit
    }

    دیدگاه


      #3
      پاسخ : ارسال داده 19 بیتی

      سلام
      حالا که من کامپایل کردم جواب نداد
      حالا شما مثلا می خواین بگین چی؟حرفه ای هستین
      برو ببین چش بود!!!!!که جواب نمی داد

      اصلا به نتیجه رسید بذون نیاز به کدهای شما مهندسین با تجربه !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

      دیدگاه


        #4
        پاسخ : ارسال داده 19 بیتی

        حالا واسه چی ناراحت میشی؟ آدم حق نداره به سورس خودش هم بد و بیراه بگه؟ ضمنا حرفه ای هم نیستم. فقط خواستم کاری راه انداخته باشم. گردنم هم از باسیل سیه زخم باریکتره. حالا دیگه واسه چی میزنی؟؟!!
        گذشته از این حرفها این یکی کد بایستی فارغ از ترتیب بیت ها جواب بده. (جای دیگه استفاده اش کردم).

        دیدگاه

        لطفا صبر کنید...
        X