اطلاعیه

Collapse
No announcement yet.

آموزش اسمبلی pic به زبان ساده

Collapse
این موضوع بسته شده است.
X
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    آموزش اسمبلی pic به زبان ساده

    با سلام خدمت دوستان
    یک مدت رفتیم دنبال زبان c برای سری pic18 و توانستم بعد از یک مدت تسلط کافی پیدا کنم حال برای انجام کارهای حرفه ای نیاز دارم که زبان اسمبلی را نیز یاد بگیرم برای این کار به سراغ کتاب های مختلف از جمله آن ها کتاب آقای سلیمیان رفتم و سراغ منابع اینترنتی از جمله datasheet و mpasm و ... رفتم اما بعد از خواندن آن ها آرزو به دل ماندم که بدانم چگونه می توان ثبات f را تعریف کرد یا مثلا BSR چیست حال اگر کسی از دوستان می تواند در این زمینه مرا راهنمایی کند یا اگر مطالبی در این زمینه وجود دارد را به ما هم معرفی کنند ممنون می شویم
    *** کم رنگ ترن قلم جهان از. پررنگ ترن حافظه  جهان ماندگارتر است ***

    #2
    پاسخ : آموزش اسمبلی pic به زبان ساده

    متاسفانه این روزها درگیر امتحانات هستم و فرصت سر زدن به سایت رو ندارم، اگر اشتباه نکنم BSR مخفف Bank Select Register هست و رجیستری هست که در صورت نیاز برای دسترسی به بانک های مختلف حافظه داده مقدار دهی میشه، در مورد اینکه ثبات F یعنی چی باید بیشتر توضیح داد، اگر تا 28 ام جواب سوالاتون رو نگرفته بودید سعی میکنم به خاطر بسپارم و بیام مفصل تر توضیح بدم.
    موفق باشی
    از آنجا که گاهی فرصت بازخوانی پست نیست، بابت غلط های املایی و نگارشی احتمالی معذرت میخوام.
    هیچیک از پاسخ هایی که میدم را کاملا تایید نمیکنم و ممکن هست اشتباه کرده باشم، اگر من به نوشته ام مطمئن هستم شما مشکوک باشید.
    اگر در حل مشکل من کمک کردید و دکمه تشکر رو نزدم حتما فراموش کردم کوچکترین کمک شما برایم ارزشمند است!
    اگر به هر طریقی از من ناراحت شدید حتما با یک پیام خصوصی تذکر بدهید تا مشکل رو حل کنیم و رابطه ی صمیمانه، پایدار بماند.
    شاد و موفق باشید

    دیدگاه


      #3
      پاسخ : آموزش اسمبلی pic به زبان ساده

      نوشته اصلی توسط hamed babaei
      با سلام خدمت دوستان
      یک مدت رفتیم دنبال زبان c برای سری pic18 و توانستم بعد از یک مدت تسلط کافی پیدا کنم حال برای انجام کارهای حرفه ای نیاز دارم که زبان اسمبلی را نیز یاد بگیرم برای این کار به سراغ کتاب های مختلف از جمله آن ها کتاب آقای سلیمیان رفتم و سراغ منابع اینترنتی از جمله datasheet و mpasm و ... رفتم اما بعد از خواندن آن ها آرزو به دل ماندم که بدانم چگونه می توان ثبات f را تعریف کرد یا مثلا BSR چیست حال اگر کسی از دوستان می تواند در این زمینه مرا راهنمایی کند یا اگر مطالبی در این زمینه وجود دارد را به ما هم معرفی کنند ممنون می شویم
      در برگه اطلاعاتی میکروهای سری 18 در این موارد می توانید اطلاعاتی بدست اورید
      در مورد bsr همان گفته دوست قبلی درست است بعنی رجیستری (ثباتی) برای انتخاب بانک های حافظه داده (RAM )
      حافظه داده ها به قسمت هایی به نام بانک تقسیم بندی می شود هر بانک شامل 256 بایت است پس بایک عدد 8 بیتی (1 بایتی ) می توان بایت های داخل بانک ها را ادرس دهی کرد منظور از "رجیستر های داخل یک بانک "همان بایت های داخل یک بانک از حافظه است
      ادرس هر رجیستر (بایت ) داخل بانک ها را با حرف f نشان میدهیم

      رجیستر = register = ثبات

      دیدگاه


        #4
        پاسخ : آموزش اسمبلی pic به زبان ساده

        دوستان عزیز اگر لطف کنید یک منبع آموزشی قرار دهید ممنون می شوم
        *** کم رنگ ترن قلم جهان از. پررنگ ترن حافظه  جهان ماندگارتر است ***

        دیدگاه


          #5
          پاسخ : آموزش اسمبلی pic به زبان ساده

          برگه های اطلاعاتی کمک زیادی به یادگیری میکنند و نیاز کمی به منابع دیگر باقی می ماند
          اشکالات و ابهامات خود را مطرح کنید تا دوستان پاسخ دهند

          دیدگاه


            #6
            پاسخ : آموزش اسمبلی pic به زبان ساده

            نوشته اصلی توسط hamed babaei
            دوستان عزیز اگر لطف کنید یک منبع آموزشی قرار دهید ممنون می شوم
            با سلام

            با یک جستجوی معمولی ، منابع مناسبی رو میتونید بدست بیارید .

            یک PDF برای PIC16F84
            http://www.covingtoninnovations.com/noppp/picassem2004.pdf


            http://www.mstracey.btinternet.co.uk/pictutorial/picmain.htm

            http://www.picrobots.com/assembly.php

            http://digg.com/programming/Learning_Assembly_Language_Programming

            http://www.8051projects.net/plugins/forum/forum_viewtopic.php?22713.0#post_22858

            دیدگاه


              #7
              پاسخ : آموزش اسمبلی pic به زبان ساده

              اگر خط به خط این برنامه را برای من توضیح دهید ممنون می شوم
              کد:
              ;Devident = Divisor * Quotient + Reminder
              ; In this program we want to find "Quotient" and "Reminder".
                      
              	CBLOCK 0x100
              	QL, ML,MH		;at first divided stored in QL . at the end of program QL=Quotient
              	AL , AH ,CNT		; at the end of Program AL=Reminder
              	ENDC
              	#INCLUDE P18f8722.inc
              	ORG 0
              	BRA Main
              	ORG 0X08 
              	BRA Main
              	ORG 0X18 
              	BRA Main
              	
              Main
              	MOVLB 1
              	CLRF CNT
              	CLRF AL
              	CLRF AH
              Loop	
              ;Shift Left A-Q
              	BCF STATUS ,C
              	RLCF QL
              
              	RLCF AL
              	RLCF AH
              
              ;A-M	
              	MOVF ML,W
              	SUBWF AL
              	MOVF MH,W
              	SUBWFB AH
              
              	BTFSS AH,0
              	BRA L1
              	BCF QL,0
              	MOVF ML ,W
              	ADDWF AL
              	MOVF MH ,W
              	ADDWFC AH
              	BRA LoopTest
              L1	
              	BSF QL,0
              LoopTest
              	INCF CNT
              	MOVLW D'8'
              	CPFSEQ CNT
              	BRA Loop
              	GOTO $
              	END
              *** کم رنگ ترن قلم جهان از. پررنگ ترن حافظه  جهان ماندگارتر است ***

              دیدگاه


                #8
                پاسخ : آموزش اسمبلی pic به زبان ساده

                نوشته اصلی توسط hamed14156
                اگر خط به خط این برنامه را برای من توضیح دهید ممنون می شوم
                کد:
                ;Devident = Divisor * Quotient + Reminder
                ; In this program we want to find "Quotient" and "Reminder".
                        
                	CBLOCK 0x100
                	QL, ML,MH		;at first divided stored in QL . at the end of program QL=Quotient
                	AL , AH ,CNT		; at the end of Program AL=Reminder
                	ENDC
                	#INCLUDE P18f8722.inc
                	ORG 0
                	BRA Main
                	ORG 0X08 
                	BRA Main
                	ORG 0X18 
                	BRA Main
                	
                Main
                	MOVLB 1
                	CLRF CNT
                	CLRF AL
                	CLRF AH
                Loop	
                ;Shift Left A-Q
                	BCF STATUS ,C
                	RLCF QL
                
                	RLCF AL
                	RLCF AH
                
                ;A-M	
                	MOVF ML,W
                	SUBWF AL
                	MOVF MH,W
                	SUBWFB AH
                
                	BTFSS AH,0
                	BRA L1
                	BCF QL,0
                	MOVF ML ,W
                	ADDWF AL
                	MOVF MH ,W
                	ADDWFC AH
                	BRA LoopTest
                L1	
                	BSF QL,0
                LoopTest
                	INCF CNT
                	MOVLW D'8'
                	CPFSEQ CNT
                	BRA Loop
                	GOTO $
                	END
                • [li]

                  CBLOCK 0x100 متغیرهای برنامه را از این ادرس به بعد در رم قرار میدهد به این ترتیب که متغیر کیو ال در ادرس 100 و ام ال در 101 و ام اچ در 102 تا اخر پس
                  هر جا در برنامه نام انها
                  را می اوریم در واقع
                  ادرس انها در حافظه
                  رم را معرفی کرده ایم

                  QL, ML,MH ;at first divided stored in QL . at the end of program QL=Quotient
                  AL , AH ,CNT ; at the end of Program AL=Reminder

                  ENDC پاان تعریف بلاکهای حافظه

                  #INCLUDE P18f8722.inc

                  ORG 0 تعین ادرس 0 از حافظه رام فلش که حاوی برنامه اجرایی است خط بعد از این تعریف در ادرس 0 فلش قرار میگیرد ادرس 0 ادرسی
                  است که میکرو بعد از ریست به این ادرس میاید و دستور موجود در این مکان را اجرا میکند

                  BRA Main پرش به به برچسب مشخص شده که در این دستور Mainاست

                  ORG 0X08
                  مانند تعریف قبلی ادرس 8 از پروگرام مموری را اماده میکند تا در خط بعدی دستور اجرایی در این ادرس قرار بگیرد
                  به طور کلی ادرس 0 فلش مربوط به ریست و ادرس های بعدی مربوط به وقفه ها هستند در میکروهای سری18 معمولن بردار وقفه ها از ادرس 8 تا 18 قرار دارند بنابراین اگر وقفهای رخ دهد برنامه به ادرس 8 تا 18 می اید و ما با اجرای دستور پرش به مکان مشخص شده برنامه را ادامه میدهیم

                  BRA Main
                  ORG 0X18
                  BRA Main

                  Main
                  MOVLB 1 مقدار 1 را در رجستر انتخاب بانک قرار میدهیم با این کار بانک 1 را فعال میکنیم
                  CLRF CNT متغیر سی ان تی را 0 میکنیم
                  CLRF AL
                  CLRF AH
                  Loop
                  ;Shift Left A-Q
                  BCF STATUS ,C نشانگر رقم نقلی در رجیستر وضعیت میکرو را 0 میکند
                  RLCF QL دستور Rotate Left روی متغیر کیو ال

                  RLCF AL
                  RLCF AH

                  ;A-M
                  MOVF ML,W مقدار متغیر ام ال را به رجیستر اکومولاتور منتقل میکند
                  SUBWF AL مقدار اکومولاتور را از متغیر ا ال کم می کندو نتیجه را در ا ال قرار میدهد
                  MOVF MH,W
                  SUBWFB AH

                  BTFSS AH,0 اگر بیت 0 از متغیر ا اچ 1 باشد یک پرش به خط دوم انجام میگیرد وگرنه طبق معمول دستور خط بعدی اجرا خواهد شد
                  BRA L1
                  BCF QL,0
                  MOVF ML ,W
                  ADDWF AL متغیر ا ال را با اکومولاتور جمع و در ا ال قرار میدهد
                  MOVF MH ,W
                  ADDWFC AH ا اچ با اکومولاتور جمع و رقم نقلی هم در صورت سرریزی 1 میشود
                  BRA LoopTest
                  L1
                  BSF QL,0
                  LoopTest
                  INCF CNT متغیر سی ان تی یک رقم افزایش می یابد
                  MOVLW D'8' عدد 8 در اکومولاتور قرار میگیرد
                  CPFSEQ CNT اگر مقدار متغیر سی ان تی برابر با اکومولاتور یعنی 8 باشد به خط دوم پرش میکند وگرنه خط بعدی اجرا میشود
                  BRA Loop
                  GOTO $ پرش به برچسب
                  END پایان برنامه

                  ا ل=AL
                  ا اچ =AH
                  ام ال=ML
                  کیوال =QL
                  سی ان تی=CNT
                  اکومولاتور= W (Working register (accumulator))[/li]
                  [li][/li]

                دیدگاه


                  #9
                  پاسخ : آموزش اسمبلی pic به زبان ساده

                  atheist جان دست درد نکنه
                  حال اگه بخوام یک برنامه بنویسم که بازدن کلید k که به پین RA0 وصل است یک led که به پایه RD6 وصل است را روشن و با زدن دوباره کلید خاموش کند برنامش چه جوری می شه نوشت (18f452) ؟

                  با تشکر
                  *** کم رنگ ترن قلم جهان از. پررنگ ترن حافظه  جهان ماندگارتر است ***

                  دیدگاه


                    #10
                    پاسخ : آموزش اسمبلی pic به زبان ساده

                    کد:
                      CLRF  PORTA,0       
                    
                      CLRF  LATA,0      
                    
                      CLRF  PORTD,0
                    
                      CLRF  LATD,0
                    
                      MOVLW  B'11111111'
                    
                      MOVWF TRISA,0
                    
                      MOVLW  B'10111111'
                    
                      MOVWF TRISD,0
                    
                    LOOP
                    
                      BTFSC  PORTA,RA0,0
                    
                      BCF PORTD, RD6,0
                    
                      BSF PORTD, RD6,0
                    
                      GOTO  LOOP

                    دیدگاه


                      #11
                      پاسخ : آموزش اسمبلی pic به زبان ساده

                      atheist جان دست درد نکنه تا حالا خیلی کمکم کردی یه چند تا سوالی دارم که جواب بدی ممنون می شم
                      1) چگونه می توان ثبات f را انتخاب کرد اگه چند مثال برام بزنید که حالت های مختلف تعریف ثبات f را نشان دهد خیلی عالیه ؟
                      2) قضیه این صفر و یک هایی که آخر دستورات قرار می گیرد چیست موارد کاربرد زیاد آن را در غالب مثال برام بیان کنید عالیه ؟
                      3) راههای مختلف تعریف متغیر چگونه است و چه محدودیت هایی دارد لطفا برام مثال هم بزنید ؟
                      4) این BSR یک جوری که آدم قشنگ متوجه بشه می شود برام توضیح دهید و اینکه چه کارهایی می توان با آن انجام داد و چه قابلیت هایی به برنامه نویس می دهد و ... ؟


                      با تشکر
                      *** کم رنگ ترن قلم جهان از. پررنگ ترن حافظه  جهان ماندگارتر است ***

                      دیدگاه


                        #12
                        پاسخ : آموزش اسمبلی pic به زبان ساده

                        نوشته اصلی توسط hamed14156
                        atheist جان دست درد نکنه تا حالا خیلی کمکم کردی یه چند تا سوالی دارم که جواب بدی ممنون می شم
                        1) چگونه می توان ثبات f را انتخاب کرد اگه چند مثال برام بزنید که حالت های مختلف تعریف ثبات f را نشان دهد خیلی عالیه ؟
                        2) قضیه این صفر و یک هایی که آخر دستورات قرار می گیرد چیست موارد کاربرد زیاد آن را در غالب مثال برام بیان کنید عالیه ؟
                        3) راههای مختلف تعریف متغیر چگونه است و چه محدودیت هایی دارد لطفا برام مثال هم بزنید ؟
                        4) این BSR یک جوری که آدم قشنگ متوجه بشه می شود برام توضیح دهید و اینکه چه کارهایی می توان با آن انجام داد و چه قابلیت هایی به برنامه نویس می دهد و ... ؟


                        با تشکر
                        در دستوراتی مانند bcf,bsf,byfsc,... عدد بعد از ویرگول از 0 تا 7 میتونه باشه که شماره ی بیتی که باید بالا پایین کشیده بشه یا چک بشه رو نشون میده
                        در دستوراتی مانند subwf,comf,movf,... عدد صفر میگه که نتیجه ی عملیات در رجیستر w ذخیره شه یا در رجیسترf

                        برای انتخاب ثبات یا رجیستر مورد نظر باید بدونیم تو کدوم بانک هستش اون بانک رو انتخاب کنیم و از اونجا با دستور
                        movwf f مقدار درون w را درونش بریزیم.w با دستور movlw مقدار دهی میشه!


                        برای تعریف متغیر می تونید از روش های زیر استفاده کنید:
                        vishy equ 0x0c
                        cblock 0x0c
                        vishy
                        goshtasp
                        arjasp
                        endc
                        آدرس رجیسترهای ویشی و گشتاسپ و ارجاسپ به ترتیب برابر است با:0x0c,0x0d,0x0e

                        دیدگاه

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