PIC單片機指令系統(tǒng)及設計
1.空操作指令 NOP
此指令起到單純的延時,延長一個指令周期,不進行任何操作
2.寄存器傳送指令 MOVWF f
此指令作用為將W寄存器中的數(shù)據(jù)放到F寄存器
例: MOVLW 10 (將立即數(shù)10放入 W寄存器)
MOVWF 11 (將W寄存器中的數(shù)據(jù)放入F11寄存器中)
可能原來使用51系列單片機的朋友看這些程序有點別扭,呵呵,我就有點別扭,
但理解起來應該并不困難
3.清工作寄存器W CLRW
此語句需要一個指令周期,作用讓W=0,影響狀態(tài)寄存器Z標志位,W清0則Z為1
狀態(tài)寄存器F3各位定義:
D7 D6 D5 D4 D3 D2 D1 D0
PA2 PA1 PA0 TO PD Z DC C
(1)C志位既為進位/借位標志 ,當兩個數(shù)相加時產(chǎn)生了進位則C=1反之C=0此處跟
51系列單片機匯編沒有什么區(qū)別,但當兩個數(shù)相減的時候如果得到的數(shù)據(jù)為負,也就
也就是說產(chǎn)生了借位則C=0,反之C=1這是與51系列單片機不同之處。
(2)DC位為半進位標志。當進行減法或者加法的時候低四位操作產(chǎn)生進位的時候則
DC=1
(3)這是0標志,在算術邏輯操作結果為0的時候 Z=1
(4)PD位為低功耗標志,在上電或者執(zhí)行CLRWDT時候,此位為1,當執(zhí)行SLEEP指令的
時候此位為0
(5)TO位是WDT超時標志,當上電或者執(zhí)行CLRWDT,SLEEP指令的時候該位為1,當
WDT超時的時候此位為0
(6)PA0和PA1可讀可寫,可以通過他的設置來選擇程序存儲器的頁面
(7)PA2為保留位
4.清數(shù)據(jù)寄存器 CLRF f,d
清理寄存器F(f)為0 當d=1的時候只清除F(f),當d=0的時候同時清除W寄存器
例: CLRF 11,1 (F11=0 W寄存器數(shù)據(jù)不改變)
CLRF 11,0 (F11=0,W=0)
此指令為單周期指令,其實PIC里的大多數(shù)匯編指令都是單周期指令,只有CALL和
GOTO指令需要兩個周期
5。寄存器相減 SUBWF f,d
例: MOVLW 10
MOVWF 11
MOVLW 12
SUBWF 11,1
此程序的意思就是將W寄存器中先放入10,然后將W中的數(shù)據(jù)放在F11數(shù)據(jù)寄存器中
然后再向W寄存器中放12,再指令SUBWF 11,1 意思是用F11中的數(shù)減去W中的數(shù)據(jù)
然后把結果放在F11中,因為d=1 ,如果把指令換成SUBWF 11,0的話則把結果放在
W寄存器中,影響到的標志位有C ,DC,Z,關于如何影響我想就不用說了吧,前面已經(jīng)
詳細說明這幾個位是如何改變的
6.寄存器減1 DECF f,d
將f寄存器中的數(shù)據(jù)減1然后放入d d=0的時候放入W,D=1的時候放入 f
7.寄存器或 IORWF f,d
通過前面幾條指令的解釋我想這個就應該很簡單了,無非將W與F取或后存入D
8寄存器與 ANDWF f,d
9.寄存器異或 XORWF f,d
10,寄存器相加 ADDWF f,d
11,寄存器傳送 MOVF f,d
將F(f)中的數(shù)據(jù)放入d,當為1時,F(xiàn)(f)將數(shù)據(jù)從新放入自身,如果d=0則將F中的數(shù)據(jù)
放入W寄存器。
12,寄存器取反 COMF f,d
13,寄存器加1 INCF f,d
14,減1為0跳轉 DECFSZ f,d
例:MOVLW 55H
MOVWF 10
LOOP:DECFSZ 10,1 (如果F10減1后為0的話則跳轉到RETLW 0否則繼續(xù)執(zhí)行)
GOTO LOOP
RETLW 0
15.帶進位C進行右移 RRF f,d
類似于51匯編中的帶C左移功能
16,帶進位C進行左移 RLF d,f
17,寄存器高低四位進行交換
SWAPF f,d
18。加1為0跳轉 INCFSZ f,d
其實這個就是當f為FFH的時候翻轉為00H,判斷這個
以上為33條語句中的18條語句的詳細解釋和應用。如果大家對這些語句有什么好的
應用的話,歡迎在后面跟帖。在下一篇上再介紹其余的指令。
擴展閱讀:PIC8位單片機匯編語言常用指令