اطلاعیه

Collapse
No announcement yet.

مشکل در میکرو atmega 8

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

    مشکل در میکرو atmega 8

    به نام خدا
    با سلام
    من یک برنامه برای میکروی atmega 8 نوشتم ولی نمی دانم چرا در خط For T = 0 To 7 ,next
    فقط یک بار میکرو در زیر برنامه دور میزند و گاهی هم شاید دوبار
    ولی هیچگاه به خط برنامه بعد از next نمیرسد و به سطر اول برنامه برمیگردد
    Config Portd = Output
    Config Portc = Output
    Config Pinb.0 = Input
    Config Pinb.1 = Input
    Dim T As Word

    Do
    A1:
    If Pinb.0 = 0 Then Goto A2
    Loop
    A2:
    Set Portc.0
    Wait 270
    Reset Portc.0
    Waitms 1000
    T = 0
    For T = 0 To 7
    Set Portd.6
    Waitms 25000
    Reset Portd.6
    Waitms 10000
    Set Portd.7
    Waitms 25000
    Reset Portd.7
    Waitms 10000
    Next
    Set Portc.1
    Wait 30
    Reset Portc.1
    Waitms 15
    Goto A1

    #2
    پاسخ : مشکل در میکرو atmega 8

    سلام دوست عزیزم :
    از روی کدهای برنامه کاملاً واضحه که شما از برنامه خوب و قدرتمند bascom استفاده کرده اید .
    من برنامه شما را با یک سری تغییرات برایتان می گذارم . شاید با جایگزینی آن مشکل حل بشود .

    Config Portd = Output
    Config Portc = Output
    Config Pinb.0 = Input
    Config Pinb.1 = Input
    Dim T As Word
    Declare Sub A2


    A1:
    Bitwait Pinb.0 , Reset

    Portc.0 = 1
    Wait 270
    Toggle Portc.0
    Waitms 1000
    T = 0
    For T = 0 To 7
    Portd.6 = 1
    Waitms 25000
    Toggle Portd.6
    Waitms 10000
    Portd.7 = 0
    Waitms 25000
    Toggle Portd.7
    Waitms 10000
    Next
    Portc.1 = 1
    Wait 30
    Toggle Portc.1
    Waitms 15
    Goto A1
    End Sub

    در برنامه فوق یکسری نکات است که بهتر است به آن دقت کنید .
    همواره بهتر است بجای ساختن وقفه بصورت نرم افزاری از وقفه های سخت افزاری استفاده کنید و لذا مثلاً با تغییر زیر برنامه A1 به یک روال سرویس وقفه این بخش را تغییر دهید .
    ضمناً برای تغییر وضعیت یک پایه می شود از دستور toggle pin استفاده کنید .

    ضمناً حتماً توجه کنید که اگر از زیر برنامه ایی استفاده می کنید حتماً در ابتدا با دستور Declare آنرا تعریف کنید.
    استفاده از وقفه های نرم افزاری با دستور wait دقت برنامه را بسیار کم می کند . حتی الامکان از وقفه های با تایمر استفاده نمائید .

    حال با درنظر گرفتن موارد فوق برنامه را برایتان می گذارم .
    البته امیدوارم error نداشته باشه :

    Config Portd = Output
    Config Portc = Output
    Config Pind.2 = Input
    Config Pinb.1 = Input
    Dim T As Word
    Declare Sub A1
    Enable Interrupts
    Config Int0 = Low Level
    Enable Int0
    On Int0 A1

    Do
    Loop

    A1:
    Portc.0 = 1
    Wait 270
    Toggle Portc.0
    Waitms 1000
    T = 0
    For T = 0 To 7
    Portd.6 = 1
    Waitms 25000
    Toggle Portd.6
    Waitms 10000
    Portd.7 = 0
    Waitms 25000
    Toggle Portd.7
    Waitms 10000
    Next
    Portc.1 = 1
    Wait 30
    Toggle Portc.1
    Waitms 15
    Goto A1
    End Sub

    ضمناً راهنمای خود برنامه مثال های بسیار خوبی برای این نوع دستورات دارد .
    توصیه می کنم که از آخرین ورژن bascom که فکر کنم bascom - avr 1.11.8.7 هست استفاده بکنید .

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



    دیدگاه

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