اطلاعیه

Collapse
No announcement yet.

ارتباط سریال به زبان C

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

    ارتباط سریال به زبان C

    سلام
    من بین دوتا میکرو atmega16 میخوام ارتباط سریال برقرار کنم
    که البته تونستم
    ی میکرو یک keypad رو راه اندازی میکنه و میکرو دوم عدد انتخاب شده در میکرو اول رو روی lcd نشون میده
    تا اینجا همه چی خوبه .

    فقط وقتی بهش میگم زمانی که عدد 1 رو روی کیبورد زدیم عدد 1 رو روی lcd نشون بده ، و پورت C.1 رو یک کن ، عدد رو نشون میده ولی پورت رو یک نمیکنه.

    ؟؟؟؟؟؟؟ :sad: :sad: :sad: :sad: :sad: :sad:

    #2
    پاسخ : ارتباط سریال به زبان C

    میکرو 1 :

    #include <mega16.h>
    #include <stdio.h>
    #include <delay.h>
    #include <stdlib.h>

    int key; // tarif do motaghayer

    void main(void)
    {

    PORTA=0x00; //tarif port D va A be onvane voroodi khoroji baraye scan keyPad
    DDRA=0x00;
    PORTB=0x00;
    DDRB=0x0F;
    /////////////////////////////
    DDRC=0x00; // tarif port C be onvane voroodi
    UCSRA=0x00; // rah andazi serial micro ferestande Asankroon
    UCSRB=0x08;
    UCSRC=0x86; // putchar(PINC.0); = dastoor
    UBRRH=0x00;
    UBRRL=0x33;

    while (1)
    {
    DDRB=0x0F; // 4bit kam arzesh khorooji // 4bit por arzesh voroodi

    PORTB=0xFF;
    PORTB.0=0;
    delay_ms(5);
    if(PINB.4==0)key=01;
    if(PINB.5==0)key=02;
    if(PINB.6==0)key=03;
    if(PINB.7==0)key=12;

    PORTB=0xFF;
    PORTB.1=0;
    delay_ms(5);
    if(PINB.4==0)key=04;
    if(PINB.5==0)key=05;
    if(PINB.6==0)key=06;
    if(PINB.7==0)key=13;

    PORTB=0xFF;
    PORTB.2=0;
    delay_ms(5);
    if(PINB.4==0)key=07;
    if(PINB.5==0)key=08;
    if(PINB.6==0)key=09;
    if(PINB.7==0)key=14;

    PORTB=0xFF;
    PORTB.3=0;
    delay_ms(5);
    if(PINB.4==0)key=10;
    if(PINB.5==0)key=00;
    if(PINB.6==0)key=11;
    if(PINB.7==0)key=15;

    putchar(key);
    }
    }



    میکرو 2 :

    #include <mega16.h>
    #include <delay.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <lcd.h>
    #asm
    .equ __lcd_port=0x1B ;PORTA
    #endasm

    unsigned char key[8];
    //unsigned char a[8];
    //char skey;
    void main(void)
    {
    UCSRA=0x00;
    UCSRB=0x10;
    UCSRC=0x86;
    UBRRH=0x00;
    UBRRL=0x33;
    DDRC=0xFF; //port C = khorooji

    lcd_init(16);

    while (1)
    {
    lcd_gotoxy(0,0) ;
    lcd_putsf("KEY PRESSED PLZ"
    lcd_gotoxy(8,1);
    itoa(getchar(),key);
    lcd_puts(key);
    // itoa(key,skey);
    if(key==1)PINC.0=1;
    if(key==2)PINC.1=1 ;
    else PINC.5=1 ;

    }
    }

    دیدگاه


      #3
      پاسخ : ارتباط سریال به زبان C

      نوشته اصلی توسط Reza70r3
      میکرو 1 :

      [code=c]
      #include <mega16.h>
      #include <stdio.h>
      #include <delay.h>
      #include <stdlib.h>

      int key; // tarif do motaghayer

      void main(void)
      {

      PORTA=0x00; //tarif port D va A be onvane voroodi khoroji baraye scan keyPad
      DDRA=0x00;
      PORTB=0x00;
      DDRB=0x0F;
      /////////////////////////////
      DDRC=0x00; // tarif port C be onvane voroodi
      UCSRA=0x00; // rah andazi serial micro ferestande Asankroon
      UCSRB=0x08;
      UCSRC=0x86; // putchar(PINC.0); = dastoor
      UBRRH=0x00;
      UBRRL=0x33;

      while (1)
      {
      DDRB=0x0F; // 4bit kam arzesh khorooji // 4bit por arzesh voroodi

      PORTB=0xFF;
      PORTB.0=0;
      delay_ms(5);
      if(PINB.4==0)key=01;
      if(PINB.5==0)key=02;
      if(PINB.6==0)key=03;
      if(PINB.7==0)key=12;

      PORTB=0xFF;
      PORTB.1=0;
      delay_ms(5);
      if(PINB.4==0)key=04;
      if(PINB.5==0)key=05;
      if(PINB.6==0)key=06;
      if(PINB.7==0)key=13;

      PORTB=0xFF;
      PORTB.2=0;
      delay_ms(5);
      if(PINB.4==0)key=07;
      if(PINB.5==0)key=08;
      if(PINB.6==0)key=09;
      if(PINB.7==0)key=14;

      PORTB=0xFF;
      PORTB.3=0;
      delay_ms(5);
      if(PINB.4==0)key=10;
      if(PINB.5==0)key=00;
      if(PINB.6==0)key=11;
      if(PINB.7==0)key=15;

      putchar(key);
      }
      }
      [/code]


      میکرو 2 :
      [code=c]
      #include <mega16.h>
      #include <delay.h>
      #include <stdio.h>
      #include <stdlib.h>
      #include <lcd.h>
      #asm
      .equ __lcd_port=0x1B ;PORTA
      #endasm

      unsigned char key[8];
      //unsigned char a[8];
      //char skey;
      void main(void)
      {
      UCSRA=0x00;
      UCSRB=0x10;
      UCSRC=0x86;
      UBRRH=0x00;
      UBRRL=0x33;
      DDRC=0xFF; //port C = khorooji

      lcd_init(16);

      while (1)
      {
      lcd_gotoxy(0,0) ;
      lcd_putsf("KEY PRESSED PLZ"
      lcd_gotoxy(8,1);
      itoa(getchar(),key);
      lcd_puts(key);
      // itoa(key,skey);
      if(key==1)PINC.0=1;
      if(key==2)PINC.1=1 ;
      else PINC.5=1 ;

      }
      }
      [/code]
      توی کدها ت key آرایه است. تو آدرس آرایه رو داری توی شرط بررسی میکنی. که همیشه مقدار غیر صفر خواهد داد.

      فکر کنم می خواستی skey رو بزاری؟

      تازه اونم کد ASCII هستش(کد اعداد فکر کنم از 47 یا 48 شروع میشه) . اگه عدد لازم داری باید کد ASCII رو ازش کم کنی.
      [code=c]
      skey = skey - '0';
      if(skey > 0){
      // shart
      }
      [/code]
      If the wind will not serve, take to the oars

      دیدگاه


        #4
        پاسخ : ارتباط سریال به زبان C

        نوشته اصلی توسط ASHIT AXAR
        توی کدها ت key آرایه است. تو آدرس آرایه رو داری توی شرط بررسی میکنی. که همیشه مقدار غیر صفر خواهد داد.

        فکر کنم می خواستی skey رو بزاری؟

        تازه اونم کد ASCII هستش(کد اعداد فکر کنم از 47 یا 48 شروع میشه) . اگه عدد لازم داری باید کد ASCII رو ازش کم کنی.
        [code=c]
        skey = skey - '0';
        if(skey > 0){
        // shart
        }
        [/code]
        :angry: :angry: :angry: :angry:

        خب الان باید چکار کنم ؟
        الان ورودی میکرو دومم زمانی که کلید 2 رو فشار میدیم چیه ؟ که بتونم بریزمش توی ی متغیر و بگم اگه مساوی با فلان بودن فلان کار رو انجام بده؟

        :angry: :angry: :angry: :angry: :angry: :angry: :angry: :angry: :angry: :angry:

        دیدگاه


          #5
          پاسخ : ارتباط سریال به زبان C

          نوشته اصلی توسط Reza70r3
          :angry: :angry: :angry: :angry:

          خب الان باید چکار کنم ؟
          الان ورودی میکرو دومم زمانی که کلید 2 رو فشار میدیم چیه ؟ که بتونم بریزمش توی ی متغیر و بگم اگه مساوی با فلان بودن فلان کار رو انجام بده؟

          :angry: :angry: :angry: :angry: :angry: :angry: :angry: :angry: :angry: :angry:
          حوصله کن یکم مهربون تر ! طوری نشده که. برنامه نویسی آرامش می خواد.

          واسه شروع اینکارها رو بکن ببینیم نتیجه چی میشه.

          توی برنامه ی میکروی فرستنده key رو از نوع unsigned char تعریف کن.

          توی برنامه ی میکروی گیرنده چند تا تغییر بده:
          skey رو از کامنت بودن در بیار. unsigned char باشه. (هرچند کدویژن خودش همه ی char ها رو unsigned درنظر میگیره)
          [code=c]
          skey = getchar();
          itoa(skey, key);

          [/code]

          توی شرط if ها هم skey رو بررسی کن به جای key
          If the wind will not serve, take to the oars

          دیدگاه

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