اطلاعیه

Collapse
No announcement yet.

ds1307 در اسمبلی

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

    ds1307 در اسمبلی

    می خواستم با اسمبلی یه ds1307 رو با یه atmega32 که فرکانس کاریش روی 8 مگاهرتز تنظیم شده راه اندازی کنم. برنامه پیوست شده و هدف این برنامه که اصلش مربوط به کتاب مزیدی هست اول دادن مقداراویه ساعت و دقیقه و ثانیه به ds1307 هست و سپس خواندن مقدار ثانیه (هر ثانیه یکبار) و قرار دادن اون روی پورت A هست.این برنامه کار نمی کنه (و 3 روزه دارم باهاش ور میرم) و از شما دوستان بزرگوار که به اسمبلی مسلط هستید میخوام یه برنامه کاملا ساده مثل همین رو با توضیح لطف کنید بزارین یا همین کد رو تصحیح کنید.
    (توضیح:در این برنامه از i2c سخت افزاری استفاده شده و از رجیسترهایی مثل twbr , twcr,twdr,twsr استفاده شده است)

    برنامه :
    http://www.mediafire.com/view/q2jvdprp4u3micz/ds1307+.asm

    شماتیک :
    http://img4u.ir/upload/427ds1307+.JPG
    من نمىآ‌توانم فرضیه «بىآ‌اخلاقى انسان» را بپذیرم، و من اخلاق را منحصرا امرى انسانى و متعلق به انسان مىآ‌دانم که هیچ نوع قدرت مافوق انسانى در پشت آن وجود ندارد
    آلبرت اینشتین
    منبع: http://fa.wikiquote.org

    #2
    پاسخ : ds1307 در اسمبلی

    من جات باشم اون رو به زبون دیگه مثل بیسیک و .... می نویسم بعدش براحتی اون رو تبدیل می کنم



    اگه مردم می دونستن زمان چقدر با ارزشه دیگه هیچ وقت کفش بند دار نمی خریدن البرت انیشتن

    دیدگاه


      #3
      پاسخ : ds1307 در اسمبلی

      نوشته اصلی توسط silicon0
      با سلام

      چند روزی هست که این سوال من رو درگیر کرده حتی تو

      avr freaks هم تاپیک زدم کسی نتونست حلش کنه اگه لطف کنید

      و یه نگاه بکنید ممنون میشم

      http://www.eca.ir/forum2/index.php?topic=89128.0
      مشکلی در قسمت main برنامه وجود داشت:

      کد HTML:
      <br>
      نوشته اصلی توسط سعید باقرانی
      من جات باشم اون رو به زبون دیگه مثل بیسیک و .... می نویسم بعدش براحتی اون رو تبدیل می کنم
      کسی که با بسکام برنامه مینویسه رو برنامه نویس نمیگن! :redface:
      [br /][hr]http://pcenter.ir[hr][br /]

      دیدگاه


        #4
        پاسخ : ds1307 در اسمبلی

        نوشته اصلی توسط سعید باقرانی
        من جات باشم اون رو به زبون دیگه مثل بیسیک و .... می نویسم بعدش براحتی اون رو تبدیل می کنم



        ببخشید دقیقا چطوری باید تبدیل کرد ؟ یعنی معادل اسمبلی دستورات بیسیک رو پیدا کنم ؟ من یک هفته وقت گذاشتم تا اینکارو بکنم اما برای بیشتر دستورات نمیشه
        من نمىآ‌توانم فرضیه «بىآ‌اخلاقى انسان» را بپذیرم، و من اخلاق را منحصرا امرى انسانى و متعلق به انسان مىآ‌دانم که هیچ نوع قدرت مافوق انسانى در پشت آن وجود ندارد
        آلبرت اینشتین
        منبع: http://fa.wikiquote.org

        دیدگاه


          #5
          پاسخ : ds1307 در اسمبلی

          نوشته اصلی توسط ConstantError
          مشکلی در قسمت main برنامه وجود داشت:

          کد HTML:
          <br>
          کسی که با بسکام برنامه مینویسه رو برنامه نویس نمیگن! :redface:
          ConstantError عزیز نمیدونم چطوری از شما تشکر کنم الان 4 روزه که توی 15 تا انجمن فارسی و انگلیسی تاپیک زدم اما شما تنها کسی بودین که مشکل رو بر طرف کردین واقعا ازتون ممنونم :wow:
          من نمىآ‌توانم فرضیه «بىآ‌اخلاقى انسان» را بپذیرم، و من اخلاق را منحصرا امرى انسانى و متعلق به انسان مىآ‌دانم که هیچ نوع قدرت مافوق انسانى در پشت آن وجود ندارد
          آلبرت اینشتین
          منبع: http://fa.wikiquote.org

          دیدگاه


            #6
            پاسخ : ds1307 در اسمبلی

            حالا یک سوال اگه بخوایم پشت سر ثانیه , دقیقه و ساعت رو هم بخونیم کد چطوری میشه ؟
            من نمىآ‌توانم فرضیه «بىآ‌اخلاقى انسان» را بپذیرم، و من اخلاق را منحصرا امرى انسانى و متعلق به انسان مىآ‌دانم که هیچ نوع قدرت مافوق انسانى در پشت آن وجود ندارد
            آلبرت اینشتین
            منبع: http://fa.wikiquote.org

            دیدگاه


              #7
              پاسخ : ds1307 در اسمبلی

              نوشته اصلی توسط silicon0
              ببخشید دقیقا چطوری باید تبدیل کرد ؟ یعنی معادل اسمبلی دستورات بیسیک رو پیدا کنم ؟ من یک هفته وقت گذاشتم تا اینکارو بکنم اما برای بیشتر دستورات نمیشه
              منظورشون این بوده که خروجی نرم افزار بسکام رو با Avr studio باز کنی تا کد های اسمبلی رو برات نشون بده
              البته نرم افزار های کامپایلری چون بسکام کدهای زیادی برای کنترل قسمتهای مختلف میکرو تولید میکنند
              نوشته اصلی توسط silicon0
              حالا یک سوال اگه بخوایم پشت سر ثانیه , دقیقه و ساعت رو هم بخونیم کد چطوری میشه ؟
              کاری نداره اینو دیگه خودت میتونی انجامش بدی
              کافیه موقع خوندن ثانیه Acknowledge رو بفرستی تا پشت سر اون دقیقه رو بخونی برای اون هم Ack رو بفرست تا پشت سرش ساعت رو بخونی بعدش دیگه میتونی nack رو بفرستی و stop
              من نوشتم که توی PORTB و PORTD خروجی دقیقه و ساعت رو بده البته یادت نره اول اون پورتها رو خروجی تعریف کن
              نکته مهمی که وجود داره اینه که خروجی این آی سی BCD هستش لذا روی پورتها شما عدد BCD رو میبینید که برای نمایش روی پورت ، همین خوبه برهرحال در صورت نیاز میتونید تبدیلش کنید
              این فسمت main برنامه :
              [lrt]
              کد:
                   call delay
              main:   call i2c_init
                   call i2c_start
                   ldi  r16,208
                   call i2c_send
                   ldi  r16,0
                   call i2c_send
                   call i2c_start
                   ldi  r16,209
                   call i2c_send
                   clr  r16
                   call i2c_send_ack
                   in  r18,twdr
                   out  porta,r18
              		 clr  r16
                   call i2c_send_ack
                   in  r18,twdr
                   out  portb,r18
              		 clr  r16
                   call i2c_send
                   in  r18,twdr
                   out  portd,r18
                   call i2c_stop
                   call delay_1sec
                   rjmp main
              [/ltr]
              اینم دستورات Nack :
              [lrt]
              کد:
              i2c_send_ack:
                   out  twdr,r16
                   ldi  r16,(1&lt;&lt;twen)|(1&lt;&lt;twint)|(1&lt;&lt;twea)
                   out  twcr,r16
              q2:    in  r16,twcr
                   sbrs r16,twint
                   rjmp q1
                   ret
              [/ltr]
              [br /][hr]http://pcenter.ir[hr][br /]

              دیدگاه


                #8
                پاسخ : ds1307 در اسمبلی

                خیلی ممنون

                ببخشید من اینقدر سوال می پرسم . دلیل صفر کردن twdr در زیربرنامه

                i2c_send_ack چیه ؟

                کد:
                i2c_send_ack:
                     out  twdr,r16
                     ldi  r16,(1&lt;&lt;twen)|(1&lt;&lt;twint)|(1&lt;&lt;twea)
                     out  twcr,r16
                q2:    in  r16,twcr
                     sbrs r16,twint
                     rjmp q1
                     ret
                من نمىآ‌توانم فرضیه «بىآ‌اخلاقى انسان» را بپذیرم، و من اخلاق را منحصرا امرى انسانى و متعلق به انسان مىآ‌دانم که هیچ نوع قدرت مافوق انسانى در پشت آن وجود ندارد
                آلبرت اینشتین
                منبع: http://fa.wikiquote.org

                دیدگاه


                  #9
                  پاسخ : ds1307 در اسمبلی

                  منظورشون این بوده که خروجی نرم افزار بسکام رو با Avr studio باز کنی تا کد های اسمبلی رو برات نشون بده
                  منظورتون دقیقا کدوم فایل هست من همه رو با avr studio باز کردم هیچ کدوم

                  دستور اسمبلی نداشت فقط چند تاش کد هگز داشت و اگه منظورتون فایل lst

                  هست , بسکام من که ورژن 2 هست همچین فایلی خروجی نمیده فقط کامپایلر

                  microe فایل lst خروجی میده که اونم یه سری دستوراتش با بسکام فرق میکنه

                  (مثل i2cstart )
                  من نمىآ‌توانم فرضیه «بىآ‌اخلاقى انسان» را بپذیرم، و من اخلاق را منحصرا امرى انسانى و متعلق به انسان مىآ‌دانم که هیچ نوع قدرت مافوق انسانى در پشت آن وجود ندارد
                  آلبرت اینشتین
                  منبع: http://fa.wikiquote.org

                  دیدگاه


                    #10
                    پاسخ : ds1307 در اسمبلی

                    حالا چرا اسمبلی ؟؟؟
                    منم تازه دارم اسمبلی یادمیگیرم (سختی و جذابیت خاص خودشو داره :agree
                    ولی برنامه انعطاف پذیر را نمیشه با اسمبلی نوشت
                    زنده باد GCC
                    امام علی (علیه السلام) : الزکات العلم نشرهُ/ زکات علم نشر آن است

                    دیدگاه


                      #11
                      پاسخ : ds1307 در اسمبلی

                      نوشته اصلی توسط silicon0
                      خیلی ممنون
                      ببخشید من اینقدر سوال می پرسم . دلیل صفر کردن twdr در زیربرنامه
                      i2c_send_ack چیه ؟
                      منظورتون چیه ؟ من که اونجچا نمیبینم TWDR صفر شده باشه!
                      نوشته اصلی توسط silicon0
                      منظورتون دقیقا کدوم فایل هست...
                      من مدت زیادی هست با بسکام کار نمیکنم ولی تا اونجا که یادمه فایل obj که در ورژن های جدیدتر بسکام تولید میشد که میتونستید عمل دیباگینگ رو انجام بدین
                      در هر صورت درصورتی که فایل Hex رو باز کنید کدهای هگز به همراه معادل اسمبلی شون نشون داده میشن و میتونید برنامه رو خط به خط اجر کنید
                      البته همون طوری که گفتم به دلیل اینکه میکروها قسمتهای مختلفی دارن و کامپایلرها کدهای زیادی رو برای راه اندازی و کنترل اونها تولید میکنند به طور مثال معمولا قسمتهای اول برنامه به بردارهای وقفه ها اختصاص دارد و کامپایلرها در این قسمتها کدهای برنامه رو قرار نمیدن
                      اگه میخواید اسمبلی کار کنید تبدیل فایل بسکام به اسمبلی قابل توجیه نیست!
                      [br /][hr]http://pcenter.ir[hr][br /]

                      دیدگاه


                        #12
                        پاسخ : ds1307 در اسمبلی

                        نوشته اصلی توسط ConstantError
                        منظورتون چیه ؟ من که اونجچا نمیبینم TWDR صفر شده باشه!
                        با تشکر از شما
                        مگه در اجرای برنامه دو دستور clr r16 و out twdr,r16 پشت سرهم اجرا نمیشن ؟
                        من نمىآ‌توانم فرضیه «بىآ‌اخلاقى انسان» را بپذیرم، و من اخلاق را منحصرا امرى انسانى و متعلق به انسان مىآ‌دانم که هیچ نوع قدرت مافوق انسانى در پشت آن وجود ندارد
                        آلبرت اینشتین
                        منبع: http://fa.wikiquote.org

                        دیدگاه


                          #13
                          پاسخ : ds1307 در اسمبلی

                          آدرس صفر آدرس فراخوانی عمومی در I2C میباشد
                          [br /][hr]http://pcenter.ir[hr][br /]

                          دیدگاه


                            #14
                            پاسخ : ds1307 در اسمبلی

                            پس چرا هیچکی جواب مارو نمیده

                            دیدگاه


                              #15
                              پاسخ : ds1307 در اسمبلی

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

                              دیدگاه

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