




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
會計學1第3章-匯編程序設計3.4.1匯編程序偽指令
在匯編時起控制作用,自身并不產生機器碼,而僅是為匯編服務的一些指令,稱為偽指令。偽指令不屬于80C51指令系統。常用的偽指令有以下幾種:⒈起始偽指令
ORG(Origin)
功能:規定ORG下面目標程序的起始地址。格式:ORG16位地址第1頁/共31頁功能:將一個數據或特定的匯編符號賦予規定 的字符名稱。⒉結束偽指令END功能:匯編語言源程序的結束標志。在END后面的指令,匯編程序不再處理。格式:END⒊等值偽指令
EQU(Equate)格式:字符名稱EQU
數據或匯編符號第2頁/共31頁⒋數據地址賦值偽指令
DATA格式:字符名稱DATA
表達式功能:將數據地址或代碼地址賦予規定的 字符名稱。⒌定義字節偽指令DB(DefineByte)格式:DB8位二進制數表功能:從指定的地址單元開始,定義若干 個8位內存單元的數據。數據與數據之間用“,”分割。第3頁/共31頁格式:字符名稱BIT
位地址⒍定義字偽指令DW(DefineWord)格式:DW16位二進制數表功能:從指定的地址單元開始,定義 若干個16位數據。⒎定義位地址偽指令BIT功能:將位地址賦予所規定的字符名稱。第4頁/共31頁匯編語言基本概念
將匯編語言源程序轉換為計算機所能識別的機器語言代碼程序的過程稱為匯編。匯編可分為:⒈手工匯編⒉計算機匯編第5頁/共31頁⑷
匯編和調試程序設計的基本方法編寫程序要求:
不僅要完成規定的功能任務,而且還要求:
執行速度快、占用內存少、條理清晰、
閱讀方便、便于移植、巧妙而實用。一般應按以下幾個步驟進行:⑴分析問題,確定算法或解題思路⑵畫流程圖⑶編寫源程序第6頁/共31頁
順序程序是指按順序依次執行的程序,也稱為簡單程序或直線程序。順序程序結構雖然比較簡單,但也能完成一定的功能任務,是構成復雜程序的基礎。3.4.2順序程序第7頁/共31頁CONT:MOV A,R0 ;讀低8位
CPL A ;取反
ADD A,#1 ;加1 MOV R2,A ;存低8位
MOV A,R1 ;讀高8位
CPL A ;取反
ADDC A,#80H ;加進位及符號位
MOVR3,A ;存高8位
RET ;【例】已知16位二進制負數存放在R1R0中, 試求其補碼,并將結果存在R3R2中。解:二進制負數的求補方法可歸結為“求反加1”,符號位不變。利用CPL指令實現求反;加1時,則應低8位先加1,高8位再加上低位的進位。注意這里不能用INC指令,因為INC指令不影響標志位。程序如下:第8頁/共31頁
根據不同條件轉向不同的處理程序,這種結構的程序稱為分支程序。
80C51指令系統中的條件轉移指令、比較轉移指令和位轉移指令,可以實現分支程序。3.4.3分支程序第9頁/共31頁①S0單獨按下,
紅燈亮,其余燈滅;②S1單獨按下,
綠燈亮,其余燈滅;③其余情況,黃燈亮。【例】已知電路如圖4-5所示,要求實現:第10頁/共31頁解:程序如下SGNL:ANLP1,#11100011B;紅綠黃燈滅
ORLP1,#00000011B;置P1.0、P1.1輸入態,
P1.5~P1.7狀態不變SL0:JNBP1.0,SL1 ;P1.0=0,S0未按下,轉判S1JNBP1.1,RED ;P1.0=1,S0按下;且P1.1=0,S1未按下,轉紅燈亮YELW:SETBP1.4 ;黃燈亮
CLRP1.2 ;紅燈滅
CLRP1.3 ;綠燈滅
SJMPSL0 ;轉循環SL1:JNBP1.1,YELW ;P1.0=0,S0未按下;P1.1=0,S1未按下,轉黃燈亮GREN:SETBP1.3 ;綠燈亮
CLRP1.2 ;紅燈滅
CLRP1.4 ;黃燈滅
SJMPSL0 ;轉循環RED:SETBP1.2 ;紅燈亮
CLRP1.3 ;綠燈滅
CLRP1.4 ;黃燈滅
SJMPSL0 ;轉循環
第11頁/共31頁課堂練習題:
電路及燈亮滅要求同上述【例】題,其中第3、4兩條指令JNBP1.0和JNBP1.1按下列要求修改,試重新編程。 ⑴ JB P1.0,… JB P1.1,… ⑵ JB P1.0,… JNBP1.1,… ⑶ JNBP1.0,… JB P1.1,…第12頁/共31頁
循環程序一般包括以下幾個部分: ⑴循環初值; ⑵循環體; ⑶循環修改; ⑷循環控制; 以上四部分可以有兩種組織形式,其結構如下圖所示。3.4.4
循環程序第13頁/共31頁第14頁/共31頁【例】設Xi均為單字節數,并按順序存放在以50H為首地址的內RAM存儲單元中,數據長度(個數)N存在R2中,試編程求和S=X1+X2+‥‥+XN,并將S(雙字節)存放在R3R4中,(設S<65536)。解:程序如下:SXN:MOVR2,#N ;置數據長度(循環次數)MOVR3,#00H;和單元(高8位)清0MOVR4,#00H;和單元(低8位)清0MOVR0,#50H;求和數據區首址LOOP:MOVA,R4 ;讀前次低8位和
ADDA,@R0 ;低8位累加
MOVR4,A ;存低8位和
CLRA;
ADDCA,R3;高8位加進位
MOVR3,A;存高8位和
INCR0;指向下一數據循環修改
DJNZR2,LOOP;判N個數據累加完否?循環控制
RET;退出循環退出循環
置循環初值循環體第15頁/共31頁【例】編寫延時10ms子程序,fosc=12MHz。
解:fosc=12MHz,一個機器周期為1s。DY10ms:MOVR6,#20;置外循環次數DLP1:MOVR7,#250;置內循環次數DLP2:DJNZR7,DLP2;2機周×250=500機周
DJNZR6,DLP1;500機周×20=10000機周
RET;說明:MOVRn指令為1個機器周期;DJNZ指令為2個機器周期;RET指令為2個機器周期;{[(2機周×250)+1+2]×20+1+2}×1s/機周=10063s≈10ms【課堂練習題】
按下列要求編寫延時子程序:⑴延時2ms,fosc=6MHz;⑵延時5ms,fosc=12MHz;⑶延時10s,fosc=12MHz;第16頁/共31頁
設80C51單片機的P1口作為輸出口,經驅動電路74LS240(8反相三態緩沖/驅動器)接8只發光二極管,如下圖所示。當輸出位為“1”時,發光二極管點亮,輸出位為“0”時為暗。試編程實現:每個燈閃爍點亮10次,再轉移到下一個燈閃爍點亮10次,循環不止。【例】編制一個循環閃爍燈的程序。第17頁/共31頁FLASH:MOVA,#01H ;置燈亮初值FSH0:MOVR2,#0AH ;置閃爍次數FLOP:MOVP1,A ;點亮
LCALLDY1s ;延時1sMOVP1,#00H ;熄滅
LCALLDY1s ;延時1sDJNZR2,FLOP ;閃爍10次
RL A ;左移一位
SJMPFSH0 ;循環
RET ;解:程序如下:延時子程序可根據延時長短,自行編寫。第18頁/共31頁【課堂練習題】
根據上圖電路,設計燈亮移位程序,要求8只發光二極管每次點亮一個,點亮時間為250ms,順序是從下到上一個一個地循環點亮。設fosc=6MHz。第19頁/共31頁【例】已知P1口數據每隔10ms刷新一次,試求其1s內的平均值,平均值存30H。解:本題需求100個數據的平均值,一般有兩種方法:一種是全部累加后再平均;另一種是邊平均邊累加,現給出兩種方法的程序。第20頁/共31頁AVRG1:MOVR2,#0 ;低8位累加寄存器清0MOVR3,#0 ;高8位累加寄存器清0MOVR4,#100 ;置平均次數ALOP:MOVA,P1 ;讀P1口數據
ADDA,R2 ;低8位累加
MOVR2,A ;回存
CLRA ;高8位與進位累加
ADDCA,R3 ;MOVR3,A ;回存
LCALLDY10ms ;延時10msDJNZR4,ALOP ;判100次累加完否?未完繼續
MOVA,R3 ;100次累加完,求平均值,被除數→A、BMOVB,R2 ;MOVR0,30H ;置商間址
MOVR6,#0 ;置除數100,除數→R6R5MOVR5,#100 ;LCALLSUM ;(A、B)÷(R6、R5)=商@R0,余數A
CJNEA,#50,NEXT ;四舍五入NEXT:JC GRET ;C=1,<50,舍
INC 30H ;C=0,≥50,入GRET:RET ;⑴全部累加后再平均注:SUM子程序可參閱例4-9第21頁/共31頁AVRG2: MOV 30H,#0 ;商累加寄存器清0 MOV 31H,#0 ;余數累加寄存器清0 MOV R4,#100 ;置平均次數ALOP: MOV A,P1 ;讀P1口數據
MOV B,#100 ;置除數(平均次數) DIV AB ;P1口數據除以100 ADD A,30H ;商累加
MOV 30H,A ;回存
MOV A,B ; ADD A,31H ;余數累加
MOV 31H,A ;回存
CLR C ; SUBB A,#100 ; JC GON ;余數累加<100,余數累加寄存器不變
INC 30H ;余數累加≥100,商累加寄存器+1 MOV 31H,A ;減去100后差→余數累加寄存器GON: LCALL DY10ms ;延時10ms DJNZ R4,ALOP ;判100次累加完否?未完繼續
MOV A,31H ;100次累加完畢,余數累加四舍五入
CJNE A,#50,NEXT ;NEXT: JC GRET ;C=1,<50,舍
INC 30H ;C=0,≥50,入GRET: RET;⑵邊平均邊累加第22頁/共31頁【課堂練習題】
已知某單片機系統每隔20ms測一次溫度,8位溫度A/D值存在特殊功能寄存器SBUF中,試分別求其1s和1分內的平均值,分別存30H和31H。第23頁/共31頁
當用PC作基址寄存器時,其表格首地址與PC值間距不能超過256字節,且編程要事先計算好偏移量,比較麻煩。因此,一般情況下用DPTR作基址寄存器。3.4.5查表程序用于查表的指令有兩條:⑴MOVCA,@A+DPTR⑵MOVCA,@A+PC
當用DPTR作基址寄存器時,查表的步驟分三步:①基址值(表格首地址)→DPTR;②變址值(表中要查的項與表格首地址之間的間隔字節數)→A;③執行MOVCA,@A+DPTR。第24頁/共31頁解:編程如下:CHAG:MOVDPTR,#TABD;置共陰字段碼表首址
MOVA,30H;讀顯示數字
MOVCA,@A+DPTR;查表,轉換為顯示字段碼
MOV30H,A;存顯示字段碼
RET;TABD:DB3FH,06H,5BH,4FH,66H;0~4共陰字段碼表
DB6DH,7DH,07H,7FH,6FH;5~9共陰字段碼表【例】在單片機應用系統中,常用LED數碼管顯示數碼,但顯示數字(≤9)與顯示數字編碼并不相同,需要將顯示數字轉換為顯示字段碼,通常是用查表的方法。現要求將30H中的顯示數字轉換為顯示字段碼并存入30H。已知共陰字段碼表首址為TABD。第25頁/共31頁【課堂練習題】
已知8位顯示數字已存入首址為30H的內RAM中,試將其轉換為共陰顯示字段碼,存入首址為40H的內RAM中。第26頁/共31頁解:編程如下:CUBE: MOVDPTR,#TAB;置立方表首址
MOVA,30H ;讀數據
ADDA,30H ;數據×2→A MOV30H,A ;暫存立方表數據序號
MOVCA,@A+DPTR;讀立方數據高8位
XCHA,30H;存立方數據高8位,立方表數據序號→A INCA ;指向立方數據低8位
MOVCA,@A+DPTR;讀立方數據低8位
MOV31H,A ;存立方數據低8位
RET;TAB:DW0,0,0,1,0,8,0,27,0,64;0~40立方表
DW0,125,0,216,…,0FAH,00H;說明:數據×2→A原因是立方表數據為雙字節【例】用查表程序求0~40之間整數的立方。已知該整數存在內RAM30H中,查得立方數存內RAM30H(高8位)31H。已知立方表(雙字節)首地址為TAB。第27頁/共31頁
在單片機系統中設置+、、、四個運算命令鍵,它們的鍵號分別為0、1、2、3。當其中一個鍵按下時,進行相應的運算。操作數由P1口和P3口輸入,運算結果仍由P1口和P3口輸出。具體如下:P1口輸入被加數、被減數、被乘數和被除數,輸出運算結果的低8位或商;P3口輸入加數、減數、乘數和除數,輸出進位(借位)、運算結果的高8位或余數。鍵盤號已存放在30H中。3.4.6散轉程序散轉程序是一種并行多分支程序。【例】單片機四則運算系統。第28頁/共31頁解:程序如下:PRGM:MOVP1,#0FFH;P1口置輸入態
MOVP3,#0FFH;P3口置輸入態
MOVDPTR,#TBJ;置“+-×÷”表首地址
MOVA,30H;讀鍵號
RLA;鍵號2→A ADDA,30H;鍵號3→A JMP@A+DPTR;散轉TBJ:LJMPPRGM0
;轉PRGM0(加法)LJMPPRGM1
;轉PRGM1(減法)LJMPPRGM3
;轉P
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- T/CWAN 0029.5-2021鎳基焊接材料化學分析方法第5部分:磷含量測定正丁醇-三氯甲烷萃取分光光度法
- T/CSWSL 012-2019淡水魚用發酵飼料
- T/CSIQ 8004-2018運動鞋
- T/CSBME 075-2023心電干性電極
- T/CPPC 1032-2021建筑生產資源分供商評價規范
- T/CMMA 4-2017鎂質膠凝材料制品建筑用輕質條板
- T/CIMA 0003-2018電動汽車非車載充電機現場檢測儀
- T/CHTS 10116-2023雄安新區高速公路高性能路基技術指南
- T/CHIA 28.3-2022兒童營養與健康評價指標第3部分:6~17歲
- T/CECS 10298-2023二階反應型水性環氧瀝青防水粘結料
- 雙膝骨性關節炎課件查房
- 國家開放大學-傳感器與測試技術實驗報告(實驗成績)
- 大眾電子助力轉向EPS 雙齒輪電動助力轉向系統
- 《傳媒翻譯》課件
- 腦卒中患者血壓及血糖管理
- 印刷企業安全生產檢查表
- 能源費用托管型合同能源管理項目
- 2021-2022學年重慶市沙坪壩區八年級(下)期末語文試卷(解析版)2021
- 靜配中心基礎知識課件
- 南非介紹課件
- 2023年安全生產月電力安全生產培訓PPT鑄安全文化之魂守安全發展之基PPT課件(帶內容)
評論
0/150
提交評論