版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、中檔PIC單片機(jī)匯編指令詳解 -老羅整理NOP 空操作指令語法形式:NOP操作數(shù):無執(zhí)行時間:一個指令周期執(zhí)行過程:除了消耗一個指令周期之外,無任何其他影響,所以通常被用來作為延時使用狀態(tài)標(biāo)志影響:無說明:指令操作沒有任何操作數(shù)參與,也不影響任何寄存器的內(nèi)容和狀態(tài),所以通常都是被作為延時使用的。指令范例:BSF PORTB,0 ;PORTB的第0位輸出高電平(1) NOP ;延時,使電平穩(wěn)定MOVWF 將W寄存器的內(nèi)容傳送到數(shù)據(jù)寄存器1 / 42語法形式:MOVWF f操作數(shù):f為數(shù)據(jù)寄存器的低7位地址(0x000x7F)執(zhí)行時間:一個指令周期執(zhí)行過程:把W寄存器的內(nèi)容傳送到f數(shù)據(jù)寄存器,W寄
2、存器的內(nèi)容保持不變,類似于Copy狀態(tài)標(biāo)志影響:無說明:該指令是對數(shù)據(jù)寄存器賦值的主要方式指令范例:MOVLW 0x55 ;W寄存器賦值MOVWF Data ;W寄存器值傳送給Data;此時Data=0x55CLRW W寄存器內(nèi)容清0語法形式:CLRW操作數(shù):無執(zhí)行時間:一個指令周期執(zhí)行過程:0x00W1Z狀態(tài)標(biāo)志影響:Z說明:該指令對W寄存器內(nèi)容清零,并置位0標(biāo)志Z另外使用MOVLW 0x00也可以使W寄存器內(nèi)容為0,但是這條指令不影響0標(biāo)志Z指令范例:CLRW ;W=0,Z=1CLRF 數(shù)據(jù)寄存器內(nèi)容清零語法形式:CLRF f操作數(shù):f為數(shù)據(jù)寄存器的低7位地址(0x000x7F)執(zhí)行時間:
3、一個指令周期執(zhí)行過程:0x00f1Z狀態(tài)標(biāo)志影響:Z說明:指令對數(shù)據(jù)寄存器清零,并置位0標(biāo)志Z指令范例:CLRF TRISB ;端口B所有I/O引腳設(shè)為輸出SUBWF 將數(shù)據(jù)寄存器的內(nèi)容減去W寄存器內(nèi)容語法形式:SUBWF f,d 操作數(shù):f為數(shù)據(jù)寄存器的低7位地址(0x000x7F)d為目的寄存器的低7位地址(0x000x7F)當(dāng)d=f時,結(jié)果放在f數(shù)據(jù)寄存器,W寄存器內(nèi)容不變當(dāng)d=W時,結(jié)果放在W寄存器中,數(shù)據(jù)寄存器f內(nèi)容不變執(zhí)行時間:一個指令周期執(zhí)行過程:【f】-【W(wǎng)】d狀態(tài)標(biāo)志影響:Z DC C說明:要特別注意W寄存器在這條指令中是減數(shù)當(dāng)【f】=【W(wǎng)】時,相減的結(jié)果為0,則Z=1當(dāng)【f
4、】>【W(wǎng)】時,沒有借位發(fā)生,則C=1當(dāng)【f】<【W(wǎng)】時,有借位發(fā)生,則C=0實際上在PIC單片機(jī)中這條指令是通過先對W寄存器的內(nèi)容求補碼,然后與被減數(shù)相加,所以在判斷是否有借位時和其他單片機(jī)不同,請注意指令范例:MOVLW 0x23 ;W=0x23MOVWF tmp ;tmp=0x23MOVLW 0x32 ;W=0x32SUBWF tmp,W ;tmp-W將結(jié)果存入W中,W=0xF1,tmp=0x23;過程:tmp=0x23,W求補碼為0xCD,所以0x23+0xCD=0xF1,又因tmp<W,所以C=0DECF 數(shù)據(jù)寄存器的內(nèi)容遞減1語法形式:DECF f,d 操作數(shù):f為
5、數(shù)據(jù)寄存器的低7位地址(0x000x7F)d為目的寄存器的低7位地址(0x000x7F)當(dāng)d=f時,結(jié)果放在f數(shù)據(jù)寄存器,f數(shù)據(jù)寄存器自減1當(dāng)d=W時,結(jié)果放在W寄存器中,W寄存器內(nèi)容自減1執(zhí)行時間:一個指令周期執(zhí)行過程:【f】-1d狀態(tài)標(biāo)志影響:Z說明:該指令對數(shù)據(jù)寄存器的內(nèi)容做減1運算。如果減1后的結(jié)果為0,則置位0標(biāo)志寄存器Z指令范例:CLRF Count ;Count=0x00DECF Count,f ;Count=0x00,f=0xFFDECF f,W ;f=0xFF,W=0xFEINCF 數(shù)據(jù)寄存器的內(nèi)容遞增1語法形式:INCF f,d操作數(shù):f為數(shù)據(jù)寄存器的低7位地址(0x000
6、x7F)d為目的寄存器的低7位地址(0x000x7F)當(dāng)d=f時,結(jié)果放在f數(shù)據(jù)寄存器,f數(shù)據(jù)寄存器自增1當(dāng)d=W時,結(jié)果放在W寄存器中,W寄存器內(nèi)容自增1執(zhí)行時間:一個指令周期執(zhí)行過程:【f】+1d狀態(tài)標(biāo)志影響:Z說明:該指令對數(shù)據(jù)寄存器的內(nèi)容增加1。如果增加后的結(jié)果為0,則置位0標(biāo)志寄存器Z指令范例:CLRF Count ;Count=0x00INCF Count,f ;Count=0x00,f=0x01INCF f,W ;f=0x01,W=0x02IORWF 數(shù)據(jù)寄存器f和W寄存器做邏輯或操作語法形式:IORWF f,d操作數(shù):f為數(shù)據(jù)寄存器的低7位地址(0x000x7F)d為目的寄存器
7、的低7位地址(0x000x7F)當(dāng)d=f時,結(jié)果放在f數(shù)據(jù)寄存器,W寄存器的內(nèi)容不變當(dāng)d=W時,結(jié)果放在W寄存器中,f數(shù)據(jù)寄存器的內(nèi)容不變執(zhí)行時間:一個指令周期執(zhí)行過程:【f】|【W(wǎng)】d狀態(tài)標(biāo)志影響:Z說明:數(shù)據(jù)寄存器內(nèi)容和W寄存器的內(nèi)容邏輯或,結(jié)果按照d的指定位置存放,按照邏輯或有1出1的規(guī)則,使用該命令可以將任意位設(shè)置為1指令范例:MOVLW b00001111 ;將W寄存器的低4位設(shè)置為1IORWF PORTB,f ;將PORTB的低4位設(shè)置為1,不影響高4位ANDWF 數(shù)據(jù)寄存器f和W寄存器做邏輯與操作語法形式:ANDWF f,d操作數(shù):f為數(shù)據(jù)寄存器的低7位地址(0x000x7F)d
8、為目的寄存器的低7位地址(0x000x7F)當(dāng)d=f時,結(jié)果放在f數(shù)據(jù)寄存器,W寄存器的內(nèi)容不變當(dāng)d=W時,結(jié)果放在W寄存器中,f數(shù)據(jù)寄存器的內(nèi)容不變執(zhí)行時間:一個指令周期執(zhí)行過程:【f】&【W(wǎng)】d狀態(tài)標(biāo)志影響:Z說明:數(shù)據(jù)寄存器內(nèi)容和W寄存器的內(nèi)容邏輯與,結(jié)果按照d的指定位置存放。按照邏輯與有0出0的規(guī)則,使用該命令可以將任意位設(shè)置為0。利用其影響標(biāo)志Z的特性,可以判斷寄存器任意位的組合是否為全0。指令范例:例1:寄存器任意位清零MOVLW b00001111 ;W寄存器高4位清0(取決于0的組合)ANDWF PORTB,f ;PORTB的高4位清0,低4位保持不變例2:判斷寄存器任
9、意位組合是否全0MOVLW b00001111 ;W寄存器的低4位置1(取決于1的組合)ANDWF PORTC,W ;只要PORTC的低4位全0,則Z標(biāo)志寄存器就置1;此指令的操作結(jié)果放在W寄存器中,不會影響原寄存器的值XORWF 數(shù)據(jù)寄存器內(nèi)容和W寄存器內(nèi)容做邏輯異或操作語法形式:XORWF f,d操作數(shù):f為數(shù)據(jù)寄存器的低7位地址(0x000x7F)d為目的寄存器的低7位地址(0x000x7F)當(dāng)d=f時,結(jié)果放在f數(shù)據(jù)寄存器,W寄存器的內(nèi)容不變當(dāng)d=W時,結(jié)果放在W寄存器中,f數(shù)據(jù)寄存器的內(nèi)容不變執(zhí)行時間:一個指令周期執(zhí)行過程:【f】【W(wǎng)】d狀態(tài)標(biāo)志影響:Z說明:數(shù)據(jù)寄存器內(nèi)容和W寄存器
10、的內(nèi)容邏輯異或,結(jié)果按照d的指定位置存放。按照邏輯異或的規(guī)則,任何數(shù)(0或1)和1異或,結(jié)果為反碼;任何數(shù)和其本身異或,結(jié)果為0。所以此指令可以把寄存器的任意位數(shù)據(jù)反轉(zhuǎn)(0變1,1變0),或者判斷寄存器的內(nèi)容是否為一特定值。指令范例:例1:寄存器任意位數(shù)據(jù)反轉(zhuǎn)MOVLW b00000011 ;W寄存器低2位置1XORWF PORTB,f ;PORTB的高6位不變,低2位數(shù)據(jù)反轉(zhuǎn)例2:判斷寄存器的內(nèi)容是不是特定值MOVLW 0xAA ;W=0xAA(可以是任意值)XORWF PORTC,W ;如果PORTC=0xAA,則Z標(biāo)志就為1;此指令的操作結(jié)果放在W寄存器中,不會影響原寄存器的值A(chǔ)DDWF
11、 W寄存器內(nèi)容和f數(shù)據(jù)寄存器內(nèi)容相加語法形式:ADDWF f,d操作數(shù):f為數(shù)據(jù)寄存器的低7位地址(0x000x7F)d為目的寄存器的低7位地址(0x000x7F)當(dāng)d=f時,結(jié)果放在f數(shù)據(jù)寄存器,W寄存器的內(nèi)容不變當(dāng)d=W時,結(jié)果放在W寄存器中,f數(shù)據(jù)寄存器的內(nèi)容不變執(zhí)行時間:一個指令周期執(zhí)行過程:【f】+【W(wǎng)】d狀態(tài)標(biāo)志影響:Z DC C說明:數(shù)據(jù)寄存器內(nèi)容和W寄存器內(nèi)容相加,結(jié)果放入d指定的地方指令范例:MOVLW 0x55 ;W=0x55,假定Sum=0xAAADDWF Sum,f ;W不變,Sum=0xFFMOVF 傳送f數(shù)據(jù)寄存器的內(nèi)容到目的寄存器語法形式:MOVF f,d操作數(shù):
12、f為數(shù)據(jù)寄存器的低7位地址(0x000x7F)d為目的寄存器的低7位地址(0x000x7F)當(dāng)d=f時,把數(shù)據(jù)寄存器的內(nèi)容放回自己本身,目的用于判斷數(shù)據(jù)寄存器的內(nèi)容是否為0。當(dāng)d=W時,結(jié)果放在W寄存器中,將數(shù)據(jù)寄存器f的內(nèi)容傳送至W寄存器執(zhí)行時間:一個指令周期執(zhí)行過程:【f】d狀態(tài)標(biāo)志影響:Z說明:將數(shù)據(jù)寄存器的內(nèi)容傳送至它處,或者對f數(shù)據(jù)寄存器的內(nèi)容做判0操作,如果傳送的數(shù)據(jù)是0,則置位Z標(biāo)志。指令范例:例1:數(shù)據(jù)傳送MOVF Var1,W ;Var1內(nèi)容傳送至W寄存器MOVWF Var2 ;W寄存器內(nèi)容傳送至Var2,此時Var1=Var2例2:數(shù)據(jù)判0MOVF Var3,f ;Var3
13、寄存器內(nèi)容被送往自身,其他寄存器內(nèi)容不變,但是影 響Z標(biāo)志BTFSC STATUS,Z ;如果Var3不等于0,則跳過下一條指令GOTO Var3Zero ;如果Var3等于0,則轉(zhuǎn)向其他操作COMF f數(shù)據(jù)寄存器內(nèi)容取反語法形式:COMF f,d操作數(shù):f為數(shù)據(jù)寄存器的低7位地址(0x000x7F)d為目的寄存器的低7位地址(0x000x7F)當(dāng)d=f時,結(jié)果放在f數(shù)據(jù)寄存器,W寄存器的內(nèi)容不變當(dāng)d=W時,結(jié)果放在W寄存器中,f數(shù)據(jù)寄存器的內(nèi)容不變執(zhí)行時間:一個指令周期執(zhí)行過程:!【f】d狀態(tài)標(biāo)志影響:Z說明:求數(shù)據(jù)寄存器內(nèi)容的反碼,求一個數(shù)的補碼可以使用這個指令完成(按位求反再加一)指令范
14、例:COMF num,f ;對num變量取反碼INCF num,f ;反碼加1就是其補碼DECFSZ 數(shù)據(jù)寄存器內(nèi)容遞減1,并作判0標(biāo)志語法形式:DECFSZ f,d操作數(shù):f為數(shù)據(jù)寄存器的低7位地址(0x000x7F)d為目的寄存器的低7位地址(0x000x7F)當(dāng)d=f時,結(jié)果放在f數(shù)據(jù)寄存器,W寄存器的內(nèi)容不變當(dāng)d=W時,結(jié)果放在W寄存器中,f數(shù)據(jù)寄存器的內(nèi)容不變執(zhí)行時間:一個指令周期或兩個指令周期執(zhí)行過程:【f】-1d狀態(tài)標(biāo)志影響:Z說 明:該指令將首先將f數(shù)據(jù)寄存器的內(nèi)容做減1運算,結(jié)果放到d指定的目的地址內(nèi),同時它還會對Z標(biāo)志進(jìn)行判0操作(進(jìn)行分支跳轉(zhuǎn)控制);如果f數(shù)據(jù)寄存器 減1
15、后結(jié)果非0,那么Z=0,程序?qū)㈨樞驁?zhí)行下一條指令,本次指令操作耗費一個指令周期;如果結(jié)果為0,那么Z=1,此時程序?qū)^緊跟其后的第一條指 令,去執(zhí)行緊跟其后的第二條指令,本次指令操作耗費兩個指令周期。該指令常用于計數(shù)次數(shù)或者循環(huán)次數(shù)的控制。指令范例: MOVLW 0x10 ;準(zhǔn)備給循環(huán)計數(shù)器賦初值 MOVWF Count ;此時循環(huán)計數(shù)器Count=0x10Loop:DECFSZ Count,f ;Count遞減1,結(jié)果放入Count中,并進(jìn)行Z標(biāo)志判 GOTO Loop ;斷,如果遞減后結(jié)果不為0,繼續(xù)執(zhí)行Loop操作, ;總共循環(huán)0x10(16進(jìn)制)次。 NOP ;如果遞減后結(jié)果為0,
16、就跳到這條指令I(lǐng)NCFSZ f數(shù)據(jù)寄存器內(nèi)容遞增1,并作判0標(biāo)志語法形式:INCFSZ f,d操作數(shù):f為數(shù)據(jù)寄存器的低7位地址(0x000x7F)d為目的寄存器的低7位地址(0x000x7F)當(dāng)d=f時,結(jié)果放在f數(shù)據(jù)寄存器,W寄存器的內(nèi)容不變當(dāng)d=W時,結(jié)果放在W寄存器中,f數(shù)據(jù)寄存器的內(nèi)容不變執(zhí)行時間:一個指令周期或兩個指令周期執(zhí)行過程:【f】+1d狀態(tài)標(biāo)志影響:Z說 明:該指令首先對數(shù)據(jù)寄存器的內(nèi)容做加1操作,結(jié)果按照d的指示保存到相應(yīng)的地方,然后對Z進(jìn)行判0操作(分支跳轉(zhuǎn)控制):如果加1之后的結(jié)果非0,也就 是Z=0,程序?qū)凑枕樞驁?zhí)行下一條指令,使用1個指令周期;如果加1之后結(jié)果
17、為0,也就是Z=1,那么程序?qū)^INCFSZ指令之后的第一條指 令,開始執(zhí)行第二條指令,使用2個指令周期。該指令常用于計數(shù)次數(shù)和循環(huán)次數(shù)的控制。指令范例: MOVLW 0xC0 ;循環(huán)計數(shù)數(shù)據(jù)賦初值 MOVWF Count ;此時循環(huán)計數(shù)器初值Count=0xC0Loop:INCFSZ Count,f ;Count內(nèi)容加1,放回Count中,并進(jìn)行Z標(biāo)志判斷 GOTO Loop ;如果加1之后的結(jié)果不為0,則循環(huán)執(zhí)行Loop的內(nèi) 容,總共循環(huán)次數(shù)為0x00-0xC0=0x40次 NOP ;結(jié)果為0,則跳到這條指令RRF 數(shù)據(jù)寄存器內(nèi)容帶進(jìn)位的循環(huán)右移語法形式:RRF f,d操作數(shù):f為數(shù)據(jù)
18、寄存器的低7位地址(0x000x7F)d為目的寄存器的低7位地址(0x000x7F)當(dāng)d=f時,結(jié)果放在f數(shù)據(jù)寄存器,W寄存器的內(nèi)容不變當(dāng)d=W時,結(jié)果放在W寄存器中,f數(shù)據(jù)寄存器的內(nèi)容不變執(zhí)行時間:一個指令周期執(zhí)行過程:狀態(tài)標(biāo)志影響:C說明:該指令把C進(jìn)位寄存器(借位寄存器)和數(shù)據(jù)寄存器的8位數(shù)據(jù)結(jié)合在一起做9位的循環(huán)右移1位的操作。操作的結(jié)果是把C移到數(shù)據(jù)寄存器的最高位,原數(shù)據(jù)寄存器的最低位放到C中。指令范例:例1:實現(xiàn)數(shù)據(jù)寄存器自身8位的循環(huán)右移RRF Data,W ;數(shù)據(jù)寄存器Data的內(nèi)容右移1位,結(jié)果放入W寄存器,Data本身 的內(nèi)容不變,但是最低位已經(jīng)移到C中RRF Data,f
19、 ;再次進(jìn)行右移,結(jié)果寫入Data自身。這時上一條指令移入C中的最低位現(xiàn)在已經(jīng)變成Data的最高位,實現(xiàn)了最低位變最高位,最高位變成第二高位的目的例2:實現(xiàn)數(shù)據(jù)寄存器算數(shù)右移(除2操作)BCF STATUS,C ;確保C=0RRF Data,f ;數(shù)據(jù)寄存器右移1位,最高位現(xiàn)在為0,結(jié)果放入自身RLF 數(shù)據(jù)寄存器內(nèi)容進(jìn)行帶進(jìn)位的循環(huán)左移操作語法形式:RLF f,d操作數(shù):f為數(shù)據(jù)寄存器的低7位地址(0x000x7F)d為目的寄存器的低7位地址(0x000x7F)當(dāng)d=f時,結(jié)果放在f數(shù)據(jù)寄存器,W寄存器的內(nèi)容不變當(dāng)d=W時,結(jié)果放在W寄存器中,f數(shù)據(jù)寄存器的內(nèi)容不變執(zhí)行時間:一個指令周期執(zhí)行過
20、程:狀態(tài)標(biāo)志影響:C說明:該指令將C和8位數(shù)據(jù)寄存器的數(shù)據(jù)結(jié)合起來進(jìn)行9位的循環(huán)左移操作,結(jié)果放入d指定的位置。操作結(jié)果是把C移到數(shù)據(jù)寄存器的最低位,將原數(shù)據(jù)寄存器的最高位移入C中。指令范例:例1:實現(xiàn)數(shù)據(jù)寄存器的8位內(nèi)容循環(huán)左移RLF Data,W ;Data的內(nèi)容左移1位放入W寄存器中,Data的內(nèi)容不變,Data的 最高位放入C中RLF Data,f ;Data的內(nèi)容經(jīng)操作后放回自身,C的內(nèi)容(經(jīng)上步操作后變成了原Data的最高位)放入Data的最低位。例2:實現(xiàn)數(shù)據(jù)寄存器的算數(shù)左移(結(jié)果乘以2)BCF STATUS,C ;確保C=0RLF Data,f ;數(shù)據(jù)寄存器Data左移1位,最
21、低位補充為0,實現(xiàn)乘以2SWAPF 數(shù)據(jù)寄存器高低半字節(jié)內(nèi)容進(jìn)行交換語法形式:SWAPF f,d操作數(shù):f為數(shù)據(jù)寄存器的低7位地址(0x000x7F)d為目的寄存器的低7位地址(0x000x7F)當(dāng)d=f時,結(jié)果放在f數(shù)據(jù)寄存器,W寄存器的內(nèi)容不變當(dāng)d=W時,結(jié)果放在W寄存器中,f數(shù)據(jù)寄存器的內(nèi)容不變執(zhí)行時間:一個指令周期執(zhí)行過程:【f<3:0>】【f<7:4>】狀態(tài)標(biāo)志影響:無說明:該指令實現(xiàn)把數(shù)據(jù)寄存器的高低半字節(jié)的內(nèi)容進(jìn)行交換,結(jié)果放入d指定的地址。該指令在中斷服務(wù)程序退出前恢復(fù)W寄存器的內(nèi)容的過程中起著不可或缺的作用。不影響狀態(tài)寄存器。指令范例:SWAPF w_
22、temp,f ;w_temp的高低半字節(jié)內(nèi)容交換,結(jié)果放回w_temp本身SWAPF w_temp,W ;w_temp的高低半字節(jié)內(nèi)容再次交換,但是結(jié)果放入W寄存器中,在不影響狀態(tài)寄存器的前提下,實現(xiàn)了把w_temp的原內(nèi)容復(fù)制到W寄存器中。位操作指令詳述BCF 數(shù)據(jù)寄存器指定位清0語法形式:BCF f,b操作數(shù):f為數(shù)據(jù)寄存器的低7位地址(0x000x7F)B為數(shù)據(jù)位編號(07)執(zhí)行時間:一個指令周期執(zhí)行過程:使數(shù)據(jù)寄存器f的的b位清0狀態(tài)標(biāo)志影響:無說明:該指令可對任何數(shù)據(jù)寄存器的任意一個位置清0,常用于標(biāo)志位的設(shè)定和清除,或者把某一管腳置成低電平。指令范例:BCF STATUS,C ;進(jìn)
23、位(借位)標(biāo)志C清0BCF PORTD,7 ;PORTD的第7位輸出低電平BSF 數(shù)據(jù)寄存器的指定位b置1語法形式:BSF f,b操作數(shù):f為數(shù)據(jù)寄存器的低7位地址(0x000x7F)b為數(shù)據(jù)位編號(07)執(zhí)行時間:一個指令周期執(zhí)行過程:使數(shù)據(jù)寄存器f的的b位置1狀態(tài)標(biāo)志影響:無說明:該指令可對任何數(shù)據(jù)寄存器的任意一個位置置1,常用于標(biāo)志位的設(shè)定和清除,或者把某一管腳置成高電平。指令范例:BSF INTCON,GIE ;INTCON寄存器的GIE位置1,打開全局中斷BSF PORTD,6 ;PORTD第6位輸出高電平BTFSC 判斷數(shù)據(jù)寄存器中的指定位,為0則跳過下一條指令語法形式:BTFSC
24、 f,b操作數(shù):f為數(shù)據(jù)寄存器的低7位地址(0x000x7F)b為數(shù)據(jù)位編號(07)執(zhí)行時間:一個指令周期或兩個指令周期執(zhí)行過程:如果數(shù)據(jù)寄存器f的b位為0,則跳過下一條指令狀態(tài)標(biāo)志影響:無說 明:該指令可以對數(shù)據(jù)寄存器的任意一位做0/1的判斷,如果數(shù)據(jù)位為1,程序?qū)错樞驁?zhí)行其下一條指令,此時一個指令周期;如果數(shù)據(jù)位為0,那么將跳過緊 跟該指令之后的第一條指令,從第二條指令開始執(zhí)行,此時使用兩個指令周期。該指令最常用于按標(biāo)志位實現(xiàn)程序的分支跳轉(zhuǎn)的控制。指令范例:BTFSC STATUS,Z ;測試狀態(tài)寄存器的Z標(biāo)志GOTO Zero ;如果Z=1,執(zhí)行此處指令GOTO NotZero ;如果
25、Z=0,執(zhí)行此處指令BTFSS 判斷數(shù)據(jù)寄存器的指定位,為1則跳過下條指令語法形式:BTFSS f,b操作數(shù):f為數(shù)據(jù)寄存器的低7位地址(0x000x7F)b為數(shù)據(jù)位編號(07)執(zhí)行時間:一個指令周期或兩個指令周期執(zhí)行過程:如果數(shù)據(jù)寄存器f的b位為1,則跳過下一條指令狀態(tài)標(biāo)志影響:無說 明:該指令可以對數(shù)據(jù)寄存器的任意一位做0/1的判斷,如果數(shù)據(jù)位為0,程序?qū)错樞驁?zhí)行其下一條指令,此時一個指令周期;如果數(shù)據(jù)位為1,那么將跳過緊 跟該指令之后的第一條指令,從第二條指令開始執(zhí)行,此時使用兩個指令周期。該指令最常用于按標(biāo)志位實現(xiàn)程序的分支跳轉(zhuǎn)的控制。指令范例:BTFSS PORTB,7 ;測試PO
26、RTB端口,位7GOTO RB7_Low ;如果RB7=0,執(zhí)行此處指令GOTO RB7_High ;如果RB7=1,執(zhí)行此處指令立即數(shù)與控制操作指令SLEEP 單片機(jī)進(jìn)入低功耗休眠模式語法形式:SLEEP操作數(shù):無執(zhí)行時間:一個指令周期執(zhí)行過程:看門狗計數(shù)器清0看門狗計數(shù)器的預(yù)分頻器清0STATUS寄存器的“TO”標(biāo)志位置1STATUS寄存器的“PD”標(biāo)志位清0狀態(tài)標(biāo)志影響:TO PD說明:SLEEP指令可以讓單片機(jī)停止所有的工作進(jìn)入低功耗休眠模式,在休眠模式下芯片的功耗降至最低。在休眠狀態(tài)下,單片機(jī)的主時鐘振蕩器將停止,所有內(nèi)部寄存器的內(nèi)容保持不變,直到出現(xiàn)某一條件將單片機(jī)從休眠狀態(tài)下喚醒
27、。指令范例:CALL PrepSleep ;關(guān)閉所有不需要的負(fù)載,準(zhǔn)備進(jìn)入休眠模式SLEEP ;現(xiàn)在進(jìn)入休眠模式NOP ;喚醒后開始執(zhí)行指令CLRWDT 清除看門狗計數(shù)器語法形式:CLRWDT操作數(shù):無執(zhí)行時間:一個指令周期執(zhí)行過程:看門狗計數(shù)器清0看門狗計數(shù)器的預(yù)分頻器清0STATUS寄存器的“TO”標(biāo)志位置1STATUS寄存器的“PD”標(biāo)志位置1狀態(tài)標(biāo)志影響:TO PD說 明:如果芯片在編程燒寫時啟用了獨立的片上看門狗電路,則在程序運行的過程中必須隔一段時間就執(zhí)行這條清除看門狗的命令。如果過了足夠長的時間而沒有執(zhí)行 這條指令,到了看門狗計數(shù)器計數(shù)溢出時就會讓單片機(jī)產(chǎn)生復(fù)位,程序?qū)膹?fù)位地
28、址處重新運行。PIC單片機(jī)的看門狗一旦被打開就不能通過軟件的方式關(guān)閉, 在芯片休眠的時候照樣工作,故可以作為讓單片機(jī)退出休眠的一個條件。通過啟用看門狗可以避免軟件死循環(huán)的故障。需要強(qiáng)調(diào)的是在一個好的程序設(shè)計中 CLRWDT這條指令只在程序的主循環(huán)中出現(xiàn)一次,盡量避免到處放置清看門狗指令,絕對不能把這條指令放到中斷服務(wù)程序中。指令范例:MainLoop: ;程序主循環(huán)CLRWDT ;清看門狗 CALL KeyCheck ;檢查按鍵 CALL Display ;顯示刷新 GOTO MainLoop ;重復(fù)主循環(huán)體RETLW 子程序結(jié)束返回并在W寄存器內(nèi)賦一8位立即數(shù)語法形式:RETLW k操作數(shù):
29、k為8位立即數(shù)執(zhí)行時間:2個指令周期執(zhí)行過程:彈出棧頂內(nèi)容到PCkW狀態(tài)標(biāo)志影響:無說明:除了在子程序返回時從W寄存器帶出一個8位立即數(shù)外,其他的執(zhí)行情況和指令“RETURN”完全相同。該指令經(jīng)常被用于查表功能中。指令范例:MOVF Index,W ;W中設(shè)定查表索引值(03)CALL Lookup ;調(diào)用查表子程序 ;其他指令Lookup:ADDWF PCL,f ;對PC值作修改RETLW 0 ;返回0對應(yīng)的ASCII碼RETLW 1 ;返回1對應(yīng)的ASCII碼RETLW 2 ;返回2對應(yīng)的ASCII碼RETLW 3 ;返回3對應(yīng)的ASCII碼RETFIE 中斷服務(wù)程序結(jié)束并返回語法形式:R
30、ETFIE操作數(shù):無執(zhí)行時間:2個指令周期執(zhí)行過程:彈出棧頂內(nèi)容到PCINTCON寄存器的第7位GIE自動置1狀態(tài)標(biāo)志影響:無說明:該指令把硬件堆棧棧頂?shù)膬?nèi)容(中斷發(fā)生時的返回地址)彈送到程序計數(shù)器PC內(nèi),對堆棧的影響如下圖所示和指令“RETURN”的情形基本相同,關(guān)鍵區(qū)別是該指令會把INTCON寄存器的第7位全局中斷使能位(GIE)置1(在響應(yīng)中斷時該位自動清0)。然后返回到中斷發(fā)生時的下一條指令處繼續(xù)運行。指令范例:MOVF status_temp,w ;準(zhǔn)備恢復(fù)STATUS寄存器的內(nèi)容MOVWF STATUS ;STATUS寄存器被恢復(fù)SWAPF w_temp,f ;準(zhǔn)備恢復(fù)W寄存器內(nèi)容
31、SWAPF w_temp,w ;W寄存器被恢復(fù)RETFIE ;中斷返回并允許新的中斷響應(yīng)RETURN 子程序結(jié)束返回語法形式:RETURN操作數(shù):無執(zhí)行時間:2個指令周期執(zhí)行過程:彈出棧頂內(nèi)容到PC狀態(tài)標(biāo)志影響:無說明:該指令將棧頂?shù)膬?nèi)容(子程序調(diào)用時的返回地址)彈送到程序計數(shù)器PC內(nèi)。注意特殊寄存器PCLATH的內(nèi)容不會因此改變。程序?qū)氐皆谧映绦蛘{(diào)用時的下一條指令處開始執(zhí)行。影響見該圖指令范例:CALL Dly4Tcy ;延時4個指令周期 ;其他指令Dly4Tcy:RETURN ;CALL和RETURN總共消耗4個指令周期GOTO 程序無條件跳轉(zhuǎn)到指定的地址語法形式:GOTO m操作數(shù):
32、m為11位立即數(shù)指定的目標(biāo)地址執(zhí)行時間:2個指令周期執(zhí)行過程:mPC【10:0】PCLATH【4:3】PC【12:11】狀態(tài)標(biāo)志影響:無說明:程序無條件立即強(qiáng)行跳轉(zhuǎn)到目的地址處繼續(xù)執(zhí)行。目的地址由本指令內(nèi)含的11位地址碼和特殊寄存器PCLATH中的【4:3】一起構(gòu)成完整的13位地址。指令范例:ORG 0x000 ;偽指令指定程序的起始地址GOTO Main ;程序跳轉(zhuǎn)到標(biāo)號指定的位置處繼續(xù)執(zhí)行MOVLW W寄存器賦立即數(shù)語法形式:MOVLW k操作數(shù):k為8位立即數(shù)執(zhí)行時間:一個指令周期執(zhí)行過程:kW狀態(tài)標(biāo)志影響:無說明:該指令對W寄存器賦一個初值。任何其他數(shù)據(jù)寄存器如果要賦一個立即數(shù)值,必須通過W寄存器傳送。指令范例:MOVLW 0x55 ;【W(wǎng)】=0x55MOVWF Tmp ;【Tm
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 顯示技術(shù)專利布局-洞察分析
- 軸套夾具課程設(shè)計
- 陶瓷復(fù)合材料創(chuàng)新-洞察分析
- 虛擬現(xiàn)實影視體驗-洞察分析
- 網(wǎng)絡(luò)輿情監(jiān)測與分析-洞察分析
- 宇宙常數(shù)的演化-洞察分析
- 網(wǎng)絡(luò)空間主權(quán)研究-洞察分析
- 2025年度特色院落承租居間合同書(民俗文化)3篇
- 以安全為基礎(chǔ)的家庭短途旅游策劃
- 小學(xué)數(shù)學(xué)基礎(chǔ)概念科普
- 迪士尼樂園總體規(guī)劃
- 2024年江蘇省蘇州市中考數(shù)學(xué)試卷含答案
- 2024年世界職業(yè)院校技能大賽高職組“市政管線(道)數(shù)字化施工組”賽項考試題庫
- 介紹蝴蝶蘭課件
- 大學(xué)計算機(jī)基礎(chǔ)(第2版) 課件 第1章 計算機(jī)概述
- 數(shù)字化年終述職報告
- 《阻燃材料與技術(shù)》課件 第5講 阻燃塑料材料
- 2024年職工普法教育宣講培訓(xùn)課件
- 安保服務(wù)評分標(biāo)準(zhǔn)
- T-SDLPA 0001-2024 研究型病房建設(shè)和配置標(biāo)準(zhǔn)
- (人教PEP2024版)英語一年級上冊Unit 1 教學(xué)課件(新教材)
評論
0/150
提交評論