PIC匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ).ppt_第1頁(yè)
PIC匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ).ppt_第2頁(yè)
PIC匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ).ppt_第3頁(yè)
PIC匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ).ppt_第4頁(yè)
PIC匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ).ppt_第5頁(yè)
已閱讀5頁(yè),還剩61頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第四章 PIC匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ),MPASM匯編器簡(jiǎn)介 匯編語(yǔ)言的語(yǔ)句格式 常用偽指令 程序格式和程序流程圖 RAM數(shù)據(jù)存儲(chǔ)器的體選尋址問(wèn)題 順序程序結(jié)構(gòu) 分支程序結(jié)構(gòu) 循環(huán)程序結(jié)構(gòu) 子程序結(jié)構(gòu) 程序跨頁(yè)跳轉(zhuǎn)和跨頁(yè)調(diào)用問(wèn)題 延時(shí)程序設(shè)計(jì) 查表程序設(shè)計(jì),第四章 PIC匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ),簡(jiǎn)介,人 匯編語(yǔ)言 機(jī)器語(yǔ)言 單片機(jī) 源程序 匯編器 目標(biāo)程序,第四章 PIC匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ),簡(jiǎn)介 機(jī)器語(yǔ)言:用二進(jìn)制代碼表示的能為計(jì)算機(jī)直接識(shí)別和執(zhí)行的指令的集合。 匯編語(yǔ)言:采用便于人們記憶的符號(hào)或者字符串來(lái)表示操作碼、操作數(shù)和地址碼的符號(hào)語(yǔ)言。 源程序:用匯編語(yǔ)言編寫的程序。 目標(biāo)程序:由源程序翻

2、譯成的機(jī)器語(yǔ)言程序。,第四章 PIC匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ),MPASM匯編器簡(jiǎn)介,第四章 PIC匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ),MPASM匯編器簡(jiǎn)介 MPASM匯編器是美國(guó)Microchip公司為其單片機(jī)應(yīng)用者、開發(fā)者提供的一套語(yǔ)言工具軟件。 功能:將匯編語(yǔ)言源程序翻譯成機(jī)器語(yǔ)言目標(biāo)程序代碼。 檢察源程序中的語(yǔ)法錯(cuò)誤或格式錯(cuò)誤。,第四章 PIC匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ),匯編語(yǔ)言的語(yǔ)句格式,第四章 PIC匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ),匯編語(yǔ)言的語(yǔ)句格式,第四章 PIC匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ),匯編語(yǔ)言的語(yǔ)句格式 對(duì)于PIC系列單片機(jī),在編寫源程序時(shí)必須依照所用匯編器的一些約定進(jìn)行書寫。例如使用Microchip公司提供的M

3、PASM匯編器,匯編語(yǔ)言語(yǔ)句的一般格式由以下4個(gè)字段組成: 標(biāo)號(hào) 操作碼(指令助記符) 操作數(shù) ;注釋 (label) (opcode) (operand) (comment) 這些字段不都是必需的,但其順序是不能顛倒的; 標(biāo)號(hào)必須從最左邊第一列開始書寫,其后至少用一個(gè)空格與操作碼隔離; 在沒(méi)有標(biāo)號(hào)的語(yǔ)句中,指令操作碼前面必須保留一個(gè)或一個(gè)以上的空格;,第四章 PIC匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ),匯編語(yǔ)言的語(yǔ)句格式 標(biāo)號(hào) 操作碼(指令助記符) 操作數(shù) ;注釋 (label) (opcode) (operand) (comment) 操作碼與操作數(shù)之間也必須保留一個(gè)或一個(gè)以上的空格; 操作碼后面如果跟隨

4、2個(gè)操作數(shù)的話,操作數(shù)之間必須用逗號(hào)(半角)隔開; 在必要時(shí)可以加注釋,注釋可以跟在操作碼、操作數(shù)或標(biāo)號(hào)之后,并用分號(hào)引導(dǎo),甚至可以單獨(dú)占用一行且可以從任何一列開始。 匯編語(yǔ)言源程序既可以用大寫字母書寫,也可以用小寫字母書寫,還可以大寫小寫混用,以便于閱讀。一個(gè)語(yǔ)句行最多允許有225個(gè)(半角)字符。,匯編語(yǔ)言的語(yǔ)句格式 標(biāo)號(hào) 用在指令助記符之前的標(biāo)號(hào)就是該指令的符號(hào)地址,在程序匯編時(shí),它被賦以該指令在程序存儲(chǔ)器中所存放的具體地址。 并不是每一條語(yǔ)句都需要加標(biāo)號(hào),只有那些欲被其他語(yǔ)句引用的語(yǔ)句之前才需要加標(biāo)號(hào)。 標(biāo)號(hào)最多可以由32個(gè)字母、數(shù)字和其他一些字符組成,且第一個(gè)字符必須是字母或下劃線“

5、”, 標(biāo)號(hào)不能用指令助記符、寄存器名稱或其他在系統(tǒng)中已有固定用途的字符串(這些又稱為系統(tǒng)保留字); 一個(gè)標(biāo)號(hào)在程序中只能定義一次。 標(biāo)號(hào)必須從一行的第一列開始寫,后面用空格、制表符或換行符與操作碼隔開;可以單獨(dú)作為一行。,匯編語(yǔ)言的語(yǔ)句格式 操作碼 這個(gè)字段不能是空的,操作碼就是指令助記符,它是指令功能名稱的英文縮寫,表示指令的操作類型和操作性質(zhì),是匯編語(yǔ)言語(yǔ)句中的關(guān)鍵詞,因此不可缺省。 指令操作碼的助記符在匯編過(guò)程中,匯編器把它與一個(gè)事先建立的操作碼索引表進(jìn)行逐一比較,找出相應(yīng)的機(jī)器碼,并且取而代之,所以這一匯編過(guò)程又叫做代真。 在其前面沒(méi)有標(biāo)號(hào)時(shí),操作碼前面至少保留一個(gè)空格,即不能頂格書寫

6、,以便與標(biāo)號(hào)區(qū)別,否則,會(huì)被匯編器誤認(rèn)為是標(biāo)號(hào)。,匯編語(yǔ)言的語(yǔ)句格式 操作數(shù) 該部分是操作對(duì)象,也就是數(shù)據(jù)或地址,可以用數(shù)值形式或標(biāo)號(hào)形式表示。 數(shù)值可以是二進(jìn)制、八進(jìn)制、十進(jìn)制、十六進(jìn)制數(shù)值或者 ASCll字符值; 標(biāo)號(hào)可以是在此之前經(jīng)過(guò)定義或者賦值的代表數(shù)據(jù)或地址的標(biāo)號(hào)或字符串。 如果操作數(shù)有2個(gè),中間應(yīng)該用逗號(hào)分開。 MPASM的默認(rèn)進(jìn)制不是十進(jìn)制,而是十六進(jìn)制,這一點(diǎn)與許多其他單片機(jī)的匯編器不同,需要格外注意。 操作數(shù)還可以是事先經(jīng)過(guò)定義的符號(hào)以及表達(dá)式,若想進(jìn)一步了解,請(qǐng)參考附錄C。,第四章 PIC匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ),匯編語(yǔ)言的語(yǔ)句格式 十六進(jìn)制數(shù)由數(shù)字09和字母AF組成。當(dāng)在源程

7、序中采用后綴“H”表示一個(gè)以AF打頭的十六進(jìn)制數(shù)時(shí),則必須在它的前面增添一個(gè)“0”作為引導(dǎo),以便于匯編器將其與標(biāo)號(hào)或符號(hào)名相區(qū)別。 用字符代表的常數(shù)就是該字符對(duì)應(yīng)的ASCll碼(即美國(guó)標(biāo)準(zhǔn)信息交換碼,長(zhǎng)度為7位,許多計(jì)算機(jī)原理書或高級(jí)語(yǔ)言程序設(shè)計(jì)書中都能找到 ASCll表,也可以參考附錄I)。,第四章 PIC匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ),匯編語(yǔ)言的語(yǔ)句格式 注釋 注釋部分可有可無(wú),但是最好養(yǎng)成附帶注釋的習(xí)慣。用來(lái)對(duì)程序作一些注解和說(shuō)明,便于人們閱讀、交流、修改和調(diào)試程序。 注釋不是程序的功能部分,通常用分號(hào)(半角)引導(dǎo)或與指令部分隔開,也可以單獨(dú)書寫為以分號(hào)(半角)開頭的獨(dú)立行,匯編器對(duì)該部分不作任何

8、處理。 加注釋時(shí),一般應(yīng)該說(shuō)明指令的作用和執(zhí)行的條件,尤其要說(shuō)明程序在做什么;在用到子程序時(shí),要說(shuō)明子程序的入口條件和出口條件以及該程序完成的功能。,第四章 PIC匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ),常用偽指令,第四章 PIC匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ),常用偽指令 匯編器能“聽得懂”的語(yǔ)言偽指令。要讓單片機(jī)為我們服務(wù),我們必須先學(xué)會(huì)它的語(yǔ)言指令系統(tǒng)一樣。 用來(lái)編寫匯編語(yǔ)言源程序的語(yǔ)句,主要是指令助記符(亦稱指令性語(yǔ)句),其次就是偽指令(也叫指示性語(yǔ)句)。所謂偽指令就是“假” 指令的意思,不是單片機(jī)的指令系統(tǒng)中的真實(shí)指令。,第四章 PIC匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ),常用偽指令 一般格式也由4個(gè)字段組成: 符號(hào)名 偽指令助

9、記符 操作數(shù) ;注釋 符號(hào)名通常是代表專用寄存器名、通用寄存器變量、常數(shù)名、標(biāo)志位或控制位名、復(fù)位矢量或中斷矢量的一個(gè)字符串。符號(hào)名應(yīng)從一行的第一列開始書寫,其后至少保留一個(gè)空格與偽指令隔離,但是,不能像標(biāo)號(hào)那樣單獨(dú)作為一行書寫。 與指令系統(tǒng)中的助記符不同,沒(méi)有機(jī)器碼與偽指令對(duì)應(yīng),當(dāng)源程序被匯編成目標(biāo)程序時(shí),目標(biāo)程序中并不出現(xiàn)這些偽指令的代碼,它們僅在匯編過(guò)程中起作用。,第四章 PIC匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ),常用偽指令 偽指令是程序設(shè)計(jì)人員向匯編器發(fā)出的控制命令,告訴匯編器如何完成匯編過(guò)程和一些規(guī)定的操作,以及控制匯編器的輸入、輸出和數(shù)據(jù)定位等。 對(duì)于Microchip公司為開發(fā)PIC單片機(jī)提供

10、的MPASM匯編器,可以使用的偽指令多達(dá)數(shù)十條,不過(guò),初學(xué)者掌握以下幾條最常用的偽指令即可滿足一般編程的需要(欲想深入了解更多的偽指令可以參考附錄C),第四章 PIC匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ),常用偽指令 1)EQU符號(hào)名賦值偽指令 格式:符號(hào)名 EQU nn 說(shuō)明:使EQU兩端的值相等,即給符號(hào)名賦予一個(gè)特定值,或者說(shuō)是給符號(hào)名定義一個(gè)數(shù)值。 其中,nn可以是一個(gè)長(zhǎng)度不同的二進(jìn)制數(shù)值(1位的目標(biāo)寄存器指示符d的值、3位的標(biāo)志位的位地址、7位的寄存器地址、8位的數(shù)據(jù)常數(shù)、13位的復(fù)位或中斷矢量等)。 一個(gè)符號(hào)名一旦由EQU賦值,其值就固定下來(lái)了,不能再被重新賦值。,第四章 PIC匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ)

11、,常用偽指令 2)ORG程序起始地址定義指令 格式:ORG nnnn 說(shuō)明:用于指定該偽指令后面的源程序存放的起始地址,也就是匯編后的機(jī)器碼目標(biāo)程序;在單片機(jī)的程序存儲(chǔ)器中開始存放的首地址。其中nnnn是一個(gè)13位長(zhǎng)的地址參數(shù)。,第四章 PIC匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ),常用偽指令 3)END程序結(jié)束偽指令 格式:END 說(shuō)明:該偽指令通知MPASM匯編器結(jié)束對(duì)源程序的匯編。 在一個(gè)源程序中必須要有并且只有一條END指令,放在整個(gè)程序的末尾。,第四章 PIC匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ),常用偽指令 4) LIST列表選項(xiàng)偽指令 格式:LIST 可選項(xiàng),可選項(xiàng), 說(shuō)明:用于設(shè)置匯編參數(shù)來(lái)控制匯編過(guò)程,或?qū)Υ蛴?/p>

12、輸出的列表文件進(jìn)行格式化。該偽指令的所有參數(shù)都必須在一行內(nèi)書寫完成。參數(shù)種類共有10余種,在此只介紹最常用的2種,即可滿足初學(xué)者的基本需要: P=。例如R=DEC(十進(jìn)制);R=HEX(十六進(jìn)制)等。,第四章 PIC匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ),常用偽指令 5)INCLUDE:調(diào)入外部程序文件偽指令 格式:INCLUDE“文件名” 說(shuō)明:用來(lái)告知匯編器,將一個(gè)預(yù)先編寫好的外部程序文件包含進(jìn)來(lái),作為該源程序的一部分。這樣可以減少重復(fù)勞動(dòng),提高編程效率。 調(diào)入的外部文件,通常是定義文件,其中定義了單片機(jī)的復(fù)位矢量、專用寄存器的地址以及控制位和狀態(tài)位的位地址等。,第四章 PIC匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ),程序格式

13、和程序流程圖,第四章 PIC匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ),程序格式和程序流程圖,第四章 PIC匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ),程序格式和程序流程圖,第四章 PIC匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ),程序格式和程序流程圖 通常在編寫程序之前,需要畫程序流程圖。流程圖是一種圖形語(yǔ)言,它用各種圖形符號(hào)來(lái)說(shuō)明程序的執(zhí)行過(guò)程。常常采用的圖形符號(hào)有以下幾種: (1)圓角矩形框端點(diǎn)框,表示一個(gè)程序的開始或結(jié)束; (2)矩形框任務(wù)框,表示要處理的任務(wù); (3)菱形框判斷框,表示要判斷的因素,判斷結(jié)果將導(dǎo)致程序走入不同的分支(菱形框也有時(shí)用兩端帶尖的條形框代用); (4)指向線帶有箭頭的線段,表示程序的走向。,第四章 PIC匯編語(yǔ)言程序設(shè)計(jì)基

14、礎(chǔ),RAM數(shù)據(jù)存儲(chǔ)器的體選尋址問(wèn)題 PIC單片機(jī)面向字節(jié)操作和面向位操作的指令,其指令碼中均包含一個(gè)7位長(zhǎng)的數(shù)據(jù)存儲(chǔ)器單元地址F。F最多可以區(qū)分128個(gè)存儲(chǔ)器單元。 PIC16F87X內(nèi)部的RAM配置了512個(gè)單元的地址空間,地址編碼長(zhǎng)度需要9位,從000H到1FFH(即000000000B1111lllllB)。如果想用7位地址碼(從00H到 7FH即 0000000B1111111B)實(shí)現(xiàn)對(duì)512個(gè)單元的尋址,就必須對(duì)長(zhǎng)度為512的RAM均勻劃分為4等份,每一等份稱作一個(gè)體,按地址從小到大的順序分別記為體0、體1、體2和體3。,RAM數(shù)據(jù)存儲(chǔ)器的體選尋址問(wèn)題 區(qū)分4個(gè)體需要2位地址碼(00

15、B11B) 對(duì)RAM直接尋址時(shí),2位體選媽來(lái)自于狀態(tài)寄存器STATUS的RPO和RP1位; 對(duì)RAM進(jìn)行間接尋址時(shí),2位體選碼來(lái)自于狀態(tài)寄存器STATUS的IRP位和FSR寄存器的最高位,第四章 PIC匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ),RAM數(shù)據(jù)存儲(chǔ)器的體選尋址問(wèn)題,RAM數(shù)據(jù)存儲(chǔ)器的體選尋址問(wèn)題,有些寄存器單元7位地址碼能找到同一個(gè)單元。如STATUS 根據(jù)“夠用即可”的原則,PIC16F87X在000HIFFH的地址空間里,實(shí)際并沒(méi)有配置512個(gè)真實(shí)的單元。 特殊功能寄存器安排在4個(gè)體的上半部分,而通用寄存器占據(jù)著4個(gè)體的下半部分。 在RAM中尋找某一單元需用2個(gè)地址碼,這就像在直角坐標(biāo)系表示的平面上

16、確定一個(gè)點(diǎn)一樣,需要用到橫坐標(biāo)和縱坐標(biāo)2個(gè)數(shù)據(jù)。,第四章 PIC匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ),順序程序結(jié)構(gòu) 順序程序結(jié)構(gòu)是最簡(jiǎn)單的一種結(jié)構(gòu),在流程圖中表示為任務(wù)框一個(gè)一個(gè)地串行連接。 在計(jì)算機(jī)執(zhí)行程序時(shí)表現(xiàn)為,從頭至尾嚴(yán)格按照次序一條語(yǔ)句一條語(yǔ)句地順序執(zhí)行,并且每一條語(yǔ)句均被執(zhí)行一遍。如圖所示。圖中的A、B和C分別代表的可以是一條語(yǔ)句,也可以是一段程序。,第四章 PIC匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ),順序程序結(jié)構(gòu) 例 當(dāng)用LED數(shù)碼管對(duì)某一RAM存儲(chǔ)器單元的內(nèi)容進(jìn)行顯示時(shí),因?yàn)橐晃粩?shù)碼管一般只能顯示4位二進(jìn)制數(shù),所以通常需要將被顯示單元內(nèi)的8位數(shù)據(jù)拆分成高4位和低4位2個(gè)“半字節(jié)”。在本例中,假設(shè)將RAM中文件

17、寄存器20H單元的數(shù)據(jù)分解后,依次將低4位和高4位分別放入21H和22H單元,并將這2個(gè)單元中空余的高4位補(bǔ)0。,第四章 PIC匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ),順序程序結(jié)構(gòu) 要點(diǎn):設(shè)Z是一位二進(jìn)制數(shù),同1和O進(jìn)行邏輯與運(yùn)算時(shí),結(jié)果一個(gè)是保持原樣而另一個(gè)是變成0,基于這一道理采用 ANDLW指令,我們可以將一個(gè) 8位數(shù)據(jù)同常數(shù)0FH相與,實(shí)現(xiàn)清0高4位和保留低4位的目的。但這一操作只能在工作寄存器W內(nèi)才能完成。,第四章 PIC匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ),分支程序結(jié)構(gòu) 分支程序流程圖中都包含1個(gè)判斷框,該判斷框具有1個(gè)入口和2個(gè)出口B和C , 語(yǔ)句A執(zhí)行完之后通常產(chǎn)生一個(gè)條件碼CC,當(dāng)條件CC判為“是”(記為YE

18、S或Y)時(shí)進(jìn)入B分支,當(dāng)條件CC判為“否”(記為 NO或 N)時(shí)進(jìn)入 C分支。由此可見,只有一個(gè)分支中的程序被執(zhí)行了一遍,而另一分支中的程序沒(méi)有得到執(zhí)行。在實(shí)際編程時(shí),不僅會(huì)用到上述的二分支程序結(jié)構(gòu),還會(huì)用到分支數(shù)多于2個(gè)的多分支程序結(jié)構(gòu)。不過(guò),多分支結(jié)構(gòu)可以看作由二分支結(jié)構(gòu)嵌套而成,即分支中又包含分支。,第四章 PIC匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ),分支程序結(jié)構(gòu) 例4.3 RAM存儲(chǔ)器的20H和21H單元存放2個(gè)數(shù),找出大者存入22H單元。 要點(diǎn) 兩數(shù)做減法,判斷標(biāo)志位C的值,第四章 PIC匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ),分支程序結(jié)構(gòu),第四章 PIC匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ),分支程序結(jié)構(gòu) 對(duì)于程序中的指令運(yùn)用作幾點(diǎn)

19、說(shuō)明: (1)凡是需要2個(gè)數(shù)參與的邏輯運(yùn)算(與、或、異或)和算術(shù)運(yùn)算(加、減),都需要事先將其中一個(gè)操作數(shù)放入W中。對(duì)于在此使用的減法指令更要格外關(guān)注,應(yīng)預(yù)先把減數(shù)放人W中,或者說(shuō),預(yù)先放入W中的數(shù),在運(yùn)算中是當(dāng)做減數(shù),而寄存器中的數(shù)當(dāng)做了被減數(shù)。 (2)一條條件跳轉(zhuǎn)指令往往需要跟隨一條無(wú)條件跳轉(zhuǎn)指令,才能實(shí)現(xiàn)長(zhǎng)距離的轉(zhuǎn)移和程序的分支。 (3)PIC單片機(jī)的指令系統(tǒng)中沒(méi)有設(shè)置專用的停機(jī)指令,可以用一條跳轉(zhuǎn)到自身的無(wú)條件跳轉(zhuǎn)指令GOTO來(lái)實(shí)現(xiàn)。,第四章 PIC匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ),循環(huán)程序結(jié)構(gòu) 在程序設(shè)計(jì)過(guò)程中,有時(shí)要求對(duì)某一段程序重復(fù)執(zhí)行多遍,此時(shí)若用循環(huán)程序結(jié)構(gòu),有助于縮短程序。在一個(gè)循環(huán)程

20、序的結(jié)構(gòu)中包含以下4個(gè)組成部分: (1)循環(huán)變量設(shè)置。在循環(huán)開始時(shí),往往需要指定或定義一個(gè)循環(huán)變量(可以是循環(huán)次數(shù)計(jì)數(shù)器、地址指針等),并且給它設(shè)置一個(gè)初始值。 (2)循環(huán)體。要求重復(fù)執(zhí)行的程序段,即循環(huán)程序的主體部分。 (3)循環(huán)變量修改。修改循環(huán)變量的值,為下一次的循環(huán)準(zhǔn)備條件。 (4)循環(huán)控制。在循環(huán)程序中必須給出循環(huán)結(jié)束的條件,否則就成為死循環(huán),第四章 PIC匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ),循環(huán)程序結(jié)構(gòu),第四章 PIC匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ),循環(huán)程序結(jié)構(gòu) 例4.4 數(shù)據(jù)存儲(chǔ)器中,從地址30H開始的50個(gè)單元都填入00H。 要點(diǎn) 間接尋址寄存器FSR當(dāng)作地址指針。,第四章 PIC匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ)

21、,循環(huán)程序結(jié)構(gòu),第四章 PIC匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ),子程序結(jié)構(gòu) 編制標(biāo)準(zhǔn)化的程序段,存儲(chǔ)于程序存儲(chǔ)器的指定區(qū)域,在每次需要時(shí)就調(diào)出使用,這種程序段就稱為子程序,調(diào)用子程序的程序稱為主程序或者調(diào)用程序。子程序結(jié)構(gòu)是程序設(shè)計(jì)標(biāo)準(zhǔn)化和模塊化的有效方法。 對(duì)PIC系列單片機(jī)編程時(shí),在主程序的適當(dāng)?shù)胤椒胖肅ALL指令來(lái)實(shí)現(xiàn)調(diào)用(或跳轉(zhuǎn)),在子程序的開頭需要設(shè)置地址標(biāo)號(hào)(又可兼作于程序的名稱和入口地址的標(biāo)志),末尾需要放置RETURN或RETLW指令,以便于主程序的調(diào)用和子程序的返回。在主程序調(diào)用子程序時(shí),有時(shí)會(huì)遇到參數(shù)傳遞和現(xiàn)場(chǎng)保護(hù)這兩個(gè)問(wèn)題。,第四章 PIC匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ),子程序結(jié)構(gòu) 所謂參數(shù)傳

22、遞,就是在調(diào)用子程序前,主程序應(yīng)先把有關(guān)參數(shù)放到某些約定的存儲(chǔ)器單元,進(jìn)入子程序后,可以從約定的單元取出有關(guān)參數(shù)加以處理。待處理完之后子程序結(jié)束之前,同樣也應(yīng)把處理結(jié)果送到約定單元。在返回主程序后,主程序可以從這些約定單元獲得所需結(jié)果。在主程序和子程序之間傳遞8位參數(shù),用工作寄存器W是理想的選擇。 所謂現(xiàn)場(chǎng)保護(hù),就是主程序在運(yùn)行過(guò)程中使用了一些寄存器來(lái)存放臨時(shí)數(shù)據(jù)或中間結(jié)果,在子程序運(yùn)行過(guò)程中有時(shí)也要用到這些寄存器,為了避免對(duì)于主程序還有用的臨時(shí)數(shù)據(jù)被子程序覆蓋掉,就要設(shè)法保護(hù)這些臨時(shí)數(shù)據(jù)。在執(zhí)行完子程序返回主程序時(shí),還要恢復(fù)這些數(shù)據(jù),稱為現(xiàn)場(chǎng)恢復(fù)。,第四章 PIC匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ),子程序

23、結(jié)構(gòu) 例4.5 3個(gè)數(shù)最大者放入40H單元 要點(diǎn) 利用例4.3改造成子程序,子程序結(jié)構(gòu),子程序結(jié)構(gòu),第四章 PIC匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ),程序跨頁(yè)跳轉(zhuǎn)和跨頁(yè)調(diào)用問(wèn)題 PICF87X系列單片機(jī)中,片內(nèi)配置的FLASH程序存儲(chǔ)器的容量不同,分別為2K、4K和8K。因此,程序存儲(chǔ)器跨頁(yè)跳轉(zhuǎn)和跨頁(yè)調(diào)用的程序設(shè)計(jì)方法,也不盡相同。須要視具體情況具體處理。 PIC16F87X的指令系統(tǒng)中,2條引起程序長(zhǎng)距離跳轉(zhuǎn)的指令GOTO和CALL,所攜帶的地址碼僅僅有11位,也就只能在2K(即為一個(gè)頁(yè)面)的地址范圍內(nèi)跳轉(zhuǎn)。對(duì)于只有2K程序存儲(chǔ)器的單片機(jī)型號(hào),自然就不存在程序跨頁(yè)跳轉(zhuǎn)和跨頁(yè)調(diào)用問(wèn)題。但是對(duì)于程序存儲(chǔ)器容量

24、超出2K的情況(更嚴(yán)格地講,是用戶程序在存儲(chǔ)器中分布的地址范圍超出2K的情況),就可能遇到程序跨頁(yè)跳轉(zhuǎn)和跨頁(yè)調(diào)用問(wèn)題。,第四章 PIC匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ),程序跨頁(yè)跳轉(zhuǎn)和跨頁(yè)調(diào)用問(wèn)題 (1)對(duì)于 PIC16F87087V872而言,只有2K的程序存儲(chǔ)器,不必關(guān)心程序跨頁(yè)跳轉(zhuǎn)和跨頁(yè)調(diào)用問(wèn)題。 (2)對(duì)于 PICF873874,實(shí)際配置的程序存儲(chǔ)器容量為4K X14,其地址編碼長(zhǎng)度需要12位,即4K。程序跳轉(zhuǎn)指令的地址碼有11位,只能在2K的地址范圍內(nèi)跳轉(zhuǎn)。把4K的程序空間分為2頁(yè),每頁(yè)2K,頁(yè)面0的地址范圍為0000H07FFH,頁(yè)面1的地址范圍為0800HOFFFH。再把PCLATH位(即該寄

25、存器的bit3)作為頁(yè)面選擇位,這樣就可以在4K的地址范圍內(nèi)自由跳轉(zhuǎn)了。,第四章 PIC匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ),程序跨頁(yè)跳轉(zhuǎn)和跨頁(yè)調(diào)用問(wèn)題,第四章 PIC匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ),程序跨頁(yè)跳轉(zhuǎn)和跨頁(yè)調(diào)用問(wèn)題 (3)對(duì)于PIC16F876877而言,有 8K的程序存儲(chǔ)器,存在程序跨頁(yè)跳轉(zhuǎn)和跨頁(yè)調(diào)用問(wèn)題。先把8K的地址空間分為4頁(yè),每頁(yè)2K,頁(yè)面0的地址范圍為 0000H07FFH;頁(yè)面1的地址范圍為0800HOFFFH;頁(yè)面2的地址范圍為1000H17FFH;頁(yè)面3的地址范圍為180OH1FFFH。再把PCLATH4:3位(即該寄存器的bit4和bit3)作為頁(yè)面選擇位,這樣就可以在8K的地址范圍內(nèi)自

26、由跳轉(zhuǎn)了。,第四章 PIC匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ),程序跨頁(yè)跳轉(zhuǎn)和跨頁(yè)調(diào)用問(wèn)題,第四章 PIC匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ),程序跨頁(yè)跳轉(zhuǎn)和跨頁(yè)調(diào)用問(wèn)題,第四章 PIC匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ),延時(shí)程序設(shè)計(jì) 在編程時(shí)經(jīng)常需要在程序的執(zhí)行過(guò)程中插入一段延時(shí)時(shí)間,對(duì)此有2種方案可供選擇: 利用片內(nèi)的硬件資源可編程定時(shí)器, 采用軟件手段插入一段延時(shí)程序。 如果延時(shí)時(shí)間較短,可以連續(xù)插入幾條空操作指令NOP;如果延時(shí)時(shí)間較長(zhǎng),可以插入一段單一循環(huán)或多重循環(huán)的循環(huán)結(jié)構(gòu)延時(shí)程序。,第四章 PIC匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ),延時(shí)程序設(shè)計(jì) 在35條指令構(gòu)成的指令系統(tǒng)中,5條實(shí)現(xiàn)無(wú)條件跳轉(zhuǎn)的必然引起程序執(zhí)行順序發(fā)生改變的指令(即 GOTO,CALL

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論