版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
2026/2/31單片機(jī)原理及應(yīng)用/sundae_meng2026/2/32總結(jié)第一章
51系列第二章
I/O口,CPU,存儲器第三章尋址方式,各類指令的格式、功能字節(jié)數(shù)、周期數(shù)第四章子程序,查表程序,分支程序,循環(huán)程序2026/2/33第五章
1、中斷TCON、SCON、IE、IP
各中斷源的入口地址、請求標(biāo)志、撤消中斷服務(wù)程序
2、定時(shí)器/計(jì)數(shù)器
TCON、TMODT0、T1的定時(shí)、計(jì)數(shù)初值,啟動,溢出
4種工作方式2026/2/34第六章
1、SCON、PCON
發(fā)送、接收的SBUF,指令,完成標(biāo)志
4種工作方式的幀數(shù)據(jù)、波特率2、存儲器的擴(kuò)展:地址3、I/O口擴(kuò)展:81554、LED顯示,鍵盤5、A/D、D/A2026/2/35指令應(yīng)用實(shí)例
【例1】
在程序存儲器中有一平方表,從2000H單元開始存放,如圖所示,試通過查表指令查找出6的平方。解:采用DPTR作為基址寄存器的查表程序比較簡單,查表范圍大,也容易理解。只要預(yù)先使用一條16位數(shù)據(jù)傳送指令,把表的首地址2000H送入DPTR,然后進(jìn)行查表就可以了。相應(yīng)的程序如下:
MOVA,#6 ;設(shè)定備查的表項(xiàng)
MOVDPTR,#2000H;設(shè)置DPTR為表始址
MOVCA,@A+DPTR
;將A的平方值查表后送A
如果需要查找其他數(shù)的平方,只需要將累加器A的內(nèi)容(變址)改一下即可。2000H02001H12002H42003H92004H162005H252006H362007H492008H642009H812026/2/36指令應(yīng)用實(shí)例
【例2】
試編程計(jì)算5678H~1234H的值,結(jié)果保存在R6、R5中。解:減數(shù)和被減數(shù)都是16位二進(jìn)制數(shù),計(jì)算時(shí)要先進(jìn)行低8位的減法,然后再進(jìn)行高8位的減法,在進(jìn)行低8位減法時(shí),不需要考慮借位,所以要在減法指令之前將借位標(biāo)志清0。程序如下:
MOVA,#78H ;被減數(shù)低8位送累加器
CLR C ;清進(jìn)位標(biāo)志位CY
SUBBA,#34H ;減去減數(shù)
MOVR5,A ;保存低8位
MOVA,#56H ;被減數(shù)高8位送累加器
SUBBA,#12H ;減去減數(shù)
MOVR6,A ;保存高8位2026/2/37指令應(yīng)用實(shí)例
【例3】
拆字程序:在內(nèi)部RAM40H單元保存有以壓縮BCD碼表示的2位十進(jìn)制數(shù),編程將它們拆開,分別保存在內(nèi)部RAM的41H、42H單元。解:程序如下:
MOVA,40H ;壓縮BCD碼送累加器
ANLA,#0FH ;高4位清0,保留低4位
MOV41H,A ;保存低4位BCD碼
MOVA,40H ;取數(shù)據(jù)
MOVA,#0F0H ;低4位清0,保留高4位
SWAPA ;高低位交換
MOV42H,A ;保存高4位BCD碼2026/2/38指令應(yīng)用實(shí)例
【例4】
設(shè)(SP)=30H,符號地址PROG1指向程序存儲器的5678H單元,當(dāng)前PC值為0123H。從0123H處執(zhí)行指令“LCALLPROG1”,分析執(zhí)行后PC、SP的值和相關(guān)存儲器的內(nèi)容。解:執(zhí)行過程為:
(PC)+3=0123H+3=0126H。將PC內(nèi)容壓入堆棧:向(SP)+1=31H中壓入26H,向(SP)+1=32H中壓入01H,(SP)=33H。將PROG1=5678H送入PC,即(PC)=5678H。程序轉(zhuǎn)向以5678H為首地址的子程序執(zhí)行。最終執(zhí)行結(jié)果是:(PC)=5678H、(SP)=33H、(31H)=26H、(32H)=01H。2026/2/39指令應(yīng)用實(shí)例
【例5】
比較內(nèi)部RAM中40H、41H兩個(gè)單元中的數(shù)據(jù)大小,將大的數(shù)送至42H單元。解:程序如下:
MOVA,40H ;取第一個(gè)數(shù)
CJNEA,41H,NEQU ;比較,不相等轉(zhuǎn)移至NEQU處
MOV42H,40H;相等,(40H)→42H
SJMPTOOFF ;完成,轉(zhuǎn)移至結(jié)尾退出
NEQU:JCLESS ;若CY=1,說明(40H)<(41H)轉(zhuǎn)移
MOV42H,40H ;(40H)>(41H),(40H)→40H
SJMPTOOFF ;完成,轉(zhuǎn)移至結(jié)尾退出
LESS:MOV42H,41H ;(40H)<(41H),(41H)→40HTOOFF:RET2026/2/310程序設(shè)計(jì)實(shí)例【例1】
P1口做輸出口,控制8盞燈(P1口輸出低電平時(shí)燈被點(diǎn)亮),編程使燈按以下規(guī)律顯示:同一時(shí)間只有兩盞燈點(diǎn)亮,從P1.7、P1.6控制的燈開始,每盞燈閃爍5次,再移向下兩盞燈,同樣閃爍5次,循環(huán)往復(fù),延時(shí)時(shí)間1s。晶振頻率6MHz。
解:主程序是雙重循環(huán)程序,循環(huán)移位是外循環(huán),燈閃爍5次是內(nèi)循環(huán),內(nèi)循環(huán)程序不能與外循環(huán)程序交叉。延時(shí)1S采用三重循環(huán)程序。晶振頻率為6MHz時(shí),機(jī)器周期為2
s,延時(shí)程序的延時(shí)時(shí)間計(jì)算方法如下:
{1+[1+(1+(1+1+2)×125+2)×200+2]×5+2}×2
s=1006036
s=1.006036s
2026/2/3114.3.2循環(huán)程序設(shè)計(jì)實(shí)例地址機(jī)器碼程序注釋ORG0000H0000H020030LJMPMAINORG0030H0030H745FMAIN:MOVA,#5FH;燈點(diǎn)亮初始狀態(tài)0032H7905LP1:MOVR1,#5;循環(huán)閃爍次數(shù)0034HF590LP2:MOVP1,A0036H120100LCALLDELAY;延時(shí)1s0039H7590FFMOVP1,#0FFH003CH120100LCALLDELAY;延時(shí)1s003FHD9F3DJNZR1,LP2;循環(huán)閃爍次數(shù)不夠5次,繼續(xù)0041H03RRA;右移一位0042H03RRA;再右移一位0043H80EDSJMPLP1主程序:2026/2/312地址機(jī)器碼程序注釋ORG0100H0100H7B05DELAY:MOVR3,#5;延時(shí)1s的循環(huán)次數(shù)0102H7CC8DEL3:MOVR4,#200;延時(shí)200ms的循環(huán)次數(shù)0104H7D7DDEL2:MOVR5,#125;延時(shí)1ms的循環(huán)次數(shù)0106H00DEL1:NOP0107H00NOP0108HDDFEDJNZR5,DEL1010AHDCF9DJNZR4,DEL2010CHDBF5DJNZR3,DEL3010EH22RET;子程序返回END延時(shí)子程序:2026/2/313中斷的應(yīng)用實(shí)例
【例1】P1口做輸出口,控制八只燈(P1口輸出低電平時(shí)燈被點(diǎn)亮),利用手控單脈沖信號作為外部中斷信號,控制八只燈按一定的規(guī)律循環(huán)點(diǎn)亮。解:手控單脈沖信號作為外部中斷信號由INT0(P3.2)管腳輸入,設(shè)置中斷允許寄存器IE中的EA、EX0位為1;只有一個(gè)中斷源可不設(shè)置優(yōu)先級別;中斷觸發(fā)方式設(shè)為邊沿觸發(fā),控制位IT0應(yīng)設(shè)置為1。2026/2/314ORG0000H;程序入口0000H020050LJMPMAIN;轉(zhuǎn)向主程序ORG0003H;外部中斷0的入口地址0003H020100LJMPINT;轉(zhuǎn)向中斷服務(wù)程序ORG0050H0050HD2AFMAIN:SETBEA0052HD2A8SETBEX00054HD288SETBIT0;中斷觸發(fā)方式為邊沿觸發(fā)0056H74FEMOVA,#0FEH0058HF590MOVP1,A005AH80FESJMP$ORG0100H0100H23INT:RLA;中斷服務(wù)程序0101HF590MOVP1,A0103H32RETIEND參考程序:2026/2/315T及應(yīng)用實(shí)例【例2】
在P1.0輸出周期為1ms(頻率1kHz)的方波,采用定時(shí)器1方式0設(shè)計(jì)程序,晶振頻率為12MHz。解:根據(jù)題意,只要使P1.0每隔500
s取反一次即可得到周期1ms的方波,因而T1的定時(shí)時(shí)間為500
s。用定時(shí)器1方式0時(shí),定時(shí)器/計(jì)數(shù)器方式寄存器TMOD高4位中的M1M0應(yīng)取00;可設(shè)定為軟件啟動定時(shí)器,故GATE取0;因?yàn)橛枚〞r(shí)功能,C/T取0;定時(shí)器方式寄存器TMOD低4位為無關(guān)位,一般都取0,所以TMOD應(yīng)為00H。晶振頻率為12MHz,T機(jī)=12/fosc=12/(12
106)=1
s
定時(shí)初值X=213-T/T機(jī)=213-500/1=8192-500=7692=1E0CH=1111000001100B
因TL1的高3位未用,對計(jì)算出的定時(shí)初值X要進(jìn)行修正,即在低5位前插入3個(gè)0,修正后的定時(shí)初值
X=1111000000001100B=F00CH2026/2/3166.3.2方式0及應(yīng)用實(shí)例地址機(jī)器碼程序注釋ORG0000H0000H020050LJMPMAINORG0050H0050HD290MAIN:SETBP1.0;置P1.0初始狀態(tài)0052H758900MOVTMOD,#00H;置定時(shí)器1為工作方式00055H758DF1MOVTH1,#0F0H;置500
s定時(shí)初值0058H758B0CMOVTL1,#0CH005BHD28ESETBTR1;啟動定時(shí)器1005DH108F02LP1:JBCTF1,LP2;查詢計(jì)數(shù)溢出0060H80FBSJMPLP1;未到500
s繼續(xù)計(jì)數(shù)0062H758DF1LP2:MOVTH1,#0F0H;重新置500
s定時(shí)初值0065H758B0CMOVTL1,#0CH0068HB290CPLP1.0;輸出取反006AH80E4SJMPLP1;重復(fù)循環(huán)END參考程序:2026/2/317串行口應(yīng)用舉例【例3】設(shè)甲乙機(jī)以串行方式1進(jìn)行數(shù)據(jù)傳送,fosc=11.0592MHz,波特率為1200b/s。甲機(jī)發(fā)送的16個(gè)數(shù)據(jù)存在內(nèi)RAM40H~4FH單元中,乙機(jī)接收后存在內(nèi)RAM50H為首地址的區(qū)域中。
T1初值=256-×=232=E8H3212×1200解: 串行方式1波特率取決于T1溢出率(設(shè)SMOD=0), 計(jì)算T1定時(shí)初值: 11059200202026/2/318甲機(jī)發(fā)送子程序:
MOVTMOD,#20H ;置T1定時(shí)器工作方式2 MOVTL1,#0E8H ;置T1計(jì)數(shù)初值
MOVTH1,#0E8H ;置T1計(jì)數(shù)重裝值
CLRET1 ;禁止T1中斷
SETBTR1 ;T1啟動
MOVSCON,#40H ;置串行方式1,禁止接收
MOVPCON,#00H ;置SMOD=0(SMOD不能位操作)
CLRES ;禁止串行中斷
MOVR0,#40H ;置發(fā)送數(shù)據(jù)區(qū)首地址
MOVR2,#16 ;置發(fā)送數(shù)據(jù)長度
MOV A,@R0 ;讀一個(gè)數(shù)據(jù)
MOV SBUF,A ;發(fā)送
JNB TI,$ ;等待一幀數(shù)據(jù)發(fā)送完畢
CLR TI ;清發(fā)送中斷標(biāo)志
INC R0 ;指向下一字節(jié)單元
DJNZ R2,TRSA ;判16個(gè)數(shù)據(jù)發(fā)完否?未完繼續(xù)
RET ;TXDA:
TRSA:2026/2/319
MOVTMOD,#20H ;置T1定時(shí)器工作方式2 MOVTL1,#0E8H ;置T1計(jì)數(shù)初值
MOVTH1,#0E8H ;置T1計(jì)數(shù)重裝值
CLRET1 ;禁止T1中斷
SETBTR1 ;T1啟動
MOVSCON,#40H ;置串行方式1,禁止接收
MOVPCON,#00H ;置SMOD=0(SMOD不能位操作) CLRES ;禁止串行中斷
MOVR0,#50H ;置接收數(shù)據(jù)區(qū)首地址
MOVR2,#16 ;置接收數(shù)據(jù)長度
SETBREN
;啟動接收
JNB RI,$ ;等待一幀數(shù)據(jù)接收完畢
CLR RI ;清接收中斷標(biāo)志
MOV A,SBUF ;讀接收數(shù)據(jù)
MOV @R0,A ;存接收數(shù)據(jù)
INC R0 ;指向下一數(shù)據(jù)存儲單元
DJNZ R2,RDSB ;判16個(gè)數(shù)據(jù)接收完否?未完繼續(xù)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 銅仁2025年貴州銅仁市中醫(yī)醫(yī)院引進(jìn)衛(wèi)生專業(yè)技術(shù)人才筆試歷年參考題庫附帶答案詳解
- 邯鄲河北邯鄲館陶縣司法局招錄司法協(xié)理員8人筆試歷年參考題庫附帶答案詳解
- 萍鄉(xiāng)2025年江西萍鄉(xiāng)市人民醫(yī)院專業(yè)技術(shù)崗招聘16人筆試歷年參考題庫附帶答案詳解
- 滁州2025年安徽滁州天長市司法局招聘司法協(xié)理員30人筆試歷年參考題庫附帶答案詳解
- ???025年海南海口市旅游和文化廣電體育局招聘2人筆試歷年參考題庫附帶答案詳解
- 河南2025年河南大學(xué)招聘10人筆試歷年參考題庫附帶答案詳解
- 杭州浙江杭州市標(biāo)準(zhǔn)化研究院招聘編外聘用人員筆試歷年參考題庫附帶答案詳解
- 揚(yáng)州2025年江蘇揚(yáng)州市廣陵區(qū)衛(wèi)生健康系統(tǒng)事業(yè)單位招聘專業(yè)技術(shù)人員38人筆試歷年參考題庫附帶答案詳解
- 宿遷2025年江蘇宿遷泗陽縣部分縣直機(jī)關(guān)事業(yè)單位轉(zhuǎn)任(選調(diào))46人筆試歷年參考題庫附帶答案詳解
- 天津2025年天津醫(yī)科大學(xué)朱憲彝紀(jì)念醫(yī)院人事代理制招聘筆試歷年參考題庫附帶答案詳解
- 動物醫(yī)院年度總結(jié)匯報(bào)
- 安全生產(chǎn)安全法律法規(guī)
- 2025年秋浙教版(2024)初中數(shù)學(xué)八年級(上冊)教學(xué)計(jì)劃及進(jìn)度表(2025-2026學(xué)年第一學(xué)期)
- 《醫(yī)院感染暴發(fā)控制標(biāo)準(zhǔn)》新舊版對比課件
- 設(shè)備日常維護(hù)保養(yǎng)培訓(xùn)課件
- 2025年華潤守正評標(biāo)專家考試題庫及答案
- 高血壓急癥的快速評估與護(hù)理
- JJG 264-2025 谷物容重器檢定規(guī)程
- 養(yǎng)老院設(shè)施審批流程
- 【9英一?!渴徍?024-2025學(xué)年中考第一次模擬考試英語試卷
- 公司股東入股合作協(xié)議書
評論
0/150
提交評論