版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、 第 1頁第四章 PIC匯編語言及其程序設計&4.1PIC的RISC指令集&4.2 MPASM 匯編語言&4.3匯編語言的尋址模式&4.4MPASM常用子程序設計 第 2頁PICmicro 單片機指令集單片機指令集按按操作數(shù)訪問形式操作數(shù)訪問形式分類分類f = 寄存器, k = 立即數(shù) (8位), b = 位地址 , d = 目的地 (1=f, 0=W) 第 3頁PIC指令集核心助記符助記符功能說明助記符功能說明ADD加MOV移動SUB減RL左移AND與RR右移IOR或CLR清空XOR異或COM取反INC加一RET返回DEC減一BTF位測試 第 4頁指令系統(tǒng)字符
2、說明字符功能說明字符功能說明W工作寄存器FSZSkip if Zerof文件寄存器FSCSkip if Carryb位FSSSkip if SetK( )L立即數(shù)( )d方向傳輸方向 第 5頁典型指令分析典型指令分析MyVarW or WREGFile Registers立即數(shù)立即數(shù) 第 6頁PICmicro 單片機指令集單片機指令集字節(jié)操作字節(jié)操作 第 7頁PIC單片機單片機指令集指令集位操作位操作位操作位操作 第 8頁PIC單片機單片機指令集指令集立即數(shù)操作立即數(shù)操作 第 9頁控制類操作控制類操作PIC單片機單片機指令集指令集控制類操作控制類操作 第 10頁&數(shù)據(jù)傳送類指令 4 條
3、&算術運算類指令 6 條&邏輯運算類指令 14 條&控制轉移類指令 11 條PIC16F877指令集的35條指令按操作碼的類別分為四類指令 第 11頁數(shù)據(jù)傳送類指令助記符操作說明影響狀態(tài)位MOVF f , dZMOVWF f-MOVLW K-SWAPF f,d- 第 12頁程序舉例&例1、編程將立即數(shù)20H傳送到通用寄存器20H中MOVLW 20HMOVWF FSRMOVWF INDFMOVLW 20HMOVWF 20H 第 13頁MOVF 20H,WMOVWF 40HMOVF 30H,WMOVWF 20HMOVF 40H,WMOVWF 30H 例2、編程將通用
4、寄存器20H和30H中的內(nèi)容進行交換 第 14頁算術運算類指令助記符操作說明影響狀態(tài)位ADDWF f , dZSUBWF f , dC、DC、ZADDLW KC、DC、ZSUBLW KC、DC、ZINCF f , dZDECF f , dZ 第 15頁程序舉例&例1、編程將通用寄存器20H(高位)、30H(低位)構成的16位數(shù)據(jù)與通用寄存器40H(高)、50H(低)構成的16位數(shù)相加后放入40H(高)、50H(低)中(已知其和不會超出65535)MOVF 30H,WADDWF 50H,FBTFSS STATUS,CGOTO LOOPINCF 20H,WLOOP ADDWF 40H,F
5、第 16頁 助記符操作說明影響狀態(tài)位CLRF f ZCLRW -ZCLRWDT -T0、PDBCF f , b-BSF f , b-RLF f , dCRRF f , dC邏輯運算類指令 第 17頁助記符操作說明影響狀態(tài)位ANDWF f , d ZIORWF f , dZXORWF f , dZANDLW KZIORLW KZXORLW KZCOMF f , dZ 第 18頁控制轉移類指令助記符操作說明影響狀態(tài)位CALL K-GOTO K-INCFSZ f , d-DECFSZ f , d-BTFSC f , b-BTFSS f , b-RETFIE - 第 19頁助記符操作說明影響狀態(tài)位RE
6、TLW K-RETURN -NOP -SLEEP -TO、PD 第 20頁4.1.5 特別功能指令 CLRWDT清除看門狗計數(shù)器指令范例:MAINLOOP ;程序主循環(huán) CLRWDT;清看門狗CALLKEYCHECK ;檢查按鍵CALLDISPLAY;顯示刷新GOTOMAINLOOP ;重復主循環(huán)體SLEEP單片機進入低功耗休眠模式指令范例: CALLPREPSLEEP ;關閉不需要的負載,準備休眠 SLEEP;現(xiàn)在進入休眠模式 NOP;喚醒后開始執(zhí)行的指令 第 21頁4.1.6 指令流水線&由于PIC 單片機的系統(tǒng)結構采用“哈佛”結構,使得在一條指令被執(zhí)行的同時讀取下一條指令成為可能
7、,這就是PIC 單片機的指令執(zhí)行流水線概念。 第 22頁&例1、編程將通用寄存器20H、30HR的數(shù)據(jù)分別與立即數(shù)20H、30H相“與”和相“或”后再相加,結果存入40H存儲器中。ORG 0000HNOPMOVLW 20HANDWF 20H,WMOVWF 40HMOVLW 30HIORWF 30H,WADDWF 40H,F程序舉例 第 23頁例2、分析程序段,指出程序執(zhí)行后,存儲單元的結果MOVLW 22H - - - 22H MOVWF 22H - 22H - 22HMOVWF FSR - 22H 22H 22HADDWF INDF , F - 44H 22H 22HINCF IND
8、F - 45H 22H 22HSWAPF 22H,W - 45H 22H 22HRLF 22H , F - 8AH 22H 54HDECF FSR , F - 8AH 21H 54HMOVWF INDF 54H 8AH 21H 54HBSF INDF , 7 D4H 8AH 21H 54H21H 22H FSR W 第 24頁要想控制單片機端口的輸入輸出,首先需對端口方向寄存器和數(shù)據(jù)寄存器進行設置,引腳的方向寄存器的相應位設置為1表示輸入;設置為0表示輸出端口的輸入輸出控制例:將RA4/T0CKI引腳設置為輸入狀態(tài)BSF STATUS,RP0BSF TRISA,4 第 25頁例:將RB0/IN
9、T引腳設置為輸入狀態(tài)BSF STATUS,RP0BSF TRISB,0例:將端口C的低四位設置為輸出、高四位設置為輸入BSF STATUS,RP0MOVLW 0F0HMOVWF TRISC 第 26頁例:從端口C的低四位引腳輸出高電平、高四位引腳輸出為低電平BSF STATUS,RP0MOVLW 0MOVWF TRISCMOVLW 0FHMOVWF PORTC 第 27頁&例2、編程將數(shù)據(jù)存儲器20H低4位和30H高4位組合成一個8位數(shù)據(jù)并從RC端口輸出。ORG 0000HNOPBANKSEL TRISCMOVLW 00HMOVWF TRISCBANKSEL PORTCMOVF 20H
10、,WANDLW 0FHMOVWF 20HMOVF 30HMOVF 30H,WANDLW 0F0HIORWF 20H,WMOVWF PORTC 第 28頁4.2 MPASM匯編語言&4.2.1 MPASM簡介&4.2.2 MPASM的語法&4.2.3 MPASM的偽指令&4.2.4 MPASM的運算符&4.2.5 MPASM的內(nèi)置宏指令 第 29頁4.2.1 MPASM簡介&在MPLAB IDE中已經(jīng)集成了MPASM編譯器工具集。用戶在MPLAB IDE中即可實現(xiàn)對匯編程序的編譯、連接、調(diào)試和編程。&MPLAB安裝后匯編編譯器的可執(zhí)行文件名
11、為MPASMWIN.EXE,如是缺省安裝則存放路徑“C:PROGRAM FILESMICROCHIPMPASM SUITE”下。此目錄下還有一個MPLINK.EXE的可執(zhí)行文件,在多模塊(多源文件)可重定位的程序開發(fā)模式下,最后一定要用MPLINK把所有的程序與數(shù)據(jù)模塊連接定位成一個目標文件(機器碼文件)。但在絕對定位的程序開發(fā)模式下,MPLINK將不會被用到。 第 30頁4.2.2 MPASM的語法&所有的有效字符都是ASCII字符集范圍內(nèi)的。不包括其它國家的任何專用字符。&MOVLW 0 x8; 錯誤,“0 x8”中第二個不是ASCII字符&一個指令代碼(包含指令及
12、其操作數(shù))必須在同一行中描述完畢。例如: &ADDWF PORTB,F ; 指令后的操作數(shù)不能另起一行&匯編指令不要在每一行的起始處開始編寫,至少在行首留有一個空格符。例如:&ADDWF PORTB,F ; 匯編指令不能頂格書寫&標號或變量符號的命名規(guī)則:只能由字母、數(shù)字和下劃線構成。但不能以數(shù)字開頭。例如:&1COUNT EQU 0 x22 ; 錯誤,變量符號或標號不能以數(shù)字開頭&_1COUNT EQU 0 x23 ;正確&COUNT1 EQU 0 x23 ;正確&COUNT_1 EQU 0 x23 ;正確 第 31頁4.2.2
13、 MPASM的語法&程序跳轉用的語句標號和程序員定義的變量符號必須頂格,即起始于一行的第一個字符位置處。語句標號可以用也可以不用“:”冒號結尾。例如:&COUNT EQU 0 x21 ; 程序員定義的變量符號必須頂格書寫&SUB_1 ; 跳轉用的標號必須頂格書寫& ADDWF PORTB,F &SUB_2: ; “:”寫不寫都可以& ADDWF PORTC,F &任何標號或變量名字中不能出現(xiàn)MPASM保留運算符,例如()、+、-、*、/、&、|、!等符號。&COUNT-1 EQU 0 x22 ; 錯誤,變量或標號不能包含M
14、PASM運算符“-”&MPASM內(nèi)的保留字(匯編指令碼或偽指令)不區(qū)分大小寫(大小寫作用相同)。& ADDWF PORTB,F & ;等價于& addwf PORTB,F 第 32頁4.2.2 MPASM的語法& 程序中立即數(shù)字的描述方式有以下幾種:& 十六進制數(shù):以0 x開頭(推薦),如0 x12、0 xFF、0 xFF?;蛘咭訦結尾,如34H、0FFH。若以字母開頭時前面需加0或H1234、HFFFF。如:& ADDWF 0 x08,F ;正確& ADDWF 8H,F ;正確& ADDWF H8,F ;錯誤&
15、ADDWF H8,F ;正確& ADDWF 0 xA8,F ;正確& ADDWF A8H,F ;錯誤,不是立即數(shù)形式& 十進制數(shù):.123,以小數(shù)點開頭或D123。如:& MOVLW .255 ;正確& MOVLW D255 ;正確& 二進制數(shù):B10100101& MOVLW B11100011 ;正確& MOVLW B11100011 ;錯誤,不是正確的二進制形式& 八進制數(shù):O12,注意是英文字母“O”而不是數(shù)字“0”開頭。& MOVLW O01 ;正確& MOVLW O01 ;錯誤,不是正確的八進制
16、形式 第 33頁4.2.2 MPASM的語法&注釋信息用英文半角“;”引導?!?”后直到此行結束的內(nèi)容全為注釋信息。注釋內(nèi)容可以是任意形式的文本字符,包括全角漢字和符號。除了注釋內(nèi)容外,程序的其他地方不建議使用漢字或全角符號。&源程序中必須出現(xiàn)偽指令END,代表匯編結束。END后的內(nèi)容將被編譯器忽略。 第 34頁4.2.3 MPASM的偽指令& EQU & EQU 顧名思義是“等于”的意思,通常稱之為“定義”。其作用是用一個標號名(符合MPASM的命名規(guī)則)替換其他數(shù)字或已經(jīng)定義過的符號名。& 指令范例:& MYCOUNT EQU 0 x70;定
17、義MYCOUNT 符號替換立即數(shù)0 x70& STEP EQU 0 x23;符號名STEP等于0 x23& COUNT1 EQU MYCOUNT+1;如果MYCOUNT沒有事先定義則會產(chǎn)生一個錯誤 第 35頁CBLOCK 和 ENDC& CBLOCK 偽指令聲明變量塊的起始地址,ENDC 偽指令聲明變量塊定義結束,CBLOCK/ENDC中間可以插入任意多的變量聲明。其地址編排由編譯器自動計算:第1個變量地址分配從起始地址開始,然后按所聲明變量保留的字節(jié)數(shù)自動分配后面變量的地址,變量所需保留的字節(jié)數(shù)用“:”加后面的數(shù)字表示,如果只有1 個字節(jié)“:1 ”可以省略不寫。例如:
18、& CBLOCK 0 x20 ;定義變量塊起始地址為0 x20& TEMP ;TEMP地址為00,占1個字節(jié)& BUFFER:8 ;BUFFER的起始地址為0 x22,并保留8個字節(jié)單元& VARL ;VARL的地址為0 x2A,占1個字節(jié)& VAR2 ;VAR2的地址為0 x2B,占1個字節(jié)& ENDC ;結束變量塊定義 第 36頁#include 或include&# include用來把另外一個文件的內(nèi)容全部包含復制到本偽指令所在的位置。被包含復制的文件可以是任何形式的文本文件,當然文件中的內(nèi)容和語法結構必須是MPASM能夠識別的。
19、最經(jīng)常被包含的是針對PIC單片機內(nèi)部特殊功能寄存器定義的包含頭文件。如:&#include ;包含PIC16F877A的頭文件 第 37頁LIST& LIST偽指令可以設定程序編譯時的一些信息,例如所選單片機的型號,編譯時選擇的缺省數(shù)制等。& LIST 偽指令使用例子。& LIST P=16F877A,R=DEC ;設定所選單片機型號為PIC16F877A& 第 38頁_CONFIG&注意CONFIG前是兩個下劃線字符。&此偽指令的重要作用是把芯片的配置字設定在源程序中。此配置字無法用指令存取,只能使用編程器存取。建議大家盡量用此偽指令把
20、芯片的配置字寫在程序中,便于程序的燒寫和調(diào)試。 &指令范例:& _CONFIG _WDT_OFF & _RC_OSC & _LVP_OFF ;關閉看門狗定時器& ;選擇RC振蕩器,關閉低電壓編程功能& ;若使用外部的高速振蕩器,可以改寫為& _CONFIG _WDT_OFF & _HS_OSC & _LVP_OFF 第 39頁#define &#define的作用是定義常數(shù)符號,即用符號名替換一個常數(shù)或符號名。其功能與EQU相同,但是用#define定義的符號無法通過【W(wǎng)atch】窗口觀察。所以一般用其定義常量。&
21、amp;指令范例:&#define DELAY_TIME 200 ;定義常數(shù)符號,即用DELAY_TIME符號代替200&#define KEY1 PORTB,0 ;用KEY1 符號代替端口PORTB的第0引腳 第 40頁ORG&ORG 用以定義程序代碼的起始地址,通過此偽指令可以把程序定位到任何可用的程序空間,它實現(xiàn)的是程序代碼絕對定位。&指令范例:& ORG 0 x000 ;定義以下指令從程序存儲器地址0 x000開始存儲& GOTO MAIN& ORG0 x004 ;定義中斷入口地址,以下指令從地址0 x004開始存儲& M
22、OVWFW_TEMP;其他中斷服務代碼& &MAIN& ;主程序代碼& ORG0 x800;定義PAGE1的起始地址,以下指令代碼放在PAGE1中&SUB1& ;SUB1子程序代碼& RETURN 第 41頁DT & DT 的作用是定義表格數(shù)據(jù)(Define Table),實現(xiàn)程序存儲器的查表操作。DT可以直觀的把一串常量數(shù)據(jù)存放在程序存儲器(ROM)內(nèi),這些數(shù)據(jù)會按字節(jié)的順序用“RETLW”指令書寫,當程序執(zhí)行到DT定義的表格數(shù)據(jù)后就會返回一個字節(jié)。& 指令范例:& LTABLEADDWF PCL,F;PC 相對
23、尋址查表&DT0;實際產(chǎn)生指令RETLW 0&DT1, 2, 3;實際產(chǎn)生指令RETLW 1 &實際產(chǎn)生指令RETLW 2 & 實際產(chǎn)生指令RETLW 0 x33(3的ASCII碼)&DTABC;實際產(chǎn)生指令RETLW 0 x41(A 的ASCII碼)&實際產(chǎn)生指令RETLW 0 x42(B 的ASCII碼);實際產(chǎn)生指令RETLW 0 x43(C 的ASCII碼)& 當程序執(zhí)行完以下兩行指令后, W的內(nèi)容就變?yōu)榱薃。& MOVLW 4 & CALL LTABLE & 對以上程序的具體理解請參考本章的“匯編語言的尋
24、址模式”一節(jié)內(nèi)容。 第 42頁DE &DE 偽指令可以讓程序員在源程序中定義片內(nèi)EEPROM 的初值。該條偽指令只適用于那些內(nèi)含EEPROM 數(shù)據(jù)存儲器的單片機,如PIC16F87X 、PIC16F62X 等等。 &例如:& ORG 0 x2100 ;編程器能自動識別此地址作為EEPROM數(shù)據(jù)區(qū)起始地址& DE.32,0 x32 ;EEPROM地址單元0=0 x20, 1=0 x32& DEOK ;4=0 x4F, 5=0 x4B&根據(jù)以上的定義,芯片完成編程燒入后,其內(nèi)部EEPROM 區(qū)從0 x00 單元開始被分別初始化成0 x20、0 x32
25、、0 x4F、0 x4B。其他未被初始化的EEPROM單元全部是0 xFF。 第 43頁END &END 偽指令告訴匯編編譯器編譯工作到此為止,END 后面所有的信息,不管正確與否,一概不管。在絕大多數(shù)情形下,匯編源代碼的最后一行應該是END 。無論如何,END 必須出現(xiàn)在程序中,不然編譯器會報錯,無法進行編譯工作。 第 44頁4.2.4 MPASM的運算符& 取當前指令的地址值:$ & ;用語句標號得到指令地址& HEREGOTO HERE;跳轉到當前地址,程序進入死循環(huán)& DELAY DECFSZCOUNT, F;計數(shù)器減1并判0&GOTO
26、DELAY;跳轉到上一行重復循環(huán)& 以上的代碼可以用$運算符簡化為:&GOTO $;跳轉到當前地址程序進入死循環(huán)&DECFSZCOUNT, F ;計數(shù)器減1 并判0&GOTO $-1;跳轉到(當前地址-1)處,即上一行,& ;重復循環(huán) 第 45頁取16 位立即數(shù)的高低字節(jié):HIGH 和LOW & 2 字節(jié)變量賦立即數(shù)初值&#defineDELAY_TIME.1000;定義一個常數(shù)立即數(shù)&MOVLWLOW(DELAY_TIME);取立即數(shù)的低字節(jié)值,經(jīng)&編譯器計算將得到0 xE8&MOVWFCOUNT;賦給變量的低字
27、節(jié)&MOVLWHIGH(DELAY_TIME);取立即數(shù)的高字節(jié)值,經(jīng)&編譯器計算將得到0 x03 &MOVWFCOUNT+1;賦給變量的高字節(jié) 第 46頁加減乘除: - * / &高速異步通信波特率BPS=FOSC/16*(X+1) &故,波特率常數(shù)X=FOSC(BPS*16)-1&#define BPS.9600;定義工作波特率&#define FOSC .4000000;定義單片機工作振蕩頻率4MHZ&其他代碼&MOVLWFOSC/(BPS*.16)-1;編譯器計算得到25(十進制25)&MOVWFSPBRG
28、;設定波特率定時寄存器&程序中用了統(tǒng)一的計算公式后,在調(diào)試時只要簡單地改變前面的#define 語句定義新的波特率或振蕩頻率值,然后重新編譯一次程序即實現(xiàn)了波特率設定代碼的更新,非常方便。 第 47頁移位運算:和”運算符把一個立即數(shù)算術右移若干位(高位補0),“ 1 ;W=0 x2A &MOVLW XXX 2 ;W=0 x54 &MOVLW 1 7;W=0 x80 第 48頁立即數(shù)邏輯運算:& | &“&”運算符把一個立即數(shù)和另外一個立即數(shù)做邏輯與運算。&“|”運算符把一個立即數(shù)和另外一個立即數(shù)做邏輯或運算。&“”運算符把一個立即
29、數(shù)和另外一個立即數(shù)做邏輯異或運算。&例如:把兩個立即數(shù)做邏輯與運算。&#defineVAL10X34&#defineVAL20X0F&MOVLWVAL1&VAL2&注意例子中的VAL1、VAL2都是事先已經(jīng)定義的立即數(shù)而不是RAM 中的變量。 第 49頁4.2.5 MPASM的內(nèi)置宏指令&BANKSEL &BANKSEL可以幫助程序員非常方便地實現(xiàn)寄存器BANK 的設定。程序員只需在BANKSEL 后給它一個變量名或地址,編譯器會自動按照變量地址所在的BANK,自動生成設定STATUS寄存器RP1: RP0 位的指令。例如,對于如
30、下指令: &BANKSELTRISC ;設定TRISC所在的BANK(TRISC在BANK1)&若芯片選擇PIC16F874A, RAM共有2 個BANK,則編譯后的機器碼為&BSFSTATUS, RP0;只生成1條匯編代碼&若芯片選擇PIC16F877A, RAM共有4 個BANK,則編譯后的機器碼為&BSFSTATUS, RP0;生成2條匯編代碼&BCFSTATUS, RP1; 第 50頁BANKISEL &與BANKSEL 類似,不過它對付的是用于寄存器相對尋址的STATUS 寄存器中的IRP 位。它也會用最少的代碼實現(xiàn)IRP 位的
31、設定。 &芯片選擇PIC16F877A, RAM 共有4 個BANK&CBLOCK0 x120& BUFFER:8 ;從地址0 x120 起定義8 字節(jié)的數(shù)據(jù)區(qū)&ENDC&BANKISELBUFFER;用BANKISEL 自動設定IRP 位&MOVLWLOW(BUFFER) ;取BUFFER的地址(只有低8位)&MOVWFFSR;送給FSR&編譯后的機器碼如下。&BSFSTATUS, 7;真正的設定IRP 的匯編代碼&MOVLW0 x20&MOVWFFSR 第 51頁PAGESEL& PAGESEL
32、 可以幫助程序員設定程序的頁面。使用方式與BANKSEL 相似,只是它改變的是PCLATH 兩位。該宏指令也同樣將用最少的代碼實現(xiàn)程序頁面設定.& ;芯片選擇PIC16F877A, RAM共有4個頁面&ORG0 x0100;在第0頁內(nèi)& MAINPAGESEL SUB1;用宏指令設定被調(diào)用子程序的頁面&CALLSUB1;隨后調(diào)用該子程序&PAGESEL $;用宏指令設定當前地址的頁面&GOTOMAIN;循環(huán)&ORG0 x0800;SUB1子程序定義在第1頁& SUB1 & & RETURN;子程序返回& 編
33、譯后的機器碼(MAIN部分)如下。& MAINBSFPCLATH,3;設定SUB1所在的頁面&BCFPCLATH,4&CALLSUB1 &BCFPCLATH,3;設定當前指令所在的頁面&BCFPCLATH,4&GOTOMAIN 第 52頁CLRC/ SETC &CLRC/ SETC針對的是狀態(tài)寄存器STATUS 中的進位標志位。&CLRC 等同于BCF STATUS,C;C=0&SETC等同于BSF STATUS,C;C=1 第 53頁CLRZ/ SETZ &CLRZ/ SETZ針對的是狀態(tài)寄存器STATUS 中的
34、0標志位。&CLRZ 等同干BCF STATUS,Z;Z=0&SETZ 等同于BSF STATUS,Z;Z=1 第 54頁CLRDC/SETDC &CLRDC /SETDC 針對的是狀態(tài)寄存器STATUS 中的半字節(jié)進位標志位。&CLRDC等同于BCF STATUS, DC;DC=0&SETDC等同于BSF STATUS, DC;DC=1 第 55頁SKPC/ SKPNC &SKPC/ SKPNC是判狀態(tài)寄存器STATUS 中的進位標志位,若條件滿足則程序跳過下一條指令。&SKPC 等同于BTFSSSTATUS, C;若C=1 則程序跳過
35、下一條指令&SKPNC等同于BTFSCSTATUS, C;若C=0則程序跳過下一條指令 第 56頁SKPZ / SKPNZ &SKPZ/ SKPNZ是判狀態(tài)寄存器STATUS 中的0標志位,若條件滿足則程序跳過下一條指令。&SKPZ等同于BTFSSSTATUS,Z;若Z=1則程序跳過下一條指令&SKPNZ等同于BTFSCSTATUS,Z;若Z=0則程序跳過下一條指令 第 57頁SKPDC / SKPNDC &SKPDC / SKPNDC 是判狀態(tài)寄存器STATUS 中的半字節(jié)進位標志位,若條件滿足則程序跳過下一條指令。&SKPDC等同于BTFSS
36、STATUS,DC;若DC=1 則程序跳過下一條指令&SKPNDC等同于BTFSCSTATUS;若DC=0則程序跳過下一條指令 第 58頁BC/BNC&BC/BNC是判斷狀態(tài)寄存器STATUS 中的進位標志位C,按進位標志實現(xiàn)程序的分支跳轉。例如: &MOVLW0 x31;W=0 x31&ADDWFSUM,F;SUM=SUM+W&BCCARRY1 ;如果發(fā)生進位就跳轉到CARRY1處執(zhí)行&NOP;如果沒有進位則繼續(xù)執(zhí)行BC下一條指令NOP&請不要被BC/ BNC 這樣“一條”指令所迷惑,它實際上是由2 條匯編指令組成,且用到了GOTO 實
37、現(xiàn)跳轉,故在用此宏指令前注意頁面的設定。 第 59頁BZ/ BNZ &與BC / BNC一樣,只不過判別的是狀態(tài)寄存器STATUS 中的Z標志位。例如:&MOVLW0 x55;W=0 x55&XORWFFLAG, W;FLAG=0 x55&BZMATCH;Z=1,FLAG=0 x55,跳轉到MATCH 處執(zhí)行&NOP;Z=0,繼續(xù)執(zhí)行BZ 的下一條指令NOP&BDC/NBDC&同上,判別的是狀態(tài)寄存器STATUS中的半字節(jié)進位標志位。 第 60頁4.3 匯編語言的尋址方式&立即數(shù)尋址&寄存器間接尋址&直接尋址&am
38、p;位尋址 第 61頁立即數(shù)尋址立即數(shù)尋址 例: MOVLW k ADDLW k SUBLW k ANDLW k IORLW k XORLW k 第 62頁RETLW kCALL kGOTO k 第 63頁舉例:MOVLW D255ANDLW B00001111CALL 0 x7F0GOTO LOOP99RETLW H3F 第 64頁 MOVLW 0 x60 MOVWF FSRLOOP CLRF INDF INCF FSR,F(xiàn) BTFSS FSR,4 GOTO LOOP 4.3.2 數(shù)據(jù)寄存器間接尋址 第 65頁直接尋址MOVWF 0 x05MOVWF PORTADECF FSR,F(xiàn)IORWF
39、 AAA,WMOVF STATUS,W 第 66頁位尋址BSF STATUS,PR0BCF PORTB,7BSF INTCON,GIEBTFSS STATUS,ZBTFSC STATUS,C 第 67頁 的裝載方式的裝載方式(PCL和和PCH 13-bit) 第 68頁 第 69頁間接尋址間接尋址l清除 0 x20 to 0 x7F的RAM. 第 70頁間接尋址間接尋址&FSR 和 INDF 用于間接尋址&FSR 是地址指針&當訪問INDF地址時,實際上是訪問以FSR內(nèi)容為地址的數(shù)據(jù)存儲器RAM單元。FSRINDFWritingReading21222324FSRIND
40、F21222324movlw22movwfFSRmovlw5movwfINDFmovlw22movwfFSRmovfINDF,Wmovwf5 第 71頁&體選碼由STATUS的IRP位和FSR寄存器的BIT7組成&體內(nèi)單元地址來自FSR的低7位間接尋址 第 72頁直接尋址 低7位的數(shù)據(jù)地址直接在指令中描述體內(nèi)的單元地址直接來自指令機器碼 高2位在STATUS寄存器中 (又稱寄存器組號BANK)體選碼 第 73頁4.4 MPASM匯編常用子程序設計&判斷分支程序段設計&循環(huán)程序段的設計&延時子程序的設計&查表子程序的設計 第 74頁判斷分支程序段設
41、計& 本例省略鍵盤掃描程序部分。假定通過CALL指令去執(zhí)行識別鍵盤輸入過程,并經(jīng)數(shù)據(jù)處理,可以獲得各鍵的序列編號(0N),由W工作寄存器帶回。& MAINLOOP&PAGESEL KEY&CALLKEY;調(diào)用KEY鍵盤掃描程序,鍵值由W返回&PAGESEL JIAN_GN&CALLJIAN_GN& PAGESELMAINLOOP& GOTOMAINLOOP& ;-& ;根據(jù)鍵入情況,確定相應鍵功能子程序& ;-& JIAN_GNADDWFPCL,F;確定相對偏移量&GOTOPKEY0;執(zhí)行P
42、KEY0鍵盤定義功能&GOTOPKEY1;執(zhí)行PKEY1鍵盤定義功能&GOTOPKEY2;執(zhí)行PKEY2鍵盤定義功能& &GOTOPKEYN;執(zhí)行PKEYN鍵盤定義功能 第 75頁SZH MOVWF 20H MOVLW 07H ANDWF 20H,W ADDWF PCL,FL0 GOTO LOOP0L1 GOTO LOOP1L2 GOTO LOOP2L3 GOTO LOOP3L4 GOTO LOOP4L5 GOTO LOOP5L6 GOTO LOOP6L7 GOTO LOOP7判斷分支例子2、散轉指令程序 第 76頁循環(huán)程序段的設計&假定執(zhí)行某個顯示功能
43、100次后結束工作,顯示子程序為SHOW。&ORG0000H&MOVLWD101;取常數(shù)101&MOVWF20H;送入20H單元中&LOOPDECFSZ20H,F;20H單元減1,為0間跳&GOTORRT;未到100次跳轉顯示&GOTOPPY;100次結束&RRTPAGESELSHOW;轉入SHOW子程序頁面&CALLSHOW;調(diào)用顯示子程序&PAGESELLOOP;返回到第0頁面&GOTOLOOP;返回繼續(xù)減1操作&PPYEND 第 77頁循環(huán)程序段的設計&三層循環(huán)三層循環(huán)&DELAY0
44、MOVLW 0FFH MOVWF hour&DELAY2 DECFSZ hour,F GOTO DELAY1 GOTO OVERDELAY1 MOVLW 0FFH MOVWF MOVWF NEXT1 DECFSZ hmin,F GOTO NEXT2 GOTO DELAY2 NEXT2 DECFSZ hsec,F GOTO NEXT2 GOTO NEXT1 OVER RETURN 第 78頁延時子程序的設計&主頻為4MHz時,編寫單循環(huán)的軟件延時子程序。& ;-& ;軟件延時子程序DELAY& ;-& COUNTEREQU20H;定義循環(huán)寄存器COUNTER符號變量& DELAY MOVLW0 xFF;循環(huán)常數(shù)&MOVWFCOUNTER;循環(huán)寄存器&DECFSZCOUNTER,F ;循環(huán)寄存器遞減&GOTO$-1;繼續(xù)循環(huán)&RETURN 第 79頁主頻為主頻為4MHz時,請編寫時,請編寫10 ms軟件延時子軟件延時子程序
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 模具保養(yǎng)與加工協(xié)議模板
- 家庭裝飾工程保修合同
- 國際勞動合同樣本
- 施工單位工程保證金協(xié)議書
- 住宅小區(qū)物業(yè)管理合同
- 寫字樓下停車場租賃協(xié)議
- 房屋租賃合同書2024年2
- 2024年合資企業(yè)合作協(xié)議書
- 老年人租房免責協(xié)議書
- 店鋪合作經(jīng)營協(xié)議書范本
- 珍愛生命主題班會
- 陳皮倉儲合同模板例子
- 2024年安全生產(chǎn)月全國安全生產(chǎn)知識競賽題庫及答案(共六套)
- 2024-2025學年滬教版小學四年級上學期期中英語試卷及解答參考
- DB23T 3844-2024煤礦地區(qū)地震(礦震)監(jiān)測臺網(wǎng)技術要求
- 《阿凡達》電影賞析
- DB42-T 2286-2024 地鐵冷卻塔衛(wèi)生管理規(guī)范
- 合作伙伴合同協(xié)議書范文5份
- 小學生主題班會《追夢奧運+做大家少年》(課件)
- 公安機關人民警察高級執(zhí)法資格考題及解析
- 浙教版信息科技四年級上冊全冊教學設計
評論
0/150
提交評論