版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、PIC單片機(jī)匯編語言基礎(chǔ)1、程序的基本格式先介紹二條偽指令:EQU標(biāo)號(hào)賦值偽指令OR地址定義偽指令PIC16C5X在RESET后指令計(jì)算器 PC被置為全“ 1”,所以PIC16C5X幾種型號(hào)芯片的復(fù)位地址為:PIC16C54/55 : 1FFHPIC16C56: 3FFHPIC16C57/58 : 7FFH一般來說,PIC的源程序并沒有要求統(tǒng)一的格式,大家可以根據(jù) 自己的風(fēng)格來編寫。但這里我們推薦一種清晰明了的格式供參考。TITLE This is ;程序標(biāo)題;名稱定義和變量定義F0EQU 0RTCCEQU 1PCEQU 2STATUSEQU 3RAEQU5RBEQU6RCEQU7PIC16C
2、54 EQU 1FFH;芯片復(fù)位地址PIC16C56 EQU 3FFHPIC16C57 EQU 7FFHORG PIC16C54 GOTO MAIN ;在復(fù)位地址處轉(zhuǎn)入主程序ORG 0;在0000H開始存放程序;子程序區(qū)DELAY MOVLW 255IIIIRETLW 0;主程序區(qū)MAINTRIS RB;RB已由偽指令定義為6,即BLOOPBSF RB 7 CALL DELAYBCF RB 7 CALL DELAYIII IGOTO LOOPEND;程序結(jié)束注:MAIN標(biāo)號(hào)一定要處在0頁面內(nèi)。2、程序設(shè)計(jì)基礎(chǔ)1) 設(shè)置I/O 口的輸入/輸出方向PIC16C5X勺I/O 口皆為雙向可編程,即每一
3、根I/O 端線都可分 別單獨(dú)地由程序設(shè)置為輸入或輸出。這個(gè)過程由寫 I/O控制寄存器 TRIS f來實(shí)現(xiàn),寫入值為“1”,則為輸入;寫入值為“ 0”,則為 輸出。MOVLW 0FH ; 0000 1111 (0FH輸入輸出TRIS 6;將 W中的0FH寫入B 口控制器,;B口高4位為輸出,低4位為輸入。RB4, RB5輸出 0 RB6, RB7輸出 12)檢查寄存器是否為零如果要判斷一個(gè)寄存器內(nèi)容是否為零,很簡單,現(xiàn)以寄存器F10為例:MOVF 10 1;F10-F10,結(jié)果影響零標(biāo)記狀態(tài)位ZBTFSS STATUSZ;F10為零則跳GOTO NZ;Z=0即F10不為零轉(zhuǎn)入標(biāo)號(hào)NZ處程序;Z=
4、1即F10=0處理程序3)比較二個(gè)寄存器的大小要比較二個(gè)寄存器的大小,可以將它們做減法運(yùn)算,然后根據(jù)狀態(tài)位C來判斷。注意,相減的結(jié)果放入 W則不會(huì)影響二寄存器原有 的值。例如F8和F9二個(gè)寄存器要比較大小:MOVF 8 0SUBWF 9 0BTFSC STATUS ZGOTO F8=F9BTFSC STATUS CGOTCF9>F8;F8 W;F9 W( F8)tW;判斷F8=F9否;C=0則跳;C=1相減結(jié)果為正,F(xiàn)9>F84)循環(huán)n次的程序如果要使某段程序循環(huán)執(zhí)行n次,可以用一個(gè)寄存器作計(jì)數(shù)器。下例以F10做計(jì)數(shù)器,使程序循環(huán)8次COUNT EQU 10;定義F10名稱為COU
5、N(計(jì)數(shù)器)III IMOVLW 8MOVWF COUNT LOOP;循環(huán)體LOOPDECFSZ:OUN,1;COUN減1,結(jié)果為零則跳GOTO LOOP1111;結(jié)果不為零,繼續(xù)循環(huán);結(jié)果為零,跳出循環(huán)5) “IFTHEN-”格式的程序MOVFX 0SUBWF 丫 0BTFSC STATUS ZGOTO NEXTF面以 “ IF X二Y THEN GOTO NEXT格式為例;Y W(X) W;X=Y 否;X=Y跳到NEXT去執(zhí)行6) “FORNEXT格式的程序F10放X的初值,F(xiàn)11放X的終值1011;0 START( F10);5 DAEN(F11);START值力口 1;START=DA
6、EN? (X=5否);Xv 5,繼續(xù)循環(huán);X= 5,結(jié)束循環(huán)DO WHILEEND格式的程序程序是在符合條件下執(zhí)行循環(huán)。下例是F10放X的值。X=0 TO 5”格式的程序START EQUDAEND EQUIIIIMOVLW 0MOVWF STARTMOVLW 5MOVWF DAENDLOOPIIIIINCF START 1MOVF START 0SUBWF DAEND0BTFSS STATUS ZGOTO LOOP7 )“DO WHILEEND“ DO WHILE X=1格式的程序MOVLW 1MOVWF XLOOP;1-X (F10),作為初值MOVLW 1SUBWF X 0BTFSS S
7、TATUS ZGOTO LOOP;X= 1 否?;X= 1繼續(xù)循環(huán);Xm1跳出循環(huán)8) 查表程序查表是程序中經(jīng)常用到的一種操作。下例是將十進(jìn)制09轉(zhuǎn)換成7段LED數(shù)字顯示值。若以B 口的RBRB6來驅(qū)動(dòng)LED的ag線 段,則有如下關(guān)系:設(shè)LED為共陽,則09數(shù)字對應(yīng)的線段值如下表:十進(jìn)數(shù)線段值十進(jìn)數(shù)線段值0 C0H 5 92H2 A4H 7 F8H3 BOH 8 80H4 99H 9 90HPIC的查表程序可以利用子程序帶值返回的特點(diǎn)來實(shí)現(xiàn)。具體是 在主程序中先取表數(shù)據(jù)地址放入 W接著調(diào)用子程序,子程序的第一 條指令將W置入PC則程序跳到數(shù)據(jù)地址的地方,再由“ RETL”指令將數(shù)據(jù)放入W返回到
8、主程序。下MOVLW TABLEMOVWF 10IIIIMOVLW 1段值A(chǔ)DDWF 10,1CALL CONVERTMOVWF 6LEDIIIICONVERT MOVWFRETLW 0C0HRETLW 0F9HF面程序以F10放表頭地址。;表頭地址-F10;1-W準(zhǔn)備取“ 1”的線;F10+V* “ 1”的數(shù)據(jù)地址;線段值置到B 口,點(diǎn)亮;W- PC TABLE;“ 0”線段值;“1”線段值RETLW 90H;“9”線段值9) “ READ DATA RESTORE格式程序READ DATA程序是每次讀取數(shù)據(jù)表的一個(gè)數(shù)據(jù), 然后將數(shù)據(jù)指針加1,準(zhǔn)備取下一個(gè)數(shù)據(jù)。下例程序中以 F10為數(shù)據(jù)表起
9、始地址,F(xiàn)11做數(shù)據(jù)指針。POINTEREQU 11;定義F11名稱為POINTERMOVLWDATAMOVWF10;數(shù)據(jù)表頭地址-F10CLRFPOINTER;數(shù)據(jù)指針清零MOVFPOINTER 0ADDWF 1, 0;W 二F10+POINTERINCFPOINTER 1;指針加1CALL CONVERT;調(diào)子程序,取表格數(shù)據(jù)CONVERT MOVWF 2;數(shù)據(jù)地址-PCDATA RETLW 20H;數(shù)據(jù)如果要執(zhí)行“ RESTORE,只要執(zhí)行一條“ CLRFPOINTER即可。10)延時(shí)程序如果延時(shí)時(shí)間較短,可以讓程序簡單地連續(xù)執(zhí)行幾條空操作指令 “NOP。如果延時(shí)時(shí)間長,可以用循環(huán)來實(shí)現(xiàn)
10、。下例以F10計(jì)算,使循環(huán)重復(fù)執(zhí)行100次。MOVLWD100'MOVWF 10LOOP DECFSZ 10 1; F10 1 F10,結(jié)果為零則跳GOTO LOOPIIII延時(shí)程序中計(jì)算指令執(zhí)行的時(shí)間和即為延時(shí)時(shí)間。 如果使用4MHz 振蕩,則每個(gè)指令周期為1卩S。所以單周期指令時(shí)間為1卩S,雙周 期指令時(shí)間為 2卩S。在上例的 LOOP循環(huán)延時(shí)時(shí)間即為:(1+2) *100+2=302 (卩S)。在循環(huán)中插入空操作指令即可延長延時(shí)時(shí)間:MOVLW D ' 100'MOVWF 10LOOP NOPNOPNOPDECFSZ 10 1GOTO LOOP延時(shí)時(shí)間二(1 +
11、1 + 1 + 1+2) *100+2=602 (卩 S)用幾個(gè)循環(huán)嵌套的方式可以大大延長延時(shí)時(shí)間。 下例用2個(gè)循環(huán) 來做延時(shí):MOVLWD 100MOVWF10LOOPMOVLWD 16MOVWF11LOOP1DECFSZ11, 1GOTOLOOP1DECFSZ10, 1GOTO LOOP延時(shí)時(shí)間=1 + 1+1 + 1+( 1+2) *16-1 + 1+2*100-1=5201 (卩 S)11)RTCC計(jì)數(shù)器的使用RTCC是一個(gè)脈沖計(jì)數(shù)器,它的計(jì)數(shù)脈沖有二個(gè)來源,一個(gè)是從RTCC引腳輸入的外部信號(hào),一個(gè)是內(nèi)部的指令時(shí)鐘信號(hào)??梢杂贸?序來選擇其中一個(gè)信號(hào)源作為輸入。RTCC可被程序用作計(jì)時(shí)
12、之用;程序讀取RTCC寄存器值以計(jì)算時(shí)間。當(dāng)RTCC乍為內(nèi)部計(jì)時(shí)器使用時(shí) 需將RTCd腳接VDD或VSS以減少干擾和耗電流。下例程序以RTCC 做延時(shí):RTCC EQU 1MOVLW 07HOPTION ;選擇預(yù)設(shè)倍數(shù)1: 256 RTCCLOOP MOVLW 255; RTCC+數(shù)終值SUBWF RTCC 0BTFSS STATUSZ ; RTCC=255GOTO LOOPIIII這個(gè)延時(shí)程序中,每過256個(gè)指令周期RTCC寄存器增1 (分頻 比=1: 256),設(shè)芯片使用4MHZ振蕩,則:延時(shí)時(shí)間=256*256=65536 (卩 S)RTCC是自振式的,在它計(jì)數(shù)時(shí),程序可以去做別的事情,
13、只要 隔一段時(shí)間去讀取它,檢測它的計(jì)數(shù)值即可。12)寄存器體(BAN)的尋址對于PIC16C54/55/56,寄存器有32個(gè),只有一個(gè)體(BANK, 故不存在體尋址問題,對于 PIC16C57/58來說,寄存器則有80個(gè), 分為4個(gè)體(BANK0-BAN) 在對F4 (FSR 的說明中可知,F(xiàn)4的 bit6和bit5是寄存器體尋址位,其對應(yīng)關(guān)系如下:Bit6 Bit5 BANK物理地址1 BANK1 30H- 3FH0 BANK2 50H- 5FH11 BANK3 70H 7FH當(dāng)芯片上電RESET后,F(xiàn)4的bit6,bit5是隨機(jī)的,非上電的RESET則保持原先狀態(tài)不變。下面的例子對BANK
14、和BANK2勺30H及50H寄存器寫入數(shù)據(jù)。例1.(設(shè)目前體選為BANK0BSF4 , 5;置位 bit5=1,選擇BANK1MOVLW DATAMOVWF 10H;DAT" 30HBCF4 , 5BSF4, 6;bit6=1,bit5=0選擇BANK2MOVWF 10H;DATA>50H從上例中我們看到,對某一體(BANK中的寄存器進(jìn)行讀寫,首 先要先對F4中的體尋址位進(jìn)行操作。實(shí)際應(yīng)用中一般上電復(fù)位后先 清F4的bit6和bit5為0,使之指向BANK0以后再根據(jù)需要使其指 向相應(yīng)的體。注意,在例子中對30H寄存器(BANK1和50H寄存器(BANK2 寫數(shù)時(shí),用的指令“
15、M0VW1IDH'中寄存器地址寫的都是“ 10H',而 不是讀者預(yù)期的“ MOVWF 30H和“ MOVWF 50H,為什么?讓我們回顧一下指令表。在 PIC16C5X的所有有關(guān)寄存器的指令 碼中,寄存尋址位都只占5個(gè)位:fffff ,只能尋址32個(gè)(00H-1FH寄存器。所以要選址80個(gè)寄存器,還要再用二位體選址位PA1和PA0當(dāng)我們設(shè)置好體尋址位 PA1和PAO,使之指向一個(gè)BAN,那么指令“MOVW/TOH'就是將W內(nèi)容置入這個(gè)BANK中的相應(yīng)寄存器內(nèi)(10H, 30H, 50H,或 70H。有些設(shè)計(jì)者第一次接觸體選址的概念, 難免理解上有出入,下面 是一個(gè)例子:
16、例2:(設(shè)目前體選為BANK0MOVLW 55HMOVWF 30H;欲把 55HH 30H寄存器MOVLW 66HMOVWF 50H;欲把 66HH 50H寄存器以為“ MOVWF 301一定能把 W置入30H,“ MOVWF 501一定能把W置入50H,這是錯(cuò)誤的。因?yàn)檫@兩條指令的實(shí)際效果是“ MOVWF10H',原因上面已經(jīng)說明過了。所以例 2這段程序最后結(jié)果是F10H=66H而真正的F30H和F50H并沒有被操作到。建議:為使體選址的程序清晰明了,建議多用名稱定義符來寫程序,則不易混淆。例3:假設(shè)在程序中用到BANK0BANK1 BANK2的幾個(gè)寄存器如下:BANK0地址BANK
17、1地址BANK2地址BANK3地址AEQU10H;BANKOBEQU10H;BANK1CEQU1110H;BANK2FSR11EQU4Bit6EQU6Bit5EQU5DATAEQU55HMOVLW DATAMOVWF ABSF FSR,Bit5MOVWF B; DATA> F30HBCF FSR,Bit5BSF FSR,Bit6MOVWF C; DATA> F50H程序這樣書寫,相信體選址就不容易錯(cuò)了13)程序跨頁面跳轉(zhuǎn)和調(diào)用下面介紹PIC16C5X勺程序存儲(chǔ)區(qū)的頁面概念和F3寄存器中的頁面選址位PA1和PA0兩位應(yīng)用的實(shí)例。(1) “ GOTO跨頁面例:設(shè)目前程序在0頁面(PAG
18、ED,欲用“ GOTO跳轉(zhuǎn)至U 1頁面的某個(gè)地方KEY( PAGE1。STATUS EQU3PA1EQU6PA0EQU115BSF1STATUS PA0;PA0=1,選擇 PAGES面GOTOKEY11;跨頁跳轉(zhuǎn)到1頁面的KEYKEY11NOP;1頁面的程序(2) “ CALL跨頁面例:設(shè)目前程序在0頁面(PAGE),現(xiàn)在要調(diào)用一一放在1頁面(PAGE)的子程序DELAYCALL DELAY;跨頁調(diào)用BCF STATUS PAO ;恢復(fù)0頁面地址DELA Y NOP; 1頁面的子程序III I注意:程序?yàn)榭珥揅ALL而設(shè)了頁面地址,從子程序返回后一定 要恢復(fù)原來的頁面地址。(3)程序跨頁跳轉(zhuǎn)和調(diào)用的編寫讀者看到這里,一定要問:我寫源程序(.ASM時(shí),并不去注意 每條指令的存放地址,我怎么知道這個(gè)GOT展要跨頁面的,那個(gè)CALL 是需跨頁面的? 的確,開始寫源程序時(shí)并知道何時(shí)會(huì)發(fā)生跨頁面跳 轉(zhuǎn)或調(diào)用,不過當(dāng)你將源程序匯編時(shí),就會(huì)自動(dòng)給出。當(dāng)匯編結(jié)果顯 示出:X X X (地址)“ GOTO out of Range"X X X (地址)“ CALL out of Range"
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 商業(yè)意識(shí)在小學(xué)生的啟蒙與實(shí)踐探索
- 圖書館家具配置與學(xué)生學(xué)生服的搭配設(shè)計(jì)探討
- 醫(yī)療家庭溝通情感支持與理解技巧
- 2025中國聯(lián)通春季校園招聘(新苗)高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025中國移動(dòng)湖南分公司校園招聘高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025中國電信河北秦皇島分公司校園招聘11人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025下半年重慶沙坪壩區(qū)事業(yè)單位招聘93人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025下半年福建省寧德福安市事業(yè)單位招聘144人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025下半年四川省遂寧河?xùn)|新區(qū)教師招聘79人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025下半年云南西雙版納州事業(yè)單位招聘工作人員255人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 卸料平臺(tái)安裝巡視檢查記錄
- 單位物業(yè)服務(wù)項(xiàng)目投標(biāo)方案(技術(shù)標(biāo))
- TRIZ理論之40個(gè)發(fā)明原理課件
- 酒店宴會(huì)合同范本
- 貨款互抵三方協(xié)議合同范本
- 七年級道德與法治論文2000字(合集六篇)
- 王朝霞一年級上冊期末試卷
- 2023年初中英語聽課心得體會(huì) 初中英語聽課心得體會(huì)閱讀(優(yōu)質(zhì))相關(guān)范文多篇集錦
- 高中日語宣講 試聽課件
- 新生兒窒息診斷地專家共識(shí)
- 超高層建筑地造價(jià)含國內(nèi)著名超高層建筑成本大數(shù)據(jù)
評論
0/150
提交評論