資源描述:
《單片機(jī)編程之匯編語(yǔ)言基礎(chǔ)-PIC單片機(jī)匯編指令.doc》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在學(xué)術(shù)論文-天天文庫(kù)。
1、單片機(jī)編程之匯編語(yǔ)言基礎(chǔ)-PIC單片機(jī)匯編指令 1、程序的基本格式 先介紹二條偽指令: EQU——標(biāo)號(hào)賦值偽指令 ORG——地址定義偽指令 PIC16C5X在RESET后指令計(jì)算器PC被置為全“1”,所以PIC16C5X幾種型號(hào)芯片的復(fù)位地址為: PIC16C54/55:1FFH PIC16C56:3FFH PIC16C57/58:7FFH 一般來(lái)說(shuō),PIC的源程序并沒(méi)有要求統(tǒng)一的格式,大家可以根據(jù)自己的風(fēng)格來(lái)編寫(xiě)。但這里我們推薦一種清晰明了的格式供參考?! ITLETh
2、isis……;程序標(biāo)題 ;-------------------------------------- ;名稱定義和變量定義 ;-------------------------------------- F0 EQU 0 RTCC EQU 1 PC EQU 2 STATUS EQU 3 FSR EQU 4 RA EQU 5 RB EQU 6 RC EQU 7 ┋ PIC16C54EQU1FFH;芯片復(fù)位地址 PIC16C56EQU3FFH
3、 PIC16C57EQU7FFH ;----------------------------------------- ORGPIC16C54GOTOMAIN ;在復(fù)位地址處轉(zhuǎn)入主程序 ORG 0 ;在0000H開(kāi)始存放程序 ;----------------------------------------- ;子程序區(qū) ;----------------------------------------- DELAYMOVLW255 ┋ RETLW0 ;--------
4、---------------------------------- ;主程序區(qū) ;------------------------------------------ MAIN MOVLWB‘00000000’ TRISRB ;RB已由偽指令定義為6,即B口 ┋ LOOP BSFRB,7CALLDELAY BCFRB,7CALLDELAY ┋ GOTOLOOP ;------------------------------------------- END ;程序
5、結(jié)束 注:MAIN標(biāo)號(hào)一定要處在0頁(yè)面內(nèi)。 2、程序設(shè)計(jì)基礎(chǔ) 1)設(shè)置I/O口的輸入/輸出方向 PIC16C5X的I/O口皆為雙向可編程,即每一根I/O端線都可分別單獨(dú)地由程序設(shè)置為輸入或輸出。這個(gè)過(guò)程由寫(xiě)I/O控制寄存器TRISf來(lái)實(shí)現(xiàn),寫(xiě)入值為“1”,則為輸入;寫(xiě)入值為“0”,則為輸出。 MOVLW0FH ;00001111(0FH) 輸入輸出 TRIS6 ;將W中的0FH寫(xiě)入B口控制器, ;B口高4位為輸出,低4位為輸入?! OVLW0C0H;11000000(0C0
6、H) RB4,RB5輸出0RB6,RB7輸出1 2)檢查寄存器是否為零 如果要判斷一個(gè)寄存器內(nèi)容是否為零,很簡(jiǎn)單,現(xiàn)以寄存器F10為例: MOVF10,1 ;F10→F10,結(jié)果影響零標(biāo)記狀態(tài)位Z BTFSSSTATUS,Z ;F10為零則跳 GOTONZ ;Z=0即F10不為零轉(zhuǎn)入標(biāo)號(hào)NZ處程序 ┋ ;Z=1即F10=0處理程序 3)比較二個(gè)寄存器的大小 要比較二個(gè)寄存器的大小,可以將它們做減法運(yùn)算,然后根據(jù)狀態(tài)位C來(lái)判斷。注意,相減的結(jié)果放入W,則不會(huì)影響二
7、寄存器原有的值。 例如F8和F9二個(gè)寄存器要比較大?。骸 OVF8,0 ;F8→W SUBWF9,0 ;F9—W(F8)→W BTFSCSTATUS,Z ;判斷F8=F9否 GOTOF8=F9 BTFSCSTATUS,C ;C=0則跳 GOTOF9>F8 ;C=1相減結(jié)果為正,F(xiàn)9>F8 GOTOF9< F9 ;C=0相減結(jié)果為負(fù),F(xiàn)9 ┋ 4)循環(huán)n次的程序 如果要使某段程序循環(huán)執(zhí)行n次,可以用一個(gè)寄存器作計(jì)數(shù)器。下例以F10做計(jì)數(shù)器,使程序循環(huán)8次。
8、 COUNTEQU10 ;定義F10名稱為COUNT(計(jì)數(shù)器) ┋ MOVLW8 MOVWFCOUNTLOOP ;循環(huán)體 LOOP ┋ DECFSZCOUNT,1 ;COUNT減1,結(jié)果為零則跳 GOTOLOOP ;結(jié)果不為零,繼續(xù)循環(huán) ┋ ;結(jié)果為零,跳出循環(huán) 5)“IF……THEN……”格式的程序 下面以“IFX=YTHENGOTONEXT”格式為例?! OVFX,0 ;X→W SUBWFY,0 ;Y—W(X)→W BTFSCSTATUS,Z