當前位置:編程學習大全網 - 編程語言 - Pic匯編程序

Pic匯編程序

Pic 8位MCU匯編指令讀取

各種單片機的指令系統不是通用的,是由單片機廠家規定的,所以用戶必須遵循廠家規定的標準,才能達到應用單片機的目的。

PIC 8位MCU有三個級別和相應的指令集。基本PIC系列芯片* * *有33條指令,每條指令長12位;中級PIC系列芯片* * *有35條指令,每條指令長14位;高級PIC系列芯片* * *有58條指令,每條指令長16位。它的指令向後兼容。

在此,筆者介紹PIC 8位單片機匯編語言指令的組成以及指令中符號的作用,為初學者閱讀相關書籍資料時提供壹個快速入門。

I. PIC匯編語言指令格式

PIC系列微控制器匯編語言指令與MCS-51系列微控制器匯編語言相同,每條匯編語言指令由四部分組成,其編寫格式如下:

標簽操作碼助記操作數1,操作數2;給…作註解

指令格式描述如下:指令的四個部分用空格隔開,可以是1個單元,也可以是多個單元,以保證交叉匯編時PC能識別指令。

參考號1與MCS-51系列單片機功能相同,參考號代表指令的符號地址。在程序匯編時,指令存儲器地址的具體數值已經被分配。匯編語言中使用的符號地址(即標號)便於查看和修改,特別是對於指令傳遞。標簽在指令格式中是可選的,只有被其他語句引用時才需要加標簽。如果沒有標簽,在編寫指令助記符之前,必須在指令助記符前面保留壹個或多個空格。指令助記符不能占用標簽位置,否則會被匯編器誤標。

寫標簽時,規定第壹個字符必須是字母或半角下劃線“-”,後面可以是英文和數字字符、冒號(:)符號表等。,並且可以隨意組合。操作碼助記符和註冊碼不能代表更多的標簽。標簽也可以占據壹行。

2操作碼助記符該字段是指令的必需選項。這壹項可以是指令助記符,也可以由偽指令和宏命令組成。其作用是將“指令操作碼助記符”與“操作碼表”逐壹比較,找出對應的機器碼代。

3操作數由操作數的數據值或符號數據或地址值組成。如果有兩個操作數,兩個操作數用逗號(,)分隔。當操作數是常數時,常數可以是二進制、八進制、十進制或十六進制數。也可以是定義的標簽、字符串和ASCⅱⅱ代碼。具體要求二進制數以字母“b”為前綴,例如:b 100111100;八進制數以字母“O”開頭,如O257十進制數以字母“d”開頭,例如d 122;十六進制數以“h”開頭,如H2F。PIC 8位MCU的默認基數是十六進制,十六進制數前加Ox,比如H2F可以寫成Ox2F。

指令的操作數也是可選的。

PIC系列和MCS-51系列8位單片機的尋址方式相同,即操作數的來源或目的地。由於PIC系列微控制器采用精簡指令集(RISC)架構,其尋址方式和指令少而簡單。根據操作數的來源,尋址方式可以分為四種:立即尋址、直接尋址、寄存器間接尋址和位尋址。所以PIC系列MCU指令中的操作數往往都有相關的寄存器符號。相關的尋址示例可在本文後面找到。註釋用於解釋程序,以便人們可以輕松閱讀。使用分號(;)與其他部分分開。當匯編程序檢測到分號時,它後面的字符不再被處理。值得註意的是,在使用子程序時,應說明程序的進入條件和退出條件以及程序應完成的功能和作用。

二、零指令(***4)

1寄存器清除指令

例子:CLRW寄存器w清零。

說明:這個指令很簡單,其中W是PIC單片機的工作寄存器,相當於MCS-51系列單片機中的累加器A,A,CLR是英文Clear的縮寫。

2看門狗定時器清零指令。

例如:CLRWDT看門狗定時器清零(如果分配了定時器,預分頻器也會清零)。

描述:WDT是英文Watchdog Timer的縮寫。CLR如上所述。註意,這兩條指令沒有操作數。

3寄存器f清除指令。指令格式:CLRF f

例如:CLRF·TMRO;清除TMRO

註:在PIC系列8位單片機中,常用符號F(或F)代表芯片中的各種發送器以及F的序號和地址,F的值根據PIC系列的不同型號而不同,壹般為ox00 ~ ox1f/7f/ff。TMRO代表計時器/計數器TMRO,因此CLRF清除發送方,並直接給寄存器TMRO以通過直接尋址來訪問。

4位清零指令。指令格式BCF,b

例如:BCF REG1,2;將寄存器REG1的D2位清零。

說明:BCF是指令格式中英文bitclear F. F的縮寫,如上解釋;符號b是表示PIC芯片中壹個8位數據寄存器f的位數(或位地址),所以b的值為0 ~ 7或D0 ~ D7。REG是示例中Register的縮寫。在示例中,2表示指令格式中的b=2,即寄存器REG1的D2位。

通過以上四條明確指令的格式和實例,可以說明在學習PIC系列8位單片機的指令時,首先要理解助記符的含義(功能),然後才是它的表達方式。初學者不需要背說明書,重要的是理解和練習。

本文中的說明與前面的說明略有不同。上面的指令註釋是為了解釋指令的具體功能。這種標註方式確實很容易讓初學者接受和理解,但是實際應用中PIC產品匯編語言的標註通常是基於程序要做什麽(或者指令的功能)而不是指令的直接功能。鑒於以上原因,下面的指令註釋將改變過去的註釋方法,把程序應該發揮的功能作為註釋。

10信使半字節交換指令

指令格式:SWAPF f,d

說明:SWAPF是Swap f的合著者,符號f和d的含義與上面提到的相同。這條指令的作用是交換寄存器F的高4位和低4位,即在指令執行前,如果寄存器F的8位狀態為D7,D6,D5,D4,D3,D2,D1,D0,執行後的8位狀態變為D3,D2,D1,D7,D6,D5,D4。

中斷現場保護是中斷技術的重要組成部分。因為PIC16C××指令系統沒有PUSH和POP指令,所以只能通過其他指令來實現。由於主程序中經常用到工作寄存器w和狀態寄存器,所以中斷域保護經常需要保護寄存器w和狀態。

以下是PIC16C7×系列芯片現場保護的示例程序。

MOVWF W_TEMP?;將W的內容存儲到臨時寄存器W_TEMP SWAPF STATUS,W?;交換狀態和w含量

MOVWF STATUS_TEMP?;將狀態的內容保存到Pro。

…在STATUS_TEMP寄存器中。

中斷服務程序(interrupt service routine的縮寫)

SWAPF STATUS_TEMP,W;交換STATUS_TEMP和w的內容,MOVWF狀態? TATUS恢復到原來的狀態。

SWAPF W_TEMP,F;交換內容

SWAPF W_TEMP,W;w回到原來的狀態。

註:上述程序中每條指令的註釋基本都是基於程序要達到的目的,幾乎不涉及每條指令的功能。這是新手要特別註意的。

11子程序調用指令(子程序調用)

指令格式:調用k;k是直接地址。

註:對於不同類型的芯片,子程序調用的實現方式是不同的,其* * *相似性是先將返回地址((PC)+1)堆棧保護,然後轉移到被調用的子程序入口地址執行(類似於MCS-51指令)。

指令格式模式:這裏?通話延遲;呼叫延遲子程序

延遲MOVLW 0x80延遲子程序

RETLW 0

描述:調用指令執行前,PC=此處地址。

調用指令執行後,PC=地址延遲(標簽),堆棧指針TOS = here+1(返回地址)。

示例:參見下壹條指令的示例。

12寄存器內容反轉指令

指令格式:COMF f,d

說明:COMF是補碼f的縮寫,其中d=1,運算(f)→f;當d=0時,操作(f) → w。

功能:將寄存器F的內容反轉後發送給W(d=0)或F本身(d=1)。

例子:?組織0x1FF

轉到主頁

組織0

延遲…

主要?MOVLW 0?;主程序開始

TRTS?5?;將RA端口設置為輸出?

BCF 5,0;將RA端口0位設置為0。

環路呼叫延遲;閃爍延遲

?COMF 5;RA口倒置(燈-關-燈...控制)

轉到循環;周期?

說明:以上指令是壹個PIC16C54 LED發光控制實驗部分程序。延時子程序DELY沒有列出,但不影響該指令的讀取。程序中主程序開頭的三條指令已經全部引入,後面的調用指令是調用執行子程序,它的入口地址是標簽DELAY。子程序執行後,執行COMF 5 LED燈滅-亮-滅的控制命令。下壹個GOTO LOOP命令是實現LED循環照明的目的。

13定位作業指導書(***4項,PIC高級產品多壹項)

這類指令除了清零壹位外,還有另壹條在寄存器F的B位設置1的指令和另外兩條跳位的指令(PIC高級產品在F的B位增加壹條觸發轉換的指令)。

(1)位置1指令。指令格式BSF,B描述:BSF是位集F的縮寫,F和B的含義同上,該指令的作用是將寄存器F的B位設置為1。

(2)位測試,零跳轉指令。指令格式BTFSC?f和b的描述:BTFSC是Bit Test的縮寫,清零則跳過。指令功能是測試寄存器F的位“B”,如果為0,則跳過下壹條指令;順序執行是1,即當f(b)=0時,不執行當前指令,執行下壹條指令(跳轉),即替換為空指令NOP,所以這條指令占用2個指令周期。

(3)位測試是1跳轉指令。指令格式BTFSS f,b說明:BTFSS是Bit Test的縮寫,置位則跳過。其指令的邏輯功能與上篇相反,間歇執行位測試f(b)=1,順序執行f(b)=0。

上面介紹的PIC 8位MCU匯編語言指令只是部分指令,還有循環左移和右移指令。w和寄存器F相加,並進入睡眠模式。鑒於報紙版面的限制,這裏就不壹壹介紹了,以後在程序的應用測試中再做補充說明。

有點多,建議妳打印下來慢慢看!

  • 上一篇:計算機專業畢業做JAVA好還是做Python好?
  • 下一篇:對壹個房間的測繪
  • copyright 2024編程學習大全網