單片機原理及應用試題

發(fā)布時間:2024-07-01
《單片機原理及應用》習題參考答案
1. 為什么計算機要采用二進制數(shù)?學習十六進制數(shù)的目的是什么?
在計算機中,由于所采用的電子邏輯器件僅能存儲和識別兩種狀態(tài)的特點,計算機內(nèi)部一切信息存儲、處理和傳送均采用二進制數(shù)的形式??梢哉f,二進制數(shù)是計算機硬件能直接識別并進行處理的惟一形式。十六進制數(shù)可以簡化表示二進制數(shù)。
2.什么是總線?總線主要有哪幾部分組成?各部分的作用是什么?
總線是連接計算機各部件之間的一組公共的信號線。一般情況下,可分為系統(tǒng)總線和外總線。
系統(tǒng)總線應包括:
地址總線(ab)
控制總線(cb)
數(shù)據(jù)總線(db)
地址總線(ab):cpu根據(jù)指令的功能需要訪問某一存儲器單元或外部設備時,其地址信息由地址總線輸出,然后經(jīng)地址譯碼單元處理。地址總線為16位時,可尋址范圍為216=64k,地址總線的位數(shù)決定了所尋址存儲器容量或外設數(shù)量的范圍。在任一時刻,地址總線上的地址信息是惟一對應某一存儲單元或外部設備。
控制總線(cb):由cpu產(chǎn)生的控制信號是通過控制總線向存儲器或外部設備發(fā)出控制命令的,以使在傳送信息時協(xié)調(diào)一致的工作。cpu還可以接收由外部設備發(fā)來的中斷請求信號和狀態(tài)信號,所以控制總線可以是輸入、輸出或雙向的。
數(shù)據(jù)總線(db):cpu是通過數(shù)據(jù)總線與存儲單元或外部設備交換數(shù)據(jù)信息的,故數(shù)據(jù)總線應為雙向總線。在cpu進行讀操作時,存儲單元或外設的數(shù)據(jù)信息通過數(shù)據(jù)總線傳送給cpu;在cpu進行寫操作時,cpu把數(shù)據(jù)通過數(shù)據(jù)總線傳送給存儲單元或外設
3.什么是接口電路? cpu與接口電路連接一般應具有哪些信號線?外部設備與接口電路連接一般應具有哪些信號線?
cpu通過接口電路與外部輸入、輸出設備交換信息,
一般情況下,外部設備種類、數(shù)量較多,而且各種參量(如運行速度、數(shù)據(jù)格式及物理量)也不盡相同。cpu為了實現(xiàn)選取目標外部設備并與其交換信息,必須借助接口電路。一般情況下,接口電路通過地址總線、控制總線和數(shù)據(jù)總線與cpu連接;通過數(shù)據(jù)線(d)、控制線(c)和狀態(tài)線(s)與外部設備連接。
4. 存儲器的作用是什么?只讀存儲器和隨機存儲器有什么不同?
存儲器具有記憶功能,用來存放數(shù)據(jù)和程序。計算機中的存儲器主要有隨機存儲器(ram)和只讀存儲器(rom)兩種。隨機存儲器一般用來存放程序運行過程中的中間數(shù)據(jù),計算機掉電時數(shù)據(jù)不再保存。只讀存儲器一般用來存放程序,計算機掉電時信息不會丟失。
5.某存儲器的存儲容量為64kb,它表示多少個存儲單元?
64×1024
6. 簡述微型計算機硬件系統(tǒng)組成。
一臺計算機的基本結構由運算器、控制器、存儲器、輸入設備和輸出設備五部分組成。
7. 什么是單片機?單片機與微機相比有何特點?
單片機(single-chip-microcomputer)又稱單片微控制器,其基本結構是將微型計算機的基本功能部件:中央處理機(cpu)、存儲器、輸入接口、輸出接口、定時器/計數(shù)器、中斷系統(tǒng)等全部集成在一個半導體芯片上,因此,單片機其體積小、功耗低、價格低廉,且具有邏輯判斷、定時計數(shù)、程序控制等多種功能。
單片機結構上的設計,在硬件、指令系統(tǒng)及i/o能力等方面都有獨到之處,具有較強而有效的控制功能。雖然單片機只是一個芯片,但無論從組成還是從其邏輯功能上來看,都具有微機系統(tǒng)的含義。另一方面,單片機畢竟是一個芯片,只有外加所需的輸入、輸出設備,才可以構成實用的單片機應用系統(tǒng)。
8. 單片機主要應用于哪些領域?
(1) 智能儀器。智能儀器是含有微處理器的測量儀器。單片機廣泛應用于各種儀器儀表,使儀器儀表智能化取得了令人矚目的進展。
(2) 工業(yè)控制。單片機廣泛應用于各種工業(yè)控制系統(tǒng)中,如數(shù)控機床、溫度控制、可編程順序控制等。
(3) 家用電器。目前各種家用電器普遍采用單片機取代傳統(tǒng)的控制電路,如洗衣機、電冰箱、空調(diào)、彩電、微波爐、電風扇及高級電子玩具等。由于配上了單片機,使其功能增強而身價倍增,深受用戶的歡迎。
(4) 機電一體化。機電一體化是機械工業(yè)發(fā)展的方向,機電一體化產(chǎn)品是指集機械技術、微電子技術、計算機技術于一體,具有智能化特征的機電產(chǎn)品。
單片機除以上各方面應用之外,還廣泛應用于辦公自動化領域(如復印機)、汽車電路、通信系統(tǒng)(如手機)、計算機外圍設備等,成為計算機發(fā)展和應用的一個重要方向。
9. 什么是嵌入式系統(tǒng)?嵌入式系統(tǒng)有哪些重要特征?
所謂嵌入式系統(tǒng),是“以應用為中心、以計算機技術為基礎、軟件硬件可裁減、功能、可靠性、成本、體積、功耗嚴格要求的專用計算機系統(tǒng)”。即以嵌入式應用為目的計算機系統(tǒng)。
嵌入式系統(tǒng)的重要特征:
⑴、系統(tǒng)內(nèi)核小
⑵、專用性強。
⑶、系統(tǒng)精簡
嵌入式系統(tǒng)一般沒有系統(tǒng)軟件和應用軟件的明顯區(qū)分,其功能設計及實現(xiàn)上不要求過于復雜,這樣一方面利于控制系統(tǒng)成本,同時也利于實現(xiàn)系統(tǒng)安全。
⑷、高實時性
第二章
1. 舉例說明mcs-51有哪些典型產(chǎn)品,它們有何區(qū)別?
mcs-51系列單片機可分為兩大系列:51子系列和52子系列。
51子系列單片機的典型產(chǎn)品有8051、8751、8031、80c51、80c31等。它們的結構基本相同,其主要差別反映在片內(nèi)存儲器的配置上有所不同
2. 8051單片機內(nèi)部包含哪些主要功能部件?各功能部件的主要作用是什么?
8051單片機內(nèi)部由cpu、4kb的rom、128b的ram、4個8位的i/o并行端口、一個串行口、兩個16位定時/計數(shù)器及中斷系統(tǒng)等組成。
3. 程序狀態(tài)字寄存器psw各位的定義是什么?
psw是一個8位寄存器,用于寄存當前指令執(zhí)行后的某些狀態(tài),即反映指令執(zhí)行結果的一些特征信息。
cy(psw.7):即psw的d7位,進位/借位標志。
ac(psw.6):即psw的d6位,輔助進位標志。
f0(psw.5)及f1(pse.1):即psw的d5位、d1位,用戶標志位。
rs1及rs0(psw.4及psw.3):即psw的d4位、d3位,寄存器組選擇控制位。
ov(psw.2):即psw的d2位,溢出標志。
4. mcs-51存儲器結構的主要特點是什么?程序存儲器和數(shù)據(jù)存儲器各有何不同?
mcs-51單片機的存儲器結構與一般微機存儲器的配置方法不同,一般微機把程序和數(shù)據(jù)共存同一存儲空間,各存儲單元對應惟一的地址。而mcs-51的存儲器把程序和數(shù)據(jù)的存儲空間嚴格區(qū)分開。
數(shù)據(jù)存儲器用于存放程序運算的中間結果、狀態(tài)標志位等。
程序存儲器用于存放已編制好的程序及程序中用到的常數(shù)。
5. mcs-51單片機內(nèi)部ram可分為幾個區(qū)?各區(qū)的主要作用是什么?
內(nèi)部數(shù)據(jù)存儲器分為高、低128b兩大部分。
低128b為ram區(qū),地址空間為00h~7fh,可分為:寄存器區(qū)、位尋址區(qū)、堆棧及數(shù)據(jù)存儲區(qū)。存放程序運算的中間結果、狀態(tài)標志位等。
高128b為特殊功能寄存器(sfr)區(qū),地址空間為80h~ffh,其中僅有21個字節(jié)單元是有定義的。
6. mcs-51單片機的p0~p3四個i/o端口在結構上有何異同?使用時應注意哪些事項?
p0口是一個8位漏極開路型雙向i/o端口。
p1口是一個內(nèi)部帶上拉電阻的8位準雙向i/o端口。
p2口也是一個內(nèi)部帶上拉電阻的8位準雙向i/o端口
p3口是一個內(nèi)部帶上拉電阻的8位多功能雙向i/o端口。
在使用時應注意以下方面:
① p0~p3都是準雙向i/o口,即cpu在讀取數(shù)據(jù)時,必須先向相應端口的鎖存器寫入“1”。各端口名稱與鎖存器名稱在編程時相同,均可用p0~p3表示。當系統(tǒng)復位時,p0~p3端口鎖存器全為“1”,故可直接對其進行讀取數(shù)據(jù)。
② p0口每一輸出位可驅(qū)動8個ls型ttl負載,p0口可作通用輸入、輸出端口使用,此時,若要驅(qū)動nmos或其他拉電流負載時,需外接上拉電阻,才能使該位高電平輸出有效。
在單片機進行外部存儲器擴展時,p0口必須作為地址/數(shù)據(jù)復用線使用,此時,不必外接上拉電阻,p0也不能作通用i/o口使用。
③ p1、p2、p3口輸出均接有內(nèi)部上拉電阻,輸入端無需外接上拉電阻,每一位輸出可以驅(qū)動4個ls型ttl電路。
④ p0、p2口除可以作通用i/o端口、以實現(xiàn)與外部進行數(shù)據(jù)交換外,更主要的是,當cpu訪問外部存儲器時,cpu將自動地把外部存儲器的地址線信號(16位)送p0、p2口,作為地址總線(p0口輸出低8位地址,p2口輸出高8位地址),向外部存儲器輸出16位存儲單元地址。在控制信號作用下,該地址低8位被鎖存后,p0口自動切換為數(shù)據(jù)總線,這時經(jīng)p0口可向外部存儲器進行讀、寫數(shù)據(jù)操作。此時,p2口不再作通用i/o端口,p0口為地址/數(shù)據(jù)復用口。
7. 在什么情況下,p3口作為第二功能使用?
p3口的第二功能是作為控制端口使用的。由于單片機沒有專設的控制信號引腳,單片機在進行外部存儲器和i/o端口擴展時所需要的控制信號必須由p3口提供,p3口第二功能相當于pc機中cpu的控制線引腳。
8. 為什么說單片機具有較強的位處理能力?
對于許多控制系統(tǒng),開關量控制是控制系統(tǒng)的主要對象之一。作為傳統(tǒng)的cpu,對于簡單的個別開關量進行控制卻顯得不那么方便,而讓mcs-51值得驕傲的正是它有效地解決了單一位的控制。
mcs-51片內(nèi)cpu還是一個性能優(yōu)異的位處理器,也就是說mcs-51實際上又是一個完整而獨立的1位單片機(也稱布爾處理機)。該布爾處理機除了有自己的cpu、位寄存器、位累加器(即進位標志cy)、i/o口和位尋址空間外,還有專供位操作的指令系統(tǒng),可以直接尋址對位存儲單元和sfr的某一位進行操作。mcs-51單片機對于位操作(布爾處理)有置位、復位、取反、測試轉(zhuǎn)移、傳送、邏輯與和邏輯或運算等功能。所以,單片機具有較強的位處理能力。
9. 指出8051可進行位尋址的存儲空間。
00~7fh(即20h.0~2fh.7)及sfr地址能被8整除的寄存器中的各位。
10. 位地址90h和字節(jié)地址90h及p1.0有何異同?如何區(qū)別?
位地址90h表示p1.0位
字節(jié)地址90h表示p1口
11. 在訪問外部rom或ram時,p0和p2口各用來傳送什么信號?p0口為什么要采用片外地址鎖存器?
p0口傳送地址低八位后可復用數(shù)據(jù)線,所以,p0口要采用片外地址鎖存器。p2口傳送地址高八位。
12. 什么是時鐘周期?什么是機器周期?什么是指令周期?當振蕩頻率為12mhz時,一個機器周期為多少微秒?
時鐘周期:也稱振蕩周期,即振蕩器的振蕩頻率fosc的倒數(shù),是時序中最小的時間單位。機器周期:執(zhí)行一條指令的過程可分為若干個階段,每一階段完成一規(guī)定的操作,完成一個規(guī)定操作所需要的時間稱為一個機器周期,一個機器周期包含12個時鐘周期。
當振蕩頻率為12mhz時,一個機器周期為12/(12×1000000)秒=1微秒
指令周期:定義為執(zhí)行一條指令所用的時間。
13. mcs-51單片機有幾種復位方法?復位后,cpu從程序存儲器的哪一個單元開始執(zhí)行程序?
mcs-51的復位電路包括上電復位電路和按鍵(外部)復位電路
0000h
14. 8051系統(tǒng)掉電時如何保存內(nèi)部ram中的數(shù)據(jù)?
單片機在運行過程中,如果發(fā)生掉電,片內(nèi)ram和sfr中的信息將會丟失。為防止信息丟失,可以把一組備用電源加到rst/vpd端,當vcc上的電壓低于vpd上的電壓時,備用電源通過vpd端,以低功耗保持內(nèi)部ram和sfr中的數(shù)據(jù)。
15. 8051單片機引腳ale的作用是什么?當8051不外接ram和rom時,ale上輸出的脈沖頻率是多少?其作用是什么?
地址鎖存使能輸出ale:當單片機訪問外部存儲器時,外部存儲器的16位地址信號由p0口輸出低8位,p2口輸出高8位,ale可用作低8位地址鎖存控制信號;當不用作外部存儲器地址鎖存控制信號時,該引腳仍以時鐘振蕩頻率的1/6固定地輸出正脈沖,可以驅(qū)動8個ls型ttl負載。
第三章
1.mcs-51有哪幾種尋址方式?舉例說明它們是怎樣尋址的?
mcs-51指令系統(tǒng)的尋址方式有以下7種:
立即尋址方式:操作數(shù)直接出現(xiàn)在指令中。
直接尋址方式中:操作數(shù)的單元地址直接出現(xiàn)在指令中。
寄存器尋址方式中:寄存器中的內(nèi)容就是操作數(shù)。
寄存器間接尋址方式中,指定寄存器中的內(nèi)容是操作數(shù)的地址,該地址對應存儲單元的內(nèi)容才是操作數(shù)。
變址尋址方式是以程序指針pc或數(shù)據(jù)指針dptr為基址寄存器,以累加器a作為變址寄存器,兩者內(nèi)容相加(即基地址+偏移量)形成16位的操作數(shù)地址,
相對尋址是以程序計數(shù)器pc的當前值作為基地址,與指令中的第二字節(jié)給出的相對偏移量rel進行相加,所得和為程序的轉(zhuǎn)移地址。
位地址:內(nèi)部ram地址空間的可進行位尋址的128位和sfr地址空間的可位尋址的11個8位寄存器的88位。位尋址給出的是直接地址。
2.位尋址和字節(jié)尋址如何區(qū)分?在使用時有何不同?
由尋址方式可以看出,不同的尋址方式所尋址的存儲空間是不同的。正確地使用尋址方式不僅取決于尋址方式的形式,而且取決于尋址方式所對應的存儲空間。字節(jié)尋址必須是對8位存儲單元,位尋址的存儲空間只能是片內(nèi)ram的20h~2fh字節(jié)地址中的所有位(位地址為00h~7fh)和部分sfr的位,決不能是該范圍之外的任何單元的任何位。
3.要訪問專用寄存器和片外數(shù)據(jù)寄存器,應采用什么尋址方式?舉例說明。
訪問專用寄存器:可采用直接尋址或寄存器尋址。
訪問片外數(shù)據(jù)寄存器:寄存器間接尋址
4.什么是堆棧?其主要作用是什么?
堆棧是后進先出的數(shù)據(jù)存儲區(qū)
一般用于中斷處理過程中,若需要保護現(xiàn)場數(shù)據(jù)(如內(nèi)部ram單元的內(nèi)容),可使用入棧指令,將數(shù)據(jù)壓入堆棧,中斷處理過程執(zhí)行完后,再使用出棧指令恢復現(xiàn)場數(shù)據(jù)。
5.編程將內(nèi)部ram的20h單元的內(nèi)容傳送給外部ram的2000h單元。
mov a,20h
mov dptr,#2000h
movx @dptr,a
6.編程將內(nèi)部數(shù)據(jù)存儲器20h~30h單元內(nèi)容清零。
mov r0,#20h
mov a,#0
mov r3,#17
lop :mov @r0,a
inc r0
djnz r3,lop
7.編程查找內(nèi)部ram的32h~41h單元中是否有0aah這個數(shù)據(jù),若有這一數(shù)據(jù),則將50h單元置為0ffh,否則清50h單元為0。
mov r3, #10h
mov a,#0aah
mov r0,#31h
lop :inc r0
subb a,@r0
jz lop1
djnz r3,lop
mov 50h,#0h
ajmp lop3
lop1:mov 50h,#0ffh
lop3: ajmp 1op3
8.查找20h~4fh單元中出現(xiàn)00h的次數(shù),并將查找結果存入50h單元。
mov r3,#30h
mov r0,#20h
mov a,#0
lop: mov a,@r0
jz lop1
lop3: inc r0
djnz r3,lop
ajmp lop2
lop1: inc 50h
ajmp lop3
lop2:ajmp lop2
9.已知a=83h,r0=17h,(17h)=34h,寫出下列程序段執(zhí)行完后的a中的內(nèi)容。
anl a, #17h
orl 17h, a
xrl a, @r0
cpl a
(a)=11001011b=0cbh
10.已知單片機的fosc=12mhz,分別設計延時0.1s、1s、1min的子程序。
設晶振頻率為12mhz,一個機器周期為1?s,
延時1ms的子程序: 執(zhí)行時間(機器周期)
delay: mov r7, #0ffh 1
loop: nop 1
nop 1
djnz r7, loop 2
ret 2
該程序段的總的執(zhí)行時間為:
(1+4×255+2)ms=1023?s≈1ms
延時時間為100ms的子程序:
delay: mov r5,#64h 對延時1ms的子程序循環(huán)100次。
lop1: mov r7, #0ffh
loop: nop
nop
djnz r7, loop
djnz r5,lop1
ret
延時時間為1s的子程序:
delay1: mov r3, #0ah 對延時100ms的子程序循環(huán)10次
delay: mov r5,#64h 。
lop1: mov r7, #0ffh
loop: nop
nop
djnz r7, loop
djnz r5,lop1
djnz r3, delay
ret
延時時間為60s的子程序: 對延時1s的子程序循環(huán)60次
11.mcs-51匯編語言中有哪些常用的偽指令?各起什么作用?
bit(地址符號命令)
end(結束匯編)
equ(等值)
db(定義字節(jié))
dw(定義字)
ds(定義存儲單元)
org(匯編起始地址)
12.比較下列各題中的兩條指令有什么異同?
① mov a, r1; mov 0e0h, r1 指令功能相同,尋址方式表示不同
② mov a, p0; mov a, 80h 指令功能相同,尋址方式表示不同
③ loop:sjmp loop; sjmp $ 指令功能相同
13.下列程序段匯編后,從3000h開始各有關存儲單元的內(nèi)容是什么?
org 3000h
tab1: equ 1234h
tab2: equ 5678h
db 65,13,abcabc
dw tab1,tab2,9abch
3000h: 65
3001h: 13
3002h: ‘a(chǎn)’
3003h: ‘b’
3004h: ‘c’
3005h: ‘a(chǎn)’
3006h:’b’
3007h: ‘c’
3008h: 34h
3009h: 12h
300ah: 78h
300bh: 56h
300ch: 0bch
300dh: 9ah
14.為了提高匯編語言程序的效率,在編寫時應注意哪些問題?
(1) 把要解決的問題化成一個個具有一定獨立性的功能模塊,各模塊盡量采用子程序完成其功能。
(2) 力求少用無條件轉(zhuǎn)移指令,盡量采用循環(huán)結構。
(3) 對主要的程序段要下功夫精心設計,這樣會收到事半功倍的效果。
(4) 能用8位數(shù)據(jù)解決問題的就不要使用16位數(shù)據(jù)。
(5) 累加器是信息傳遞的樞紐,在調(diào)用子程序時應通過累加器傳送子程序的參數(shù),通過累加器向主程序傳送返回參數(shù)。所以,在子程序中一般不把累加器推入堆棧。若需保護累加器的內(nèi)容時,應先把累加器的內(nèi)容存入其他寄存器單元,然后再調(diào)用子程序。
(6)為了保證程序運行的安全可靠,應考慮使用軟件抗干擾技術,如數(shù)字濾波技術、指令冗余技術、軟件陷井技術,用匯編語言程序?qū)崿F(xiàn)這些技術,不需要增加硬件成本,可靠性高,穩(wěn)定性好,方便靈活。
15.試編寫8字節(jié)外部數(shù)據(jù)存儲器到內(nèi)部數(shù)據(jù)存儲器的數(shù)據(jù)塊傳送程序,外部數(shù)據(jù)存儲器地址范圍為40h~47h,內(nèi)部數(shù)據(jù)存儲器地址范圍為30h~37h。
mov r3,#8
mov r0,#40h
mov r1,#30h
lop1:movx a,@r0
mov @r1,a
inc r0
inc r1
djnz r3,lop1
16.試編寫8字節(jié)外部程序存儲器到內(nèi)部數(shù)據(jù)ram的傳送程序,外部程序存儲器地址為2040h~2047h,內(nèi)部ram地址為30h~37h。
參看15題答案(提示:外部程序存儲器地址為16位地址:2040h~2047h,間接尋址采用dptr)
17.試編程使內(nèi)部ram的20h~4fh單元的數(shù)據(jù)塊按降序排列。
參看23題答案(提示:本題對20h~4fh單元(48個)數(shù)據(jù)降序排列)。
18.內(nèi)部ram的20h單元開始有一個數(shù)據(jù)塊,以0dh為結束標志,試統(tǒng)計該數(shù)據(jù)塊長度,將該數(shù)據(jù)塊傳送到外部數(shù)據(jù)存儲器7e01h開始的單元,并將長度存入7e00h單元。
mov r0, #20h
mov dptr, #7e01h
lop: mov a, @r0
mov 60h,a
subb a, #0dh
jz lop1
mov a,60h
movx @dptr, a
inc r3
inc r0
inc dptr
ajmp lop
lop1: mov dptr, #7e00h
mov a,r3
movx @dptr, a
end
19.試編寫一個用查表法查0~9字形7段碼(假設表的首地址為table)的子程序,調(diào)用子程序前,待查表的數(shù)據(jù)存放在累加器a中,子程序返回后,查表的結果也存放在累加器a中。
sqr1: mov dptr,#table
movc a, @a+dptr
ret
table: db 0c0h,0f9h,0a4h,0b0h,99h ; 0~9的字形顯示段碼(led共陽極。
db 92h,82h,f8h,80h,90h
20.內(nèi)部ram的data開始的區(qū)域中存放著10個單字節(jié)十進制數(shù),求其累加和,并將結果存入sum和sum+1單元。
mov r0,#data
mov r3,#0ah
mov a,#0
lop: add a,@r0
mov r4,a
addc a, #0
mov r5,a
inc r0
djnz r3, lop
mov sum,r4
mov sum+1,r5
end
21.內(nèi)部ram的data1和data2單元開始存放著兩個等長的數(shù)據(jù)塊,數(shù)據(jù)塊的長度在len單元中。請編程檢查這兩個數(shù)據(jù)塊是否相等,若相等,將0ffh寫入result單元,否則將0寫入result單元。
mov r0,#data1
mov r3, len
lop: mov a, @r0
cjnz a,data2, lop1
inc r0
inc data2
djnz r3,lop
mov a,#0ffh
mov result,a
ajmp lop2
lop1:mov a,#0
mov result, a
lop2: ajmp lop2
end
22.有一輸入設備,其端口地址為20h,要求在1秒鐘時間內(nèi)連續(xù)采樣10次讀取該端口數(shù)據(jù),求其算術平均值,結果存放在內(nèi)部ram區(qū)20h單元。
mov r0,#20h
mov r2,#0
mov a,#0
mov r4,#0
lop : mov r3,#0ah
in : acall delay
movx a, @r0
mov r2 , a
mov a, r4
add a, r2
mov r4, a
djnz r3, in
mov b,#0ah
div ab
mov 20h,a
ajmp lop
delay: mov r5,#64h 延時時間為0.1s的子程序:
lop1: mov r7, #0ffh
loop: nop
nop
djnz r7, loop
djnz r5,lop1
ret
end
23.編寫子程序,將內(nèi)部ram區(qū)以30h為起始地址的連續(xù)10個存儲單元中的數(shù)據(jù),按照從小到大的順序排序,排序結果仍存放在原數(shù)據(jù)區(qū)。
采用冒泡法排序:
冒泡排序法的基本算法是:n個數(shù)排序,從數(shù)據(jù)存放單元的一端(如起始單元)開始,將相鄰二個數(shù)依次進行比較,如果相鄰兩個數(shù)的大小次序和排序要求一致,則不改變它們的存放次序,否則相互交換兩數(shù)位置,使其符合排序要求,這樣逐次比較,直至將最?。ń敌颍┗蜃畲螅ㄉ颍┑臄?shù)移至最后。然后,再將n-1個數(shù)繼續(xù)比較,重復上面操作,直至比較完畢。
可采用雙重循環(huán)實現(xiàn)冒泡法排序,外循環(huán)控制進行比較的次數(shù),內(nèi)循環(huán)實現(xiàn)依次比較交換數(shù)據(jù)。
程序如下:
org 0000h
block equ 30h ;設block為30h單元
mov r7, #9h ;設置外循環(huán)計數(shù)器
next: mov a, r7
mov 80h, a
mov r6, a ;設置外循環(huán)計數(shù)器
mov r0, #30h ;設置數(shù)據(jù)指針
comp: mov a, @r0
mov r2, a
inc r0
clr c
subb a, @r0
jc less
mov a, r2
xch a, @r0
dec r0
mov @r0, a
inc r0
less: djnz r6,comp ;(r6)-1不等于0,轉(zhuǎn)comp繼續(xù)內(nèi)循環(huán)
mov r0,#30h
dec 80h
mov r6, 80h
djnz r7, comp
ret
end
第四章
1.mcs-51系列單片機能提供幾個中斷源、幾個中斷優(yōu)先級?各個中斷源的優(yōu)先級怎樣確定?在同一優(yōu)先級中,各個中斷源的優(yōu)先順序怎樣確定?
答:mcs-51系列單片機能提供5個中斷源,2個中斷優(yōu)先級。各個中斷源的優(yōu)先級是由特殊功能寄存器ip來確定,ip中和各個中斷源對應位為1時,此中斷源為高優(yōu)先級,否則為低優(yōu)先級。在同一優(yōu)先級中,各個中斷源的優(yōu)先順序是由自然優(yōu)先級來確定的。
2.簡述mcs-51系列單片機的中斷響應過程。
答:mcs-51系列單片機的中斷響應過程是按照以下順序執(zhí)行的:開中斷-----中斷請求------中斷判斷-------中斷響應-------中斷返回。
3.mcs-51系列單片機的外部中斷有哪兩種觸發(fā)方式?如何設置?對外部中斷源的中斷請求信號有何要求?
答:mcs-51系列單片機的外部中斷有電平觸發(fā)和邊沿觸發(fā)兩種方式。是由特殊功能寄存器tcon中it0,it1的狀態(tài)確定的,如:it0為1時外部中斷0為邊沿觸發(fā)方式,當int0外部引腳出現(xiàn)下降沿時向cpu提出中斷請求, 否則為電平觸發(fā)方式,當int0外部引腳出現(xiàn)低電平時向cpu提出中斷請求。
4.mcs-51單片機中斷響應時間是否固定?為什么?
答:mcs-51單片機中斷響應時間不固定,因為當中斷源向cpu提出中斷請求時,cpu正在執(zhí)行的指令的指令周期是不一樣的。
5.mcs-51單片機如果擴展6個中斷源,可采用哪些方法?如何確定它們的優(yōu)先級?
答:一般可采取中斷加查詢方式,軟件先查詢到的為高優(yōu)先級,最后查詢到的為低優(yōu)先級。
6.當正在執(zhí)行某一中斷源的中斷服務程序時,如果有新的中斷請求出現(xiàn),問在什么情況下可響應新的中斷請求?在什么情況下不能響應新的中斷請求?
答:當正在執(zhí)行某一中斷源的中斷服務程序時,如果有新的中斷請求出現(xiàn),當新中斷源中斷級別比正在執(zhí)行中斷源的中斷級別高時可響應新的中斷請求,否則不能響應新的中斷請求。
7.8051單片機有5個中斷源,但只能設置兩個中斷優(yōu)先級,因此,在中斷優(yōu)先級安排上受到一定的限制。問以下幾種中斷優(yōu)先級順序的安排(級別由高到低)是否可能?如可能,則應如何設置中斷源的中斷級別?否則,請敘述不可能的理由。
(1)定時器0,定時器1,外中斷0,外中斷1,串行口中斷。
可能。其中:定時器0,定時器1為高優(yōu)先級。
(2)串行口中斷,外中斷0,定時器0,外中斷1,定時器1。
可能。其中:串行口中斷為高優(yōu)先級。
(3)外中斷0,定時器1,外中斷1,定時器0,串行口中斷。
不可能。
(4)外中斷0,外中斷1,串行口中斷,定時器0,定時器1。
可能。其中:外中斷0,外中斷1,串行口中斷為高優(yōu)先級。
(5)串行口中斷,定時器0,外中斷0,外中斷1,定時器1。
不可能。
(6)外中斷0,外中斷1,定時器0,串行口中斷,定時器1。
不可能。
(7)外中斷0,定時器1,定時器0,外中斷1,串行口中斷。
可能。其中:外中斷0,定時器1為高優(yōu)先級。
第5章習題答案
1.8051定時器/計數(shù)器有哪幾種工作模式?各有什么特點?
答:8051定時器/計數(shù)器有0,1,2,3四種工作模式。模式0為13位1定時器/計數(shù)器,模式1為16位1定時器/計數(shù)器,模式2為自動賦初值的8位定時器/計數(shù)器,模式3可以增加一個8位定時器(t1沒有模式3)。
2.8051定時器作定時和計數(shù)時,其計數(shù)脈沖分別由誰提供?
答:8051定時器作定時器時,輸入的記數(shù)脈沖是由晶體振蕩器的輸出經(jīng)12分頻后得到的,所以定時器可看作是對單片機機器周期的計數(shù)器。8051定時器作計數(shù)器時,則對外部事件進行計數(shù)。
3.8051定時器的門控信號gate為1時,定時器如何啟動?
答:8051定時器的門控信號gate為1時,只有 (或 )引腳為高電平且tr0(或tr1)置1時,相應的t0或t1才能選通工作。
4.定時器/計數(shù)器0已預置為156,且選定用于模式2的計數(shù)方式,現(xiàn)在t0引腳上輸入周期為1ms的脈沖,問:
(1) 此時定時器/計數(shù)器0的實際用途是什么?
(2) 在什么情況下,定時器/計數(shù)器0溢出?
答:(1)此時定時器/計數(shù)器0的實際用途是0。1s脈沖信號發(fā)生器。
(2)當t0每記數(shù)100次后定時器/計數(shù)器0溢出。
5.設fosc=12mhz,定時器0的初始化程序和中斷服務程序如下:
main: mov th0, #9dh
mov tl0, #0d0h
mov tmod, #01h
setb tr0

中斷服務程序:
mov th0, #9dh
mov tl0, #0d0h

reti
問:(1) 該定時器工作于什么方式?
(2) 相應的定時時間或計數(shù)值是多少?
答:(1)該定時器以模式1工作于定時方式。
(2)相應的定時時間為25。136ms.
6.8051單片機的fosc=6mhz,如果要求定時時間分別位0.1ms和5ms,當t0工作在模式0、模式1和模式2時,分別求出定時器的初值。
答:(1)定時時間分別位0.1ms時:模式0初值為8142、模式1初值為65486,模式2初值206。
(2)定時時間分別位5ms時:模式0初值為5692、模式1初值為63036,模式2此時定時時間不夠。
7.以定時器1進行外部事件計數(shù),每計數(shù)1000個脈沖后,定時器1轉(zhuǎn)為定時工作方式。定時10ms后,又轉(zhuǎn)為計數(shù)方式,如此循環(huán)不止。設fosc=6mhz,試用模式1編程。
解:先確定t1作為計數(shù)器時初值為:64536(0fc68h)
t1作為定時器時初值為:60536(0ec78h)
程序:setb tr1
loop: mov tmod,#50h
mov th1,#0fch
mov tl1,#68h
aa : jbc tf1,aa
mov tmod,#10h
mov th1,#0e0h
mov tl1,#78h
bb: jbc tf1,bb
sjmp loop
end
8.已知8051單片機的fosc=6mhz,試利用t0和p1.0輸出矩形波。矩形波高電平寬100μs,低電平寬300μs。
解:先確定 t0作為定時器工作于模式2時初值為:高電平為50,低電平為150。
采用中斷方式編程。
org 0000h
ajmp main
org 001bh
ajmp tim0
org 0030h
main: mov sp,#30h ; 設置棧底
mov tmod,#02h
mov tl0,#50
mov ie,#82h
setb p1.0
setb tr0
sjmp $
org 0100h
tim0: jnb p1.0, aa
clr p1.0
mov tl0,#150
reti
aa: setb p1.0
mov tl0,#50
reti
end
9.設fosc=12mhz,試編寫一段程序,功能為:對定時器t0初始化,使之工作在模式2,產(chǎn)生200μs定時,并用查詢t0溢出標志的方法,控制p1.1輸出周期為2ms的方波。
解:先確定 t0作為定時器時初值為:56
程序: mov tmod,#02h
mov tl0,#56
mov th0,#56
mov r7,#5 ; 設置循環(huán)次數(shù)
setb tr0
aa: jbc tf0,aa
djnz r7,aa
cpl p1.1
mov r7,#5
sjmp aa
end
10.已知8051單片機系統(tǒng)時鐘頻率為6mhz,利用其定時器測量某正脈沖寬度時,采用哪種工作模式可以獲得最大的量程?能夠測量的最大脈寬是多少?
答:首先設置tmod中gate為1,以定時方式工作在模式1,外部正脈沖從外部中斷引腳引入,可獲得最大的量程。
能夠測量的最大脈寬為:131ms.
第6章習題答案
1.異步通信和同步通信的主要區(qū)別是什么?mcs-51串行口有沒有同步通信功能?
答案:
異步通信因為每幀數(shù)據(jù)都有起始位和停止位,所以傳送數(shù)據(jù)的速率受到限制。但異步通信不需要傳送同步脈沖,字符幀的長度不受限制,對硬件要求較低,因而在數(shù)據(jù)傳送量不很大。同步通信一次可以連續(xù)傳送幾個數(shù)據(jù),每個數(shù)據(jù)不需起始位和停止位,數(shù)據(jù)之間不留間隙,因而數(shù)據(jù)傳輸速率高于異步通信。但同步通信要求用準確的時鐘來實現(xiàn)發(fā)送端與接收端之間的嚴格同步。
mcs-51串行口有同步通信功能。
2.解釋下列概念:
(1) 并行通信、串行通信。
(2) 波特率。
(3) 單工、半雙工、全雙工。
(4) 奇偶校驗。
答案:
(1)并行通信:數(shù)據(jù)的各位同時進行傳送。其特點是傳送速度快、效率高,數(shù)據(jù)有多少位,就需要有多少根傳輸線。當數(shù)據(jù)位數(shù)較多和傳送距離較遠時,就會導致通信線路成本提高, 因此它適合于短距離傳輸。
串行通信:數(shù)據(jù)一位一位地按順序進行傳送。其特點是只需一對傳輸線就可實現(xiàn)通信,當傳輸?shù)臄?shù)據(jù)較多、距離較遠時,它可以顯著減少傳輸線,降低通信成本,但是串行傳送的速度慢。
(2)波特率:每秒鐘傳送的二進制數(shù)碼的位數(shù)稱為波特率(也稱比特數(shù)),單位是bps(bit per second),即位/秒。
(3)單工:只允許數(shù)據(jù)向一個方向傳送,即一方只能發(fā)送,另一方只能接收。
半雙工:允許數(shù)據(jù)雙向傳送,但由于只有一根傳輸線,在同一時刻只能一方發(fā)送,另一方接收。
全雙工:允許數(shù)據(jù)同時雙向傳送,由于有兩根傳輸線,在a站將數(shù)據(jù)發(fā)送到b站的同時,也允許b站將數(shù)據(jù)發(fā)送到a站。
(4)奇偶校驗:為保證通信質(zhì)量,需要對傳送的數(shù)據(jù)進行校驗。對于異步通信,常用的校驗方法是奇偶校驗法。
采用奇偶校驗法,發(fā)送時在每個字符(或字節(jié))之后附加一位校驗位,這個校驗位可以是“0”或“1”,以便使校驗位和所發(fā)送的字符(或字節(jié))中“1”的個數(shù)為奇數(shù)——稱為奇校驗,或為偶數(shù)——稱為偶校驗。接收時,檢查所接收的字符(或字節(jié))連同奇偶校驗位中“1”的個數(shù)是否符合規(guī)定。若不符合,就證明傳送數(shù)據(jù)受到干擾發(fā)生了變化,cpu可進行相應處理。
3.mcs-51串行口控制寄存器scon中sm2、tb8、rb8有何作用?主要在哪幾種方式下使用?
答案:
sm2:多機通信控制位,主要在方式1、2、3下使用;
tb8:存放發(fā)送數(shù)據(jù)的第9位,主要在方式2、3下使用;
rb8:存放接收數(shù)據(jù)的第9位或停止位,主要在方式1、2、3下使用。
4.試分析比較mcs-51串行口在四種工作方式下發(fā)送和接收數(shù)據(jù)的基本條件和波特率的產(chǎn)生方法。
答案:
發(fā)送數(shù)據(jù)的基本條件:
方式0、1、2、3:cpu執(zhí)行一條將數(shù)據(jù)寫入發(fā)送緩沖器sbuf的指令;
接收數(shù)據(jù)的基本條件:
方式0:用軟件使ren=1(同時ri=0);方式1:用軟件使ren=1,一幀數(shù)據(jù)接收完畢后,必須同時滿足以下兩個條件:①ri=0;②sm2=0或接收到的停止位為1,這次接收才真正有效,將8位數(shù)據(jù)送入sbuf,停止位送rb8,置位ri。否則,這次接收到的數(shù)據(jù)將因不能裝入sbuf而丟失。方式2、3:軟件使ren=1,同時滿足以下兩個條件:① ri=0;② sm2=0或接收到的第9位數(shù)據(jù)為1(sm2=1),則這次接收有效,8位數(shù)據(jù)裝入sbuf,第9位數(shù)據(jù)裝入rb8,并由硬件置位ri。否則,接收的這一幀數(shù)據(jù)將丟失。
波特率的產(chǎn)生方法:
在方式0下,串行口的波特率是固定的,即波特率=fosc /12;在方式1、3下,串行口波特率由定時器t1的溢出率和smod值同時決定。相應公式為:波特率=2smod×t1溢出率/32;在方式2下,串行口的波特率可由pcon中的smod位控制:若使smod=0,則所選波特率為fosc/64;若使smod=1,則波特率為fosc/32。即
2smod
64
×fosc
波特率=
5.為何t1用作串行口波特率發(fā)生器時常用模式2?若fosc=6mhz,試求出t1在模式2下可能產(chǎn)生的波特率的變化范圍。
答案:定時器t1作為波特率發(fā)生器可工作于模式0、模式1和模式2。其中模式2在t1溢出后可自動裝入時間常數(shù),避免了重裝參數(shù),因而在實際應用中除非波特率很低,一般都采用模式2。
若fosc=6mhz,t1在模式2下可能產(chǎn)生的波特率的變化范圍為:61.04 bps ~ 15625 bps。
6.簡述多機通信原理。
答案:當主機選中與其通信的從機后,只有該從機能夠與主機通信,其他從機不能與主機進行數(shù)據(jù)交換, 而只能準備接收主機發(fā)來的地址幀。上述要求是通過scon寄存器中的sm2和tb8來實現(xiàn)的。當主機發(fā)送地址幀時使tb8=1,發(fā)送數(shù)據(jù)幀時使tb8=0,tb8是發(fā)送的一幀數(shù)據(jù)的第9位,從機接收后將第9位數(shù)據(jù)作為rb8,這樣就知道主機發(fā)來的這一幀數(shù)據(jù)是地址還是數(shù)據(jù)。另外,當一臺從機的sm2=0時,可以接收地址幀或數(shù)據(jù)幀,而當sm2=1時只能接收地址幀,這就能實現(xiàn)主機與所選從機之間的單獨通信。
7.試用8051串行口擴展i/o口,控制16個發(fā)光二極管自右向左以一定速度輪流發(fā)光,畫出電路并編寫程序。
答案:電路如下:
程序如下:
org 0000h
ajmp main
org 0023h
ajmp sbs ; 轉(zhuǎn)向串行口中斷服務程序
org 2000h
main: mov scon, #00h ; 串行口設置為方式0
mov a, #01h ; 最右邊一位發(fā)光二極管先亮
clr p1.0 ; 關閉并行輸出,熄滅顯示
clr p1.1
mov sbuf,a ; 開始串行輸出
loop: sjmp loop ; 等待中斷
sbs: inc r0
cjne r0, #11h, dsp
mov r0, #01h
dsp : cjne r0, #08h, dspr
setb p1.1 ; 啟動高8位并行輸出
dspr: setb p1.0 ; 啟動低8位并行輸出
acall dely ; 顯示延遲1s
clr ti ; 清發(fā)送中斷標志
rl a ; 準備點亮下一位
clr p1.0 ; 關閉并行輸出,熄滅顯示
clr p1.1
mov sbuf, a ; 串行輸出
zdfh: reti
dely: mov r2, #05h ; 延時1s子程序(fosc=6mhz)
dely0: mov r3, #0c8h
dely1: mov r4, #0f8h
nop
dely2: djnz r4, dely2
djnz r3, dely1
djnz r2, dely0
ret
end
8.試設計一個8051單片機的雙機通信系統(tǒng),串行口工作在方式1,波特率為2400bps,編程將甲機片內(nèi)ram中40h~4fh的數(shù)據(jù)塊通過串行口傳送到乙機片內(nèi)ram的40h~4fh單元中。
答案:
雙方約定的通信協(xié)議如下:
甲機先發(fā)送請求乙機接收信號“0aah”,乙機收到該信號后,若為準備好狀態(tài),一個則發(fā)送數(shù)據(jù)“0bbh”作為應答信號,表示同意接收。當甲機發(fā)送完16個字節(jié)后,再向乙機發(fā)送一個累加校驗和。校驗和是針對數(shù)據(jù)塊進行的,即在數(shù)據(jù)發(fā)送時,發(fā)送方對塊中的數(shù)據(jù)簡單求和,產(chǎn)生一個單字節(jié)校驗字符(校驗和),附加到數(shù)據(jù)塊結尾。在數(shù)據(jù)接收時,接收方每接收一個數(shù)據(jù)也計算一次校驗和;接收完數(shù)據(jù)塊后,再接收甲機發(fā)送的校驗和,并將接收到的校驗和與乙機求出的校驗和進行比較,向甲機發(fā)送一個狀態(tài)字,表示正確(00h)或出錯(0ffh),出錯則要求甲機重發(fā)。甲機收到收到乙機發(fā)送的接收正確應答信號(00h)后,即結束發(fā)送,否則,就重發(fā)一次數(shù)據(jù)。
甲機采用查詢方式進行數(shù)據(jù)發(fā)送,乙機采用中斷方式進行數(shù)據(jù)接收。雙方約定傳輸波特率為2400bps,兩機主頻均為11.059mhz,雙機串行口都工作于方式1,查表6-2可知smod=0,定時器t1采用工作模式2,初值為f4h。
甲機發(fā)送子程序:
org 2000h
send: mov tmod, #20h ; 定時器1設為模式2
mov tl1, #0f4h
mov th1, #0f4h ; 置定時器初值
setb tr1 ; 啟動t1
mov scon, #50h ; 設串行口為方式2
mov pcon, #00h ; smod=0
tlls: mov sbuf, #0aah ; 發(fā)送請求接收信號
wfs1: jbc ti, ryd1 ; 等待發(fā)送
sjmp wfs1
ryd1: jbc ri, ryd2 ; 等待乙機回答
sjmp ryd1
ryd2: mov a, sbuf ; 接收應答信號
xrl a, #0bbh
jnz tlls ; 乙機未準備好,繼續(xù)聯(lián)絡
sdd1: mov r0, #40h ; 首地址40h→r0
mov r1, #10h ; 數(shù)據(jù)個數(shù)→r1
mov r2, #00h ; 清校驗和寄存器
sdd2: mov sbuf, @r0 ; 發(fā)送一個數(shù)據(jù)
mov a, r2
add a, @r0 ; 求校驗和
mov r2, a ; 保存校驗和
inc r0
wfs2: jbc ti, sdd3 ; 等待發(fā)送
sjmp wfs2
sdd3: djnz r1, sdd2 ; 數(shù)據(jù)塊是否發(fā)送完
mov sbuf, r2 ; 發(fā)送校驗和
wfs3: jbc ti, ryd3
sjmp wfs3
ryd3: jbc ri, ryd4 ; 等待乙機回答
sjmp ryd3
ryd4: mov a, sbuf
jnz sdd1 ; 回答出錯則重發(fā)
ret
乙機接收子程序:
org 2000h
recv: mov tmod, #20h ; 定時器1設為模式2
mov tl1, #0f4h
mov th1, #0f4h ; 置定時器初值
setb tr1 ; 啟動t1
mov scon, #50h ; 設串行口為方式2
mov pcon, #00h ; smod=0
mov r0, #40h ; 首地址40h→r0
mov r1, #10h ; 數(shù)據(jù)個數(shù)→r1
mov 50h, #00h ; 清校驗和寄存器
setb 7fh
setb 7eh ; 標志位初始置1
setb es ; 允許接收中斷
setb ea ; 開中斷
loop: sjmp loop ; 等待中斷
中斷服務子程序:
clr ea
clr ri ; 清中斷
jb 7fh, rcmd ; 是請求接收信號嗎
jb 7eh, data ; 是數(shù)據(jù)塊嗎
mov a, sbuf ; 接收校驗和
cjne a, 50h, err ; 判斷發(fā)送是否正確
mov a, #00h
mov sbuf, a ; 正確,發(fā)00h
wfs1: jnb ti, wfs1 ; 等待發(fā)送
clr ti
sjmp retn
err: mov a, #0ffh
mov sbuf, a ; 出錯,發(fā)0ffh
wfs2: jnb ti, wfs2 ; 等待發(fā)送
clr ti
sjmp agan
rcmd: mov a, sbuf ; 接收甲機請求信號
xrl a, #0aah
jz tydx
sjmp retn
tydx: mov sbuf, #0bbh ; 發(fā)送應答信號0bbh
wfs3: jnb ti, wfs3 ; 等待發(fā)送
clr ti
clr 7fh
sjmp retn
data: mov a, sbuf ; 接收數(shù)據(jù)
mov r0, a
inc dptr
add a, 50h ; 求校驗和
mov 50h, a&
上一個:電力變壓器需要做哪些試驗?試驗過程中需要注意哪些問題?
下一個:蘋果ios13怎么取消訂閱自動續(xù)費(ios13怎么取消自動訂閱)

工業(yè)顯示器屏幕常見故障及解決方法
國務院辦公廳印發(fā)《關于進一步加強商品過度包裝治理的通知》
電腦耳機帶麥克風品牌排行(麥比較好的電腦耳機)
概述日本SMC過濾減壓閥的操作步驟與工作原理
河道雷達水位雨情監(jiān)測系統(tǒng)介紹
常寧防爆燈,常寧防爆燈150W
水凝膠材料的應用與研究
上海市水務局對金海水廠二期工程施工情況進行調(diào)研
玻璃轉(zhuǎn)子流量計的使用維護常識
工信部將加大寬帶降費提速(工信部規(guī)定流量)
十八禁 网站在线观看免费视频_2020av天堂网_一 级 黄 色 片免费网站_绝顶高潮合集Videos