اطلاعیه

Collapse
No announcement yet.

ترجمه تابع سی به زبان بیسیک

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

    ترجمه تابع سی به زبان بیسیک

    دوستان یک تابع به زبان سی دارم میخوام به زبان بیسک بنویسم ولی سوادم قد نمیده لطفا کمکم کنید
    کد:
    //////////////////////////////////
    void wait_to_get(char ch)
     { 
     while(ch != getchar());
     }
    
    
    ///////////////////////////
    کد:
    /////////////////////////////
     
     
     void cmti(void)
      { 
       char c[1];
       wait_to_get(',');
       c[0]=getchar();
       MEMO=atoi(c);
       if(MEMO>=10)sms_location/=10;
       printf("AT+CMGR=%d\r",MEMO);
      } 
      
    ///////////////////////////////////
    دوستان کمک کنید یچیزی نوشتم ارور میده
    کد:
    Cmti:
      Dim C(2) As String * 1
      Dim MEMO As Integer 
      do
    m = Waitkey()
      Loop until m=","
    C[1]= Waitkey()
      MEMO = val(c)
      If MEMO >= 10 Then
       MEMO = MEMO / 10
    End If
       Print "AT+CMGR=" ; MEMO ; Chr(13)
      
    Return

    #2
    پاسخ : ترجمه تابع سی به زبان بیسیک

    مال چی هست؟ یه توضیحی بده چیه

    فک کنم مال ارتباط با sim 900 باشه

    اضافه شده در تاریخ :
    خوب

    کد:
    $regfile = "m8def.dat"
    $crystal = 8000000
    $baud = 9600
    
    
      Dim C(2) As String * 1
      Dim Memo As Integer
      Dim M As Byte
      do
    m = Waitkey()
      Loop until m=","
    C(1) = Waitkey()
      MEMO = val(c(1))
      If MEMO >= 10 Then
       MEMO = MEMO / 10
    End If
       Print "AT+CMGR=" ; MEMO ; Chr(13)
    
    Return

    آرایه رو تو بسکام باید اینجوری بگی
    کد:
    C(1)=20

    دیدگاه


      #3
      پاسخ : ترجمه تابع سی به زبان بیسیک

      اقا رضا مشکل ارور حل شده ولی برنامه به این قسمت میرسه منتظر کارکتر میمونه ولی با این که کارکتر میاد اون رو نمیخونه.مشکل کجاست
      کد:
      Cheksms:
       Do
      m = Waitkey()
        Loop until m=","
      
      C(1) = Waitkey()
        MEMO = val(c(1))
        If MEMO >= 10 Then
         MEMO = MEMO / 10
      End If
         Urxc_buff = "" : Cnt = 0
         Print "AT+CMGR=" ; Memo ; Chr(13)
         Wait 1
      
         Gosub Detect_data
      Return
      وایت کی هیچ کارکتری نمیخونه.

      دیدگاه


        #4
        پاسخ : ترجمه تابع سی به زبان بیسیک

        سلام
        خوب منطقی هست که Waitkey و دستور Loop until با عث توقف اجرای برنامه میشود (تا زمان دریافت کرکتر) و اینطور خوندن ممکنه خیلی باگ داشته یاشه
        به نظر من اگه بصورت وقفه ای بخونی خیلی بهتر عمل کنه ضمن اینکه میکرو متمرکز روی یک دستور نمیشه

        یک پیشنهاد : بیخیال بیسیک بشو و برو سراغ C اول با کدویژن کار کن بعد که راه افتادی برو سراغ winavr بعد ببین کیفیت برنامه هات چه قدر تغییر میکنه

        موفق باشید
        امام علي (عليه السلام) : الزکات العلم نشرهُ/ زکات علم نشر آن است

        دیدگاه


          #5
          پاسخ : ترجمه تابع سی به زبان بیسیک

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

          دیدگاه


            #6
            پاسخ : ترجمه تابع سی به زبان بیسیک

            با سلام


            اول از همه از شما خواهش میکنم همین امروز این بیسکام مزخرف را ول کنید چون مانع یادگیری و پیشرفت شما می باشد !!!!!!
            ولی باز هم اگر اسرار داشتید ویا وقت ندارید پیشنهاد میکنم برای خواندن از روشی که من قبلا استفاده میکردم اگر خواستی استفاده بکن
            کد:
            $regfile = "m32def.dat"
            $crystal = 11059200
            '$crystal = 8000000
            $baud = 9600                        ' use baud rate
            سپس اینتراپت دریافت سریال را فعال کن
            کد:
            Enable Urxc                         'enable uart data revive interrupt
            On Urxc Read_from_gsm                    'jump to this label when reciving data from serial port
            Enable Interrupts
            متغیرهای لازم معرفی
            کد:
            Dim Str_temp As String * 20
            Dim Byte_temp As Byte
            قبل از صدور اجازه ارسال اول محتویات متغیر را صفر کنید
            کد:
             Str_temp = ""
            با زیر برنامه پایین کاراکترهای ارسالی پس از تبدیل به رشته در دستس شماست
            کد:
            Read_from_gsm:
            
              Byte_temp = Udr                     'reading uart data register (udr)
            
              Select Case Byte_temp
            
                 Case 0
                   nop
                 Case 10
                  nop
                 Case 13
                  nop
            
                 Case Else
                   Str_temp = Str_temp + Chr(byte_temp)
            
              End Select
            
            Return

            دیدگاه


              #7
              پاسخ : ترجمه تابع سی به زبان بیسیک

              اقا شاپور ممنونم ولی این تابع رو دارم توی برنامه.به این شکل
              کد:
              Rec_isr:
                Incr Cnt
                B = Udr
                Select Case B
                 Case 0
                 Case 13
                 Case 10
                 Case Else
                 Urxc_buff = Urxc_buff + Chr(b)
                End Select
              Return
              من تو یک قسمت میخوام شماره خانه ای که اس ام اس توش ذخیره شده رو در بیارم.وقتی این پیام CMTI: “SM”,4 از سیم 900 میاد من میخوام اون شماره 4 رو در بیارم.هرجور پیش میرم نمیشه.شما تو برنامه تون اینکار رو چجوری کردید.و چطور اس ام اس جدید رو میخونید؟

              دیدگاه


                #8
                پاسخ : ترجمه تابع سی به زبان بیسیک

                نوشته اصلی توسط arvin2009
                اقا شاپور ممنونم ولی این تابع رو دارم توی برنامه.به این شکل
                کد:
                Rec_isr:
                  Incr Cnt
                  B = Udr
                  Select Case B
                   Case 0
                   Case 13
                   Case 10
                   Case Else
                   Urxc_buff = Urxc_buff + Chr(b)
                  End Select
                Return
                من تو یک قسمت میخوام شماره خانه ای که اس ام اس توش ذخیره شده رو در بیارم.وقتی این پیام CMTI: “SM”,4 از سیم 900 میاد من میخوام اون شماره 4 رو در بیارم.هرجور پیش میرم نمیشه.شما تو برنامه تون اینکار رو چجوری کردید.و چطور اس ام اس جدید رو میخونید؟
                با سلام

                در کد پایین من منتظر آمدن "OK" از پورت سریال هستم

                کد:
                  Do
                   Str_temp = ""
                   Wait 1
                   Str_temp = Lcase(str_temp)
                   Byte_temp = Instr(str_temp , "ok")
                 Loop Until Byte_temp > 0

                دیدگاه


                  #9
                  پاسخ : ترجمه تابع سی به زبان بیسیک

                  مرسی اقا شاپور ولی این دستور به کار من نمیاد.شما فقط با دستور INSTR موقعیت OK رو پیدا میکنید و اگه پیدا نشه صفر برمیگردانید.
                  من میخوام وقتی CMTI: “SM”,3 میاد منتظر ", "باشم و عدد اخری را در متغیری ذخیره کنم.
                  دوستان کمک کنید خیلی وقتم رو گرفته تا الان

                  دیدگاه


                    #10
                    پاسخ : ترجمه تابع سی به زبان بیسیک

                    با سلام

                    دوست من شما میتوانستید آنرا توسعه دهید مبنا را من گفتم به هر حال ببین مثلا من در فایل زیر که کیفیت سیگنال را درمی آورم

                    1- دنبال یک کاراکتر ثابت که همیشه می اید میگردید ":"
                    2- نسبت به موقعیت این کاراکتر کاراکتری را که میخواهید جدا میکنید
                    کد:
                     
                    '===============================================================================
                    '-------------------------------------------------------------------------------
                    '
                    '-------------------------------------------------------------------------------
                    Sub Test_signal_quality
                    
                     '--------------------------------
                     ' Control Network Signal Quality
                     '--------------------------------
                      Sms = ""
                      Print "AT+CSQ"
                      Wait 2
                      Sms = Trim(sms)
                      Sms = Lcase(sms)
                    
                      Start_data = Instr(sms , ":")
                      Incr Start_data
                    
                      Sms = Mid(sms , Start_data , 2)
                      Signal_quality = Val(sms)
                    
                     '---------------------------------------------
                     ' اشکال در خواندن مقدار درست مابین 15 تا 50 
                     '---------------------------------------------
                      If Signal_quality < 15 Or Signal_quality > 50 Then Test_signal_quality
                    
                    
                      Select Case Signal_quality
                        Case 0 To 15
                         Signal_quality = 0
                        Case 16 To 26
                         Signal_quality = 1
                        Case Is > 26
                         Signal_quality = 2
                      End Select
                    
                    Return
                    End Sub

                    دیدگاه


                      #11
                      پاسخ : ترجمه تابع سی به زبان بیسیک

                      اقا شاپور مرسی.درسته از این راه هم میشد ولی یکم پیچیده میشد.من از این راه به نتیجه رسیدم.فقط با دوخط
                      کد:
                       A = Right(urxc_buff , 1)
                          Memo = Val(a)
                      :nice:

                      دیدگاه

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