• /  51
  • 下載費用: 29.9積分  

《程序設計基礎》PPT課件.ppt

'《程序設計基礎》PPT課件.ppt'
第4章 程序設計基礎4.1 MCS-51單片機匯編語言的偽指令 MCS-51單片機中除了前面講述的指令系統中111條指令外,還有另一類指令,這類指 令稱為偽指令。例如在程序的開頭處有ORG,程序結束處END,等等。這些指令在匯編后 不產生機器碼,只是在程序進行匯編時,向匯編軟件提供程序中的一些特殊信息。比如,程序起止,定義的數據,表格存放位置等。 下面介紹單片機匯編語言程序設計中,常用的偽指令有以下幾種:1. 起始偽指令ORG ORG偽指令的功能是規定這條下面源程序和數據的起始地址格式為:ORG Addrl6.例如:ORG 2000H START: MOV A 即規定標號START所在地址為2000H,也就是第一條指令從2000H開始存放。一般說來,ORG Addrl6,表示了一個源程序或數據塊的起始地址。在一段程序中允許多次使用ORG指令,以規定不同的程序段或數據塊的起始位置,并規定地址從小到大,不允許重疊。 2.結束偽指令END END偽指令用來指示源程序到此全部結束,在匯編時,當匯編程序檢測到源程序中 的該指令時,它就認為源程序已經到此為止。對END后面的指令都不予匯編。因此一個 源程序只能有一個END語句,且放在整個程序的末尾。 3.賦值偽指令EQU 格式:字符名稱EQU常數或匯編符號 EQU偽指令的功能是將一個常數和匯編符號賦給字符名稱在使用中要注意:(1)字 符名稱不等于標號,不用“:”來作分隔符:(2)和MOV傳送指令不一樣,用EQU賦值的常數和匯編符號,其值在整個程序中有效;(3)使用EQU偽指令時必須先賦值,后使用:(4)用EQU賦過值的符號名稱可以用作數據地址,代碼地址,位地址或是一個立即數??梢允?位或16位的。例如:ABC EQU 30HDLY EQU 8034HMOV A, ABCLCALL DLY這里ABC代表了30H的內存單元。DLY定義16位地址,實際是一個子程序的入口地址。4.定義字符指令DB 格式:DB 8位二進制常數表DB偽指令的功能是從ROM的指定的地址單元開始存入DB后面的數據,這些數據 可以是用逗號隔開的字節串或括在單引號中的ASCII字符串。例如:ORG 2000HDB 54HTAB: DB 0B7H 34H 96HSTR: DB ‘6AB’4.定義字符指令DB 經匯編后:(2000H)=54H(2001H)=B7H(2002H)=34H (2003H)=96H (2004H)=36H (2005H)=41H (2006H)=42H 其中36H,41H,42H分別是6、A、B的ASCII編碼值。 5.定義字偽指令DW 格式:DW 16位數據表該指令用于從指定地址開始,在程序儲存器的連續單元中定義雙字節的數據。例如:ORG 1000HTAB:DW 3456H,7BH,10H 匯編后 (1000H)=34H (1001H)=56H(1002H)=00H (1003H)=7BH (1004H)=00H (1005H)=10H 6.定義儲存空間偽指令DS格式:DS 表達式在匯編時,從指令地址開始保留DS之后表達式的值所規定的儲存單元以備后用。例如:ORG 1000HDS 08HDB 30H匯編后,從1000H保留8個單元,然后(1008H)=30H。 注意:以上DB,DW,DS只對程序儲存器起作用,它們不能對數據儲存器進行初始化。 7.位地址符號命令BIT格式:字符名 BIT 位地址 其功能是將BIT之后的位地址值賦給字符名。例如: A1 BIT P1.0 A2 BIT P1.1 SETB A1 ; (P1.0)←1 CLR A2 ; (P1.1)←04.2 匯編語言程序的基本結構匯編語言程序一般有4種結構形式:順序結構,分支結構,循環結構利子程序結構。1.順序結構順序結構是最簡單的程序結構,其特點:程序中的語句由前向后順序執行,直到最后,這種程序中的無分支、循環和子程序調用。2.分支程序 分支程序是通過條件轉移指令實現的,根據程序執行中的條件對程序進行判斷,滿足 條件則進行程序轉移,不滿足條件就順序執行。對于MCS-51單片機,能實現分支轉移的指令有JZ,JNZ,CJNE,DJNZ和位狀態條件判斷指令JC,JNC,JB,JNB等。這些指令條件判斷在指令系統中已經作了說明。分支程序又分為單分支和多分支結構: 2.分支程序(1)單分支程序。單分支程序都是使用前述的條件轉移指令實現的。例4.1:假設內部RAM40H與41H單元中有兩個無符號數,現要求將其大者存入40H中,小者存入41H中。2.分支程序源程序如下: MOV A, 40H CLR C SUBB A 41H JNC WAIT MOV A, 40H XCH A, 41H MOV 40H,A WAIT: SJMP WAIT 2.分支程序例4.2:設變量X存于內部RAM20H單元,函數值Y存于21H單元,試按照下式要求對Y賦值。 X+3 X>0 Y= 20 X=0 X X<0 流程圖如圖4.2所示:2.分支程序源程序如下: MOV A, 20H JZ ZERO ;(A)=0 JB ACC.7, STORE ADD A, #03H SJMP STOREZERO: MOV ASTORE:MOV 21H (2) 多分支程序例4.3在某單片機應用系統中,接有一鍵盤,鍵值(代表哪個鍵被按下)存放在內部 RAM的40H單元內。設計一段程序實現如下功能:如果(40H)=00H,調用子程序SUBl;如果(40H)=01H,調用子程序SUB2:如果(40H)=02H,調用子程序SUB3;如果(40H)=03H,調用子程序SUB4;如果(40H)=04H,調用子程序SUB5。 解:先畫出本例的示意流程圖如圖4.3: (2) 多分支程序程序如下: MOV A,40H MOV DPTR, #TABLE RL A ; (A) ←(A)×2 ADD A, 40H JMP @A+DPTR………TABLE:LCALL SUBl LCALL SUB2 LCALL SUB3 LCALL SUB4 LCALL SUB5上例的這種結構通常又稱為散轉結構。在本例中,由于LCALL指令是3字節指令,為保證JMP指令執行后能正確調用相應子程序,所以JMP指令前要將(40H)乘3并存入A中。 。省略部分。制數轉成ASCII碼 例4.8:將A中的二進制數(0-F)轉化為相應的ASCII碼CNV: ADD A,#90HDA AADC A,#40HDA ARET如果執行ADD A,#90H和DA A兩條指令后產生進位,則說明被轉換二進制數不大于09H,否則小于0AH,后兩條指令在于產生正確的高位ASCII代碼;二進制數大于09H時為4H;二進制數大于0AH時為3H。3.BCD碼十進制轉換成二進制 例4.9:假設在內部RAM中40H單元內存中存有一個BCD十進制數,設計一段程序把這個數轉換成二進制數,并存入41H單元中。用(40H)÷16,商就是二進制數的高4位,余數就是二進制數的低4位,把這高、低4位組合,便是對應的二進制數。程序如下: MOV A,40H MOV B,#16 DIV AB SWAP A ADD A,B MOV 41H,A 4.3.2 算術和邏輯運算類程序設計 1.多字節加/減運算利用ADDC/SUBB指令及Cy標志位,能實現多字節的加/減運算。運算時,從低字 節到高字節順序進行。若參與運算是無符號數,在產生進位(加法)或借位(減法)時,將置位Cy。若參與運算的是有符號補碼,因原始輸入的數據最高位為符號位,故溢出標志OV將指示溢出的情況。例4.10有二個多字節數相減,被減數的最低字節以R0為指針,減數的最低字節以R1為指針,數據長度由R2指示。減法結果送入原被減數所在的各單元。最后檢查是否有溢出。程序如下: SUBSTR:CLR C;清借位 SUBSI: MOV A,@R0;取被減數字節 SUBB A,@R1 ;取減數字節 MOV @R0, A ;存差字節 INC R0;指向下一個字節 INC R1 DJNZ R2, SUBSI ;循環是否完成 JB OV, OVFU ;判溢出 RET ;OV=0,無溢出,返回 OVFU:(溢出處理) ;OV=1溢出 RET 2.查找最大值 例4.11:在內部RAM 30H-37H單元中存有8個無符號數,設計一段程序找出其中最大值存入40H中。 首先取(30H),40H,后繼的字節取到A中將(A)與(40H)比較,將大數存入(40H)中。程序如下: 2.查找最大值 3.延時程序 在單片機應用程序中,經常需要延時來達到控制目的。實現延時有兩種方法:一種采用內部定時/計數器來實現。在以后章節中敘述:另一種是采用軟件延時方法。下面來介紹軟件延時。例4.12:已知單片機的晶振頻率fosc=12MHz,試計算執行下面程序需要多少時間? DLYl: MOV R2,#data ;執行時需1個機器周期 LOOP: NOP ;執行時需1個機器周期 DJNZ R2 LOOP ;執行時需2個機器周期 RET ;執行時需2個機器周期 解:因為晶振為12MHz,所以1個機器周期=1μs,綜合計算執行上段程序的時間為: T=(1+ (1+2) ×data+2) ×1μs 當data1=01H,延時時間最短,T=6μs;data=00H (相當于256),延時時間最長,T=771μs。 在使用中,若需要加長延時時間,可增加NOP例4.13:假設單片機晶振頻率fosc=12MHz, 試計算執行下面程序需要多少時間? 這是一個雙重循環程序,LOOPl是外層循環,循環次數為data1,LOOP2 是內層循環,循環次數為data2。 執行該段程序時間T=(1+(1+2) ×data2+2) ×datal+2) ×1μs當datal和data2都取01H時,延時時間最短,T=9μs;當datal和data2都取00H時,延時時間最長,T=197379μs。 4.3.3 查表程序設計 在單片機應用系統中,查表程序的設計廣泛用于LED顯示的段碼控制,數據計算,代碼轉換等各種場合。 查表,首先在內存中建立一個表格,表格中的數據可以通過DB,DW偽指令來實現,然后,根據自變量X,通過查表指令,在表格中查找與其有某種關系的Y值。查表指令有如下兩條: MOVC A, @A+DPTR MOVC A @A+PC (1) 用DPTR作為基地址的查表方法 ①先將所查的表格首地址存入DPTR中 ②將訪問項的偏移值存入A ③采用MOVC A,@A+DPTR (2) 用PC作為基地址的查表方法 以PC為基礎的形式用于較小局部的表格,它具有不影響數據指針的優點,對于 中斷服務程序或數據指針DPTR不允許改變的場合,它的方法是: ①先將欲查訪表的項數裝入累加器A中; ②再將計算查表指令所在地址(該地址+1)到表首地址的偏移量,再加到累加器A中 ③執行MOVC A @A+PC指令,將查表內容取出送入A中 例4.14:計算在R3存放的十進制形式(用二位BCD碼)的平方值 注意:采用MOVC A,@A+PC指令查表時,表長度不能超過255個字節。TAB表中的存放數的平方是事先計算出來的。例4.15:某控制系統的鍵盤掃描程序,要求根據按下的鍵值(0,1,2,…9)轉換成對應的雙字節命令入口地址要求對應關系如下: 思考題與習題4.1 從內部RAM的30H單元開始存放一組用補碼表示的帶符號數,其數目已存放在20H單元。編寫程序統計出其中正數、0和負數的數目,并將結果分別存入21H、22H、23H單元。4.2 內部RAM中有一數據塊,存放在20H-2FH單元中。要求對這些數據進行奇偶校驗,凡是滿足奇偶校驗的數據(1的個數為偶數)都要轉存到外部RAM8000H開始的數據區中。試編寫有關程序。4.3 編寫程序,把外部RAM1000H-10FFH區域內的數據逐個搬到從2000H單元開始的區域。4.4 從內部RAM的30H單元開始存放著一組無符號數,其數目存放在21H單元中。試編寫程序,求出這組無符號數中的最小的數,并將其存入20H單元。4.5 設計一個循環系統,如圖3-11所示。單片機的P1口并行輸出驅動8個 光二級管。試編寫程序,使這些發光二級管每次只點亮一個,循環左移或右移,一個接一個地亮,循環不止。思考題與習題四 4.6 設計一段程序實現如下功能:把片內RAM30H-3FH單元中的16個數的存放順序顛倒過來。4.7 設計一段程序實現如下功能:找出從片內RAM30H開始的16個單元中最小值所在的單元,并將該單元的內容改成0FFH。4.8 編寫一段程序實現邏輯運算:P1.7=P1.6(P1.5⊕P1.4)。4.9 設計一段程序實現如下功能:統計出從片內RAM30H開始的16個單元中有多少數大于40小于80,并把結果存入40H單元中。  
關 鍵 詞:
程序設計基礎 ppt
 天天文庫所有資源均是用戶自行上傳分享,僅供網友學習交流,未經上傳用戶書面授權,請勿作他用。
關于本文
本文標題:《程序設計基礎》PPT課件.ppt
鏈接地址: http://www.476824.live/p-51579000.html
關于我們 - 網站聲明 - 網站地圖 - 資源地圖 - 友情鏈接 - 網站客服點擊這里,給天天文庫發消息,QQ:1290478887 - 聯系我們

本站為“文檔C2C交易模式”,即用戶上傳的文檔直接賣給(下載)用戶,本站只是中間服務平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有【成交的100%(原創)】。本站是網絡服務平臺方,若您的權利被侵害,侵權客服QQ:1290478887 歡迎舉報。

[email protected] 2017-2027 http://www.476824.live 網站版權所有

粵ICP備19057495號 

收起
展開
球探网即时蓝球比分 山西快乐十分任二直准网 甘肃快3预测推荐今日 吉林11选5中奖说明 七星彩开奖号码 香港三中三高手论坛精选 黑龙江11选5遗漏数据 三分彩官网开奖结果 东京快乐8预测 河南快3和值9点奖金多少 江西多乐彩开