اطلاعیه

Collapse
No announcement yet.

مشکل با تایمر میکرو

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

    مشکل با تایمر میکرو

    سلام
    من میخام با میکرو یه led را برای زمان مشخصی روشن کنم. به این صورت که کاربر زمان روشن بود را به برحسب میلی ثانیه به میکرو میده و میکرو اونو روشن میکنه. برای اینکه دقیق باشه از تایمر صفر استفاده کردم. برنامه ای که نوشتم به صورت زیره ولی تو پرتئوس جواب نمیده . اگه میشه دوستان یه نگاهی به این برنامه بندازن ببینن کجاش مشکل داده . من اولین باره که دارم با تایمر کار میکنم لطفا راهنمایی کنید. یا اگه روش دیگه ای برای اینکه بتونم زمان با دقت میلی ثانیه داشته باشم را میدونید بهم بگین. با تشکر
    $regfile = "m32def.dat"
    $crystal = 1000000
    Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
    Config Lcd = 16 * 2
    Config Kbd = Portb , Debounce = 100 , Delay = 120
    Config Porta = Output
    Config Timer0 = Timer , Prescale = 1

    Stop Timer0
    Declare Sub Waitss(byval Ms As Long)
    Dim A As Byte , B As Byte , T As Long , Ms As Long
    S1:
    T = 0


    Cls : Cursor Off
    Home : Lcd "***** Hello *****" : Delay
    Delay
    Delay
    Cls
    Home : Lcd "Enter Time"

    Lowerline

    S2:
    A = Getkbd()
    If A = 16 Then Goto S2
    B = Lookup(a , Keydata)
    If B = 15 Then Goto T_ok
    If B = 11 Then Goto T_cl
    Lcd B
    T = T * 10 : T = T + B
    Goto S2

    T_cl:
    Shiftcursor Left
    Lcd " "
    T = T / 10
    Shiftcursor Left
    Goto S2


    T_ok:

    Ms = T


    Set Porta.0

    Call Waitss(ms)
    Reset Porta.0

    'Home : Lcd "***** Finish *****" : Wait 2
    Wait 2
    Goto S1

    End




    '******************
    Sub Waitss(byval Ms As Long)
    Local N As Long
    Ms = Ms * 10
    N = 0



    Do
    Start Timer0
    Tcnt0 = 0
    Cls
    Home :

    Do
    Home : Lcd Tcnt0
    Loop Until Tcnt0 >= 100
    N = N + 1


    Stop Timer0

    Loop Until N >= Ms



    Stop Timer0

    End Sub


    Keydata:
    Data 1 , 2 , 3 , 10 , 4 , 5 , 6 , 11 , 7 , 8 , 9 , 12 , 13 , 0 , 14 , 15

    #2
    پاسخ : مشکل با تایمر میکرو

    کسی نیست کمک کنه؟؟؟؟؟

    دیدگاه


      #3
      پاسخ : مشکل با تایمر میکرو

      برنامه بس عجیبی نوشتی
      .The best question deserves a better answer
      =-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=
      «پناه»می برم «به خدا»
      از عـیبی که ، «امروز» در خود می بینم، و «دیروز» «دیگران را» به خاطر، «هـمان عیـب» ملامت کرده ام.
      محتاط باشیم، در «سرزنش» و «قضاوت کردن دیگران». وقتی نه از «دیروز او» خبر داریم و نه از "فردای خودمان" .

      دیدگاه


        #4
        پاسخ : مشکل با تایمر میکرو

        بر این اساس نوشتم:

        کریستال 1MHz هست پس داریم
        1/1M=1u
        پس هر شمارش تایمر 1 میکرو ثانیه طول می کشه. پس اگه مقدار تایمر یک 100 بشه یعنی 0.1 میلی ثانیه گذشته.
        برنامه مقدار میلی ثانیه را از کاربر میگیره و در متغیر Ms قرار میده تو زیر تابع Waitss ، مقدار Ms را در 10 ضزب میکنه تا زمان با دقت میلی ثانیه بدست بیاد. برای مثال اگه کاربر 22 میلی ثانیه را وارد کنه. مقدار Ms برابر با 22 می شه سپس تو زیر تابع Waitss مقدار Ms برابر با 220 می شود. پس تایمر باید 220 بار
        مقدار 0 تا 100 را بشمرد تا 22 میلی ثانیه شود.به این صورت که، هر وقت شمارش از صفر تا 100 تایمر تموم شد یه عدد به مقدار N اضافه میشه تا زمانی که مقدارN برابر با 220 بشه این کار ادامه پیدا میکنه.
        Sub Waitss(byval Ms As Long)
        Local N As Long
        Ms = Ms * 10
        N = 0



        Do
        Start Timer0
        Tcnt0 = 0
        Cls
        Home :

        Do
        Home : Lcd Tcnt0
        Loop Until Tcnt0 >= 100
        N = N + 1


        Stop Timer0

        Loop Until N >= Ms



        Stop Timer0

        End Sub

        آیا این کاری که کردم درسته؟ اصلامیشه این طور با تایمر کار کرد؟

        دیدگاه

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