اطلاعیه

Collapse
No announcement yet.

مشکل برنامه نویسی برای انجام دو کار همراه

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

    مشکل برنامه نویسی برای انجام دو کار همراه

    سلام
    من دارم یه برنامه مینویسم که یه سری متن ها رو روی ال سی دی بنویسه و همزمان با همون هم یه سری دیتا رو بخونه و روی یکی از پورتها بریزه (این دیتا ها برای روشن خاموش کردن 8 تا ال ای دی هستن که حالت رقس نور دارن )حالا مشکل من این هست که چطور همزمان این دوتا کارو انجام بده
    چنتا ایده که متاسفنه با شکست مواجه شدن
    1= برنامه رو همزمان یعنی یک خط برای ال ای دی و خط بعد رو برای ال سی دی بنویسم که به دلیل هم اندازه نبودن برنامه ها نمیشه
    2- استفاده از تایمر که متاسفانه بعد از پرش به لیبل مورد نظر نمیدونه از کجا شروع کنه که ادامه قب باشه
    این قسمتی از برنامه
    im A As Word
    Dim B As Word
    Dim Namee As String * 1
    Dim Nam As Byte
    Dim C As String * 16
    Dim Pice As String * 1
    Dim L As Byte
    Dim W As Byte
    Dim X As Byte
    Dim Y As Byte
    Dim I As Byte
    Dim F(17) As Byte
    Dim Status As Byte
    Dim M As Byte
    Dim N As Byte
    Dim K As Integer
    K = 10
    N = 50
    jmp xxx
    Main:
    Do
    Cls
    Cursor Off
    Call Blon
    Locate 1 , 1
    Lcd " deneshgah "
    Waitms 2000
    Locate 2 , 1 : Lcd " xxx"
    Call Bloff

    Waitms 2000
    Call Blon

    Cls
    '--------------------------ostad+kargah+poroje va sakht--------------------
    C = "ostad xxx"
    L = Len(c)
    For W = 1 To L
    Pice = Mid(c , W , 1)
    Y = 20 - W
    For I = 1 To Y
    X = 20 - I
    Locate 1 , X
    Lcd Pice
    Incr X
    Locate 1 , X
    Lcd " "
    Waitms 100
    Next
    Next

    C = "kargah"
    L = Len(c)
    For W = 1 To L
    Pice = Mid(c , W , 1)
    Y = 20 - W
    For I = 1 To Y
    X = 20 - I
    Locate 2 , X
    Lcd Pice
    Incr X
    Locate 2 , X
    Lcd " "
    Waitms 100
    Next
    Next

    C = "POROJE VA SAKHTE"
    L = Len(c)
    For W = 1 To L
    Pice = Mid(c , W , 1)
    Y = 20 - W
    For I = 1 To Y
    X = 20 - I
    Locate 3 , X
    Lcd Pice
    Incr X
    Locate 3 , X
    Lcd " "
    Waitms 100
    Next
    Next
    '----------------------------------------------------

    Waitms 1000
    Cls
    '---------------------------xxx--------------------------
    For A = 0 To 19
    Locate 1 , A
    Namee = Lookupstr(a , Dat1)
    Lcd Namee
    Waitms 100
    Next A
    Waitms 1000
    '----------------------------xxx---------------------
    For A = 0 To 16
    Locate 2 , A
    Namee = Lookupstr(a , Dat2)
    Lcd Namee
    Waitms 100
    Next A
    Waitms 1000
    '----------------------------xxx---------------------
    For A = 0 To 15
    Locate 3 , A
    Namee = Lookupstr(a , Dat3)
    Lcd Namee
    Waitms 100
    Next A
    Waitms 1000
    '----------------------------xxx------------------------
    For A = 0 To 16
    Locate 4 , A
    Namee = Lookupstr(a , Dat4)
    Lcd Namee
    Waitms 100
    Next A
    Waitms 1000
    '---------------------------xxx--------------------------
    Locate 1 , 1 : Lcd " " : Waitms 300
    Locate 1 , 1 : Lcd "xxx"
    Locate 2 , 1 : Lcd " " : Waitms 300
    Locate 2 , 1 : Lcd "xxx"
    Locate 3 , 1 : Lcd " " : Waitms 300
    Locate 3 , 1 : Lcd "xxx"
    Locate 4 , 1 : Lcd " " : Waitms 300
    For A = 0 To 13
    Locate 4 , A
    Namee = Lookupstr(a , Dat5)
    Lcd Namee
    Waitms 100
    Next A
    Waitms 1000
    '---------------------------xxx------------------------------
    Locate 1 , 1 : Lcd " " : Waitms 300
    Locate 1 , 1 : Lcd "xxx"
    Locate 2 , 1 : Lcd " " : Waitms 300
    Locate 2 , 1 : Lcd "xxx"
    Locate 3 , 1 : Lcd " " : Waitms 300
    Locate 3 , 1 : Lcd "xxx"
    Locate 4 , 1 : Lcd " " : Waitms 300
    For A = 0 To 24
    Locate 4 , A
    Namee = Lookupstr(a , Dat6)
    If A = 21 Then
    Locate 4 , 1
    Lcd "xx"
    Locate 4 , 20
    End If
    If A = 22 Then
    Locate 4 , 1
    Lcd "x"
    Locate 4 , 20
    End If
    If A = 23 Then
    Locate 4 , 1
    Lcd "x"
    Locate 4 , 20
    End If
    If A >= 21 Then Jmp 0
    Lcd Namee
    0:
    Waitms 100
    Next A
    Waitms 2000
    '---------------------------ãÍÓä ÝÇÑíÇÈí-----------------------------
    Locate 1 , 1 : Lcd " " : Waitms 300
    Locate 1 , 1 : Lcd "x"
    Locate 2 , 1 : Lcd " " : Waitms 300
    Locate 2 , 1 : Lcd "x"
    Locate 3 , 1 : Lcd " " : Waitms 300
    Locate 3 , 1 : Lcd "x"
    Locate 4 , 1 : Lcd " " : Waitms 300
    For A = 0 To 14
    Locate 4 , A
    Namee = Lookupstr(a , Dat7)
    Lcd Namee
    Waitms 100
    Next A
    Waitms 1000
    '--------------------------ãÑÊÖí äÕÈ �æÑ-------------------------------------
    Locate 1 , 1 : Lcd " " : Waitms 300
    Locate 1 , 1 : Lcd "x"
    Locate 2 , 1 : Lcd " " : Waitms 300
    Locate 2 , 1 : Lcd "x"
    Locate 3 , 1 : Lcd " " : Waitms 300
    Locate 3 , 1 : Lcd "x"
    Locate 4 , 1 : Lcd " " : Waitms 300
    For A = 0 To 17
    Locate 4 , A
    Namee = Lookupstr(a , Dat8)
    Lcd Namee
    Waitms 100
    Next A
    Waitms 1000
    Loop
    Xxx:
    K = 200
    N = 0
    Do
    Locate 1 , 1 : Lcd Time$
    Locate 2 , 1 : Lcd Date$
    'jmp xxxx

    'For A = 1 To 20
    'Status = Lookup(a , Datsta)
    'Porta = Status
    'Next
    'Set Porta.3
    '*************"
    '*************
    '**************
    '**************
    '*************
    For M = 0 To N
    Portb = &B00111111 ' 0
    Porta = &B0
    Call Dely
    Porta = &B00000001
    Call Dely
    Porta = &B00000011
    Call Dely
    Porta = &B00000111
    Call Dely
    Porta = &B00001111
    Call Dely
    Porta = &B00011111
    Call Dely
    Porta = &B00111111
    Call Dely
    Porta = &B01111111
    Call Dely
    Porta = &B11111111
    Call Dely
    Next
    '********* 1
    Portb = &B00110000
    For M = 0 To N
    Porta = &B00000000
    Call Dely
    Porta = &B00000001
    Call Dely
    Porta = &B00000011
    Call Dely
    Porta = &B00000111
    Call Dely
    Porta = &B00001111
    Call Dely
    Porta = &B00011111
    Call Dely
    Porta = &B00111111
    Call Dely
    Porta = &B01111111
    Call Dely
    Porta = &B11111111
    Call Dely
    Porta = &B01111111
    Call Dely
    Porta = &B00111111
    Call Dely
    Porta = &B00011111
    Call Dely
    Porta = &B00001111
    Call Dely
    Porta = &B00000111
    Call Dely
    Porta = &B00000011
    Call Dely
    Porta = &B00000001
    Call Dely
    Porta = &B00000000
    Call Dely
    Next
    '************* 2
    Portb = &B1011011
    For M = 0 To N
    Porta = 0
    Call Dely
    Porta = &B00000001
    Call Dely
    Porta = &B00000011
    Call Dely
    Porta = &B00000111
    Call Dely
    Porta = &B00001111
    Call Dely
    Porta = &B00011111
    Call Dely
    Porta = &B00111111
    Call Dely
    Porta = &B01111111
    Call Dely
    Porta = &B11111111
    Call Dely
    Porta = &B11111110
    Call Dely
    Porta = &B11111100
    Call Dely
    Porta = &B11111000
    Call Dely
    Porta = &B11110000
    Call Dely
    Porta = &B11100000
    Call Dely
    Porta = &B11000000
    Call Dely
    Porta = &B10000000
    Call Dely
    Porta = &B00000000
    Call Dely
    Next
    '************* 3
    Portb = &B01001111
    For M = 0 To N
    Porta = &B00000000
    Call Dely
    Porta = &B00000001
    Call Dely
    Porta = &B00000010
    Call Dely
    Porta = &B00000100
    Call Dely
    Porta = &B00001000
    Call Dely
    Porta = &B00010000
    Call Dely
    Porta = &B00100000
    Call Dely
    Porta = &B01000000
    Call Dely
    Porta = &B10000000
    Call Dely
    Next
    '*************** 4
    Portb = &B01100110
    For M = 0 To N
    Porta = &B00000000
    Call Dely
    Porta = &B11111111
    Call Dely
    Porta = &B00000000
    Call Dely
    Porta = &B11111111
    Call Dely
    Porta = &B00000000
    Call Dely
    Porta = &B11111111
    Call Dely
    Next
    '************* 5
    Portb = &B01101101
    For M = 0 To N
    Porta = &B00000000
    Call Dely
    Porta = &B00000001
    Call Dely
    Porta = &B00000010
    Call Dely
    Porta = &B00000100
    Call Dely
    Porta = &B00001000
    Call Dely
    Porta = &B00010000
    Call Dely
    Porta = &B00100000
    Call Dely
    Porta = &B01000000
    Call Dely
    Porta = &B10000000
    Call Dely
    Porta = &B10000000
    Call Dely
    Porta = &B01000000
    Call Dely
    Porta = &B00100000
    Call Dely
    Porta = &B00010000
    Call Dely
    Porta = &B00001000
    Call Dely
    Porta = &B00000100
    Call Dely
    Porta = &B00000010
    Call Dely
    Porta = &B00000001
    Call Dely
    Porta = &00000011
    Call Dely
    Porta = &B00000110
    Call Dely
    Porta = &B00001100
    Call Dely
    Porta = &B00011000
    Call Dely
    Porta = &B00110000
    Call Dely
    Porta = &B01100000
    Call Dely
    Porta = &B11000000
    Call Dely
    Porta = &B01100000
    Call Dely
    Porta = &B00110000
    Call Dely
    Porta = &B00011000
    Call Dely
    Porta = &B00001100
    Call Dely
    Porta = &B00000110
    Call Dely
    Porta = &B00000011
    Call Dely
    Porta = &B00000111
    Call Dely
    Porta = &B00001110
    Call Dely
    Porta = &B00011100
    Call Dely
    Porta = &B00111000
    Call Dely
    Porta = &B01110000
    Call Dely
    Porta = &B11100000
    Call Dely
    Porta = &B01110000
    Call Dely
    Porta = &B00111000
    Call Dely
    Porta = &B00011100
    Call Dely
    Porta = &B00001110
    Call Dely
    Porta = &B00000111
    Call Dely
    Porta = &B00000111
    Call Dely
    Porta = &B00001111
    Call Dely
    Porta = &B00011110
    Call Dely
    Porta = &B00111100
    Call Dely
    Porta = &B01111000
    Call Dely
    Porta = &B11110000
    Call Dely
    Porta = &B01111000
    Call Dely
    Porta = &B00111100
    Call Dely
    Porta = &B00011110
    Call Dely
    Porta = &B00001111
    Call Dely
    Porta = &B00001111
    Call Dely
    Porta = &B00011111
    Call Dely
    Porta = &B00111110
    Call Dely
    Porta = &B01111100
    Call Dely
    Porta = &B11111000
    Call Dely
    Porta = &B11111000
    Call Dely
    Porta = &B01111100
    Call Dely
    Porta = &B00111110
    Call Dely
    Porta = &B00011111
    Call Dely
    Porta = &B00111111
    Call Dely
    Porta = &B01111110
    Call Dely
    Porta = &B11111100
    Call Dely
    Porta = &B01111110
    Call Dely
    Porta = &B00111111
    Call Dely
    Porta = &B01111111
    Call Dely
    Porta = &B11111110
    Call Dely
    Porta = &B01111111
    Call Dely
    Porta = &B11111111
    Call Dely
    Porta = &B11111111
    Call Dely
    Next
    '----------------------------------------------------------------------
    Xxxx:
    '*********** 6
    Portb = &B01111101
    For M = 0 To N
    Porta = &B00000000
    Call Dely
    Porta = &B00011000
    Call Dely
    Porta = &B00100100
    Call Dely
    Porta = &B01000010
    Call Dely
    Porta = &B10000001
    Call Dely
    Porta = &B10000001
    Call Dely
    Porta = &B01000010
    Call Dely
    Porta = &B00100100
    Call Dely
    Porta = &B00011000
    Call Dely
    Porta = &B00011000
    Call Dely
    Next
    '*********** 7
    Portb = &B00000111
    For M = 0 To N
    Porta = &B11111111
    Call Dely
    Porta = &B01111110
    Call Dely
    Porta = &B10111101
    Call Dely
    Porta = &B11011011
    Call Dely
    Porta = &B11100111
    Call Dely
    Porta = &B11100111
    Call Dely
    Porta = &B11011011
    Call Dely
    Porta = &B10111101
    Call Dely
    Porta = &B01111110
    Call Dely
    Porta = &B11111111
    Call Dely
    Porta = &B11111111
    Call Dely
    Next
    '************* 8
    Portb = &B11111111
    For M = 0 To N
    Porta = &B00000000
    Call Dely
    Porta = &B00000001
    Call Dely
    Porta = &B00000010
    Call Dely
    Porta = &B00000100
    Call Dely
    Porta = &B00001000
    Call Dely
    Porta = &B00010000
    Call Dely
    Porta = &B00100000
    Call Dely
    Porta = &B01000000
    Call Dely
    Porta = &B10000000
    Call Dely
    Porta = &B10000001
    Call Dely
    Porta = &B10000010
    Call Dely
    Porta = &B10000100
    Call Dely
    Porta = &B10001000
    Call Dely
    Porta = &B10010000
    Call Dely
    Porta = &B10100000
    Call Dely
    Porta = &B11000000
    Call Dely
    Porta = &B11000001
    Call Dely
    Porta = &B11000010
    Call Dely
    Porta = &B11000100
    Call Dely
    Porta = &B11001000
    Call Dely
    Porta = &B11010000
    Call Dely
    Porta = &B11100000
    Call Dely
    Porta = &B11100001
    Call Dely
    Porta = &B11100010
    Call Dely
    Porta = &B11100100
    Call Dely
    Porta = &B11101000
    Call Dely
    Porta = &B11110000
    Call Dely
    Porta = &B11110001
    Call Dely
    Porta = &B11110010
    Call Dely
    Porta = &B11110100
    Call Dely
    Porta = &B11111000
    Call Dely
    Porta = &B11111101
    Call Dely
    Porta = &B11111110
    Call Dely
    Porta = &B11111111
    Call Dely
    Call Dely
    Call Dely
    Next
    '********** 9
    Portb = &B01101111
    For M = 0 To N
    Porta = &B11111111
    Call Dely
    Porta = &B11111110
    Call Dely
    Porta = &B11111101
    Call Dely
    Porta = &B11111011
    Call Dely
    Porta = &B11110111
    Call Dely
    Porta = &B11101111
    Call Dely
    Porta = &B11011111
    Call Dely
    Porta = &B10111111
    Call Dely
    Porta = &B01111111
    Call Dely
    Porta = &B10111111
    Call Dely
    Porta = &B11011111
    Call Dely
    Porta = &B11101111
    Call Dely
    Porta = &B11110111
    Call Dely
    Porta = &B11111011
    Call Dely
    Porta = &B11111101
    Call Dely
    Porta = &B11111110
    Call Dely
    Porta = &B11111111
    Call Dely
    Next
    '**************
    jmp main
    '********
    Dely:
    If Pind.0 = 1 Then Call Up
    If Pind.1 = 1 Then Call Down
    If Pind.4 = 1 Then Call Loopup
    If Pind.5 = 1 Then Call Loopdown
    Waitms K
    Return
    '************
    Up:
    If K >= 255 Then Return
    K = K + 10
    Waitms 100
    Writeeeprom K , 0
    Waitus 10
    Return
    '*************
    Down:
    If K <= 40 Then Return
    K = K - 10
    Waitms 100
    Writeeeprom K , 0
    Waitus 10
    Return
    '************
    Loopup:
    If N >= 10 Then Return
    N = N + 1
    Waitms 100
    Writeeeprom N , 1
    Waitus 10
    Return
    Return
    '*************
    Loopdown:
    If N <= 0 Then Return
    N = N - 1
    Waitms 100
    Writeeeprom N , 1
    Waitus 10
    Return
    '*************
    Loop

    انجام پروژه هاي برنامه نويسي اندرويد
    [glow=red,2,300]نرم افزار نقشه هاي پاور کامپيوتر اندوريد[/glow]
    http://cafebazaar.ir/app/?id=com.atxdroid

    #2
    پاسخ : مشکل برنامه نویسی برای انجام دو کار همراه

    یک روش برنامه نویسی وجود داره به نام State Machine Programming
    البته من اسمشو گذاشتم این.
    شایدم هم کس دیگه ای ازش استفاده کرده باشه و اسم دیگه ای روش گذاشته باشه.

    اول باید این روش رو یاد بگیری. بسیار ساده است اما اونقدر اصولیه که تو هیچ نرم افزاری نمی مونی. نتیجه ی این نوع برنامه نویسی با برنامه نویسی هردمبیلی اونقدر فرق داره که ارزش وقت گذاشتنو داره.

    ممکنه مجبور بشید حضوری یاد بگیرید اما اگه کمی دقت به خرج بدید از جملات پایین می تونید بهره بگیرید.

    1 - متغیری تعریف می کنیم به نام state_number آ‌و مقدار اولیه ی صفر به اون میدیم.
    2- یکی از تایمرهای میکرو را روی کمترین زمان لازم تنظیم می کنیم و اینتراپت آنرا فعال می کنیم.
    3- متن اصلی برنامه از یک IFآ‌چند حالته که در C دستور Switch و در پاسکال Case نام دارد تشکیل می گردد و متغیر آن همین state_number می باشد.
    4- در هر state کاری را که می خواهیم انجام می دهیم و اگر باید کار دیگری انجام دهیم باید به state بعدی برویم. اینکار با اضافه کردن یک به متغیر state_number انجام می شود
    5- در هر state که نیاز به زمان داشته باشیم یک متغیر cntr تعریف می کنیم و مقدار اولیه به آن می دهیم. این متغیر در هر روتین اینتراپت تایمر یکی کم می شود و در برنامه ی اصلی یا همان state که هستم چک می شود و اگر صفر شد کار مورد نظر انجام می شود و به state بعدی می رویم.
    6- هر وقت نیاز به jump داشتیم کافیست به state_number مقداری دلخواه بدهیم تا برنامه به آن state برود.

    ....
    امیدوارم متوجه شده باشید.
    این نوع برنامه نویسی تقریبا اصولی ترین شکل برنامه نویسی می باشد و در میکرو و PLCآ‌ کولاک می کند.
    با عرض پوزش خدمت دایی های عزیزم تا اطلاع ثانوی به اینترنت دسترسی ندارم.

    دیدگاه


      #3
      پاسخ : مشکل برنامه نویسی برای انجام دو کار همراه

      نوشته اصلی توسط ahmadmn
      یک روش برنامه نویسی وجود داره به نام State Machine Programming
      البته من اسمشو گذاشتم این.
      شایدم هم کس دیگه ای ازش استفاده کرده باشه و اسم دیگه ای روش گذاشته باشه.

      اول باید این روش رو یاد بگیری. بسیار ساده است اما اونقدر اصولیه که تو هیچ نرم افزاری نمی مونی. نتیجه ی این نوع برنامه نویسی با برنامه نویسی هردمبیلی اونقدر فرق داره که ارزش وقت گذاشتنو داره.

      ممکنه مجبور بشید حضوری یاد بگیرید اما اگه کمی دقت به خرج بدید از جملات پایین می تونید بهره بگیرید.

      1 - متغیری تعریف می کنیم به نام state_number آ‌و مقدار اولیه ی صفر به اون میدیم.
      2- یکی از تایمرهای میکرو را روی کمترین زمان لازم تنظیم می کنیم و اینتراپت آنرا فعال می کنیم.
      3- متن اصلی برنامه از یک IFآ‌چند حالته که در C دستور Switch و در پاسکال Case نام دارد تشکیل می گردد و متغیر آن همین state_number می باشد.
      4- در هر state کاری را که می خواهیم انجام می دهیم و اگر باید کار دیگری انجام دهیم باید به state بعدی برویم. اینکار با اضافه کردن یک به متغیر state_number انجام می شود
      5- در هر state که نیاز به زمان داشته باشیم یک متغیر cntr تعریف می کنیم و مقدار اولیه به آن می دهیم. این متغیر در هر روتین اینتراپت تایمر یکی کم می شود و در برنامه ی اصلی یا همان state که هستم چک می شود و اگر صفر شد کار مورد نظر انجام می شود و به state بعدی می رویم.
      6- هر وقت نیاز به jump داشتیم کافیست به state_number مقداری دلخواه بدهیم تا برنامه به آن state برود.

      ....
      امیدوارم متوجه شده باشید.
      این نوع برنامه نویسی تقریبا اصولی ترین شکل برنامه نویسی می باشد و در میکرو و PLCآ‌ کولاک می کند.
      خیلی ممنون از جوابتون :agree:
      روش جالبیه امتحان میکنم ببینم چی میشه
      انجام پروژه هاي برنامه نويسي اندرويد
      [glow=red,2,300]نرم افزار نقشه هاي پاور کامپيوتر اندوريد[/glow]
      http://cafebazaar.ir/app/?id=com.atxdroid

      دیدگاه


        #4
        پاسخ : مشکل برنامه نویسی برای انجام دو کار همراه

        سلام
        این چیزی که شما میخواید بهش میگن RTOS یا real time Opeation system یا سیستم عامل زمن واقعی

        این سیستم عامل که برای پروسسورهای کوچک طراحی شده به کاربر اجازه میده که چند کار رو با هم انجام بده
        البته این چند کار چون سرعت پروسسور کمه برای کار های UI یا ارتباط با کاربره مثله صفحه کلید یا ال سی دی که روند کندی رو دارن

        برای AVR هم برای زبان IAR یعالمه از اینا نوشتن ولی به زبان بیسیک نداریم

        روش کار مثله ویندوزه
        ولی اینجا هر تابع مثله یه task در ویندوز هر چند میلی ثانیه یه بار انجام میشه اطلاعاتش ذخیره میشه و task بعدی رو انجام میده به این ترتیب مثل اینکه شما دارید توابع رو تند تند اسکن میکنید

        کار سختیه ولی خیلی شیک و تر تمیز کار میکنه
        یه سرچ توی اینترنت مبنی بر RTOS on AVR همه چیز به شما میده
        به وبلاگم سر بزنید

        دیدگاه


          #5
          پاسخ : مشکل برنامه نویسی برای انجام دو کار همراه

          http://www.iar.com/website1/1.0.1.0/371/1/index.php
          There is nothing so practical as a good theory. — Kurt Lewin, 1951

          دیدگاه


            #6
            پاسخ : مشکل برنامه نویسی برای انجام دو کار همراه

            حدس می زدم روش سالهای جوونیم لو رفته باشه :icon_razz:
            با عرض پوزش خدمت دایی های عزیزم تا اطلاع ثانوی به اینترنت دسترسی ندارم.

            دیدگاه

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