اطلاعیه

Collapse
No announcement yet.

تبدیل برنامه C به Basic

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

    تبدیل برنامه C به Basic

    با عرض سلام به دوستان گرامی
    برای پروژه دانشگاهیم یه برنامه دارم که به زبان C نوشته شده ولی چون باید ارایه بدم باید زبان Basic رو داشته باشم و باید تا آخر فروردین تحویل بدم برای همین اگر کسی میتونه این کارو واسم انجام بده ممنون میشم
    خیلی بهش نیاز دارم :angry:
    برنامه رو قرار میدم اگه درهم شد آدرس پلود شده رو هم قرار میدم
    http://www.4shared.com/zip/O7ePUAxy/file.html

    /************************************************** ***
    This program was produced by the
    CodeWizardAVR V2.05.0 Advanced
    Automatic Program Generator
    © Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.
    http://www.hpinfotech.com

    Project :
    Version :
    Date : 10/20/2011
    Author : www.Eca.ir *** www.Webkade.ir
    Company :
    Comments:


    Chip type : ATmega8
    Program type : Application
    AVR Core Clock frequency: 1.000000 MHz
    Memory model : Small
    External RAM size : 0
    Data Stack size : 256
    ************************************************** ***/

    #include <mega8.h>
    #include <delay.h>
    #include <stdio.h>

    // Alphanumeric LCD Module functions
    #include <alcd.h>

    long int timer0_ov;
    long int in_freq;
    char buff[16],buff2[16];
    int humidity;

    // Timer 0 overflow interrupt service routine
    interrupt [TIM0_OVF] void timer0_ovf_isr(void)
    {
    timer0_ov++;

    }

    // 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: T0 pin Falling Edge
    TCCR0=0x06;
    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=0x01;

    // USART initialization
    // USART disabled
    UCSRB=0x00;

    // 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);

    // Global enable interrupts
    #asm("sei&quot

    while (1)
    {

    TCCR0=0x06;
    #asm("sei&quot
    delay_ms(50);
    #asm("cli&quot
    in_freq=20*(timer0_ov*256+TCNT0);
    sprintf(buff,"Freq=%d",in_freq);
    //delay_ms(250);
    lcd_clear();
    lcd_puts(buff);
    TCCR0=0x00;
    timer0_ov=0;
    TCNT0=0;

    humidity=(-0.075872)*(in_freq-7351);
    lcd_gotoxy(0,1);
    sprintf(buff2,"Humidity=%d",humidity);
    lcd_puts(buff2);

    }
    }


    #2
    پاسخ : تبدیل برنامه C به Basic

    داداش برنامه چیز زیادی نداره که. نصف بیشترش کامنت های کد ویژن هست که حذف میشه.شما شروع کن تبدیل رو دوستان کمک میکنند.
    [img width=477 height=100]http://www.eca.ir/pic/upload/agazade.png[/img]

    دیدگاه


      #3
      پاسخ : تبدیل برنامه C به Basic

      سلام

      من به بیسک می نویسم ولی C بلد نیستم :mrgreen:

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

      دیدگاه


        #4
        پاسخ : تبدیل برنامه C به Basic

        خوشحالم که تو ایام عید هم انجمن به فکر ما هم هست :applause:
        ظاهرا بیشتر پیکر بندی تایم/کانتر و LCD و..است
        این برنامه مال یه پروژه رطوبت سنجه لینکشو قرار میدم اگه لطف کنین سر بزنین ممنون میشم
        http://www.iranmicro.ir/forum/showthread.php?t=5534&highlight=HS1101
        خروجی IC555 میره به پورت D.4 که رو سطر اول فرکانس رو نشون میده و رو سطر دوم مقدار رطوبت رو
        یعنی یه برنامه فرکانس متر میشه با ATMEGA8 که با کریستال داخلی 1 MHZ کار میکنه
        برای نشان دادن فرکانس و رطوبت از چند خط فرمول آخر میشه کمک گرفت
        با تشکر.

        دیدگاه


          #5
          پاسخ : تبدیل برنامه C به Basic

          توضیحات بیشتر رو در قالب یه فایل PDF با حجم 400KB در آدرس زیر قرار دادم
          http://www.4shared.com/zip/bydjCNYJ/HS1101.html
          یا
          http://mehrdadbarari.persiangig.com/other/HS1101.zip
          بعد یه مشکله دیگه هم دارم اینه که تو شبیه ساز برنامه کار میکنه اما تو عمل بیشتر اوقات یک مرتبه نوشته های روی LCD تغییر نمیکنه و ثابت میمونه ولی در حالی که نباید همچین چیزی باشه و تغییرات رو به صورت پیوسته نشون بده
          به نظرتون مشکل از چی میتونه باشه؟
          ممنون میشم اگه یک راهنمایی و راه حلی واسه این مشکلم هم بفرمایید.

          دیدگاه


            #6
            پاسخ : تبدیل برنامه C به Basic

            کسی نیست :redface:

            دیدگاه


              #7
              پاسخ : تبدیل برنامه C به Basic

              دوست من پیغام خصوصی تون رو الان دیدم ببخشید.

              من بیسیک کار نکردم چون اصلا خوشم نمیاد به نظر من برای برنامه نویسی حرفه ای اصلا دستمون باز نیست.

              من توضیحات برنامه ای که گذاشتین رو میدم دوستان زحمتش تبدیل به بیسیکش رو بکشن.

              منتها الان دیر وقته یه زره (ساعت 2:40 نیمه شب) انشاء الله بعد ظهر براتون کامل توضیح میدم ببخشید.
              [glow=red,2,300]گرد هم آمدن شروع است.با هم ماندن پيشرفت است.با هم کار کردن موفقيت است.[/glow]
              [img width=98 height=100]http://s3.picofile.com/file/7407857311/icon3.png[/img]

              دیدگاه


                #8
                پاسخ : تبدیل برنامه C به Basic

                سلام متاسفانه قولی که دادم با تاخیر مواجه شد امیدوارم منو ببخشید .

                دوستان عزیز نوشتن توضیحات حدود یک ساعت ونیم از وقتم رو گرفت خواهشا برا این که کارم بیهدوه نشه به دوست خوبمون که کارش گیره کمک کنید و برنامه رو با این توضیحات با زبان بیسیک بنویسید.

                توضیحات کامل هست و نیازی به توضیح کارکرد دستگاه نیست.اگه کسی بیسیک کار کرده باشه به راحتی میتونه تبدیلش کنه.

                برا اینکه توضیحات رو بهتر ببینید برنامه رو داخل word کپی کنید.

                و اما توضیحات برنامه :

                خب ابتدا در مورد راه اندازی و مشخصات فنی توضیح میدم.

                فرکانس کاری میکرو که مشخصه 1 مگاهرتز انتخاب شده.بسته به دلخواه خودتون میتونید از RC داخلی یا کریستال خارجی استفاده کنید در صورتی که کریستال داخلی انتخاب کردین به غیر از تنظیم فیوز بیت ها کلاک(CKSELx) ، باید فیوز بیت های SUT0=0 , SUT1=1 انتخاب بشه. اما در صورتی که کریستال خارجی انتخاب بشه کافیه فقط فیوز بیت CKOPT=0 انتخاب بشه و همه فیوز بیت های دیگه برابر 1 انتخاب بشن.

                از لحاظ سخت افزار تو این برنامه فقط lcd متصل شده .lcd هم 16*2 میباشد. پایه ها رو مشخص کردم:

                // 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

                تو برنامه فقط از تایمر 0 استفاده شده که راه اندازیش به صورت زیر هست:
                تایمر به صورت کانتر راه اندازی شده که به پایه ی T0 متصل شده و به صورت لبه ی نزولی. وقفه سرریز فعال شده و مقدار اولیه رجیستر TCNT برابر صفر میباشد.

                از اینجا دارم توضیحات رو به ترتیب میدم:


                long int timer0_ov; // تعریف متغییر 32 بیتی بدون علامت با مقدار اولیه صفر
                long int in_freq; //تعریف متغییر 32 بیتی بدون علامت با مقدار اولیه صفر
                char buff[16],buff2[16]; //تعریف متغییر های آرایه 8 بیتی با علامت با تعداد داریه 16
                int humidity; //تعریف متغییر 16 بیتی با علامت با مقدار اولیه صفر


                interrupt [TIM0_OVF] void timer0_ovf_isr(void)
                {
                timer0_ov++; // این یه تکیه مربوط به زیر روال وقفه هست کاری که قرار انجام بشه در اینجا ، اضافه کردن
                //مقدار متغییر(timer0_ov) به اندازه ی یه واحد بهد از هر بار اجرای وقفه هست.
                }

                [hr]

                در main برنامه با استفاده از دستور لوپ باید دستوارت زیر اجرا بشه تمام کارایی که قراره انجام بشه.


                TCCR0=0x06;

                //مقدار دهی رجیستر TCNT با 6 هگز

                #asm("sei&quot

                //فعال کردن یا اجازه دادن اجرای وقفه

                delay_ms(50);

                //ایجاد تاخیر به اندازه ی 50 میلی ثانیه

                #asm("cli&quot

                //غیر فعال کردن یا اجازه دادن اجرای وقفه

                in_freq=20*(timer0_ov*256+TCNT0);

                // مقدار متغییر (timer0_ov) در مقدار 255 ضرب شده و با مقدار //رجیستر TCNT جمع شده حاصل کل در مقدار عددی 20 ضرب
                //شده ودر نهایت در متغییر (in_freq) که قبلا تعریف کردیم ریخته میشه

                sprintf(buff,"Freq=%d",in_freq);

                //تبدیل مقدار متغییر in_freq به رشته و ریختن اون در متغییر آرایه ی buff

                lcd_clear();

                //پاک کردن صفحه ی lcd

                lcd_puts(buff);

                // نمایش مقدار رشته ی داخل آرایه ی buff بر روی lcd

                TCCR0=0x00;

                // صفر کردن محتویات رجیستر TCCR0 تایمر

                timer0_ov=0;

                //صفر کردن محتویات متغییر timer0_ov

                TCNT0=0;

                //صفر کردن محتویات رجیستر TCNT0 تایمر

                humidity=(-0.075872)*(in_freq-7351);

                //مقدار متغییر in_freq از عدد7351 کم شده و درمقدار اعشاری -0.075872 ضرب شده و در نهایت در متغییر humidity ریخته میشه

                lcd_gotoxy(0,1);

                // پرش به مختصات سطر دوم و ستون اول lcd

                sprintf(buff2,"Humidity=%d",humidity);

                // تبدیل مقدار متغییر humidity به رشته و ریختن اون در متغییر آرایه یbuff2

                lcd_puts(buff2);

                //نمایش مقدار رشته ی داخل آرایه ی buff2 بر روی lcd
                [glow=red,2,300]گرد هم آمدن شروع است.با هم ماندن پيشرفت است.با هم کار کردن موفقيت است.[/glow]
                [img width=98 height=100]http://s3.picofile.com/file/7407857311/icon3.png[/img]

                دیدگاه

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