版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
習(xí)題第1章習(xí)題幻燈片2第3章習(xí)題幻燈片10C第3章習(xí)題幻燈片25第6章習(xí)題幻燈片36第8章習(xí)題幻燈片63第10章習(xí)題幻燈片76第12章習(xí)題幻燈片98第2章習(xí)題幻燈片3第4章習(xí)題幻燈片18第5章習(xí)題幻燈片28第7章習(xí)題幻燈片48第9章習(xí)題幻燈片70第11章習(xí)題幻燈片88第13章習(xí)題幻燈片1013.8051與8751的區(qū)別是
。A.內(nèi)部數(shù)據(jù)存儲(chǔ)單元數(shù)目不同 B.內(nèi)部數(shù)據(jù)存儲(chǔ)器類(lèi)型不同C.內(nèi)部程序存儲(chǔ)器的類(lèi)型不同 D.內(nèi)部寄存器的數(shù)目不同8.AT89C51單片機(jī)相當(dāng)于MCS-51系列單片機(jī)中的哪一種型號(hào)的產(chǎn)品?答:相當(dāng)于MCS-51系列中的87C51,只不過(guò)是AT89C51芯片內(nèi)的4KBFlash存儲(chǔ)器取代了87C51片內(nèi)的4KB的EPROM。第1章習(xí)題C3*.內(nèi)部RAM中,位地址為40H、88H的位,該位所在字節(jié)的字節(jié)地址分別為
和
。幻燈片815*.若A中的內(nèi)容為63H,那么,P標(biāo)志位的值為
。解:(A)=01100011,“1”的個(gè)數(shù)為偶數(shù),P=0。6*.AT89C51單片機(jī)復(fù)位后,R4所對(duì)應(yīng)的存儲(chǔ)單元地址為
,因上電時(shí)PSW
=
。這時(shí)當(dāng)前的工作寄存器區(qū)是
組工作寄存器區(qū)。第2章習(xí)題28H88H004H00H011*.判斷以下有關(guān)PC和DPTR的結(jié)論
是正確的。A.DPTR是可以訪問(wèn)的,而PC不能訪問(wèn)B.它們都是16位寄存器C.在單片機(jī)運(yùn)行時(shí),它們都具有自動(dòng)加“1”的功能D.DPTR可以分為2個(gè)8位的寄存器使用,但PC不能第2章習(xí)題A、B、D13*.PC的值是
。A.當(dāng)前正在執(zhí)行指令的前一條指令的地址;B.當(dāng)前正在執(zhí)行指令的地址;C.當(dāng)前正在執(zhí)行指令的下一條指令的地址;D.控制器中指令寄存器的地址。第2章習(xí)題C15.AT89C51單片機(jī)的片內(nèi)都集成了哪些功能部件?各個(gè)功能部件的最主要的功能是什么?(1).1個(gè)微處理器(CPU);(2).128個(gè)數(shù)據(jù)存儲(chǔ)器(RAM)單元;(3).4KBFlash程序存儲(chǔ)器;(4).4個(gè)8位可編程并行I/O口(P0口、P1口、P2口、P3口);(5).1個(gè)全雙工串行口;(6).2個(gè)16位定時(shí)器/計(jì)數(shù)器;(7).一個(gè)中斷系統(tǒng),5個(gè)中斷源,2個(gè)優(yōu)先級(jí);(8).21個(gè)特殊功能寄存器(SFR)。第2章習(xí)題1.在AT89C51單片機(jī)中,若采用6MHz晶振,一個(gè)機(jī)器周期為
。解:1個(gè)機(jī)器周期4.片內(nèi)字節(jié)地址為2AH單元的最低位的位地址是
;片內(nèi)字節(jié)地址為88H單元的最低位的位地址是
?;脽羝?3第2章習(xí)題2μs50H88H8.通過(guò)堆棧操作實(shí)現(xiàn)子程序調(diào)用,首先要把
的內(nèi)容入棧,以進(jìn)行斷點(diǎn)保護(hù)。調(diào)用返回時(shí),再進(jìn)行出棧,把保護(hù)的斷點(diǎn)送回到
。10.判斷下列
項(xiàng)說(shuō)法是正確的。A.AT89C51單片機(jī)的CPU是由RAM和EPROM組成的B.區(qū)分片外程序存儲(chǔ)器和片外數(shù)據(jù)存儲(chǔ)器的最可靠的方法是看其位于地址范圍的低端還是高端C.在AT89C51單片機(jī)中,為使準(zhǔn)雙向的I/O口工作在輸入方式,必須保證它被事先預(yù)置為1D.PC可以看成是程序存儲(chǔ)器的地址指針第2章習(xí)題PCPCC、D18.當(dāng)AT89C51單片機(jī)運(yùn)行出錯(cuò)或程序陷入死循環(huán)時(shí),如何擺脫困境?答:按下復(fù)位按鈕。第2章習(xí)題5*.在寄存器間接尋址方式中,其“間接”體現(xiàn)在指令中寄存器的內(nèi)容不是操作數(shù),而是操作數(shù)的
。第3章習(xí)題地址6*.已知程序執(zhí)行前有(A)
=
02H,(SP)
=
52H,(51H)
=
FFH,(52H)
=
FFH。下述程序執(zhí)行后,(A)
=
,(SP)
=
,(51H)
=
,(52H)
=
,(PC)
=
。POP DPH ;(SP)=51HPOP DPL ;(SP)=50HMOV DPTR,#4000H;(DPTR)=4000HRL A ;(A)=04HMOV B,A ;(B)=04HMOVC A,@A+DPTR;(A)=30HPUSH Acc;(SP)=51H,(51H)=30H第3章習(xí)題MOV A,B ;(A)=04HINC A ;(A)=05HMOVC A,@A+DPTR ;(A)=50HPUSH Acc;(SP)=52H,(52H)=50HRET ;(SP)=50H,(PC)=5030HORG 4000HDB 10H,80H,30H,50H,30H,50H50H50H50H30H5030H7*.假定(A)
=
83H,(R0)
=
17H,(17H)
=
34H,執(zhí)行以下指令后,(A)
=
。ANL A,#17HORL 17H,AXRL A,@R0CPL A第3章習(xí)題
10000011∧0001011100001100;(A)∧17H→A(A)=03H;(A)∨(17H)→17H
00000011∨0011010011001110(17H)=37H;(A)⊕((R0))→A
00000011⊕0011011111000010(A)=34H;(A)=CBHCBH11*.判斷下列說(shuō)法
項(xiàng)是正確的。A.立即尋址方式是被操作的數(shù)據(jù)本身就在指令中,而不是它的地址在指令中B.指令周期是執(zhí)行一條指令的時(shí)間C.指令中直接給出的操作數(shù)稱(chēng)為直接尋址第3章習(xí)題A、B15*.寫(xiě)出完成如下要求的指令,但不能改變未涉及位的內(nèi)容。(1).把Acc.3,Acc.4,Acc.5和Acc.6清“0”。(2).把累加器A的中間4位清“0”。(3).使Acc.2和Acc.3置“1”。答:(1).ANLA,#87H ;87H=10000111B
(2).ANLA,#0C3H ;C3H=11000011B
(3).ORLA,#0CH ;0CH=00001100B也可以使用位操作指令,例如用CLRAcc.3對(duì)Acc.3清0例如用SETBAcc.2對(duì)Acc.2置1第3章習(xí)題3.假定累加器A中的內(nèi)容為30H,執(zhí)行指令1000H: MOVCA,@A+PC后,把程序存儲(chǔ)器
單元的內(nèi)容送入累加器A中。解:取出指令后(PC)=1001H,(A)+(PC)=1031H第3章習(xí)題1031H12.判斷以下指令的正誤。(1).MOV 28H,@R2 (2).DEC DPTR (3).INC DPTR (4).CLR R0 (5).CPL R5 (6).MOV R0,R1(7).PHSH DPTR (8).MOV F0,C (9).MOV F0,Acc.3 (10).MOVX A,@R1(11).MOV C,30H (12).RLC R0第3章習(xí)題14.下列程序段的功能是什么?PUSH AccPUSHBPOP AccPOP B答:A的內(nèi)容與B的內(nèi)容互換。第3章習(xí)題第4章習(xí)題7*.試編寫(xiě)程序,查找在內(nèi)部RAM的30H~50H單元中是否有0AAH這一數(shù)據(jù)。若有,則將51H單元置為“01H”;若未找到,則將51H單元置為“00H”。典型錯(cuò)誤如下:START:MOV R0,#30H ;查找內(nèi)部RAM的首地址
MOV R2,#20H ;查找次數(shù)LOOP: MOV A,@R0 CJNE A,#0AAH,NEXT MOV 51H,#01H ;查到,將51H單元置為“01H”NEXT: INC R0 ;指向下一個(gè)單元
DJNZ R2,LOOP ;次數(shù)未到繼續(xù)查
MOV 51H,#00H ;未查到,將51H單元置為“00H”EXIT: RET第4章習(xí)題7*.試編寫(xiě)程序,查找在內(nèi)部RAM的30H~50H單元中是否有0AAH這一數(shù)據(jù)。若有,則將51H單元置為“01H”;若未找到,則將51H單元置為“00H”。參考程序如下:START:MOV R0,#30H ;查找內(nèi)部RAM的首地址
MOV R2,#21H ;查找次數(shù),33個(gè)單元LOOP: MOV A,@R0 CJNE A,#0AAH,NEXT MOV 51H,#01H ;查到,將51H單元置為“01H”
RETNEXT: INC R0 ;指向下一個(gè)單元
DJNZ R2,LOOP ;次數(shù)未到繼續(xù)查
MOV 51H,#00H ;未查到,將51H單元置為“00H”EXIT: RET第4章習(xí)題8*.試編寫(xiě)程序,查找在內(nèi)部RAM的20H~40H單元中出現(xiàn)“00H”這一數(shù)據(jù)的次數(shù),并將查找到的結(jié)果存入41H單元。START:MOV 41H,#0 ;次數(shù)單元清0 MOV R2,#21H ;查找次數(shù),33個(gè)單元
MOV R0,#20H ;查找內(nèi)部RAM的首地址LOOP: MOV A,@R0 JNZ NEXT
INC 41H ;=0,次數(shù)加1NEXT: INC R0 ;指向下一個(gè)單元
DJNZ R2,LOOP ;次數(shù)未到繼續(xù)查
RET參考程序如下:第4章習(xí)題9*.在內(nèi)部RAM的21H單元開(kāi)始存有一組單字節(jié)無(wú)符號(hào)數(shù),數(shù)據(jù)長(zhǎng)度為20H,編寫(xiě)程序,要求找出最大數(shù)存入MAX單元。START:MOV R0,#21H ;查找內(nèi)部RAM的首地址
MOV R2,#20H ;查找次數(shù),32個(gè)單元
MOV MAX,#0LOOP: MOV A,@R0 CLR C SUBB A,MAX JNC NEXT ;(A)<(MAX),不管
MOV MAX,A ;(A)≥(MAX),(A)→MAXNEXT: INC R0 ;指向下一個(gè)單元
DJNZ R2,LOOP ;次數(shù)未到繼續(xù)查
RETJC@R0典型錯(cuò)誤如下:第4章習(xí)題9*.在內(nèi)部RAM的21H單元開(kāi)始存有一組單字節(jié)無(wú)符號(hào)數(shù),數(shù)據(jù)長(zhǎng)度為20H,編寫(xiě)程序,要求找出最大數(shù)存入MAX單元。參考程序如下:MAX DATA50H START:MOV R0,#21H ;查找內(nèi)部RAM的首地址
MOV R2,#20H ;查找次數(shù),32個(gè)單元
MOV MAX,#0LOOP: MOV A,@R0 CJNE A,MAX,$+3 JC NEXT ;(A)<(MAX),不管
MOV MAX,A ;(A)≥(MAX),(A)→MAXNEXT: INC R0 ;指向下一個(gè)單元
DJNZ R2,LOOP ;次數(shù)未到繼續(xù)查
RET第4章習(xí)題6.試編寫(xiě)一個(gè)程序,將內(nèi)部RAM中45H單元的高4位清“0”,低4位置“1”。答:參考程序如下:
MOV A,45H ANL A,#0FH ORL A,#0FH MOV 45H,A第4章習(xí)題10.若SP=60H,標(biāo)號(hào)LABEL所在的地址為3456H。LCALL指令的地址為2000H,執(zhí)行如下指令2000HLCALLLABEL后,堆棧指針SP和堆棧內(nèi)容發(fā)生了哪些變化?PC的值等于什么?如果將指令LCALL直接換成ACALL是否可以?如果換成ACALL指令,可調(diào)用的地址范圍是什么?
(1).SP=SP+1=61H (61H)=PC的低字節(jié)=03H SP=SP+1=62H (62H)=PC的高字節(jié)=20H (2).PC=3456H (3).不可以
(4).2KB=2048Byte0010000000000011,0011
010001010110C第3章習(xí)題4*.編寫(xiě)C51程序,將片外2000H為首址的連續(xù)10個(gè)單元的內(nèi)容,讀入到片內(nèi)部40H到49H單元中。解:程序設(shè)計(jì)思路——采用指針的方法。選用指針px,px指向char型數(shù)據(jù)位于xdata,賦值px=2000H
選用指針px1,px1指向char型數(shù)據(jù)位于data,賦值px1=40H
在for循環(huán)中,*px1=*px;
并且當(dāng)i++時(shí),px++,px1++,。采用數(shù)組的方法。xdata
ucharbuf1[10]_at_0x2000dataucharbuf2[10]_at_0x40;在for循環(huán)中,buf2[i]=buf1[i]C第3章習(xí)題采用指針的方法參考程序如下:#defineucharunsignedcharvoidmain()
//主函數(shù)
{
datauchari;
ucharxdata*px; //指針px,指向char型數(shù)據(jù)位于xdata
uchardata*px1; //指針px1,指向char型數(shù)據(jù)位于data px=0x2000; px1=0x40; for(i=0;i<10;i++,px++,px1++) *px1=*px;
while(1);
}C第3章習(xí)題采用數(shù)組的方法參考程序如下:#defineucharunsignedcharxdata
ucharbuf1[10]_at_0x2000; //位于xdata數(shù)組buf1[0]地址2000Hdataucharbuf2[10]_at_0x40; //位于data數(shù)組buf2[0]地址40Hvoidmain()
//主函數(shù)
{
datauchari;
for(i=0;i<10;i++)
buf2[i]=buf1[i];
while(1);
}C第3章習(xí)題5*.do-while構(gòu)成的循環(huán)與do-while循環(huán)的區(qū)別是什么?答:主要區(qū)別是:
while循環(huán)的控制出現(xiàn)在循環(huán)體之前,只有當(dāng)while后面表達(dá)式的值非0時(shí),才可能執(zhí)行循環(huán)體,因此有可能一次都不執(zhí)行循環(huán)體;在do-while構(gòu)成的循環(huán)中,總是先執(zhí)行一次循環(huán)體,然后再判斷表達(dá)式的值,因此無(wú)論如何,循環(huán)體至少要被執(zhí)行一次。C第3章習(xí)題4.3*.用單片機(jī)設(shè)計(jì)一個(gè)節(jié)日彩燈控制器,P0口接有8個(gè)LED作指示燈,P1.0~P1.3接有4個(gè)按鍵開(kāi)關(guān),實(shí)現(xiàn)如下功能。按下P1.0鍵—全亮后全滅,交替閃爍;按下P1.1鍵—8只LED全滅;按下P1.2鍵—8只LED由上向下流動(dòng)點(diǎn)亮;按下P1.3鍵—8只LED由下向上流動(dòng)點(diǎn)亮;解:程序設(shè)計(jì)思路(1).只有一個(gè)鍵按下才有效,幾個(gè)鍵同時(shí)按下視為無(wú)效,根據(jù)按下鍵的鍵值進(jìn)行不同的處理。(2).采用軟件延時(shí),實(shí)現(xiàn)交替閃爍和流動(dòng)點(diǎn)亮。P0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.7P1.0P1.1P1.2P1.3+5VAT89C510EH0DH0BH07H0111101111011110C第3章習(xí)題參考程序如下:#include<reg51.h>#defineuintunsignedint#defineucharunsignedcharvoiddelay(
j
) //延時(shí)函數(shù)datauintj;{datauinti;while(j--)for(i=0;i<250;i++);}C第3章習(xí)題voidmain() //主函數(shù){datauchara;
while(1) //不斷循環(huán)
{
a=0; //保證同亮或同滅,交替閃爍
while((P1&0x0f)==0x0e) //P1.0按下處理
{a=~a; //全亮后全滅,交替閃爍
P0=a;
delay(2250); //調(diào)用延時(shí)函數(shù),交替閃爍延時(shí)
}
P0=0xff; //全滅
while((P1&0x0f)==0x0d); //P1.1按下不作處理C第3章習(xí)題
a=1; //保證只有一個(gè)點(diǎn)亮
while((P1&0x0f)==0x0b) //P1.2按下處理
{a=a<<1; //左移一位
if(a==0)a=1; //全0
P0=~a; //低電平點(diǎn)亮
delay(2250);
} //流動(dòng)點(diǎn)亮延時(shí)
while((P1&0x0f)==0x07) //P1.3按下處理
{a=a>>1; //右移一位
if(a==0)a=128; //若全0,則10000000
P0=~a; //低電平點(diǎn)亮
delay(2250);} //流動(dòng)點(diǎn)亮延時(shí)
}}第5章習(xí)題2*.若(IP)=00010100B,則優(yōu)先級(jí)最高者為
,最低者為
。解:00010100同級(jí)查詢優(yōu)先高低外部中斷1定時(shí)器T1第5章習(xí)題8*.下列說(shuō)法正確的是
。A.同一級(jí)別的中斷請(qǐng)求按時(shí)間的先后順序響應(yīng)B.同一時(shí)間同一級(jí)別的多中斷請(qǐng)求將形成阻塞,系統(tǒng)無(wú)法響應(yīng)C.低優(yōu)先級(jí)中斷請(qǐng)求不能中斷高優(yōu)先級(jí)中斷請(qǐng)求,但是高優(yōu)先級(jí)中斷請(qǐng)求能中斷低優(yōu)先級(jí)中斷請(qǐng)求D.同級(jí)中斷不能嵌套A、C、D第5章習(xí)題13*.某系統(tǒng)有3個(gè)外部中斷源1、2、3,當(dāng)某一中斷源發(fā)出的中斷請(qǐng)求使引腳變?yōu)榈碗娖綍r(shí)(見(jiàn)圖5-10),便要求CPU進(jìn)行處理,它們的優(yōu)先處理次序由高到低為3、2、1,中斷處理程序的入口地址分別為1000H、1100H、1200H。試編寫(xiě)主程序及中斷服務(wù)子程序(轉(zhuǎn)至相應(yīng)的中斷處理程序的入口即可)。第5章習(xí)題參考程序如下:
ORG 0000H LJMP MAIN ORG 0013H LJMP INT_EX1 ORG 0030HMAIN: CLR IT1 ;采用電平觸發(fā),低電平有效中斷
SETB EX1 ;允許外部中斷1 SETB EA WAIT: LJMP WAIT ;用原地跳轉(zhuǎn)代替一段用戶程序第5章習(xí)題;以下為外部中斷1服務(wù)子程序INT_EX1:JBP1.2,INT_IR3;是3號(hào)中斷,轉(zhuǎn)到對(duì)應(yīng)中斷處理程序
JBP1.1,INT_IR2;是2號(hào)中斷,轉(zhuǎn)到對(duì)應(yīng)中斷處理程序
JBP1.0,INT_IR1;是1號(hào)中斷,轉(zhuǎn)到對(duì)應(yīng)中斷處理程序
ORG1000HINT_IR3:插入相應(yīng)中斷處理程序
RETI ORG1100HINT_IR2:插入相應(yīng)中斷處理程序
RETI ORG1200HINT_IR1:插入相應(yīng)中斷處理程序
RETI第5章習(xí)題;以下為外部中斷1服務(wù)子程序INT_EX1:JNBP1.2,NEXT1 ;P1.2=0,非3號(hào)中斷,跳轉(zhuǎn)NEXT1 LJMPINT_IR3 ;是3號(hào)中斷,轉(zhuǎn)到對(duì)應(yīng)中斷處理程序NEXT1:JNBP1.1,NEXT2 ;P1.1=0,非2號(hào)中斷,跳轉(zhuǎn)NEXT2 LJMPINT_IR2 NEXT2:LJMPINT_IR1 ORG1000HINT_IR3:插入相應(yīng)中斷處理程序
ORG1100HINT_IR2:插入相應(yīng)中斷處理程序
ORG1200HINT_IR1:插入相應(yīng)中斷處理程序第5章習(xí)題1.外部中斷1的中斷入口地址為
。定時(shí)器1的中斷入口地址為
。11.編寫(xiě)外部中斷1為跳沿觸發(fā)的中斷初始化程序段。解: SETB IT1 ;外部中斷1為跳沿觸發(fā)
SETB EX1 ;允許外部中斷1中斷
SETB EA ;CPU開(kāi)中斷0013H001BH第5章習(xí)題6.中斷查詢確認(rèn)后,在下列各種AT89C51單片機(jī)運(yùn)行情況下,能立即進(jìn)行響應(yīng)的是
。A.當(dāng)前正在進(jìn)行高優(yōu)先級(jí)中斷處理B.當(dāng)前正在執(zhí)行RETI指令C.當(dāng)前指令是DIV指令,且正處于取指令的機(jī)器周期D.當(dāng)前指令是MOVA,R3D第6章習(xí)題3*.定時(shí)器/計(jì)數(shù)器用作定時(shí)器模式時(shí),其計(jì)數(shù)脈沖由誰(shuí)提供?定時(shí)時(shí)間與哪些因素有關(guān)?答:定時(shí)器/計(jì)數(shù)器用作定時(shí)器時(shí),其計(jì)數(shù)脈沖由系統(tǒng)振蕩器產(chǎn)生的內(nèi)部時(shí)鐘信號(hào)12分頻后提供。定時(shí)時(shí)間與時(shí)鐘頻率和定時(shí)初值有關(guān)。外部脈沖初值越大,定時(shí)越短。第6章習(xí)題7*.已知系統(tǒng)采用6MHz晶振,編寫(xiě)程序,要求使用T0采用方式2定時(shí),①.使P1.0輸出周期為80μs的方波脈沖。②.使P1.0輸出周期為400μs,占空比為10%的矩形脈沖(高電平40μs,低電平360μs)。第6章習(xí)題7.①.使P1.0輸出周期為80μs的方波脈沖。80us40us40us解①:T0定時(shí)40us,每40us產(chǎn)生一次中斷,在中斷服務(wù)程序中對(duì)P1.0取反。①P1.040us計(jì)算T0定時(shí)40μs初值x特殊功能寄存器設(shè)置00000010TMOD:02H方式2定時(shí)第6章習(xí)題
ORG 0000H LJMP MAIN ORG 000BH CPL P1.0 RETI ORG 0030HMAIN: MOV TMOD,#02H ;定時(shí)器/計(jì)數(shù)器T0為定時(shí)方式2 MOV TL0,#236 ;定時(shí)40us初值賦值
MOV TH0,#236 ;定時(shí)40us初值賦值
SETB TR0 ;啟動(dòng)T0,開(kāi)始計(jì)數(shù)
SETB ET0 ;允許T0中斷
SETB EA ;CPU開(kāi)中斷WAIT: SJMP WAIT ;無(wú)事可做7題①.參考程序——中斷方式第6章習(xí)題
ORG 0000H LJMP MAIN ORG 0030HMAIN: MOV TMOD,#02H ;定時(shí)器/計(jì)數(shù)器T0為定時(shí)方式2 MOV TL0,#236 ;定時(shí)40us初值賦值
MOV TH0,#236 ;定時(shí)40us初值賦值
SETB TR0 ;啟動(dòng)T0,開(kāi)始計(jì)數(shù)LOOP: JNB TF0,LOOP ;時(shí)間未到,等待
CPL P1.0 ;時(shí)間到,取反
CLR TF0 ;清時(shí)間到標(biāo)志
SJMP LOOP7題①.參考程序——查詢方式第6章習(xí)題7.②.使P1.0輸出高電平40μs,低電平360μs的矩形脈沖。解②:方法1設(shè)計(jì)思想仍然定時(shí)40μs中斷,先輸出“0”,采用R7計(jì)數(shù),主程序中初始R7=0。中斷程序中:R7+1→R7,判斷:R7<9,不管;R7=9,輸出“1”;R7>9,輸出“0”,并使R7=0。123456789100R7=0P1.012360μs40μs第6章習(xí)題
ORG 0000H LJMP MAIN ORG 000BH LJMP IT0P ORG 0030HMAIN: MOV TMOD,#02H ;T0為定時(shí)方式2 MOV TL0,#236 ;定時(shí)40us初值賦值
MOV TH0,#236 ;定時(shí)40us初值賦值
SETB TR0 ;啟動(dòng)T0,開(kāi)始計(jì)數(shù)
SETB ET0 ;允許T0中斷
SETB EA ;CPU開(kāi)中斷
MOV R7,#0 ;R7=0 CLR P1.0 ;先輸出“0”WAIT: SJMP WAIT7題②.方法1參考程序第6章習(xí)題IT0P: INC R7 ;R7+1→R7 CJNE R7,#9,NEXT SETB P1.0 ;R7=9,P1.0=1 RETINEXT: JC EXIT ;R7≠9處理,R7<9,不管
CLR P1.0 ;R7>9,
P1.0=0 MOV R7,#0 ;R7=0EXIT: RETI中斷程序中:R7+1→R7,判斷:R7<9,不管;R7=9,輸出“1”;R7>9,輸出“0”,并使R7=0。7題②.方法1參考程序第6章習(xí)題987654320910R7=10P1.087360μs7.②.使P1.0輸出高電平40μs,低電平360μs的矩形脈沖。解②:方法2設(shè)計(jì)思想仍定時(shí)40μs中斷,先輸出“1”。用R7(j)計(jì)數(shù),主程序中初始R7(j)=10。中斷程序中:R7(j)-1→R7(j),判斷:R7(j)≠0,輸出0;R7(j)=0,輸出“1”;并使R7(j)=10。1第6章習(xí)題#include<reg51.h>#defineucharunsignedcharsbitP1_0=P1^0;voidmain() //主函數(shù)dataucharj=10; //全局變量j{
TMOD=02; //T0為定時(shí)方式2TL0=236; //定時(shí)40us初值賦值
TH0=236; //定時(shí)40us初值賦值
TR0=1; //啟動(dòng)T0,開(kāi)始計(jì)數(shù)
ET0=1; //允許T0中斷
EA=1; //CPU開(kāi)中斷
P1_0=1; //先輸出“1”while(1);}7題②.方法2參考程序第6章習(xí)題voidT0_int(
)
intrruput1 //T0中斷函數(shù){j--;
if(j==0){P1_0=1;j=10;}
elseP1_0=0;}7題②.方法2參考程序仍定時(shí)40μs中斷,采用R7(j)計(jì)數(shù),主程序中初始R7(j)=10。中斷程序中:R7(j)-1→R7(j),判斷:R7(j)≠0,輸出0;R7(j)=0,輸出“1”;并使R7(j)=10。第6章習(xí)題7.②.使P1.0輸出高電平40μs,低電平360μs的矩形脈沖。解②:方法3設(shè)計(jì)思想——此方法更通用,不需要兩時(shí)間是整數(shù)倍計(jì)算40us定時(shí)初值:ECH,計(jì)算360us定時(shí)初值:4CHECH+4CH=38H,即ECH=38H-4CH,4CH=38H-ECH初始設(shè)置時(shí),TL0=4CH,P1.0=0;TH0=ECH。中斷后,會(huì)自動(dòng)(TH0)→TL0,中斷程序中:CPLP1.0;并且38H-(TH0)→TH0TL0TH0TL0=4CHP1.0360μs40μsTH0=ECHTL0=ECHTH0=4CHTL0=4CHTH0=ECH第6章習(xí)題
ORG 0000H LJMP MAIN ORG 000BH LJMP IT0P ORG 0030HMAIN: MOV TMOD,#02H ;T0為定時(shí)方式2 MOV TL0,#4CH ;定時(shí)360us初值賦值
MOV TH0,#ECH ;定時(shí)40us初值賦值
SETB TR0 ;啟動(dòng)T0,開(kāi)始計(jì)數(shù)
SETB ET0 ;允許T0中斷
SETB EA ;CPU開(kāi)中斷
CLR P1.0 ;先輸出“0”WAIT: SJMP WAIT7題②.方法3參考程序第6章習(xí)題IT0P: CPL P1.0 MOV A,#38H CLR C SUBB A,TH0 MOV TH0,A RETIECH+4CH=38H,即ECH=38H-4CH,4CH=38H-ECH初始設(shè)置時(shí),TL0=4CH,P1.0=0;TH0=ECH。中斷后,會(huì)自動(dòng)(TH0)→TL0,中斷程序中:CPLP1.0;并且38H-(TH0)→TH07題②.方法3參考程序第6章習(xí)題作業(yè)中也有更好的方法,但有一些錯(cuò)誤,以下是中斷服務(wù)程序IT0P: DJNZR1,LOOP1 SETBP1.0 MOVR1,#09H LCALLLOOP2LOOP1:CLR P1.0 LOOP2:RETISJMP87654321089R1=9P1.076320μs#0AH987654320101R1=10P1.098360μs第6章習(xí)題另外一種方法,不需要低電平時(shí)間是高電平時(shí)間的整數(shù)倍,更通用。如產(chǎn)生如圖矩形波。100us60us40us計(jì)算40us定時(shí)初值:ECH計(jì)算60us定時(shí)初值:E2HECH+E2H=CEH主程序中:MOV TL0,#0E2H ;60us初值MOV TH0,#0ECH ;40us初值CLR P1.0中斷服務(wù)程序:CPL P1.0MOV A,#0CEHCLR CSUBB A,TH0MOV TH0,ARETITL0TH0第6章習(xí)題1.下列
項(xiàng)說(shuō)法是正確的。A.特殊功能寄存器SCON,與定時(shí)器/計(jì)數(shù)器的控制無(wú)關(guān)B.特殊功能寄存器TCON,與定時(shí)器/計(jì)數(shù)器的控制無(wú)關(guān)C.特殊功能寄存器IE,與定時(shí)器/計(jì)數(shù)器的控制無(wú)關(guān)D.特殊功能寄存器TMOD,與定時(shí)器/計(jì)數(shù)器的控制無(wú)關(guān)A第6章習(xí)題6.定時(shí)器/計(jì)數(shù)器的工作方式2有什么特點(diǎn)?適用于哪些應(yīng)用場(chǎng)合?答:定時(shí)器/計(jì)數(shù)器的工作方式2具有自動(dòng)恢復(fù)初值的特點(diǎn),適用于精確定時(shí),如波特率的產(chǎn)生。第7章習(xí)題6*.在異步串行通信中,接收方是如何知道發(fā)送方開(kāi)始發(fā)送數(shù)據(jù)的?答:當(dāng)接收方檢測(cè)到RXD引腳上的有效的負(fù)跳變時(shí),即可知道發(fā)送方開(kāi)始發(fā)送數(shù)據(jù)。8*.假定串行口串行發(fā)送的字符格式為1個(gè)起始位、8個(gè)數(shù)據(jù)位、1個(gè)奇校驗(yàn)位、1個(gè)停止位,請(qǐng)畫(huà)出傳送字符“B”(42H)的幀格式。解:字符“B”的ASCII碼為42H=01000010B,幀格式如圖所示。起始位010000101奇校驗(yàn)位停止位D0D1D2D3D4D5D6D712*.AT89C51串行口按方式3進(jìn)行數(shù)據(jù)通信,假定波特率為2400bit/s,偶校驗(yàn),以中斷方式傳送數(shù)據(jù)。編寫(xiě)發(fā)送和接收的通信程序。要求:發(fā)送方,將RAM單元20H~25H的內(nèi)容發(fā)送,共6個(gè)字節(jié),其中25H的數(shù)據(jù)是20H~24H異或的結(jié)果,即縱向冗余校驗(yàn)碼;接收方,接收到6字節(jié)數(shù)據(jù),經(jīng)奇偶校驗(yàn),且縱向冗余校驗(yàn)(6字節(jié)異或?yàn)?)正確后,數(shù)據(jù)放在RAM20H~24H單元。時(shí)鐘振蕩頻率為11.0592MHz。采用T1作波特率發(fā)生器。第7章習(xí)題解:程序準(zhǔn)備:波特率為2400b/s,SMOD=0,查表初值為F4H。第7章習(xí)題T1作波特率發(fā)生器,定時(shí)模式,方式200100000TMOD:20H串行口方式3,非多機(jī)通信方式1100/10000SCON:C0H/D0H中斷允許設(shè)置,只允許串行口中斷10010000IE:90H作業(yè)中有用E0H/F0H第7章習(xí)題發(fā)送程序設(shè)計(jì)思想題目要求:將20H~25H的內(nèi)容發(fā)送,其中25H的數(shù)據(jù)是20H~24H異或的結(jié)果,即縱向冗余校驗(yàn)碼;①.初始化設(shè)置:定時(shí)器/計(jì)數(shù)器工作方式,根據(jù)波特率設(shè)置時(shí)間初值;設(shè)置串行口工作方式3;允許串行口中斷,CPU開(kāi)中斷。②.求縱向冗余碼放入25H;③.發(fā)送第一字節(jié),注意將偶校驗(yàn)位送TB8,等待全部發(fā)完,全部發(fā)完后關(guān)中斷。④.中斷服務(wù)程序,每進(jìn)入一次發(fā)送一字節(jié)。第7章習(xí)題 ORG 0000H LJMP MAIN ORG 0023H
LJMP COM_INT ORG 1000HMAIN: MOV SP,#60H ;設(shè)置堆棧指針
MOV TMOD,#20H ;設(shè)置定時(shí)器/計(jì)數(shù)器工作方式
MOV TH1,#0F4H ;設(shè)置波特率為2400 MOV TL1,#0F4H SETB TR1 ;開(kāi)定時(shí)器T1 MOV SCON,#0C0H ;設(shè)置串行口工作方式為方式3 MOV IE,#90H ;允許串行口中斷
(1).甲機(jī)發(fā)送方的子程序波特率設(shè)置第7章習(xí)題TRAN: MOV R0,#20H ;要發(fā)送數(shù)據(jù)的單元的首地址
MOV A,#00H ;求縱向冗余碼LOOP: XRL A,@R0 INC R0 CJNE R0,#25H,LOOP MOV @R0,A ;縱向冗余碼放在發(fā)送最后單元
MOV R0,#20H ;要發(fā)送數(shù)據(jù)的單元的首地址
MOV A,@R0 MOV C,PSW.0 MOV TB8,C ;偶校驗(yàn)位送TB8 MOV SBUF,A ;發(fā)送第一字節(jié)
HERE: CJNE R0,#25H,HERE MOV IE,#00H ;關(guān)中斷
······
第7章習(xí)題COM_INT: CLR TI INC R0 MOV A,@R0 MOV C,PSW.0 MOV TB8,C ;偶校驗(yàn)位送TB8 MOV SBUF,A ;發(fā)送第一字節(jié)
RETI第7章習(xí)題接收程序設(shè)計(jì)思想題目要求:接收到6字節(jié)數(shù)據(jù),經(jīng)奇偶校驗(yàn),且縱向冗余校驗(yàn)(6字節(jié)異或?yàn)?)正確后,數(shù)據(jù)放在RAM20H~24H單元。①.初始化設(shè)置:定時(shí)器/計(jì)數(shù)器工作方式,根據(jù)波特率設(shè)置時(shí)間初值;設(shè)置串行口工作方式3;中斷設(shè)置允許串行口中斷,CPU開(kāi)中斷。②.判斷是否有出錯(cuò)標(biāo)志F0,有,出錯(cuò)處理;③.判斷是否接收到6字節(jié)數(shù)據(jù),若是,進(jìn)行縱向冗余校驗(yàn),正確,將30H~34H數(shù)據(jù)放在RAM20H~24H單元。出錯(cuò),出錯(cuò)處理。②.中斷服務(wù)程序,a.每進(jìn)入一次接收一字節(jié),b.進(jìn)行奇偶校驗(yàn)正確后,放入臨時(shí)單元30H~35H;第7章習(xí)題 ORG 0000H LJMP MAIN ORG 0023H
LJMP COM_INT ORG 1000HMAIN: MOV SP,#60H ;設(shè)置堆棧指針
MOV TMOD,#20H ;設(shè)置定時(shí)器/計(jì)數(shù)器工作方式
MOV TH1,#0F4H ;設(shè)置波特率為2400 MOV TL1,#0F4H SETB TR1 ;開(kāi)定時(shí)器
MOV SCON,#0D0H ;設(shè)置串行口工作方式為方式3
MOV IE,#90H ;串行口中斷允許,CPU開(kāi)中斷
MOV R0,#30H ;接收數(shù)據(jù)存放單元的首地址
CLR F0 ;清出錯(cuò)標(biāo)志(2).乙機(jī)接收方的子程序波特率設(shè)置第7章習(xí)題HERE: JB F0,NEXT CJNE R0,#36H,HERE MOV IE,#00H ;關(guān)中斷
MOV A,#0LOOP: DEC R0 XRL A,@R0 CJNE R0,#30H,LOOP JNZ NEXT ;接收6個(gè)字節(jié)異或≠0,出錯(cuò)
MOV R1,#20H ;接收正確,放入20H~24HLOOP1: MOV A,@R0 MOV @R1,A INC R0 INC R1 CJNE R0,#35H,LOOP1 ·······
(2).乙機(jī)接收方的子程序第7章習(xí)題COM_INT: CLR RI MOV A,SBUF ;讀出接收數(shù)據(jù)
JB PSW.0,JSBW1 ;奇偶校驗(yàn),P=1轉(zhuǎn)
JB RB8,ERR ;P=0,RB8=1,出錯(cuò)
SJMP JSBW2JSBW1: JNB RB8,ERR ;P=1,RB8=0,出錯(cuò)JSBW2: MOV @R0,A INC R0 RETIERR: SETB F0 MOV IE,#00H ;關(guān)中斷
RETI 第7章習(xí)題作業(yè)中的錯(cuò)誤:CJNERB8,C,LOOP2MOVA,@R2在中斷服務(wù)程序中,奇偶校驗(yàn)錯(cuò),轉(zhuǎn)移到中斷服務(wù)程序中ERR標(biāo)號(hào)處;在主程序中,縱向冗余校驗(yàn)錯(cuò),也轉(zhuǎn)移到中斷服務(wù)程序中ERR標(biāo)號(hào)處。沒(méi)有這樣的指令沒(méi)有這樣的指令第7章習(xí)題2.在串行通信中,收發(fā)雙方對(duì)波特率的設(shè)定應(yīng)該是
的。3.下列選項(xiàng)中,
是正確的。A.串行口通信的第9數(shù)據(jù)位的功能可由用戶定義B.發(fā)送數(shù)據(jù)的第9數(shù)據(jù)位的內(nèi)容是在SCON寄存器的TB8位中預(yù)先準(zhǔn)備好的C.串行通信幀發(fā)送時(shí),指令把TB8位的狀態(tài)送入發(fā)送SBUF中D.串行通信接收到的第9位數(shù)據(jù)送SCON寄存器的RB8中保存E.串行口方式1的波特率是可變的,通過(guò)T1的溢出率設(shè)定A、B、D、E相等第8章習(xí)題10*.編寫(xiě)程序,將外部數(shù)據(jù)存儲(chǔ)器中4000H~40FFH單元全部清“0”。解:本題主要考察對(duì)外部數(shù)據(jù)塊的寫(xiě)操作;編程時(shí)只要注意循環(huán)次數(shù)和MOVX指令的使用就可以了。CLEAR0: MOV A,#0 ;0給A MOV R0,#00H ;設(shè)置循環(huán)次數(shù)
MOV DPTR,#4000H ;設(shè)置數(shù)據(jù)指針的初值LOOP: MOVX @DPTR,A ;當(dāng)前單元清“0” INC DPTR ;指向下一個(gè)單元
DJNZ R0,LOOP ;是否結(jié)束
RET #0FFH,只有255次0000H~3FFFH4000H~7FFFH8000H~BFFFHC000H~FFFFH第8章習(xí)題12*.請(qǐng)寫(xiě)出圖8-14中4片程序存儲(chǔ)器27128各自所占的地址空間。A15A14A13A12A11A10A9A8A7A6A5A4A3A2A1A0
0
0
0/10/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0
1
0/10/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
1
0
0/10/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
1
10/10/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
第8章習(xí)題13*.現(xiàn)有AT89C51單片機(jī)、74LS373鎖存器、1片2764EPROM和兩片6264RAM,請(qǐng)用它們組成一個(gè)單片機(jī)應(yīng)用系統(tǒng),要求如下:(1).畫(huà)出硬件電路連線圖,并標(biāo)注主要引腳;(2).指出該應(yīng)用系統(tǒng)程序存儲(chǔ)器空間和數(shù)據(jù)存儲(chǔ)器空間各自地址范圍。解:由于沒(méi)有譯碼器,只能采用線選法;若增加一個(gè)譯碼器74LS39,則可以采用譯碼法。第8章習(xí)題線選法設(shè)計(jì)的電路如圖IC12764C000H~DFFFHIC26264A000H~BFFFHIC362646000H~7FFFH110A15
A14A13A12A11A10A9A8A7A6A5A4A3A2A1A01
10
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
1
01
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0
11
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
101011123第8章習(xí)題譯碼法設(shè)計(jì)的電路如圖IC127640000H~1FFFHIC262642000H~3FFFHIC362644000H~5FFFH123000A15
A14A13A12A11A10A9A8A7A6A5A4A3A2A1A0
0
000/10/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0
010/10/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0
10
0/10/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
001010第8章習(xí)題2.假設(shè)外部數(shù)據(jù)存儲(chǔ)器2000H單元的內(nèi)容為80H,執(zhí)行下列指令后累加器A中的內(nèi)容為
。MOVP2,#20HMOVR0,#00HMOVXA,@R03.在存儲(chǔ)器擴(kuò)展中,無(wú)論是線選法還是譯碼法最終都是為擴(kuò)展芯片的片選端提供
控制信號(hào)。4.起止范圍為0000H~3FFFH的存儲(chǔ)器的容量是
KB。解:存儲(chǔ)器的容量=4000H=214=24×210=16×210=16KB80H片選16;提供高位地址;提供低位地址第8章習(xí)題8.區(qū)分AT89C51單片機(jī)片外程序存儲(chǔ)器和片外數(shù)據(jù)存儲(chǔ)器的最可靠方法是
。A.看其位于地址范圍的低端還是高端B.看其離AT89C51單片機(jī)芯片的遠(yuǎn)近C.看其芯片的型號(hào)是ROM還是RAMD.看其是與RD信號(hào)連接還是與PSEN信號(hào)連接D第9章習(xí)題4*.常用的I/O端口編址有哪兩種方式?它們各有什么特點(diǎn)?AT89C51單片機(jī)的I/O端口編址采用的是哪種方式?答:有兩種。(1).獨(dú)立編址方式。就是I/O地址空間和存儲(chǔ)器地址空間分開(kāi)編址。其優(yōu)點(diǎn)是,I/O地址空間和存儲(chǔ)器地址空間相互獨(dú)立,界限分明。但是,卻需要設(shè)置一套專(zhuān)門(mén)的讀/寫(xiě)I/O的指令和控制信號(hào)。(2).統(tǒng)一編址方式。它是把I/O端口的寄存器與數(shù)據(jù)存儲(chǔ)器單元同等對(duì)待,統(tǒng)一編址。統(tǒng)一編址的優(yōu)點(diǎn)是不需要專(zhuān)門(mén)的I/O指令,直接使用訪問(wèn)數(shù)據(jù)存儲(chǔ)器的指令進(jìn)行I/O操作,簡(jiǎn)單、方便且功能強(qiáng)大。AT89C51單片機(jī)使用的是I/O和外部數(shù)據(jù)存儲(chǔ)器RAM統(tǒng)一編址的方式。第9章習(xí)題6*.編寫(xiě)程序,采用82C55的PC口按位置位/復(fù)位控制字,將PC7置“0”,PC4置“1”(已知82C55各端口的地址為7FFCH~7FFFH)。解:按位置位/復(fù)位控制字是對(duì)控制寄存器操作,控制字最高位為0,低4位選擇PC的位與置1或清0。控制寄存器地址7FFFH。SEPC: MOV DPTR,#7FFFH ;控制字寄存器地址送DPTR MOV A,#0EH ;將PC7置0——00001110 MOVX @DPTR,A MOV A,#09H ;將PC4置1——00001001 MOVX @DPTR,A RETA1A000A口 7FFCH01 B口 7FFDH10 C口 7FFEH11 控制口 7FFFH第9章習(xí)題11.設(shè)81C55TIMERIN引腳輸入脈沖頻率1MHz,要在81C55的TIMEROUT引腳上輸出周期為0.1ms方波,試編寫(xiě)程序(I/O口地址為7F00H~7F05H)。解:(1).初值計(jì)算:輸出方波周期為0.1ms,其頻率為10kHz,將頻率1MHz的脈沖100分頻就是頻率10kHz的方波,所以將定時(shí)器初值設(shè)置為64H。(2).地址分析64H40H01(3).寄存器設(shè)置M2M1=01定時(shí)器輸出方波A2A1A0000 控制口7F00H001 A口 7F01H010 B口 7F02H011 C口7F03H011 TL7F04H011 TH7F05H(4).控制字D7D6組合用來(lái)設(shè)置計(jì)數(shù)器的操作。11啟動(dòng)計(jì)數(shù)器。C0H第9章習(xí)題參考程序START:MOV DPTR,#7F04H ;指針指向計(jì)數(shù)器低8位
MOV A,#64H ;送初值給A MOVX@DPTR,A ;初值送給計(jì)數(shù)器低8位
INC DPTR ;指向計(jì)數(shù)器高8位
MOV A,#40H ;計(jì)數(shù)器方波輸出
MOVX@DPTR,A MOV DPTR,#7F00H ;指向命令/狀態(tài)口
MOV A,#0C0H ;設(shè)定控制字
MOVX@DPTR,A ;啟動(dòng)計(jì)數(shù)器
END作業(yè)中2710H?第9章習(xí)題5.82C55的“方式控制字”和“PC口按位置位/復(fù)位控制字”都可以寫(xiě)入82C55的同一控制寄存器,82C55是如何來(lái)區(qū)分這兩個(gè)控制字的?答:82C55通過(guò)寫(xiě)入控制字寄存器的控制字最高位來(lái)判斷,最高位為1時(shí),為方式控制字;最高位為0時(shí),為PC口按位置位/復(fù)位控制字。第9章習(xí)題10.假設(shè)81C55的TIMERIN引腳輸入的頻率為4MHz,問(wèn)81C55的最大定時(shí)時(shí)間是多少?解:81C55計(jì)數(shù)器的最大計(jì)數(shù)值為214,即初值為00H時(shí),有最大計(jì)數(shù)值。計(jì)數(shù)一次的時(shí)間為一個(gè)周期的時(shí)間:最大定時(shí)時(shí)間==0.004096s答:當(dāng)頻率為4MHz時(shí),81C55計(jì)數(shù)器最大定時(shí)時(shí)間為0.004096s。第10章習(xí)題3*.LED靜態(tài)顯示方式與動(dòng)態(tài)顯示方式有何區(qū)別?各有什么優(yōu)缺點(diǎn)?靜態(tài)顯示時(shí),數(shù)據(jù)是分開(kāi)送到每一位LED上。靜態(tài)顯示亮度很高,但口線占用較多。動(dòng)態(tài)顯示時(shí),數(shù)據(jù)同時(shí)送到每一個(gè)LED上,由位選線來(lái)確定是哪一位顯示。口線占用較少,適合用在顯示位數(shù)較多的場(chǎng)合。第10章習(xí)題6*.對(duì)于圖10-10所示的鍵盤(pán),采用線反轉(zhuǎn)法原理編寫(xiě)出識(shí)別某一按鍵被按下并得到其鍵號(hào)的程序。解:程序設(shè)計(jì)思想①.線反轉(zhuǎn)法讀取按鍵特征碼:先對(duì)P1口高4位送低電平,讀取P1口低4位的值;再對(duì)P1口低4位送低電平,讀取P1口高4位的值,將兩次讀到的值組合在一起(相或
)就得到了按鍵的特征碼。②.根據(jù)按鍵特征碼查找鍵值:將鍵0、鍵1、······鍵15的特征碼依次放在程序存儲(chǔ)區(qū)標(biāo)號(hào)KEYCOD為首的區(qū)域。得到了按鍵的特征碼后,依次與標(biāo)號(hào)KEYCOD為首的區(qū)域的特征碼比較,用R3作順序計(jì)數(shù),第0次比較相等,則是鍵0按下,R3=0,······第n次比較相等,則是鍵n按下,R3=n,16個(gè)特征碼比較完后,無(wú)相等,認(rèn)為按鍵無(wú)效。①.線反轉(zhuǎn)法思想第1步:列線輸出,行線輸入列線輸出為全低電平,則檢測(cè)=0的行線,為按鍵所在行。第2步:行線輸出,列線輸入行線輸出為全低電平,則檢測(cè)=0的列線,為按鍵所在列。結(jié)合上述兩步,可確定按鍵所在行和列。由此得到鍵3的特征碼EEH鍵0:E7H,鍵1:EBH,鍵8:B7H,鍵13:7BH,1步:輸出P1=F0H,輸入P1=E0H;確定按下鍵在行1;2步:輸出P1=0FH,輸入P1=0EH;確定按下鍵在列4;000011110111000001111111第10章習(xí)題第10章習(xí)題②.根據(jù)按鍵特征碼查找鍵值:將鍵0、鍵1、······鍵15的特征碼依次放在程序存儲(chǔ)區(qū)標(biāo)號(hào)KEYCOD為首的區(qū)域。得到了按鍵的特征碼后,依次與標(biāo)號(hào)KEYCOD為首的區(qū)域的特征碼比較,用R3作順序計(jì)數(shù),第0次比較相等,則是鍵0按下,R3=0,······第n次比較相等,則是鍵n按下,R3=n,16個(gè)特征碼比較完后,無(wú)相等,認(rèn)為按鍵無(wú)效。特征碼表如下鍵0鍵1鍵2鍵3鍵4鍵5鍵6KEYCOD:DB0E7H,0EBH,0EDH,0EEH,0D7H,0DBH,0DDH······若(A)=EDH,開(kāi)始R3=FFH第0次,R3+1,R3=0,(A)與E7H比較,相等R3=0是鍵值,不等繼續(xù)第1次,R3+1,R3=1,(A)與EBH比較,相等R3=1是鍵值,不等繼續(xù)第2次,R3+1,R3=2,(A)與EDH比較,相等R3=2是鍵值。第10章習(xí)題KEYIN: MOV P1,#0F0H ;列輸出0 MOV A,P1 ;反轉(zhuǎn)讀鍵
ANL A,#0F0H MOV B,A ;行值保存在B寄存器
MOV P1,#0FH ;行輸出0 MOV A,P1 ;反轉(zhuǎn)讀鍵
ANL A,#0FH ORL A,B ;得到特征碼 CJNE A,#0FFH,KEYIN1 RET ;=FFH,未按鍵KEYIN1: MOV B,A ;特征碼暫存B
MOV DPTR,#KEYCOD ;指向特征碼表第10章習(xí)題
MOV R3,#0FFH ;順序碼初始化,-1開(kāi)始KEYIN2: INC R3 MOV A,R3 MOVC A,@A+DPTR CJNE A,B,KEYIN3
MOV A,R3 ;找到,取順序碼
RETKEYIN3: CJNE R3,#0FH,KEYIN2 ;未完,再查
RET ;未找到,以未按鍵處理KEYCOD: DB 0E7H,0EBH,0EDH,0EEH ;特征碼表
DB 0D7H,0DBH,0DDH,0DEH DB 0B7H,0BBH,0BDH,0BEH DB 77H,7BH,7DH,7EH第10章習(xí)題10.如果把圖10-25所示的打印機(jī)的BUSY線斷開(kāi),然后與AT89C51單片機(jī)的INT0線相接,請(qǐng)簡(jiǎn)述電路的工作原理并編寫(xiě)將以20H為起始地址的連續(xù)20個(gè)內(nèi)存單元中的內(nèi)容輸出的打印程序。INT0地址:A:7CHB:7DHC:7EH控:7FH08255設(shè)置方式0輸出:80H第10章習(xí)題解:本程序采用外部中斷來(lái)完成數(shù)據(jù)打印,先打印一個(gè)數(shù)據(jù),當(dāng)BUSY線從高電平變成低電平時(shí),再打印下一個(gè)數(shù)據(jù)。參考程序如下:
ORG 0000H LJMP MAIN ORG 0003H LJMP INORG 0030HMAIN: SETB EX0 ;允許外部中斷
SETB IT0 ;下降沿中斷
SETB EA ;CPU開(kāi)中斷
MOV R0,#7FH ;控制口地址
MOV A,#81H ;控制字:10000000,方式0輸出
MOVX @R0,A第10章習(xí)題
MOV R1,#20H ;數(shù)據(jù)區(qū)首地址
MOV R2,#19 ;計(jì)數(shù)器:中斷中輸出19字節(jié)數(shù)據(jù)打印
MOV A,@R1 ;打印內(nèi)容第1字節(jié)數(shù)據(jù)
MOV R0,#7CH ;A口地址
MOVX @R0,A ;打印第1字節(jié)數(shù)據(jù)
MOV R0,#7FH ;控制口地址
MOV A,#0EH ;按位置位/復(fù)位控制字:00001110 MOVX @R0,A ;PC7=0 MOV A,#0FH ;按位置位/復(fù)位控制字:00001111 MOVX @R0,A ;PC7=1 SJMP $PC7第10章習(xí)題IN: DJNZ R2,EX ;20個(gè)數(shù)據(jù)都結(jié)束了嗎?
INC R1 ;指向下一個(gè)數(shù)據(jù)
MOV A,@R1 MOV R0,#7CH ;A口地址
MOVX @R0,A ;打印該字節(jié)數(shù)據(jù)
MOV R0,#7FH ;控制口地址
MOV A,#0EH ;按位置位/復(fù)位控制字:00001110 MOVX @R0,A ;PC7=0 MOV A,#0FH ;按位置位/復(fù)位控制字:00001111 MOVX @R0,A ;PC7=1EX: RETI第10章習(xí)題1.下列
項(xiàng)說(shuō)法正確。A.HD7279是一個(gè)用于鍵盤(pán)和LED顯示器的專(zhuān)用接口芯片B.在單片機(jī)與微型打印機(jī)的接口中,打印機(jī)的BUSY信號(hào)可作為查詢信號(hào)或中斷請(qǐng)求信號(hào)使用C.為給掃描法工作的8×8鍵盤(pán)提供接口電路,在接口電路中只需要提供兩個(gè)輸入口和一個(gè)輸出口D.LED顯示器的字型碼是固定不變的A、B第10章習(xí)題5.說(shuō)明矩陣式鍵盤(pán)按鍵按下的識(shí)別原理。答:按鍵設(shè)置在行、列線交點(diǎn)上,行、列線分別連接到按鍵開(kāi)關(guān)的兩端。行線通過(guò)上拉電阻接到+5V上,無(wú)按鍵按下時(shí),行線處于高電平狀態(tài),而當(dāng)有按鍵按下時(shí),行線電平狀態(tài)將由與此行線相連的列線的電平?jīng)Q定。列線的電平如果為低,則行線電平為低;列線的電平如果為高,則行線的電平亦為高。將行、列線信號(hào)配合起來(lái)并做適當(dāng)?shù)奶幚?,才能確定閉合鍵的位置。第11章習(xí)題3*.判斷下列說(shuō)法是否正確。(1).“轉(zhuǎn)換速度”這一指標(biāo)僅適用于A/D轉(zhuǎn)換器,D/A轉(zhuǎn)換器不用考慮“轉(zhuǎn)換速度”問(wèn)題。(2).ADC0809可以利用“轉(zhuǎn)換結(jié)束”信號(hào)EOC向AT89C51單片機(jī)發(fā)出中斷請(qǐng)求。(3).輸出模擬量的最小變化量稱(chēng)為A/D轉(zhuǎn)換器的分辨率。(4).對(duì)于周期性的干擾電壓,可使用雙積分型A/D轉(zhuǎn)換器,并選擇合適的積分元件,可以將該周期性的干擾電壓帶來(lái)的轉(zhuǎn)換誤差消除。第11章習(xí)題9*.在一個(gè)由AT89C51單片機(jī)與一片ADC0809組成的數(shù)據(jù)采集系統(tǒng)中,ADC0809的8個(gè)輸入通道的地址為7FF8H~7FFFH,試畫(huà)出有關(guān)接口的電路圖,并編寫(xiě)每隔1分鐘輪流采集一次8個(gè)通道數(shù)據(jù)的程序,共采樣50次,其采樣值存入片外RAM中以2000H單元開(kāi)始的存儲(chǔ)區(qū)中。解:接口電路如圖。通道地址A15=0A14~A3可任意,取1A2A1A0選擇通道通道0地址:7FF8H通道1地址:7FF9H·······通道7地址:7FFFH第11章習(xí)題9.ADC0809的8個(gè)輸入通道地址為7FF8H~7FFFH,并編寫(xiě)每隔1分鐘輪流采集一次8個(gè)通道數(shù)據(jù)的程序,共采樣50次,其采樣值存入片外RAM中以2000H單元開(kāi)始的存儲(chǔ)區(qū)中。設(shè)計(jì)思想:AT89C51指令系統(tǒng)中,只有一個(gè)16位指針DPTR,在每次循環(huán)過(guò)程中,既要用DPTR指示不同的通道,又要用DPTR指示不同的存儲(chǔ)單元,而不能用R1=2000H作指針——
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度小額貸款個(gè)人信用借款合同范本2篇
- 二零二五年度電子商務(wù)銷(xiāo)售結(jié)算合同3篇
- 二零二五年度建筑施工安全環(huán)保事故處理協(xié)議3篇
- 二零二五年度個(gè)人住宅買(mǎi)賣(mài)合同示范范本
- 酒店管理工作中的風(fēng)險(xiǎn)管控
- 醫(yī)院行業(yè)美工的醫(yī)療廣告
- 培訓(xùn)行業(yè)課程安全操作指南
- 電子工程師的領(lǐng)域探索
- 二零二五年度農(nóng)產(chǎn)品直銷(xiāo)銷(xiāo)售合同范本
- 2025版石膏板吊頂施工合同合同解除條件模板下載3篇
- 單元教學(xué)評(píng)一體化設(shè)計(jì)的探索與實(shí)踐以統(tǒng)編語(yǔ)文教材四年級(jí)下冊(cè)第一單元為例
- 個(gè)人安全與社會(huì)責(zé)任的基本知識(shí)概述
- 醫(yī)院標(biāo)識(shí)牌方案設(shè)計(jì)2
- 移動(dòng)商務(wù)內(nèi)容運(yùn)營(yíng)(吳洪貴)任務(wù)二 有效傳播模式的設(shè)計(jì)
- 簡(jiǎn)易勞務(wù)合同電子版
- 明代文學(xué)緒論
- 體育賽事的策劃、組織與實(shí)施 體育賽事利益相關(guān)者
- 三級(jí)醫(yī)院評(píng)審標(biāo)準(zhǔn)(2023年版)實(shí)施細(xì)則
- 分析化學(xué)(高職)PPT完整版全套教學(xué)課件
- 晚熟的人(莫言諾獎(jiǎng)后首部作品)
- 《好文案一句話就夠了》讀書(shū)筆記思維導(dǎo)圖
評(píng)論
0/150
提交評(píng)論