單片機(jī)原理及應(yīng)用_第1頁
單片機(jī)原理及應(yīng)用_第2頁
單片機(jī)原理及應(yīng)用_第3頁
單片機(jī)原理及應(yīng)用_第4頁
單片機(jī)原理及應(yīng)用_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論