اطلاعیه

Collapse
No announcement yet.

em-19ماژول

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

    em-19ماژول

    با سلا م لطفا یک نگاه به این کد بندازید ببینید مشکل کجاست

    وقتی روشن می کنم رو صفحه این قسمت میاد Successful بعد هیچ تکی رو قبول نمی کنه

    [code=basic]
    $regfile = "m8def.dat"
    $crystal = 8000000
    $baud = 9600
    '-------------------------------------------------------------------------------
    Config Lcdpin = Pin , Rs = Portc.5 , E = Portc.4 , Db4 = Portb.4 , Db5 = Portb.3 , Db6 = Portb.2 , Db7 = Portb.1
    Config Lcd = 16 * 2
    '-------------------------------------------------------------------------------
    Dim E As Byte
    Dim P As Byte
    Dim C(12) As String * 1
    Dim Code As String * 10



    'Dim A As String * 10
    Dim B As String * 10
    'Dim C As String * 11
    'Dim D As String * 10
    Dim N As Byte
    '****************************** '
    'Enable Interrupts
    'Enable Urxc
    'On Urxc Step1
    Cursor Off
    '******************************
    Config Portd.2 = Output
    Config Pinc.2 = Input
    Config Pinc.3 = Input
    '******************************




    '******************************
    F:
    Code = "Tak Cards"

    Do
    '========================================= =
    Cls
    '******************************
    Readeeprom B , 1
    '******************************
    If Pinc.2 = 1 Then Goto S
    '******************************
    If B = Code Then
    Portd.2 = 1
    Code = "Opened"
    Locate 1 , 1
    Lcd "Welcome:"
    Locate 2 , 4
    Lcd Code
    Wait 2
    Portd.2 = 0
    Code = "tak Cards"
    End If
    '******************************
    Locate 1 , 1
    Lcd "<<insert Card>>"
    Locate 2 , 4
    Lcd Code
    Waitms 600

    Loop
    End 'end program
    '******************************

    Step1:

    Incr E

    C(e) = Waitkey()

    If E < 12 Then Goto Step1
    For E = 3 To 12

    Incr P

    Mid(code , P , 1) = C(e)
    Next

    E = 0
    P = 0


    ' Locate 2 , 1
    'Lcd ; Code
    'Waitms 400
    'Input , Code
    Return


    '*****************************
    S:
    N = 1
    Do

    Cls
    Locate 1 , 4
    Lcd "Save user"
    Locate 2 , 1
    Lcd "(" ; N ; &quot:" ; Code

    Waitms 600
    If Pinc.2 = 1 Then
    Writeeeprom Code , N
    Cls
    Code = "Successful"
    End If
    '******************************
    If Pinc.3 = 1 Then Goto F
    '******************************
    Loop
    [/code]

    #2
    پاسخ : em-19ماژول

    راستشو بخوای از برنامت هیچی سر در نیاوردم!
    اول پیشنهاد می کنم اونو توی فابلیت کد بذاری تا وقتی کسی میبینه بفهمه چه خبره! اینجوری:

    [code=basic]
    $regfile = "m8def.dat"
    $crystal = 8000000
    $baud = 9600
    '-------------------------------------------------------------------------------
    Config Lcdpin = Pin , Rs = Portc.5 , E = Portc.4 , Db4 = Portb.4 , Db5 = Portb.3 , Db6 = Portb.2 , Db7 = Portb.1
    Config Lcd = 16 * 2
    '-------------------------------------------------------------------------------
    Dim E As Byte
    Dim P As Byte
    Dim C(12) As String * 1
    Dim Code As String * 10



    'Dim A As String * 10
    Dim B As String * 10
    'Dim C As String * 11
    'Dim D As String * 10
    Dim N As Byte
    '****************************** '
    'Enable Interrupts
    'Enable Urxc
    'On Urxc Step1
    Cursor Off
    '******************************
    Config Portd.2 = Output
    Config Pinc.2 = Input
    Config Pinc.3 = Input
    '******************************




    '******************************
    F:
    Code = "Tak Cards"

    Do
    '========================================= =
    Cls
    '******************************
    Readeeprom B , 1
    '******************************
    If Pinc.2 = 1 Then Goto S
    '******************************
    If B = Code Then
    Portd.2 = 1
    Code = "Opened"
    Locate 1 , 1
    Lcd "Welcome:"
    Locate 2 , 4
    Lcd Code
    Wait 2
    Portd.2 = 0
    Code = "tak Cards"
    End If
    '******************************
    Locate 1 , 1
    Lcd "<<insert Card>>"
    Locate 2 , 4
    Lcd Code
    Waitms 600

    Loop
    End 'end program
    '******************************

    Step1:

    Incr E

    C(e) = Waitkey()

    If E < 12 Then Goto Step1
    For E = 3 To 12

    Incr P

    Mid(code , P , 1) = C(e)
    Next

    E = 0
    P = 0


    ' Locate 2 , 1
    'Lcd ; Code
    'Waitms 400
    'Input , Code
    Return


    '*****************************
    S:
    N = 1
    Do

    Cls
    Locate 1 , 4
    Lcd "Save user"
    Locate 2 , 1
    Lcd "(" ; N ; &quot:" ; Code

    Waitms 600
    If Pinc.2 = 1 Then
    Writeeeprom Code , N
    Cls
    Code = "Successful"
    End If
    '******************************
    If Pinc.3 = 1 Then Goto F
    '******************************
    Loop
    [/code]
    دوماً حتما برای خوندن EMها از وقفه ی سریال استفاده کن. توی وقفه هم نباید از waitkey استفاده کنی! کافیه ثبات UDR رو بریزی داخل متغیری که میخوای استفاده کنی.
    پیشنهاد سوم؛ گوگل کن یه نمونه کد مناسب رو ببین، من واقعاً خیلی متوجه برنامه ت نشدم که بتونم توی تصحیحش کمکی بکنم بهت، اما مشخص بود این برنامه نباید جواب بده در نگاه اول، یه نمونه ش همون وقفه که گفتم! (تازه فک کنم غیر فعالش هم کرده بودی)
    پس یه نمونه کد راه اندازی EM18 یا 19 رو با بسکام گوگل کن، بعد از تحلیلش الگوریتم و کد خودتو بنویس.

    پیشنهاد بعدی، توی وقفه یه زیربرنامه رو فراخوانی نکن! (ممکنه به مشکلاتی با پشته بر بخوری) و به نظرم این کارو بکنی بهتره، اگه برنامه ت توی حلقه همیشه درست همش در حال چرخ زدنه، توی وقفه وقتی به تعداد بایت هایی که باید بده ماژول رسید، یه متغیر رو به عنوان پرچم مشخص کن، و توی حلقه اصلی همش اون پرچم رو چک کن.
    یه نکته هم در نظر بگیر برای ماژول های EM، ممکنه نویزی اون وسط بیاد و توی وقفه دریافت کنی، در صورتی که فقط به تعداد بایت های دریافتی توجه کنی، اونطوری بایت نویز (خطا) رو میگیری و یه جایگاه توی آرایه ت رو پر میکنی، و اینجوری تا آخر مشکل میگیری توی دریافت و ثبت دیتا! یه پیشنهاد میتونه این باشه که از اولین بایتی که گرفتی یه TimeOut هم براش در نظر بگیری تا اگه دیتای الکی بود (خطا، نویز یا هرچی) اگه از تایم اوت گذشت، دوباره بره اول آرایه رو پر کنه.

    امیدوارم خوب توضیح داده باشم.
    موفق باشی

    «پشتکار» «پشتکار» «پشتکار»

    دیدگاه


      #3
      پاسخ : em-19ماژول

      راستی، وقفه رو اول برنامه غیر فعال کردی، عمدی بوده یا سهوا حواست نبوده؟

      «پشتکار» «پشتکار» «پشتکار»

      دیدگاه


        #4
        پاسخ : em-19ماژول

        هر چی گشتم چیزی به غیر از این پیدا نکردم که این ماژولو راه بندازم بعد منم خیلی حرفه ای نیستم

        دیدگاه

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