اطلاعیه

Collapse
No announcement yet.

مشکل عجیب در ارتباط با پورت avr

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

    مشکل عجیب در ارتباط با پورت avr

    دیروز یه برنامه ساده نوشتم که محتویات پورت a رو به پورت b منتقل می کنه
    به نظر شما این برنامه چه ایرادی داره که کار نمی کنه ؟
    $regfile = "m16def.dat"
    $crystal = 1000000

    Config Porta = Input
    Config Portb = Output

    Dim A As Byte

    Do
    A = Porta
    Portb = A
    Loop

    End
    مردود شدن بهتر از با تقلب قبول شدن است

    #2
    پاسخ : مشکل عجیب در ارتباط با پورت avr

    وقتی می خواین پورتی رو بخونین باید در حالت ورودی کانفیگ بشه و سپس برای خوندنش از PIN استفاده کنید نه port.
    موفق باشید
    چرا ناراحتی پاتریک!
    + امروز ی بچه دیدم سرچهارراه گل میفروخت
    - از دیدنش ناراحت شدی؟
    + نه
    پس چی ناراحتت کرده
    + اینکه دیدن اینجور بچه ها انقدر واسم عادی شده که دیگه ناراحتم نمیکنه
    ------------------------------------------------------------------------------------------------------
    تاحالا فکر کردی بیسواد کیه؟- بی سواد یعنی کسی که نمیتونه ذهنیاتش رو عملی کنه!
    ------------------------------------------------------------------------------------------------------
    محصولات

    دیدگاه


      #3
      پاسخ : پاسخ : مشکل عجیب در ارتباط با پورت avr

      نوشته اصلی توسط سوران آراسته
      وقتی می خواین پورتی رو بخونین باید در حالت ورودی کانفیگ بشه و سپس برای خوندنش از PIN استفاده کنید نه port.
      موفق باشید
      راست می گید واقعا ممنونم
      ولی من فکر می کنم این یکی از ایرادهای نرم افزار بیسکام هست
      چون تو برخی از فایل های لاتین ورودی رو به همین ترتیب نوشتن
      با این حال باز هم ممنون
      مردود شدن بهتر از با تقلب قبول شدن است

      دیدگاه


        #4
        پاسخ : مشکل عجیب در ارتباط با پورت avr

        سلام دوست عزیز
        شاید نشه این رو به حساب عیبی برای کامپایلر بسکام گذاشت چون رجیستر مربوط به ورودی پورتهای AVR در CODEVISION هم با همین نام(PINX) خونده میشه و نام PORTX مخصوص رجیستر LATCH مربوط به خروجی پورتها هست. و خوب البته رجیستر دیگه ای هم مربوط به هر یک از پورتها هست که با نام DDRX خونده میشه و مربوط به تایین ورودی و یا خروجی پورت مورد نظر هست .

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

        من برنامه ای که شما نوشتید رو به نحو دیگه ای بازنویسی کردم که ظاهرا همون نتیجه حاصل میشه اما اگر بخوایم خیلی دقیق بررسی کنیم برنامه زیر از لحاظ تکنیکی بسیار سریعتر اجرا میشه و تا اونجا که کلاک سایکل فرمانها یادم هست سرعت اجراش 4 برابر هست ( شاید برای کاربردهای معمولی نیازی به این همه حساب و کتاب نباشه اما به طور مثال در یک لوجیک آنالایزر که کاری شبیه به همین برنامه میکنه و انتقال داده ها به یک حافظه ،اهمیت موضوع به وضوح آشکار بشه) در ضمن یک مکان حافظه که برای متغیر A استفاده شده بود صرفه جویی شده.

        $regfile = "m16def.dat"
        $crystal = 1000000

        Config Porta = Input
        Config Portb = Output

        Do
        Portb = Pina
        Loop

        End



        و محتوای دستور این هست که داده های رجیستر ورودی پورت B رو به رجیستر خروجی پورت A بریز .

        روشهای مختلفی برای پیاده سازی هر الگوریتم وجود داره اما بهترین اونها مطمئنا ترکیبی امکان پذیر از ساده ترین ، کوتاه ترین ، سریعترین و کم حجم ترین هست که امکانات کمتری از میروکنترلر رو هم مصرف کرده باشه . :rolleyes:




        موفقیت یک فرایند است نه یک اتفاق...

        ******** استفاده از گزينه تشكر نشانه اهميت و احترام شما به پيگيري شخص نظر دهنده است ********

        دیدگاه


          #5
          پاسخ : مشکل عجیب در ارتباط با پورت avr

          نوشته اصلی توسط erfan2000
          سلام دوست عزیز
          شاید نشه این رو به حساب عیبی برای کامپایلر بسکام گذاشت چون رجیستر مربوط به ورودی پورتهای AVR در CODEVISION هم با همین نام(PINX) خونده میشه و نام PORTX مخصوص رجیستر LATCH مربوط به خروجی پورتها هست. و خوب البته رجیستر دیگه ای هم مربوط به هر یک از پورتها هست که با نام DDRX خونده میشه و مربوط به تایین ورودی و یا خروجی پورت مورد نظر هست .

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

          من برنامه ای که شما نوشتید رو به نحو دیگه ای بازنویسی کردم که ظاهرا همون نتیجه حاصل میشه اما اگر بخوایم خیلی دقیق بررسی کنیم برنامه زیر از لحاظ تکنیکی بسیار سریعتر اجرا میشه و تا اونجا که کلاک سایکل فرمانها یادم هست سرعت اجراش 4 برابر هست ( شاید برای کاربردهای معمولی نیازی به این همه حساب و کتاب نباشه اما به طور مثال در یک لوجیک آنالایزر که کاری شبیه به همین برنامه میکنه و انتقال داده ها به یک حافظه ،اهمیت موضوع به وضوح آشکار بشه) در ضمن یک مکان حافظه که برای متغیر A استفاده شده بود صرفه جویی شده.

          $regfile = "m16def.dat"
          $crystal = 1000000

          Config Porta = Input
          Config Portb = Output

          Do
          Portb = Pina
          Loop

          End



          و محتوای دستور این هست که داده های رجیستر ورودی پورت B رو به رجیستر خروجی پورت A بریز .

          روشهای مختلفی برای پیاده سازی هر الگوریتم وجود داره اما بهترین اونها مطمئنا ترکیبی امکان پذیر از ساده ترین ، کوتاه ترین ، سریعترین و کم حجم ترین هست که امکانات کمتری از میروکنترلر رو هم مصرف کرده باشه . :rolleyes:
          با تشکر و اظهارنظر شما حدس می زنم حق با شما باشه و احتمالا چون با زبان c کم کار کردم با جزئیات سخت افزار بخوبی آشنایی ندارم
          بیسیک کمتر درگیر این جزئیات میشه ولی از پیشنهاد شما برای تغییر برنامه لذت بردم
          بینهایت ممنون
          مردود شدن بهتر از با تقلب قبول شدن است

          دیدگاه

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