اطلاعیه

Collapse
No announcement yet.

ارسال چند متغییر با usart

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

    ارسال چند متغییر با usart

    با سلام

    من دوتا میکرو رو با usart وصل کردم و می خوام اطلاعات رو روی صفحه نمایش بفرستم مثلا سطر اول ساعت و سطر دوم دما .

    الان وقتی ارایه رو فرمت بندی میکنم و با puts میفرستم هیچ مشکلی پیش نمی یاد .

    ولی چون توی میکرو دوم که اطلاعات رو میگیره کاراکتر های تعریف شده داره باعث پر پر کردن کارکتر های تعریف شده ال سی دی میشه . زمان ارسال دیتا رو 1 ثانیه 1 ثانیه گذاشتم پر پر کم شد . ولی توی میکرو اول یک تابع هست که قراره یک putchar انجام بده تا که مثلا مقدارش یا 0 یا 1 یا 3 یا 7 میشه که در میکرو دوم که با getchar میگیره پورت c رو همین مقادیر قرار میده ولی مشکلی که پیش میاد اینه که زمان دریافت به بعدش کارکترای تعریف شده روی صفحه نمایش موج میکزیکی میرن ( توی کل صفحه ظاهر و غیب مشن ) .

    برای همین میخوام مقدار ساعت و دقیقه و دما رو توی 3 متغییر بریزم و بعد از دریافت توی میکروی دوم اونا رو توی چند متغییر ذخیره کنم و بعد برای ال سی دی بفرستم .

    حالا این کدی که این سه متغییر رو میفرسته و در طرف مقابل دریافت میکنه چطوری نوشته میشه .

    با کدویژن

    با تشکر
    که با این درد اگر دربند درمانند درمانند
    فامیل دور : اشاره داره به درهایی که واقعا در نیستن ، مثل نقاشی در روی دیوار. یعنی این دردها مارو شبیه اون درها میکنه .

    #2
    پاسخ : ارسال چند متغییر با usart

    نوشته اصلی توسط mehrdadttt
    من دوتا میکرو رو با usart وصل کردم و می خوام اطلاعات رو روی صفحه نمایش بفرستم مثلا سطر اول ساعت و سطر دوم دما .
    الان وقتی ارایه رو فرمت بندی میکنم و با puts میفرستم هیچ مشکلی پیش نمی یاد .
    ولی چون توی میکرو دوم که اطلاعات رو میگیره کاراکتر های تعریف شده داره باعث پر پر کردن کارکتر های تعریف شده ال سی دی میشه . زمان ارسال دیتا رو 1 ثانیه 1 ثانیه گذاشتم پر پر کم شد . ولی توی میکرو اول یک تابع هست که قراره یک putchar انجام بده تا که مثلا مقدارش یا 0 یا 1 یا 3 یا 7 میشه که در میکرو دوم که با getchar میگیره پورت c رو همین مقادیر قرار میده ولی مشکلی که پیش میاد اینه که زمان دریافت به بعدش کارکترای تعریف شده روی صفحه نمایش موج میکزیکی میرن ( توی کل صفحه ظاهر و غیب مشن ) .
    برای همین میخوام مقدار ساعت و دقیقه و دما رو توی 3 متغییر بریزم و بعد از دریافت توی میکروی دوم اونا رو توی چند متغییر ذخیره کنم و بعد برای ال سی دی بفرستم .
    حالا این کدی که این سه متغییر رو میفرسته و در طرف مقابل دریافت میکنه چطوری نوشته میشه .
    سلام
    اول اینوبگم که پرپر شدن LCD به خاطر اینه که تند تند هم پاک میکنید و هم نمایش میدید (این غلطه)
    شما باید بیاید یک کدی بنوسید که تشخیص بده که هر موقع تغییر کرد آنگاه نمایش بده ....
    مثال
    کد:
    unsigned char x=0,y=0;
    while(1)
    {
      x=getchar();
      if(x!=y)
      {  
        lcd_clear();
        lcd_putsf("100")
      }          
      y=x;  
    }
    این یک نمونه ساده هست که میتونید با استفاده از این شرط از این مشکل رها بشوید

    توی تاپیک زیر یه نمونه کد ساده نوشتم که میتونه بهتون کمک کنه
    http://www.eca.ir/forum2/index.php?topic=89998.15
    مشکلی بود در خدمتم
    موفق باشید





    [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
    معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
    معرفی نرم افزار Codewizard PWM
    با من بیشتر آشنا شوید

    دیدگاه


      #3
      پاسخ : ارسال چند متغییر با usart

      ممنون از جوابتون

      برای پر پر کردن مشکلی ندارم همونطور که گفتم یک ثانیه یک ثانیه میفرستم .

      الان من یک کدی میخوام که فقط یک عدد 7 رقمی رو بفرسته و بعد توی میکروی دوم عدداشو از هم جدا کنم مشکلم حل میشه .
      برای مثال عدد 2359122

      که چهار عدد اولش ساعت هستند و ...
      که با این درد اگر دربند درمانند درمانند
      فامیل دور : اشاره داره به درهایی که واقعا در نیستن ، مثل نقاشی در روی دیوار. یعنی این دردها مارو شبیه اون درها میکنه .

      دیدگاه


        #4
        پاسخ : ارسال چند متغییر با usart

        نوشته اصلی توسط mehrdadttt
        ممنون از جوابتون

        برای پر پر کردن مشکلی ندارم همونطور که گفتم یک ثانیه یک ثانیه میفرستم .

        الان من یک کدی میخوام که فقط یک عدد 7 رقمی رو بفرسته و بعد توی میکروی دوم عدداشو از هم جدا کنم مشکلم حل میشه .
        برای مثال عدد 2359122

        که چهار عدد اولش ساعت هستند و ...
        نیازی نیست تشکر کنی روی دکمه تشکر بزنید کافیه
        این هم مدار

        این هم کد فرستنده
        کد:
        /*****************************************************
        Date  : 2/25/2014
        Author : Saman.Asadi
        Chip type        : ATmega8
        Program type      : Application
        AVR Core Clock frequency: 8.000000 MHz
        Memory model      : Small
        External RAM size    : 0
        Data Stack size     : 256
        *****************************************************/
        
        #include <mega8.h>
        #include <delay.h>
        #include <stdio.h>
        
        void main(void)
        {
          unsigned char Hour=23,Minute=59,Temp=122;
          // USART initialization
          // Communication Parameters: 8 Data, 1 Stop, No Parity
          // USART Receiver: Off
          // USART Transmitter: On
          // USART Mode: Asynchronous
          // USART Baud Rate: 9600
          UCSRA=0x00;
          UCSRB=0x08;
          UCSRC=0x86;
          UBRRH=0x00;
          UBRRL=0x33;
          delay_ms(1000);
          while (1)
          {
            putchar(0x0A);
            putchar(0x0D);
            putchar(Hour);
            putchar(Minute);
            putchar(Temp);
            delay_ms(1000);
          }
        }
        این هم کد گیرنده
        کد:
        #include <mega8.h>
        #include <alcd.h>
        #include <stdio.h>
        #include <delay.h>
        void lcdi(unsigned long int x)
        {
          unsigned long int a,b=0,c;
          char y;
          c=x;
          for(a=0;a<100;a++)
          {
            if(c==0)break;
            c/=10;
            if(b==0)b++;
            else b*=10;
          }
          if(b==0)lcd_putchar('0');
          for(a=b;a>0;a/=10)
          {
           c=x/a;
           x=x-(c*a);
           y=c+48;
           lcd_putchar(y);
          }
        }
        
        void main(void)
        {
          unsigned char Hour1,Minute1,Temp1;
          unsigned char Hour2=0,Minute2=0,Temp2=0;
          // USART initialization
          // Communication Parameters: 8 Data, 1 Stop, No Parity
          // USART Receiver: On
          // USART Transmitter: Off
          // USART Mode: Asynchronous
          // USART Baud Rate: 9600
          UCSRA=0x00;
          UCSRB=0x10;
          UCSRC=0x86;
          UBRRH=0x00;
          UBRRL=0x33;
          // Alphanumeric LCD initialization
          // Connections are specified in the
          // Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
          // RS - PORTB Bit 0
          // RD - PORTB Bit 1
          // EN - PORTB Bit 2
          // D4 - PORTB Bit 4
          // D5 - PORTB Bit 5
          // D6 - PORTB Bit 6
          // D7 - PORTB Bit 7
          // Characters/line: 16
          lcd_init(16);
          lcd_clear();
          while (1)
          {
            if(getchar() == 0x0A)
            if(getchar() == 0x0D)
            {
              Hour1=getchar();
              Minute1=getchar();
              Temp1=getchar();
              if((Hour1 != Hour2) || (Minute1 != Minute2) || (Temp1 != Temp2))
              {
                lcd_clear();
                lcd_putsf("Time");
                lcdi(Hour1);
                lcd_putchar(':');
                lcdi(Minute1);
                lcd_gotoxy(0,1);
                lcd_putsf("Temp=");
                lcdi(Temp1);
              }
              Hour2=Hour1;
              Minute2=Minute1;
              Temp2=Temp1;
            }
          }
        }
        زیر برنامه lcdi رو خودم نوشتم ورودیش هم unsigned long int هست که میتونید عدد رو مستقیما یا متغیر رو درون آن قرار دهید و آن را نشان دهید.
        این هم سورس کد + شبیه سازی در پروتئوس 7.10
        http://s5.picofile.com/file/8114821250/Temp.zip.html
        موفق باشید
        [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
        معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
        معرفی نرم افزار Codewizard PWM
        با من بیشتر آشنا شوید

        دیدگاه


          #5
          پاسخ : ارسال چند متغییر با usart

          آقا لطف کردی . (اینو باید میگفتم)

          بررسیش میکنم .

          اگه میشه این کد منو بگین مشکلش چیه حداکثر عددی که میفرسته 65535 هست که بصورت unsigned int نمایش میده در حالی که unsigned long int 'گذاشتم و
          از توی configure هم روی long تنظیم کردم ولی ...

          کد گیرنده
          کد:
          #include <mega8.h>
          #include <alcd.h>
          #include <delay.h>
          #include <stdio.h>
          unsigned long int b;
          unsigned long int v;
          
           
           char display_buffer[32];
          
          
          
          void main(void)
          {
          PORTB=0x00;
          DDRB=0x00;
          PORTC=0x00;
          DDRC=0xFF;
          PORTD=0x00;
          DDRD=0x00;
          UCSRA=0x02;
          UCSRB=0x10;
          UCSRC=0x86;
          UBRRH=0x03;
          UBRRL=0x40;
          ACSR=0x80;
          SFIOR=0x00;
          lcd_init(8);
          
          
          
          while (1)
             {
          
             scanf("%u",&b);
             v=b;
             
             sprintf(display_buffer,"%u",v);
             lcd_gotoxy(0,0);
             lcd_puts(display_buffer);
             
             }
          }
          این هم فرستنده

          کد:
          #include <mega64a.h>
          #include <delay.h>
          #include <alcd.h>
          #include <stdio.h>
          char display_buffer[32];
          long int r;
          
          void main(void){
          UCSR0A=0x02;
          UCSR0B=0x08;
          UCSR0C=0x06;
          UBRR0H=0x03;
          UBRR0L=0x40;
          UCSR1B=0x00;
          ACSR=0x80;
          SFIOR=0x00;
          
          lcd_init(16);
           
          while (1)
             {  
             r=13592924;
                  
             sprintf(display_buffer,"%u",r);
             puts(display_buffer);    
          
             }
          }
          که با این درد اگر دربند درمانند درمانند
          فامیل دور : اشاره داره به درهایی که واقعا در نیستن ، مثل نقاشی در روی دیوار. یعنی این دردها مارو شبیه اون درها میکنه .

          دیدگاه


            #6
            پاسخ : ارسال چند متغییر با usart

            نوشته اصلی توسط mehrdadttt
            آقا لطف کردی . (اینو باید میگفتم)
            بله :nice:
            نوشته اصلی توسط mehrdadttt
            اگه میشه این کد منو بگین مشکلش چیه حداکثر عددی که میفرسته 65535 هست که بصورت unsigned int نمایش میده در حالی که unsigned long int 'گذاشتم و
            از توی configure هم روی long تنظیم کردم ولی ...

            کد گیرنده
            کد:
            #include <mega8.h>
            #include <alcd.h>
            #include <delay.h>
            #include <stdio.h>
            unsigned long int b;
            unsigned long int v;
            
             
             char display_buffer[32];
            
            
            
            void main(void)
            {
            PORTB=0x00;
            DDRB=0x00;
            PORTC=0x00;
            DDRC=0xFF;
            PORTD=0x00;
            DDRD=0x00;
            UCSRA=0x02;
            UCSRB=0x10;
            UCSRC=0x86;
            UBRRH=0x03;
            UBRRL=0x40;
            ACSR=0x80;
            SFIOR=0x00;
            lcd_init(8);
            
            
            
            while (1)
               {
            
               scanf("%u",&b);
               v=b;
               
               sprintf(display_buffer,"%u",v);
               lcd_gotoxy(0,0);
               lcd_puts(display_buffer);
               
               }
            }
            این هم فرستنده

            کد:
            #include <mega64a.h>
            #include <delay.h>
            #include <alcd.h>
            #include <stdio.h>
            char display_buffer[32];
            long int r;
            
            void main(void){
            UCSR0A=0x02;
            UCSR0B=0x08;
            UCSR0C=0x06;
            UBRR0H=0x03;
            UBRR0L=0x40;
            UCSR1B=0x00;
            ACSR=0x80;
            SFIOR=0x00;
            
            lcd_init(16);
             
            while (1)
               {  
               r=13592924;
                    
               sprintf(display_buffer,"%u",r);
               puts(display_buffer);    
            
               }
            }
            چرا لقمه رو دور سرت دور میزنی؟؟؟
            از روش من برو جلو
            خیلی راحته ....
            اگر ثانیه هم خواستید باید در برنامه من ، به همان طریق یک متغیر دیگه Second اضافه کنید
            در ضمن
            من تا حالا 32 بیتی کار نکردم ...
            ولی 8بیتی هم راحته و هم آسان

            راستی یه سوال
            چرا میخواهید که همه رو با هم بفرستید؟؟؟ (درون یک متغیر 32 بیتی)
            دلیلش چی هست .
            یه سوال دیگه
            چرا تیک x2 رو زدید؟؟؟؟
            سپاسگذارم از اینکه توضیحات برنامه رو پاک نکنی :applause:


            [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
            معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
            معرفی نرم افزار Codewizard PWM
            با من بیشتر آشنا شوید

            دیدگاه


              #7
              پاسخ : ارسال چند متغییر با usart

              وقتی می خواهید داخل scanf یا sprintf بنویسید %u در واقع مقدار unsigned int در نظر گرفته میشه.
              مطمئن نیستم ولی فکر می کنم %lu جواب بده.

              دیدگاه


                #8
                پاسخ : ارسال چند متغییر با usart

                نوشته اصلی توسط sadeghmojtabaei
                وقتی می خواهید داخل scanf یا sprintf بنویسید %u در واقع مقدار unsigned int در نظر گرفته میشه.
                مطمئن نیستم ولی فکر می کنم %lu جواب بده.
                من که تا حالا از این دوتا دستور استفاده نکردم
                [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
                معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
                معرفی نرم افزار Codewizard PWM
                با من بیشتر آشنا شوید

                دیدگاه


                  #9
                  پاسخ : ارسال چند متغییر با usart

                  کدت کارمو راه انداخت . ممنون
                  مال خودمم رو دیگه پیگیر نشدم بعدا درستش میکنم . اونم به درد یکسری کارا میخوره .
                  نوشته اصلی توسط SAMAN.ASADI
                  چرا لقمه رو دور سرت دور میزنی؟؟؟
                  جواب سوال اولو ببین :NO:
                  :NO: :NO: :NO: :NO: :NO:
                  نوشته اصلی توسط SAMAN.ASADI
                  چرا میخواهید که همه رو با هم بفرستید؟؟؟ (درون یک متغیر 32 بیتی)
                  دلیلش چی هست .
                  به خاطر دلایل امنیتی داداش :evil: :evil: :evil: :evil: :evil:
                  نوشته اصلی توسط SAMAN.ASADI
                  یه سوال دیگه
                  چرا تیک x2 رو زدید؟؟؟؟
                  اگه بد بود که نمیزاشتنش

                  یکی از دلیلاش این بود که من کریستال 16 کار میکنم و خطای صفر داشت و دلیل دومش که نمیدونم درسته یا نه هرچی فرکانس یا سرعت بیشتر باشه اطلاعات درستر ارسال میشه (گفتم مطمئن نیستم چون رشتم الکترونیک نیست و این کار رو از روی علاقه ای که به الکترونیک دارم انجام میدم درسته گاهی وقتا اعصابمو خورد میکنه ولی بلاخره هر کاری که میخوام بکنم رو موفق به انجامش میشم )


                  راستی من می خوام دوتا میکرو رو با یک سیم 3.5 متری آنتن تلویزیون بهم وصل کنم بدون RS , Max جواب میده ؟

                  یک جایی خوندم با RS و سیم مرغوب و نرخ انتقال 2400 تا 900 متر جواب میده ودر شرایط عادی 200 متر ، پس بدون RS که 3~4 مترو جواب میده دیگه آره ؟


                  یا با مادون قرمز بفرستمش ؟

                  راستی نیاز به مد sleep برای حذف نویز CPU هست یا نه ؟
                  که با این درد اگر دربند درمانند درمانند
                  فامیل دور : اشاره داره به درهایی که واقعا در نیستن ، مثل نقاشی در روی دیوار. یعنی این دردها مارو شبیه اون درها میکنه .

                  دیدگاه


                    #10
                    پاسخ : ارسال چند متغییر با usart

                    نوشته اصلی توسط mehrdadttt
                    یکی از دلیلاش این بود که من کریستال 16 کار میکنم و خطای صفر داشت و دلیل دومش که نمیدونم درسته یا نه هرچی فرکانس یا سرعت بیشتر باشه اطلاعات درستر ارسال میشه (گفتم مطمئن نیستم چون رشتم الکترونیک نیست و این کار رو از روی علاقه ای که به الکترونیک دارم انجام میدم درسته گاهی وقتا اعصابمو خورد میکنه ولی بلاخره هر کاری که میخوام بکنم رو موفق به انجامش میشم )
                    خوشم اومد .... :applause:
                    ایول ... :applause:
                    نه اینطور نیست ... اگر فرکانس درست و مخصوص ارتباط سریال باشه دیگه نمیخواد فرکانس بالا کار کنی
                    مثلا
                    کریستالهای مناسب برای ارتباط با پورت COM :
                    1.8432MHz
                    3.6864MHz
                    7.3728MHz
                    11.0592MHz
                    14.7456MHz
                    اینها هست که اگر سرعت براتون مطرح نباشه کریستال 1.8432MHz و با نرخ 1200 بیت در ثانیه هم کافیه
                    در ضمن
                    چون دو میکرو با هم در ارتباط هستند و از طرفی هر دو میکرو میتوانند منبع فرکانسشون رو خودشون تعیین میکنند پس نگران درصد خطا نباشید چون هر دو میکرو با درصد خطای مشخصی پیش میروند که این باعث میشه خطایی پیش نیاید .
                    پس نیازی به کریستال گذاشتن نداری فقط سعی کن که هر دومیکرو فرکانسشون یکی باشه چون باید با یک درصد خطای مشخصی پیش بروند
                    فرکانس 1مگا و نرخ 1200 کافیه

                    موفق باشید
                    [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
                    معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
                    معرفی نرم افزار Codewizard PWM
                    با من بیشتر آشنا شوید

                    دیدگاه


                      #11
                      پاسخ : ارسال چند متغییر با usart

                      کد خودمم راه افتاد

                      هر کی خواست میتونه استفاده کنه .
                      همونطور که گفتم میتونین برای امنیت استفاده بشه مثلا شماره موبایل و ... رو قاطی بهش بدین یا یک تابع برای قاطی کردن شماره بنویسین و با gsm , ... بفرستین و در طرف دوم پس از دریافت مقدار شماره موبایل رو با یک تابع یه حالت اول برگردونینش .

                      یا اعدادشو جدا کنید که هر عددش یک مفهومی داشته باشه و یکسری کارای دیگه ...


                      اینم ویرایشش

                      کد فرستنده
                      کد:
                      #include <mega64a.h>
                      #include <delay.h>
                      #include <alcd.h>
                      #include <stdio.h>
                      char display_buffer[32];
                      long int r;
                      
                      void main(void){
                      UCSR0A=0x02;
                      UCSR0B=0x08;
                      UCSR0C=0x06;
                      UBRR0H=0x03;
                      UBRR0L=0x40;
                      UCSR1B=0x00;
                      ACSR=0x80;
                      SFIOR=0x00;
                      
                      lcd_init(16);
                       
                      while (1)
                         {  
                         r=3712312341;
                              
                         sprintf(display_buffer,"%lu",r);
                         puts(display_buffer);    
                      
                         }
                      }
                      کد گیرنده
                      کد:
                      #include <mega8.h>
                      #include <alcd.h>
                      #include <delay.h>
                      #include <stdio.h>
                      unsigned long int b;
                      unsigned long int v;
                      
                       
                       char display_buffer[32];
                      
                      
                      
                      void main(void)
                      {
                      PORTB=0x00;
                      DDRB=0x00;
                      PORTC=0x00;
                      DDRC=0xFF;
                      PORTD=0x00;
                      DDRD=0x00;
                      UCSRA=0x02;
                      UCSRB=0x10;
                      UCSRC=0x86;
                      UBRRH=0x03;
                      UBRRL=0x40;
                      ACSR=0x80;
                      SFIOR=0x00;
                      lcd_init(16);
                      
                      
                      
                      while (1)
                         {
                      
                         scanf("%lu",&b);
                         v=b;
                         
                         sprintf(display_buffer,"%lu",v);
                         lcd_gotoxy(0,0);
                         lcd_puts(display_buffer);
                         
                         }
                      }
                      با تشکر از آقا صادق عزیز و همینطور آقا سامان
                      که با این درد اگر دربند درمانند درمانند
                      فامیل دور : اشاره داره به درهایی که واقعا در نیستن ، مثل نقاشی در روی دیوار. یعنی این دردها مارو شبیه اون درها میکنه .

                      دیدگاه


                        #12
                        پاسخ : ارسال چند متغییر با usart

                        دوست عزیز اگه میشه کدتو یکم توضیح بده من تا حالا با دستور scsnf کار نکردم
                        :angry: oo: :angry:

                        دیدگاه


                          #13
                          پاسخ : ارسال چند متغییر با usart

                          oo:
                          این که مه چیزش معلومه دیگه ... !

                          با این کد
                          sprintf(display_buffer,"%lu",r);

                          میاد مقدار r رو ارسال میکنه و با کد زیر

                          scanf("%lu",&b);

                          میاد دریافت میکنه دیگه .
                          که با این درد اگر دربند درمانند درمانند
                          فامیل دور : اشاره داره به درهایی که واقعا در نیستن ، مثل نقاشی در روی دیوار. یعنی این دردها مارو شبیه اون درها میکنه .

                          دیدگاه


                            #14
                            پاسخ : ارسال چند متغییر با usart

                            من هم تو برنامم از دستورات شما استفاده کردم ولی نمیدونم چرا جواب نمیگیرم
                            فرستنده :

                            کد:
                            #include <mega8.h>
                            
                            #include <delay.h>
                            
                            // Standard Input/Output functions
                            #include <stdio.h>
                            #include <delay.h>
                            float v;
                            
                            unsigned int adc_data;
                            #define ADC_VREF_TYPE 0x40
                            
                            // ADC interrupt service routine
                            interrupt [ADC_INT] void adc_isr(void)
                            {
                            // Read the AD conversion result
                            adc_data=ADCW;
                            }
                            
                            // Read the AD conversion result
                            // with noise canceling
                            unsigned int read_adc(unsigned char adc_input)
                            {
                            ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
                            // Delay needed for the stabilization of the ADC input voltage
                            delay_us(10);
                            #asm
                              in  r30,mcucr
                              cbr r30,__sm_mask
                              sbr r30,__se_bit | __sm_adc_noise_red
                              out mcucr,r30
                              sleep
                              cbr r30,__se_bit
                              out mcucr,r30
                            #endasm
                            return adc_data;
                            }
                            
                            // Declare your global variables here
                            
                            void main(void)
                            {
                            // Declare your local variables here
                            
                            // Input/Output Ports initialization
                            // Port B initialization
                            // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
                            // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
                            PORTB=0x00;
                            DDRB=0x00;
                            
                            // Port C initialization
                            // Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
                            // State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
                            PORTC=0x00;
                            DDRC=0x00;
                            
                            // Port D initialization
                            // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
                            // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
                            PORTD=0x00;
                            
                            
                            DDRD=0x00;
                            
                            // Timer/Counter 0 initialization
                            // Clock source: System Clock
                            // Clock value: Timer 0 Stopped
                            TCCR0=0x00;
                            TCNT0=0x00;
                            
                            // Timer/Counter 1 initialization
                            // Clock source: System Clock
                            // Clock value: Timer1 Stopped
                            // Mode: Normal top=0xFFFF
                            // OC1A output: Discon.
                            // OC1B output: Discon.
                            // Noise Canceler: Off
                            // Input Capture on Falling Edge
                            // Timer1 Overflow Interrupt: Off
                            // Input Capture Interrupt: Off
                            // Compare A Match Interrupt: Off
                            // Compare B Match Interrupt: Off
                            TCCR1A=0x00;
                            TCCR1B=0x00;
                            TCNT1H=0x00;
                            TCNT1L=0x00;
                            ICR1H=0x00;
                            ICR1L=0x00;
                            OCR1AH=0x00;
                            OCR1AL=0x00;
                            OCR1BH=0x00;
                            OCR1BL=0x00;
                            
                            // Timer/Counter 2 initialization
                            // Clock source: System Clock
                            // Clock value: Timer2 Stopped
                            // Mode: Normal top=0xFF
                            // OC2 output: Disconnected
                            ASSR=0x00;
                            TCCR2=0x00;
                            TCNT2=0x00;
                            OCR2=0x00;
                            
                            // External Interrupt(s) initialization
                            // INT0: Off
                            // INT1: Off
                            MCUCR=0x00;
                            
                            // Timer(s)/Counter(s) Interrupt(s) initialization
                            TIMSK=0x00;
                            
                            // USART initialization
                            // Communication Parameters: 8 Data, 1 Stop, No Parity
                            // USART Receiver: On
                            // USART Transmitter: On
                            // USART Mode: Asynchronous
                            // USART Baud Rate: 9600
                            UCSRA=0x00;
                            UCSRB=0x18;
                            UCSRC=0x86;
                            UBRRH=0x00;
                            UBRRL=0x33;
                            
                            // Analog Comparator initialization
                            // Analog Comparator: Off
                            // Analog Comparator Input Capture by Timer/Counter 1: Off
                            ACSR=0x80;
                            SFIOR=0x00;
                            
                            // ADC initialization
                            // ADC Clock frequency: 62.500 kHz
                            // ADC Voltage Reference: AVCC pin
                            ADMUX=ADC_VREF_TYPE & 0xff;
                            ADCSRA=0x8F;
                            
                            // SPI initialization
                            // SPI disabled
                            SPCR=0x00;
                            
                            // TWI initialization
                            // TWI disabled
                            TWCR=0x00;
                            // Global enable interrupts
                            #asm("sei")
                            
                            while (1)
                               {
                               v=read_adc(0);
                               v=v*500.0/1023.0;
                               printf("%2.2fc",v); 
                               putsf(v);
                               }
                            }

                            دیدگاه


                              #15
                              پاسخ : ارسال چند متغییر با usart

                              گیرنده :
                              کد:
                              #include <mega8.h>
                              
                              // Alphanumeric LCD Module functions
                              #include <alcd.h>
                              #include <delay.h>
                              // Standard Input/Output functions
                              #include <stdio.h>
                              unsigned char b;
                              unsigned char v;             
                              unsigned char i[10];
                              // Declare your global variables here
                              
                              void main(void)
                              {
                              // Declare your local variables here
                              
                              // Input/Output Ports initialization
                              // Port B initialization
                              // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
                              // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
                              PORTB=0x00;
                              DDRB=0x00;
                              
                              // Port C initialization
                              // Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
                              // State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
                              PORTC=0x00;
                              DDRC=0x00;
                              
                              // Port D initialization
                              // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
                              // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
                              PORTD=0x00;
                              DDRD=0x00;
                              
                              // Timer/Counter 0 initialization
                              // Clock source: System Clock
                              // Clock value: Timer 0 Stopped
                              TCCR0=0x00;
                              TCNT0=0x00;
                              
                              // Timer/Counter 1 initialization
                              // Clock source: System Clock
                              // Clock value: Timer1 Stopped
                              // Mode: Normal top=0xFFFF
                              // OC1A output: Discon.
                              // OC1B output: Discon.
                              // Noise Canceler: Off
                              // Input Capture on Falling Edge
                              // Timer1 Overflow Interrupt: Off
                              // Input Capture Interrupt: Off
                              // Compare A Match Interrupt: Off
                              // Compare B Match Interrupt: Off
                              TCCR1A=0x00;
                              TCCR1B=0x00;
                              TCNT1H=0x00;
                              TCNT1L=0x00;
                              ICR1H=0x00;
                              ICR1L=0x00;
                              OCR1AH=0x00;
                              OCR1AL=0x00;
                              OCR1BH=0x00;
                              OCR1BL=0x00;
                              
                              // Timer/Counter 2 initialization
                              // Clock source: System Clock
                              // Clock value: Timer2 Stopped
                              // Mode: Normal top=0xFF
                              // OC2 output: Disconnected
                              ASSR=0x00;
                              TCCR2=0x00;
                              TCNT2=0x00;
                              OCR2=0x00;
                              
                              // External Interrupt(s) initialization
                              // INT0: Off
                              // INT1: Off
                              MCUCR=0x00;
                              
                              // Timer(s)/Counter(s) Interrupt(s) initialization
                              TIMSK=0x00;
                              
                              // USART initialization
                              // Communication Parameters: 8 Data, 1 Stop, No Parity
                              // USART Receiver: On
                              // USART Transmitter: On
                              // USART Mode: Asynchronous
                              // USART Baud Rate: 9600
                              UCSRA=0x00;
                              UCSRB=0x18;
                              UCSRC=0x86;
                              UBRRH=0x00;
                              UBRRL=0x33;
                              
                              // Analog Comparator initialization
                              // Analog Comparator: Off
                              // Analog Comparator Input Capture by Timer/Counter 1: Off
                              ACSR=0x80;
                              SFIOR=0x00;
                              
                              // ADC initialization
                              // ADC disabled
                              ADCSRA=0x00;
                              
                              // SPI initialization
                              // SPI disabled
                              SPCR=0x00;
                              
                              // TWI initialization
                              // TWI disabled
                              TWCR=0x00;
                              
                              // Alphanumeric LCD initialization
                              // Connections specified in the
                              // Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
                              // RS - PORTB Bit 0
                              // RD - PORTB Bit 1
                              // EN - PORTB Bit 2
                              // D4 - PORTB Bit 4
                              // D5 - PORTB Bit 5
                              // D6 - PORTB Bit 6
                              // D7 - PORTB Bit 7
                              // Characters/line: 16
                              lcd_init(16);
                              
                              while (1)
                                 { 
                                 scanf("%2.2fc",&b);
                                 v=b;
                                 
                                 sprintf(i,"%2.2fc",v);
                                 lcd_gotoxy(0,0);
                                 lcd_puts(i);
                                 }      
                              }

                              دیدگاه

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