MCS-51單片機(jī)指令系統(tǒng)及編程舉例.ppt
-
資源ID:6380777
資源大?。?span id="wjhkwhf" class="font-tahoma">236KB
全文頁數(shù):46頁
- 資源格式: PPT
下載積分:9.9積分
快捷下載
會員登錄下載
微信登錄下載
微信掃一掃登錄
友情提示
2、PDF文件下載后,可能會被瀏覽器默認(rèn)打開,此種情況可以點(diǎn)擊瀏覽器菜單,保存網(wǎng)頁到桌面,就可以正常下載了。
3、本站不支持迅雷下載,請使用電腦自帶的IE瀏覽器,或者360瀏覽器、谷歌瀏覽器下載即可。
4、本站資源下載后的文檔和圖紙-無水印,預(yù)覽文檔經(jīng)過壓縮,下載后原文更清晰。
5、試題試卷類文檔,如果標(biāo)題沒有明確說明有答案則都視為沒有答案,請知曉。
|
MCS-51單片機(jī)指令系統(tǒng)及編程舉例.ppt
微機(jī)原理及應(yīng)用 對于任何一臺計(jì)算機(jī) 必須有軟件 程序 的支持 才能工作 但是市場上所售的單片機(jī)是裸機(jī) 在使用之前要現(xiàn)對它編程 將程序固化在芯片內(nèi) 才能使用 指令系統(tǒng)是一種CPU所能直接執(zhí)行的所有命令的集合 CPU的主要功能是由它的指令系統(tǒng)來體現(xiàn)的 任何計(jì)算機(jī)語言編寫的任何程序 都必須轉(zhuǎn)換為指令系統(tǒng)中相應(yīng)指令代碼的有序集合 CPU才能執(zhí)行 單片機(jī)的指令系統(tǒng)是單片機(jī)能夠識別并執(zhí)行的所有指令的集合 3 1指令系統(tǒng)簡介每一種CPU都有其獨(dú)立的指令系統(tǒng) MCS 51系列單片機(jī)指令系統(tǒng)共有111條指令 其中有49條單字節(jié)指令 45條雙字節(jié)指令和17條三字節(jié)指令 MCS 51指令系統(tǒng)的功能十分強(qiáng)大 它把體現(xiàn)單片機(jī)的各種功能的寄存器組織在統(tǒng)一的地址空間中 MCS 51指令系統(tǒng)在其存儲空間 時間的利用率及工作效率方面都是較高的 1 指令格式MCS 51指令系統(tǒng)中的每一條指令都有兩級指令格式 CPU可直接識別并執(zhí)行的機(jī)器語言指令 機(jī)器語言 匯編語言指令 簡稱匯編指令 符號說明 見書上 P 34 MCS 51匯編語言指令格式 由以下幾個部分組成 標(biāo)號 操作碼 目的操作數(shù) 源操作數(shù) 注釋 例 LOOP MOVA R1 A R1MOVA R1INCANOP 3 2尋址方式所謂尋址方式就是尋找或獲得操作數(shù)的方式 指令的一個重要組成部分是操作數(shù) 由尋址方式指定參與運(yùn)算的操作數(shù)或操作數(shù)所在單元的地址 MCS 51指令系統(tǒng)的尋址方式有以下7種 1 立即尋址2 直接尋址3 寄存器尋址4 寄存器間接尋址5 變址尋址6 相對尋址7 位尋址 立即尋址 操作數(shù)直接出現(xiàn)在指令中 可以是8位 也可是16位 該方式尋址中的操作數(shù)稱為立即數(shù) 用 表示 例 MOVA 30H A 30H執(zhí)行結(jié)果 A 30H例 MOVDPTR 1000H DPTR 1000H執(zhí)行結(jié)果 DPTR 1000H 注意 只有MOVDPTR date16指令的立即數(shù)為16位 DPTR分為DPH和DPL 在上述例子中 DPH 10H DPL 00H 直接尋址 操作數(shù)的地址直接出現(xiàn)在指令中 這類尋址方式的操作數(shù)只能是存放在內(nèi)部RAM和SFR中 1 SFR例 MOVA P1執(zhí)行結(jié)果 將P1口的內(nèi)容送到A中 若P1的內(nèi)容為78H 執(zhí)行該指令后 A 78H 見 P 23 2 內(nèi)部RAM的低128字節(jié)例 MOVA 76H執(zhí)行結(jié)果 將76H單元的內(nèi)容送到A中 若 76H 3FH 執(zhí)行該指令后 A 3FH 注意 若要表示某個單元的內(nèi)容 將該單元用括號擴(kuò)起來 如 43H 76H R0 等 寄存器尋址 操作數(shù)為寄存器的內(nèi)容 此處的寄存器指的是工作寄存器R0 R7 累加器A 通用寄存器B 數(shù)據(jù)指針寄存器DPTR和位累加器C 即進(jìn)位位C 例 MOVA R0執(zhí)行結(jié)果 將R0的內(nèi)容送入A中 若R0的內(nèi)容 R0 5AH 則A 5AH 寄存器間接尋址 將指定寄存器中的內(nèi)容作為地址 該地址對應(yīng)的內(nèi)容才是操作數(shù) 用 表示 例 MOVA R0執(zhí)行結(jié)果 將R0的內(nèi)容作為地址 再將該地址對應(yīng)的內(nèi)容送入A中 若 R0 46H 46H 2FH 則 A R0 46H 2FH 例 MOV R1 76H執(zhí)行結(jié)果 R1 76H 若 76H 0FH R1 23H 則 23H 0FH 變址尋址 以程序指針PC或數(shù)據(jù)指針DPTR為基址 以累加器A作為變址 兩者內(nèi)容相加 即基址 偏移量 形成16位地址 例 地址目標(biāo)代碼匯編指令21007406MOVA 06H210283MOVCA A PC210300NOP210400NOP 210932DB32H執(zhí)行結(jié)果分析 當(dāng)執(zhí)行到MOVCA A PC時 PC 2103H 基址 A 06H 偏移量 因此 A PC所示的地址 2103H 06H 2109H 2109H 32H 所以A 32H 例 MOVA 01HMOVDPTR TABLEMOVCA A DPTRTABLE DB41HDB42H 執(zhí)行結(jié)果分析 基址的首地址 TABLE偏移量 01H 程序執(zhí)行到MOVCA A DPTR時 A DPTR所指的地址 TABLE 01H 因此 該指令執(zhí)行后A 42H 相對尋址 以PC的當(dāng)前值為基址 與指令中的第二字節(jié)給出的偏移量rel 8位有符號數(shù) 相加 所得之和為程序的轉(zhuǎn)移地址 轉(zhuǎn)移范圍為 127 128字節(jié)之間 例 SJMP08H 雙字節(jié)指令分析 若PC 2000H為該條指令的地址 則轉(zhuǎn)移目標(biāo)地址 2000H 02H 08H 200AH 位尋址 對片內(nèi)RAM的20H 2FH字節(jié)地址中的所有位和部分SFR的位進(jìn)行尋址 區(qū)分指令中是位地址還是存儲器單元地址不太容易 主要是由另一個操作數(shù)來區(qū)分 例 SETBEX0 EX0 1 位尋址MOVC 07H C 07H 位尋址MOVA 20H A 20H 直接尋址MOVC 20H C 20H 位尋址 3 3指令系統(tǒng)指令分類 MCS 51指令系統(tǒng)共有111條指令 分成5大類 1 數(shù)據(jù)傳送類 2 算術(shù)運(yùn)算類 3 邏輯運(yùn)算類 4 控制程序轉(zhuǎn)移類 5 布爾變量操作 位操作類 3 4匯編語言程序設(shè)計(jì)基礎(chǔ) 用匯編語言編寫的源程序 匯編程序 目標(biāo)程序 匯編語言是一種采用助記符表示的機(jī)器語言 即用助記符號來代表指令的操作碼和操作數(shù) 用標(biāo)號或符號代表地址 常數(shù)或變量 而助記符一般都是英文單詞的縮寫 因此使用方便 這種用助記符編寫的程序稱為源程序 匯編語言源程序必須翻譯成機(jī)器語言的目標(biāo)代碼 亦稱目標(biāo)程序 計(jì)算機(jī)才能執(zhí)行 其翻譯工作可由匯編程序自動完成 匯編程序的功能就是將用助記符號編寫的源程序翻譯成用機(jī)器語言表示的目標(biāo)程序 匯編語言程序的組成 匯編語言源程序是由匯編語句組成的 一般情況下 匯編語言語句可分為 指令性語句 即匯編指令 和指示性語句 即偽指令 指令性語句 可簡稱指令 是進(jìn)行匯編語言程序設(shè)計(jì)的可執(zhí)行語句 每條指令都產(chǎn)生相應(yīng)的機(jī)器語言的目標(biāo)代碼 源程序的主要功能是由指令性語句去完成的 指示性語句 偽指令 又稱匯編控制指令 它是控制匯編 翻譯 過程的一些命令 程序員通過偽指令通知匯編程序在進(jìn)行匯編時的一些指示 因此 偽指令不產(chǎn)生機(jī)器語言的目標(biāo)代碼 是進(jìn)行匯編語言程序設(shè)計(jì)的不可執(zhí)行語句 偽指令 1 ORG 匯編起始地址 例 ORG3000HSTART MOVA R1 2 END 結(jié)束匯編 3 EQU 等值或賦值 格式 標(biāo)識符EQU數(shù)或匯編符號功能 把數(shù)或匯編符號賦給標(biāo)識符 且只能賦值1次 例 INT 1EQU001BHORGINT 1AJMPLP1 注意 EQU與前面的標(biāo)號之間不要使用冒號 只用一個空格進(jìn)行分隔 4 DB 定義字節(jié) 格式 標(biāo)號 DBX1 X2 X3 Xn功能 將項(xiàng)或項(xiàng)表中的8位字節(jié)數(shù)據(jù)依次存入標(biāo)號所示的存儲單元中例 DELAY DB50H 將50H存入存儲單 元DELAY中 例 ORG2000HTAB DB12H 0AFH 00111001B 9 結(jié)果 2000H 12H 2001H 0AFH 2002H 00111001B 2003H 9 字符 自學(xué)5 6 7 5 DW 定義字 格式 標(biāo)號 DWX1 X2 X3 Xn功能 將項(xiàng)或項(xiàng)表中的16位字?jǐn)?shù)據(jù)依次存入標(biāo)號所示的存儲單元中 6 DS 定義存儲單元 格式 標(biāo)號 DS數(shù)字功能 從標(biāo)號所指示的單元開始 根據(jù)數(shù)字的值保留一定數(shù)量的字節(jié)存儲單元 留給以后存儲數(shù)據(jù)用 例 SPACE DS10表示從SPACE開始保留10個存儲單元 下條指令將從SPACE 10處開始匯編 7 BIT 地址符號命令 格式 標(biāo)識符BIT位地址功能 將位地址賦予標(biāo)識符 例 A1BITP1 0MOVC A1 匯編語言程序設(shè)計(jì)實(shí)例 1 簡單程序 順序程序 例 將片內(nèi)RAM的30H和31H的內(nèi)容相加 結(jié)果存入32H ORG2000HMOVA 30H A 30H ADDA 31H A A 31H MOV32H A 結(jié)果存入32HEND 例 拼字 將外部數(shù)據(jù)存儲器3000H和3001H的低4位取出拼成一個字 送到3002H中 ORG2000HMOVDPTR 3000H DPTR 外部存儲器地址3000HMOVXA DPTR A 3000H ANLA 0FH 屏蔽高4位 即取低4位 SWAPA 交換高低4位MOVR1 A 暫存于R1中INCDPTR 指向下一單元3001HMOVXA DPTR A 3000H ANLA 0FH 屏蔽高4位 即取低4位 ORLA R1 拼成一個字INCDPTR 指向下一單元3002HMOVX DPTR A 送結(jié)果到3002H單元SJMP END 2 分支程序 在解決實(shí)際問題時 常常需要根據(jù)不同的條件去執(zhí)行不同的處理結(jié)果 這樣 程序就產(chǎn)生了分支 這種結(jié)構(gòu)的程序 稱為分支程序 分支程序常用的指令 例 把片外RAM的首地址為10H開始存放的數(shù)據(jù)塊 傳送給片內(nèi)RAM首地址為20H開始的數(shù)據(jù)塊中去 如果數(shù)據(jù)為 0 就停止傳送 ORG2000HMOVR0 10HMOVR1 20HLOOP MOVXA R0HERE JZHEREMOV R1 AINCR0INCR1SJMPLOOPEND 例 求符號函數(shù) 設(shè)X Y分別為30H 31H 1X 0Y 0X 0 1X 0 MOVA 30HJZLP0JBACC 7 LP1MOVA 01HSJMPLP0LP1 MOVA 0FFHLP0 MOV31H ASJMP END 分析 X是有符號數(shù) 判斷符號位是0還是1可利用JB或JNB指令 判斷X是否等于0則直接可以使用累加器A的判0指令 例3 24 內(nèi)部RAM30H開頭的20個連續(xù)單元中 存放有20個數(shù) 統(tǒng)計(jì)等于8的單元個數(shù) 結(jié)果放在R2中 分析 取一個數(shù)與8比較 相等R2加1 不相等跳過 并作20次重復(fù)即可 流程如右圖 程序如下 ORG1000HSTART MOVR0 30HMOVR7 20MOVR2 0LOOP CJNE R0 08H NEXTINCR2NEXT INCR0DJNZR7 LOOPSJMP 3 循環(huán)程序 在程序執(zhí)行過程中 當(dāng)需要多次反復(fù)執(zhí)行某段程序時 可采用循環(huán)結(jié)構(gòu) 循環(huán)開始 循環(huán)結(jié)束 循環(huán)控制 設(shè)置循環(huán)初值 循環(huán)體 循環(huán)修改 完成 未完 完成 循環(huán)開始 循環(huán)結(jié)束 循環(huán)控制 設(shè)置循環(huán)初值 循環(huán)體 循環(huán)修改 未完 循環(huán)程序的結(jié)構(gòu)循環(huán)程序包括以下四個部分 置循環(huán)初值循環(huán)體循環(huán)控制變量修改循環(huán)終止控制常用于循環(huán)控制的指令有 DJNZ CJNE JC JNC等控制類指令 例 有20個數(shù)存放于內(nèi)部RAM從41H開始的連續(xù)單元中 試求其和 并將結(jié)果存放于40H單元 和數(shù)是一個8位二進(jìn)制數(shù) 不考慮進(jìn)位問題 ORG2000HMOVA 00H 累加器清0MOVR7 14H R7為循環(huán)計(jì)數(shù)器 R7 20MOVR0 41H 建立內(nèi)存數(shù)據(jù)指針 首地址為41HLOOP ADDA R0 累加INCR0 指向下一數(shù)據(jù)單元DJNZR7 LOOP R7 1 0 表示累加未結(jié)束 繼續(xù)累加 否則 往下執(zhí)行 MOV40H A 結(jié)果存放于40H單元END 例 在內(nèi)部RAM的42H開始的連續(xù)單元中存放一組8位無符號數(shù) 該數(shù)組長度為n n 3DH 存放于41H中 找出該組數(shù)中最大的數(shù) 并將其存入內(nèi)部RAM的40H單元 ORG2000HMOVR0 42H 第1個數(shù)送40H單元MOV40H R0DEC41H 設(shè)置計(jì)數(shù)器初值 循環(huán)次數(shù) LOOP INCR0 取下一個數(shù) AMOVA R0CJNEA 40H COMP A 40H 0 轉(zhuǎn)移COMP JCNEXT CY 1時表示不夠減 轉(zhuǎn)移MOV40H A 較大數(shù)存40HNEXT DJNZ41H LOOP 控制循環(huán)次數(shù)SJMP END 例 設(shè)計(jì)延時0 1s的子程序 設(shè)晶振頻率為12MHz 分析 晶振頻率為12MHz 所以 機(jī)器周期為1us執(zhí)行時間 機(jī)器周期 DELAY MOVR7 C3H1LOOP1 MOVR6 0FFH1LOOP2 DJNZR6 LOOP22DJNZR7 LOOP12RET2執(zhí)行時間 內(nèi)循環(huán)共255次 2 255 510us 外循環(huán)1次1 2 255 2 513us 共外循環(huán)有195次 有執(zhí)行時間 1 195 513 2 us 100038us 0 1s 4 查表程序用于查表的指令有兩條 MOVCA A PCMOVCA A DPTR 當(dāng)使用DPTR作為基址寄存器時查表比較簡單 查表的步驟分三步 1 基址 表格首地址 送DPTR數(shù)據(jù)指針 2 變址值 在表中的位置是第幾項(xiàng) 送累加器A 3 執(zhí)行查表指令MOVCA A DPTR 進(jìn)行讀數(shù) 查表結(jié)果送回累加器A 例 利用查表方法計(jì)算內(nèi)部RAM的40H單元中的一位BCD數(shù) 0 1 2 3 9 的平方值 并將結(jié)果存入41H單元 MOVA 40HMOVDPTR TABMOVCA A DPTRMOV41H ASJMP TAB DB0 1 4 9 16 25DB36 49 64 81 5 應(yīng)用控制流程設(shè)計(jì)控制流程設(shè)計(jì)的基本方法在單片機(jī)的控制系統(tǒng)中 為了實(shí)現(xiàn)系統(tǒng)的自動控制 必須將控制現(xiàn)場的信息輸入到單片機(jī) 經(jīng)過計(jì)算機(jī)的處理以后以被控對象能夠接受的形式輸出到執(zhí)行機(jī)構(gòu) 實(shí)現(xiàn)對現(xiàn)場的控制 例 電機(jī)的簡單起停控制1 分析 輸入信號 啟動按鈕SB1 停止按鈕SB2輸出信號 繼電器KA假定 按下按鈕 相應(yīng)的接口信號為低電平 P1 1 0 時 若 程序使P1 3 1 即KA 1 則 電機(jī)啟動 2 按照上述的控制思路 我們可以方便的畫出流程圖 ORG1000HSTR MOVP1 00000110BWT1 JBP1 1 WT1 啟動 SETBP1 3 電機(jī)啟WT2 JBP1 2 WT2 停止 CLRP1 3 電機(jī)停SJMPWT1END 第三章結(jié)束