




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
.40/40《單片微型計(jì)算機(jī)與接口技術(shù)》思考題與習(xí)題解答第0章基礎(chǔ)知識(shí)0.1將下列十進(jìn)制數(shù)轉(zhuǎn)換為十六進(jìn)制數(shù):64,98,80,100,125,255。0.140H,62H,50H,64H,7DH,FFH0.2將下列十六進(jìn)制無(wú)符號(hào)數(shù)轉(zhuǎn)換為十進(jìn)制數(shù):32CH,68H,D5H,100H,B78H,3ADH。O.2812,104,213,256,2936,9410.3寫(xiě)出下列十進(jìn)制數(shù)的原碼和補(bǔ)碼,用8位或16位數(shù)填人表1中<要求用十六進(jìn)制數(shù)表示>。表1十進(jìn)制數(shù)原碼補(bǔ)碼十進(jìn)制數(shù)原碼補(bǔ)碼28250-28-347l00928-130-9280.3十進(jìn)制數(shù)原碼補(bǔ)碼十進(jìn)制數(shù)原碼補(bǔ)碼281CH1CH250FAHFAH-289CHE4H-347815BHFEA5H10064H64H92803AOH03AOH-1308082HFF7EH-92883AOHFC60H0.4用十進(jìn)制數(shù)寫(xiě)出下列補(bǔ)碼表示的機(jī)器數(shù)的真值:1BH,97H,80H,F8H,397DH,7AEBH,9350H,CF42H。O.4機(jī)器數(shù)的真值分別為:27,233,-128,-8,14717,31467,-27824,-124780.5用補(bǔ)碼運(yùn)算完成下列算式,并指出溢出OV和進(jìn)位CY:<1>33H+5AH<2>-29H-5DH<3>65H-3EH<4>4CH-68H0.5<1>33H+5AH=8DH,OV=1,CY=0<2>-29H-5DH=7AH,OV=1,CY=1<3>65H-3EH=27H,OV=0,CY=1<4>4CH-68H=E4H,0V=O,CY=O0.6將表2中的十進(jìn)制數(shù)按要求轉(zhuǎn)換,用十六進(jìn)制數(shù)填入。表2十進(jìn)制數(shù)壓縮BCD數(shù)非壓縮BCD數(shù)ASCII碼3825548376410001025O.6十進(jìn)制數(shù)壓縮BCD數(shù)非壓縮BCD數(shù)ASCII碼3838H0308H3338H255255H020505H323535H483483H040803H343833H764764H070604H373634H10001000H01000000H31303030H10251025H01000205H31303235H0.7寫(xiě)出下列ASCII碼表示的十六進(jìn)制數(shù)<如313035H為105H>:374341H,32303030H,3841353DH。0.7ASCIl碼表示的十六進(jìn)制數(shù)分別為:105H,7CAH,200¨。H,8A50H第1章MCS-51單片機(jī)1.1什么是嵌入式系統(tǒng)?其控制核心有哪幾種類型?1.1見(jiàn)緒論1.2單片微型計(jì)算機(jī)與微處理器在結(jié)構(gòu)上和使用中有什么差異?單片機(jī)和DSP在使用上有什么差別?1.2單片微型計(jì)算機(jī)是包含CPU、存儲(chǔ)器和I/O接口的大規(guī)模集成芯片,即它本身包含了除外部設(shè)備以外構(gòu)成微機(jī)系統(tǒng)的各個(gè)部分,只需接外設(shè)即可構(gòu)成獨(dú)立的微機(jī)應(yīng)用系統(tǒng)。微機(jī)處理器僅為CPU,CPU是構(gòu)不成獨(dú)立的微機(jī)系統(tǒng)的。DSP是數(shù)據(jù)處理的專用芯片,單片機(jī)主要用做控制,也具有簡(jiǎn)單的數(shù)據(jù)處理能力。1.351系列單片機(jī)內(nèi)部有哪些功能部件?1.3見(jiàn)1.1.1節(jié)1.451系列單片機(jī)有哪些品種?結(jié)構(gòu)有什么不同?各適用于什么場(chǎng)合?1.4見(jiàn)緒論1.551系列單片機(jī)的存儲(chǔ)器可劃為幾個(gè)空間?各自的地址范圍和容量是多少?在使用上有什么不同?1.5見(jiàn)表1-51.6在單片機(jī)內(nèi)部RAM中,哪些字節(jié)有位地址,哪些沒(méi)有位地址?特殊功能寄存器SFR中哪些可以位尋址?有什么好處?1.6見(jiàn)表1-1和表1-21.7已知PSW=10H,通用寄存器R0~R7的地址分別是多少?1.7當(dāng)PSw=10H,表明選中的為第二組通用寄器RO~R7的地址為10H~17H1.8程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器可以有相同的地址,而單片機(jī)在對(duì)這兩個(gè)存儲(chǔ)區(qū)的數(shù)據(jù)進(jìn)行操作時(shí),不會(huì)發(fā)生錯(cuò)誤,為什么?1.8序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器盡管地址相同,但在數(shù)據(jù)操作時(shí),所使用的指令不同,選通信號(hào)也不同,因此不會(huì)發(fā)生錯(cuò)誤。1.9填空:堆棧設(shè)在存儲(chǔ)區(qū),程序存放在存儲(chǔ)區(qū),I/0接口設(shè)置在存儲(chǔ)區(qū),中斷服務(wù)程序存放在存儲(chǔ)區(qū)。1.9內(nèi)部數(shù)據(jù)程序外部數(shù)據(jù)程序1.10若單片機(jī)使用頻率為6MHz的晶振,那么狀態(tài)周期、機(jī)器周期和指令周期分別是多少?1.10振蕩周期=0.1667us,機(jī)器周期=2us,指令周期=2~8us1.11復(fù)位時(shí),A=,PSW=,SP=,P0~P3=1.11A=0,PSW=0,SP=07,P0~P3=FFH第2章指令系統(tǒng)2.1MCS-51單片機(jī)有哪幾種尋址方式,適用于什么地址空間?用表格表示。2.1見(jiàn)2.1節(jié)2.2MCS-51單片機(jī)的PSW程序狀態(tài)字中無(wú)ZERO<零>標(biāo)志位,怎樣判斷某內(nèi)部數(shù)據(jù)存儲(chǔ)單元的內(nèi)容是否為O?2.2因?yàn)槔奂悠鰽自帶零標(biāo)志,因此,若判斷某內(nèi)部RAM單元的內(nèi)容是否為零,必須將其內(nèi)容送到A,通過(guò)JZ指令即可進(jìn)行判斷。2.3設(shè)A=0,執(zhí)行下列兩條指令后,A的內(nèi)容是否相同,說(shuō)明道理。<1>MOVCA,@A+DPTR<2>MOVXA,@DPTR2.3當(dāng)A=O時(shí),兩條指令的地址雖然相同,但操作碼不同,MOVC是尋址程序存儲(chǔ)器,MOVX是尋址外部數(shù)據(jù)存儲(chǔ)器,送入A的是兩個(gè)不同存儲(chǔ)空間的內(nèi)容。2.4指出下列各指令中操作數(shù)的尋址方式指令目的操作數(shù)尋址方式源操作數(shù)尋址方式ADDA,40HPUSHACCMOVB,20HANLP1,#35HMOV@R1,PSWMOVCA,@A+DPTRMOVX@DPTR,A2.4目的操作數(shù)源操作數(shù)寄存器直接SP間接尋址直接直接直接直接立即寄存器問(wèn)址直接寄存器變址寄存器間址寄存器2.5執(zhí)行下列程序段MOVA,#56HADDA,#74HADDA,ACC后,CY=,OV=,A=。2.5CY=1,OV=0,A=94H2.6在錯(cuò)誤的指令后面括號(hào)中打×。MOV@R1,#80H<>MOVR7,@R1<>√×MOV20H,@R0<>MOVR1,#0100H<>√×CPLR4<>SETBR7,0<>××MOV20H,21H<>ORLA,R5<>√√ANLR1,#OFH<>XRLP1,#31H<>×√MOVXA,2000H<>MOV20H,@DPTR<>××MOVA,DPTR<>MOVR1,R7<>××PUSHDPTR<>POP30H<>×√MOVCA,@R1<>MOVCA,@DPTR<>××MOVX@DPTR,#50H<>RLCB<>××ADDCA,C<>MOVC@R1,A<>××2.6√×√×××√√×√×××××√××××××2.7設(shè)內(nèi)部RAM中<59H>=50H,執(zhí)行下列程序段:MOVA,59HMOVR0,AMOVA,#0MOV@R0,AMOVA,#25HMOV51H,AMOV52H,#70H問(wèn)A=,<50H>=,<51H>=,<52H>=。2.7A=25H,<50H>=O,<51H>=25H,<52H>=70H2.8設(shè)SP=60H,內(nèi)部RAM的<30H>=24H,<31H>=10H,在下列程序段注釋的括號(hào)中填執(zhí)行結(jié)果。PUSH30H;SP=<>,<SP>=<>PUSH3lH;SP=<>,<SP>=<>POPDPL;SP=<>,DPL=<>POPDPH;SP=<>,DPH=<>MOVA,#00HMOVX@DPTR,A最后執(zhí)行結(jié)果是<>。2.8SP=<61H>,<SP>=<24H>SP=<62H>,<SP>=<10H>SP=<61H>,DPL=<10H>SP=<60H>,DPH=<24H>執(zhí)行結(jié)果將0送外部數(shù)據(jù)存儲(chǔ)器的2410單元。2.9對(duì)下列程序中各條指令作出注釋,并分析程序運(yùn)行的最后結(jié)果。MOV20H,#0A4HMOVA,#017>6HMOVR0,#20HMOVR2,#57HANLA,R2ORLA,@R0SWAPACPLAORL20H,ASJMP$2.9程序運(yùn)行后內(nèi)部RAM<20H>=B4H,A=90H2.10將下列程序譯為機(jī)器碼。機(jī)器碼源程序LA:MOVA,#01HLB:MOVP1,ARLACJNEA,#10,LBSJMPLA2.10機(jī)器碼源程序7401LA:M<>VA,#01HF590LB:M<>VP1,A23RLAB40AFACJNEA,#10,LB80F6SJMPLA2.11將累加器A的低4位數(shù)據(jù)送P??诘母?位,P。口的低4位保持不變。2.11ANLA,#0FHSWAPAANLP1.#OFHORLP1,ASJMP$2.12編程將R0<R2>的內(nèi)容和R1<R3>的內(nèi)容相交換。2.12MOVA,ROXCHA,R1MOVR0,ASJMP$2.12MOVA,R2XCHA,R3MOVR2,ASJMP$2.13試用3種方法將A累加器中的無(wú)符號(hào)數(shù)乘4,積存放于B和A寄存器中。2.13<1>利用乘法指令MOVB,#04HMULABSJMP$<2>利用位移指令RLARLAMOV20H。AANLA,#03HMOVB,AMOVA,20HANLA,#OFCHSJMP$<3>用加法指令完成ADDA,ACCMOVRO,A:RO=2AMOVA,#0ADDCA。#0MOVB,A;B存2A的進(jìn)位MOVA,ROADDA,ACCMOVR1,A;R1=4AMOVA,BADDCA,B;進(jìn)位x2MOVB,A;存積高位MOVA,R1;存積低位SJMP$2.14編程將內(nèi)部RAM40H單元的中間4位變反,其余位不變放回原單元。2.14方法1:XRL40H,#3CHSJMP$方法2:MOVA,40HCPLAANLA,#3CHANL40H,#OC3HORL40H,ASJMP$2.15有兩個(gè)BCD碼數(shù)存放在<20H>和<21H>單元,完成<21H>+<20H>=><23H><22H>。<24H>+<25H>=><23H><22H>2.15MOVA,20HADDA,21HDAAMOV22H,A;存和低字節(jié)MOVA,#OADDCA,#0MOV23H,A;存進(jìn)位SJMP$2.15MOVA,24HADDA,25HDAAMOV22H,A;存和低字節(jié)MOVA,#OADDCA,#0MOV23H,A;存進(jìn)位SJMP$2.16如果R0的內(nèi)容為0,將R1置為0,如R0內(nèi)容非0,置R1為FFH,試進(jìn)行編程。2.16MOVA.R0JZZEMOVR1.#OFFHSJMP$ZE:MOVR1,#OSJMP$2.17完成<51H>×<50H>=><53H><52H>的編程<式中均為內(nèi)部RAM>。2.17MOVA,50HMOVB,51HMULABMOV53H。BMOV52H,ASJMP$2.18將P1.1和P1.0同時(shí)取反10次。<將P1.2和P1.0同時(shí)取反10次>2.18MOVR7,#0AHWOP:XRLP1,#03HDJNZR7,WOPSJMP$2.18MOVR7。#0AHWOP:XRLP1,#05HDJNZR7,WOPSJMP$2.19將內(nèi)部RAM單元3字節(jié)數(shù)<22H><21H><20H>×2送<23H><22H><21H><20H>單元。2.19單片機(jī)的移位指令只對(duì)A,且只有循環(huán)移位指令,為了使本單元的最高位移進(jìn)下一單元的最低位,必須用大循環(huán)移位指令移位4次。ORGOCLRCMOVA,20HRLCAMOV20H,AMOVA,21HRLCAMOV21H,AMOVA,22HRLCAMOV22H.AMOVA,#ORLCAMOV23H,ASLMP$第3章程序設(shè)計(jì)3.1編寫(xiě)程序,把片外數(shù)據(jù)存儲(chǔ)器0000H~0050H中的內(nèi)容傳送到片內(nèi)數(shù)據(jù)存儲(chǔ)器20H~70H中。3.1因?yàn)槭嵌鄠€(gè)單元操作,為方便修改地址,使用問(wèn)址操作。片外地址用DPTR指示.只能用M<>Vx指令取數(shù)到A,片內(nèi)地址用RO或R1指示,只能用MOV指令操作,因此,循環(huán)操作外部數(shù)據(jù)存儲(chǔ)器一A一內(nèi)部數(shù)據(jù)存儲(chǔ)器。ORGOOOOHMOVDPTR,#0000HMOVR0,#20HLOOP:MOVXA,@DPTRMOV@R0,AINCDPTRINCR0CJNER0,#71H,LOOPSJMP$3.2編寫(xiě)程序,實(shí)現(xiàn)雙字節(jié)加法運(yùn)算,要求RIR0+R7R6=><52H><51H><50H><內(nèi)部RAM>。3.2要注意兩高字節(jié)相加應(yīng)加低字節(jié)相加時(shí)產(chǎn)生的進(jìn)位,同時(shí)要考慮最高位的進(jìn)位。ORG0MOVA,ROADDA,R6MOV50H,AMOVA,R7ADDCA,R1MOV51H,AMOVA,#0ADDCA,#OMOV52H,ASJMP$3.3設(shè)X在累加器A中<0≤X≤20>,求X2并將平方數(shù)高位存放在R7中,低位存放在R6中。試用查表法編出子程序。3.3A中放X<小于14H>的數(shù),平方表的一個(gè)數(shù)據(jù)占2個(gè)字節(jié),可用BCD碼或二進(jìn)制數(shù)存放<如A中放的是BCD碼,則要先化成二進(jìn)制數(shù)再查表>。ORG0MOVDPTR,#TABADDA,ACC;A*2PUSHACCMOVCA,@A+DPTRMOVR7,APOPACCINCAMOVCA,@A+DPTRMOVR6,ASJMP$TAB:DB00,00,00,01,OO,04,OO,09,OO,16H,…DB…04H,003.4設(shè)內(nèi)部RAM的20H和21H單元中有兩個(gè)帶符號(hào)數(shù),將其中的大數(shù)存放在22H單元中,編出程序。3.4先用異或指令判兩數(shù)是否同號(hào),在同號(hào)中判大小,異號(hào)中正數(shù)為大。ORG0MOVA,20HXRLA.21HANLA,#80HJZCMPJB20H.7,BGAG:MOV22H,20HSJMP$BG:MOV22H,21HSJMP$CMP:MOVA,20HCJNEA,21H,GRGR:JNCAGMOV22H,21HSJMP$3.5若單片機(jī)的晶振頻率為6MHz,求下列延時(shí)子程序的延時(shí)時(shí)間。DELAY:MOVR1,#0F8HLOOP:MOVR3,#0FBHDJNZR3,$DJNZR1,LOOPRET3.5fosc=6MHz,MC=2us機(jī)器周期數(shù)DELAY:MOVR1,#OF8H1LOOP:MOVR3,#0FBH1DJNZR3,$2DJNZR1,LOOP2RET2<1+2+<1+2×251+2>×248>×2us=250.48ms3.6編程將內(nèi)部數(shù)據(jù)存儲(chǔ)器20H~24H單元壓縮的BCD碼轉(zhuǎn)換成ASCII碼存放在25H開(kāi)始的單元內(nèi)。3.6將待轉(zhuǎn)換的數(shù)分離出高半字節(jié)并移到低4位加30H;再將待轉(zhuǎn)換的數(shù)分離出低半字節(jié)并加30H,安排好源地址和轉(zhuǎn)換后數(shù)的地址指針,置好循環(huán)次數(shù)。ORG0000HMOVR7,#05HMOVRO,#20HMOVR1,#25HNET:MOVA,@ROANLA,#OFOHSWAPADDA,#30HMOV@R1,AINCR1MOVA,@ROANLA,#OFHADDA,#30HMOV@R1,AINCR0INCR1DJNZR7,NESJMP$END3.7從內(nèi)部存儲(chǔ)器30H單元開(kāi)始,有16個(gè)數(shù)據(jù),試編一個(gè)程序,把其中的正數(shù)、負(fù)數(shù)分別送40H和50H開(kāi)始的存儲(chǔ)單元,并分別將正數(shù)、負(fù)數(shù)和零的個(gè)數(shù)送R4,R5,R6。3.7片內(nèi)RAM間址寄存器只有Ro和R1,而正數(shù)、負(fù)數(shù)和零共需3個(gè)寄存器指示地址,這時(shí)可用堆棧指針指示第3個(gè)地址,POP和PUSH指令可自動(dòng)修改地址。RO指正數(shù)存放地址,Rl指負(fù)數(shù)存放地址,SP指源數(shù)據(jù)存放的末地址,POP指令取源數(shù)據(jù),每取一個(gè)數(shù)地址減1。ORG0000HMOVR7,#10HMOVA,#0MOVR4,AMOVR5,AMOVR6,AMOVR0,#40HMOVR1,#50HMOVSP,#2FHNEXT:POPACCJZZER0JBACC.7,NEINCR4MOV@RO,AINCR0AJMPDJNE:INCR5MOV@R1,AINCR1AJMPDJZER0:INCR6DJ:DJNZR7,NEXTSJMP$END3.8內(nèi)部存儲(chǔ)單元40H中有一個(gè)ASCII字符,試編一個(gè)程序給該數(shù)的最高位加上奇校驗(yàn)。3.8可直接用P標(biāo)志判斷<JBP,ret>ORG0000HMOVA。40HJBP,EN;奇數(shù)個(gè)1轉(zhuǎn)移0RLA,#80H;偶數(shù)個(gè)1最高位加"1"EN:SJMP$3.9編寫(xiě)一段程序,將存放在自DATA單元開(kāi)始的一個(gè)四字節(jié)數(shù)<高位在高地址>取補(bǔ)后送回原單元。3.9取補(bǔ)不同于求補(bǔ)碼,求補(bǔ)碼應(yīng)區(qū)別正、負(fù)數(shù)分別處理,而取補(bǔ)不分正、負(fù),因正、負(fù)數(shù)均有相對(duì)于模的補(bǔ)數(shù)。可用取反加l求補(bǔ),也可用模<00H>減該數(shù)的方法求補(bǔ)。ORG0000HMOVR7,#03HMOVR0,#DATAMOVA,@ROCPLAADDA,#01MOV@RO,AAB:INCROMOVA,@ROCPLAADDCA,#ODJNZR7,ABSJMP$3.10以BUFl為起始地址的外存儲(chǔ)區(qū)中,存放有16個(gè)單字節(jié)無(wú)符號(hào)二進(jìn)制數(shù),試編一個(gè)程序,求其平均值并送BUF2單元,余數(shù)存在BUF2—1單元。3.1016個(gè)單字節(jié)累加應(yīng)用ADD指令而不能用ADDC指令,和的低位存A,當(dāng)和超過(guò)一個(gè)字節(jié)時(shí),和的高字節(jié)存于B,并要加低位相加時(shí)產(chǎn)生的進(jìn)位,16個(gè)單字節(jié)加完后,采用右移4次進(jìn)行除16求平均值的運(yùn)算,商在BUF2單元,余數(shù)在BuF2-1單元。0RG0000HMoVR7,#0FHMOVR0,#BUFlMOVB,#0MOVA,@R0MOVR2,ANEXT:MOVA,R2INCR0ADDA,@R0MOVR2,AMOVA,BADDCA,#0MOVB,ADJNZR7,NEXT;以上完成求和MOVR6,#04HMOVBUF2,AMOVBUF2-1,#ONEX:CLRCMOVA,BRRCAMOVB,AMOVA,BUF2RRCAMOVBUF2,AMOVA,BUF2-1RRCAMOVBUF2-l,ADJNZR6,NEXSJMP$;以上完成除16運(yùn)算3.11將內(nèi)部RAM的20H單元中的十六進(jìn)制數(shù)變換成ASCII存入22H,21H單元,高位存入22H單元,要求用子程序編寫(xiě)轉(zhuǎn)換部分。3.11將20H單元的內(nèi)容分解為高4位和低4位,根據(jù)是否大于9分別進(jìn)行加37H和30H處理。0RG0000HMOVA,20HANLA,#0F0HSWAPAACALLASCIIMOV22H,AMOVA.20HANLA,#0FHACALLASCIIMOV21H,ASJMP$ENDASCII:CJNEA,#0AH,NENE:JCA30ADDA,#37HRETA30:ADDA,30HRET3.12編寫(xiě)一段程序,以實(shí)現(xiàn)圖中硬件的邏輯運(yùn)算功能。3.12要注意,位的邏輯運(yùn)算其中一個(gè)操作數(shù)必須在C。ORG0000HMOVC,20HANLC,2FHCPLCORLC,/2FHCPLCANLC,53HMOVP1.0,CSJMP$END3.13用位操作指令實(shí)現(xiàn)下面的邏輯方程<×表示邏輯乘,+表示邏輯加>:P1.2=<ACC.3×P1.4×-ACC.5>+<-B.4×-P1.5>3.13ORG0000HMOVC,ACC.3ANLC。P1.4ANLC,/ACC.5MOV20H,CMOVC,B.4CPLCANLC,/P1.5ORLC,20HMOVP1.2,CSJMP$END3.14試編寫(xiě)一個(gè)3字節(jié)無(wú)符號(hào)數(shù)乘1字節(jié)的乘法程序。3.14設(shè)一字節(jié)乘數(shù)存放在R1,三字節(jié)的被乘數(shù)存放在data開(kāi)始的內(nèi)部RAM單元,且低字節(jié)存放在低位地址單元,R0作為被乘數(shù)和積的地址指針,用MUL指令完成一字節(jié)乘一字節(jié),每一次部分積的低位加上一次部分積的高位,其和的進(jìn)位加在本次部分積的高位上,并暫存,三字節(jié)乘一字節(jié)共需這樣3次乘、加、存操作,以R7作循環(huán)3次的計(jì)數(shù)寄存器。ORG0000HMOVR7,#03HMOVR0,#dataMOVR2,#0NEXT:MOVA,@R0MOVB,R1MULABADDA,R2MOV@RO,AMOVA,#OADDC;A,BMOVR2,AINCR0DJNZR7,NEXTMOV@R0,BSJMP$END第4章單片機(jī)的C語(yǔ)言4.1改正下面程序的錯(cuò)誤。4.11:#include<reg51.h>本程序有如下錯(cuò)誤:2:main<>3:{a=c;①變量a,c必須先定義再引用4:inta=7,c;②第5句調(diào)用函數(shù)后必須加分號(hào).5:delay<>③main<>函數(shù)沒(méi)有反大括號(hào)6:voiddelay<>;④被調(diào)函數(shù)delay<>在main<>后面,必須在前面先聲明7:{8:chari;⑤第6句函數(shù)說(shuō)明語(yǔ)句后的分號(hào)應(yīng)去掉9:for<i=O;i<:255;i++>;10:}4.2試說(shuō)明為什么xdata型的指針長(zhǎng)度要用2個(gè)字節(jié)?4.2因?yàn)閤data是外部數(shù)據(jù)存儲(chǔ)器,最大可有64KB的存儲(chǔ)單元,xdata指針是表示外部數(shù)據(jù)存儲(chǔ)單元的地址,要表示64KB個(gè)單元地址,所以必須用2個(gè)字節(jié),共16位表示。4.3定義變量a、b、c;a為內(nèi)部RAM的可位尋址區(qū)的字符變量;b為外部數(shù)據(jù)存儲(chǔ)區(qū)浮點(diǎn)型變量;c為指向int型xdata區(qū)的指針。4.3bdatachara;xdatafloatb:xdataint~c;4.4編程將8XX51的內(nèi)部數(shù)據(jù)存儲(chǔ)器20H單元和35H單元的數(shù)據(jù)相乘,結(jié)果存到外部數(shù)據(jù)存儲(chǔ)器中<位置不固定>。4.4main<>{chardata*pl,*p2;xdatainta;p1=0x20;p2=0x35;a=*p1*<*p2>;}4.5將如下匯編程序譯成C程序<等效即可>。ORG0000HMOVP1,#04HMOVR6,#0AHMOVR0,#30HCLRP1.OSETBP1.3ACALLTLCSJMP$TLC:MOVA,#0CLRP1.3MOVR5,#08LOOP:MOVC,P1.2RLCASETBP1.0CLRP1.ODJNZR5,LOOPMOV@RO,AINCR0DJNZR6,TLC2543RETEND4.5#include<reg51.h>#defineucharunsignedcharsbitP1_0=P1^0;sbitPl_l=P1^1;sbitP1_2=P1^2;sbitP1_3=P1^3;sbitmsb=ACC^7;sbitlsb=ACC^0;uchartlc<void>;main<>{uchar*P;P1=0x04;P=0x30;P1_0=0;Pl_3=1;for<i=O;i<10;i++>{*P=tlc<>;P++:}}uchartlc<void>{uchari,y;ACC=0;Pl_3=0;for<i=0:i<8:i++>{P1_1=msb;/*發(fā)出ACC的低位*/y=ACC<<1;/*ACC右移1位*/lsb=P1_2;/*接收一位放在ACC的高位*/P1_0=1;P1_0=O;}returny;}4.68051的片內(nèi)數(shù)據(jù)存儲(chǔ)器25H單元中放有一個(gè)0~10的整數(shù),編程求其平方根<精確到5位有效數(shù)字>,將平方根放到30H單元為首址的內(nèi)存。4.6方法l:使用查表法floatcodetab[11]={0,1,1.4142,1.7321,2,2.2361,2.4495,2.6458,2.8284,3,3.1623}:main<>{chardata*P1;floatdata*P2;P1=0x25;P2=0x30;*P2=tab[*P1];}方法2:使用庫(kù)函數(shù)#lnclude<math.h>main<>{float*P2;char*P1;P1=0x25;*P2=sqrt<*P1>;}4.7完成邏輯表達(dá)式P1.2=P1.4×ACC.0+ACC.7<"×"表示邏輯與,"+"表示邏輯或>。4.7#include<reg51.h>sbitP12=P1^2:main<>{P12=~<P1^4&ACC^0>|ACC^7;}4.8將外部RAM的10H~15H單元的內(nèi)容傳送到內(nèi)部RAM的10H~15H單元。4.8#lnclude<reg51.h>main<>{charpdata*m;chardata*n;P2=0;for<m=0x10;m<=0x15;m++>{n=m;*n=*m;}}4.9內(nèi)部RAM的20H、21H和22H、23H單元分別存放著兩個(gè)無(wú)符號(hào)的16位數(shù),將其中的大數(shù)置于24H和25H單元。4.9#defineuintunsignedintmain<>{uintdata*m,*n,*P;for<;;>{m=0x20;n=0x22;P=0x24;if<*m<*n>*P=*n;else*P=*m:}}4.10將內(nèi)部RAM21H單元存放的BCD碼數(shù)轉(zhuǎn)換為二進(jìn)制存入30H為首址的單元,BCD碼的長(zhǎng)度存放在20H單元中。4.10main<>{intdataa=O,*P3:chari,*P1,*P2;Pl=0x20:P2=0x21:P3=0x30;for<i=O;i<*P1;i++>{a=a*10+*P2;P2++;}*P3=a;}4.11將內(nèi)部RAM30H單元存放的2字節(jié)二進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù)存于21H為首的單元中,長(zhǎng)度存放于20H單元中。4.11main<>{unsignedinta,k,*P3;chari,*P1,*P2:P1=0x20:P2=0x25:P3=0x30;a=*P3;k=10000;while<a/k==0>k=k/10;for<i=0;a!=0;i++>{*P2=a/k;a=a%k;P2++;k=k/10:*P1=i:}第5章并行口5.1什么是接口?CPU與外設(shè)之間為什么需要接口?接口的功能是什么?5.28XX51的4個(gè)I/<>端口的作用是什么?8XX51對(duì)外的三總線是如何分配的?5.38XX51的4個(gè)I/0端口在結(jié)構(gòu)上有何異同?使用時(shí)應(yīng)注意什么?5.4為什么說(shuō)8XX51能全部作為I/O口使用的僅有P1端口?5.1~5.4參閱5.1節(jié)5.5在例5-2中有如下語(yǔ)句:MOVP1,#0FFH;高4位的LED全滅,低4位輸入線送"1"ABC:MOVA,P1;讀P1口引腳開(kāi)關(guān)狀態(tài),并送入A為什么執(zhí)行了ABC語(yǔ)句后A的值低4位為開(kāi)關(guān)狀態(tài),而不是前一句的FFH,那么它的高4位值是什么呢?5.5由內(nèi)部結(jié)構(gòu)圖可知,MOVP1,#0FFH將使鎖存器Q=1,同時(shí)Q=0,VT截止,當(dāng)執(zhí)行MOVA,P1時(shí),讀引腳信號(hào)有效,低4位的開(kāi)關(guān)電平通過(guò)門2進(jìn)入內(nèi)部總線到A,而讀鎖存器信號(hào)無(wú)效,門1關(guān)閉,Q的信號(hào)進(jìn)不了內(nèi)部總線,高4位沒(méi)有引腳新的電平變化,由于VT截止,二極管也截止,進(jìn)入門2的是VT的漏極電壓Vcc,因此,高4位通過(guò)門2讀入的均是高電平即1111B。5.6利用8XX51的P1口,監(jiān)測(cè)某一按鍵開(kāi)關(guān),使每按鍵一次,輸出一個(gè)正脈沖<脈寬隨意>,畫(huà)出電路并編出程序。5.6用P1.7監(jiān)測(cè)按鍵開(kāi)關(guān),P1.0引腳輸出正脈沖,正脈沖的產(chǎn)生只需要將P1.0置零、置1、延時(shí)、再置零即可。P1.0接一示波器可觀察波形。如果再接一發(fā)光二極管,可觀察到發(fā)光二極管的閃爍。電路設(shè)計(jì)圖如習(xí)題5.6圖。習(xí)題5.6圖匯編語(yǔ)言程序ORG0000HABC:CLRP1.0SETBP1.7JBP1.7,$;等鍵按下JNBP1.7,$;待鍵彈起SETBP1.0MOVR2,#0DAY:NOPNOPDJNZR2,DAYSJMPABCC語(yǔ)言編程sfrP1=0x90:sbitp1_O=P1^O;sbitp1_7=P1^7;main<>{unsignedchari;while<1>{P1=0x80:do{}while<p1_7==1>;/*等鍵按下*/do{}while<p1_7==O>;/*等鍵彈起*/p1_0=1;for<i=O;i<255;i++>;}}5.7利用8XX51的P1口控制8個(gè)發(fā)光二極管LED。相鄰的4個(gè)LED為一組,使兩組每隔0.5s交替發(fā)亮一次,周而復(fù)始,畫(huà)出電路并編寫(xiě)程序<設(shè)延時(shí)0.5s子程序?yàn)镈05,已存在>。5.7電路見(jiàn)習(xí)題5.7圖,初始值送0FH到P1,再和0FFH異或從P1口輸出,或使用SWAPA指令。然后從P1口輸出,循環(huán)運(yùn)行,注意輸出后要延時(shí)。習(xí)題5.7圖匯編語(yǔ)言程序ORG0000HMOVA,#OFHABC:MOVP1,AACALLD05SWAPASJMPABCD05:MoVR6,250DY:MOVR7,250DAY:NOPNOPDJNZR7,DAYDJNZR6,DYRETENDC語(yǔ)言編程sfrP1=0x90;main<>{inti;P1=0xf0;while<1>{P1=~P1;fOr<i=0;i<5000;i++>;}5.8用89C51/89S51并行口設(shè)計(jì)顯示…個(gè)數(shù)碼的電路,使數(shù)碼管循環(huán)顯示"O"~"F"。5.8如使用共陰極數(shù)碼管,陰極接地,陽(yáng)極a~g分別接P0~P3的某個(gè)口的7位,將0~F的段碼列成表,表的內(nèi)容順次從該口輸出。如數(shù)碼管接P3口。匯編語(yǔ)言程序0RG0000HMOVDPTR,#TABAGAIN:MOVR0,#0NEXT:MOVA,ROMOVCA,@A+DPTRMOVP3,AMOVR7,#0DAY:NOPNOPDJNZR7,DAYINCR0CJNER0,#10H,NEXTSJMPAGAIN;段碼表<略>TAB:DB3FH,06H…ENDC語(yǔ)言程序#include<reg51.h>#defintuintunsignedint#defineucharunsignedcharmain<>{umtj;uchari;ucharcodetab[16]={0x3f,0x06……>;,/*段碼表<略>*/while<1>{for<i=O;i<=15;i++>{P3=tab[i]};for<j=O;j<10000;j++>;/*延時(shí)*/}}5.9設(shè)計(jì)一個(gè)能顯示4位數(shù)碼的電路,并用C語(yǔ)言和匯編語(yǔ)言編程使"8"能跑馬顯示8遍。5.9電路設(shè)計(jì)參考5.3節(jié)的圖5-8,分別用匯編語(yǔ)言和C語(yǔ)言的編程如下:圖5-8接5個(gè)共陰極數(shù)碼管的動(dòng)態(tài)顯示接口電路匯編語(yǔ)言程序0RG0000HMOVA,#08HM<>VDPTR,#TABMOVCA,@A+DPTRMOVP1,AMOVR2,#08HAGAIN:M<>VA,#01NEXT:M<>VP3,AACALLDAYRLACJNEA,#10H,NEXTDJNZR2,AGAINTAB:DB3FH,06H…ENDC語(yǔ)言程序#include<reg51.h>#defincuintunslgnedint#deflneucharunsignedcharmain<>{ucharcodetabl[]={0x3f,0s06…}uchari,m;uintj;for<m=O;m<8;i++>{P3=0x01:for<i=0;i<4;i++>{P1=tabl[8]P3<<=1:for<j=0;j<=25000;j++>;}}}5.10利用89C51/89S51并行口設(shè)計(jì)8×8的矩陣鍵盤(pán)并用箭頭標(biāo)明信號(hào)的方向。5.10P1口的8根線接行線,輸出行掃描信號(hào),P3口的8根線接列線,輸入回饋信號(hào)。參考5.3節(jié)圖5.9。8×8的矩陣鍵盤(pán)電路設(shè)計(jì)見(jiàn)習(xí)題5.10圖。習(xí)題5.10圖第6章中斷6.1解釋下列名詞:中斷、中斷源、中斷優(yōu)先級(jí)、中斷的嵌套、中斷系統(tǒng)。6.28XXSl有幾個(gè)中斷源?各中斷標(biāo)志是如何產(chǎn)生的,又如何清除?6.38XX51中斷源的中斷請(qǐng)求被響應(yīng)時(shí),各中斷入口地址是多少?在什么物理存儲(chǔ)空間?6.4MCS-51系列單片機(jī)的中斷系統(tǒng)有幾個(gè)優(yōu)先級(jí)?如何設(shè)定?6.5簡(jiǎn)述8XX51中斷處理的過(guò)程,畫(huà)出流程圖。6.1~6.5參見(jiàn)6.1節(jié)~6.2節(jié)6.6用8XX51的P1口接8個(gè)LED發(fā)光二極管,由INT0接一消抖開(kāi)關(guān),開(kāi)始P1.0的LED亮,以后每中斷一次,下一個(gè)LED亮,順序下移,且每次只一個(gè)LED亮,周而復(fù)始。畫(huà)出電路圖,并編制程序。6.6電路設(shè)計(jì)見(jiàn)習(xí)題6.6圖匯編語(yǔ)言程序ORG0000HAJMPMAlN0RG0003HRLA;中斷服務(wù)MOVP1.ARETIMAIN:MOVA,#0FEHMOVP1,A;第一燈亮SETBEASETBEX0SETBIT0SJMP$C語(yǔ)言程序#include<reg51.h>int0<>interrpt0{P1=P1<<1|0x01;}main<>{P1=0xfe;EA=1;EX0=1;IT0=1;do{}whik<1>;}習(xí)題6.6圖匯編語(yǔ)言中只有一個(gè)中斷源,不存在占用別的中斷源向量地址問(wèn)題,程序順序排下,應(yīng)注意程序的執(zhí)行過(guò)程。C語(yǔ)言無(wú)循環(huán)移位指令,移位后,后面補(bǔ)零,因此和01相或。6.7在題6.6電路的基礎(chǔ)上,要求8個(gè)LED同時(shí)亮或同時(shí)滅,每中斷一次,變反一次,編出程序。6.7略6.8要求同題6.7,要求亮、滅變換5次<一亮,一滅為一次>,編出程序。6.8匯編語(yǔ)言程序ORGO000HAJMPMAINORG0003H;中斷服務(wù)XRLP1,#OFFHDJNZR0,NECLREANE:RETIORG0030HMAIN:SETBEASETBEXOSETBITOMOVP1,#OFFHMOVR0,#OAHSJMP$;等待中斷C語(yǔ)言程序#include<reg51.h>chari:ic<>itrrupt0{i++:if<i<=10>P1=~P1:eIseEA=O:}main<>{EA=1;EX0=1;IT0=1;P1=0xff:for<;;>;/*等待中斷*/}因一亮一滅為一次,所以共10次。6.9利用8XX51的并行口接2個(gè)數(shù)碼管,顯示INT1中斷次數(shù)<次數(shù)不超過(guò)FFH>。6.9兩個(gè)數(shù)碼管陽(yáng)極經(jīng)驅(qū)動(dòng)器接P1口,陰極分別接P3.0、P3.1。#include<reg51.h>voidintr<void>voiddelay<void>;unsignedchara,b,i=0;unsignedcharcodetab[16]={0x3f,0x06,0x5b,Ox4f,0x66,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x73}:sbitp3_O=P3^0;sbitp3_1=P3^1;main<>{a=tab[O];b=tab[0];p3_0=O;p3_1=0;EA=1;EX0=1;IT0=1;for<;;>{p3_O=1;p3_1=0;P1=b:delay<>;p3_0=O;p3_1=1;P1=a:delay<>;}}voidintr<>interrupt0{unsignedcharj,k;EX0=O;i++;j=i&0x0f;k=i&0xf0;k>>=4;a=tab[k];b=tab[j];EX0=1;}voiddelay<void>{intx;for<x=0;x<1000;x++>;}第7章定時(shí)計(jì)數(shù)器7.18XX51單片機(jī)內(nèi)部設(shè)有幾個(gè)定時(shí)/計(jì)數(shù)器?它們是南哪些專用寄存器組成的?7.28XX51單片機(jī)的定時(shí)/計(jì)數(shù)器有哪幾種工作方式?各有什么特點(diǎn)?7.3定時(shí)/計(jì)數(shù)器用做定時(shí)時(shí),其定時(shí)時(shí)間與哪些因素有關(guān)?用做計(jì)數(shù)時(shí),對(duì)外界計(jì)數(shù)頻率有何限制?7.1~7.3參7.1節(jié)7.4設(shè)單片機(jī)的fosc=6MHz,定時(shí)器處于不同工作方式時(shí),最大定時(shí)范圍分別是多少?7.4方式0:16.38ms,方式1:131ms,方式2:512us7.5利用8XX51的T0計(jì)數(shù),每計(jì)10個(gè)脈沖,P1.0變反一次,用查詢和中斷兩種方式編程。7.5使用方式2,計(jì)數(shù)初值c=100H—OAH=F6H查詢方式:0RG0000HMOVTMOD,#06HMOVTHO,#0F6HMOVTL0,#0F6HSETBTR0ABC:JNBTF0,$CLRTF0CPLP1.0SJMPABC中斷方式:ORG0000HAJMPMAINORGOOOOBHCPLP1.0RETIMAIN:MOVTMOD,#06HMOVTH0,#OF6HSETBEASETBET0SETBTR0SJMP$;等待中斷C語(yǔ)言程序查詢方式:#include<reg51.h>sbitp10=P1^O;main<>{TMOD=Ox06;THO=-10;TLO=-10;TRO=1:{while<1>dO{}while<TF0==0>TF0=0;p10=~p10;}}中斷方式:#include<rcg51.h>sbitp1_O=P1^O;tov<>interrrupt1{p1_O=~p1_O;}maln<>{EA=1;ET0=1;TMOD=0x06;TH0=0xf6;TL0=0xf6;TR0=1;while<1>;}/*等待中斷*/7.6在P1.0引腳接一驅(qū)動(dòng)放大電路驅(qū)動(dòng)揚(yáng)聲器,利用T1產(chǎn)生lOOOHz的音頻信號(hào)從揚(yáng)聲器輸出。7.61000Hz的周期為1ms,即要求每500usP1.0變反一次,使用T1方式1,MC=12/fosc=1us,C=216-500us/1us=FE0CH,除TMOD=10H,TH0=FEH,Tl0=0CH外,程序與7.5題相同,注意每次要重置TH0和TL0。7.7已知8XX51單片機(jī)系統(tǒng)時(shí)鐘頻率為6MHz,利用定時(shí)器T0使P1.2每隔350us,輸出一個(gè)50us脈寬的正脈沖。7.7fosc=6MHz,MC=2us,方式2的最大定時(shí)為512us,合乎題目的要求。50us時(shí),計(jì)數(shù)初值為C1=256-25=E7H,350us時(shí),計(jì)數(shù)初值為C2=256-175=51H匯編語(yǔ)言程序ORG0000HMOVTMOD,#02HNEXT:MOVTH0,#51HMOVTL0,#51HCLRP1.2SETBTR0AB1:JBCTF0,EXTSJMPAB1EXT:SETBP1.2MOVTH0,#0E7HMOVTL0,#0E7HAB2:JBCTF0,NEXTSJMPAB2C語(yǔ)言程序#include<reg51.h>voidtimet<unsignedchart>;sbitp1_2=P1^2main<>{for<;;>p1_2=O;timer<7>;p1_2=1;timer<1>;}voidtimer<unslgnedchart>{unsignedchari;for<i=0;i<t;i++>/*延時(shí)t*50us*/{TMOD=0x01;TH0=-25/256;TL0=-25%256;TR0=1:While<TF0!=1>;TR0=0:}}上述的計(jì)數(shù)初值沒(méi)有考慮指令的執(zhí)行時(shí)間。因此誤差較大,查每條指令的機(jī)器周期,扣除這些時(shí)間.算得C—E3H,這樣誤差較小。7.8在8XX51單片機(jī)中,已知時(shí)鐘頻率為12MHz,編程使P1.0和P1.1分別輸出周期為2ms和50us的方波。7.8P1.0輸出2ms脈沖,P1.1輸出50us脈沖。匯編語(yǔ)言程序ORG0000HMOVTMOD,#02HMOVTH0,#06HMOVTL0,#06HSETBTR0MOVR0,#04HNE:JNBTF0,$CLRTF0CPLP1.1DJNZR0,NECPLP1.OAJMPNEC語(yǔ)言程序#include<reg51.h>sbitp11=P1^l;sbitp10=P1^0;main<>{chari;TMOD=0x02;TH0=06;TL0=06:TR0=1;while<1>{for<i=0;i<4:i++>{do{}while<!TF0>;P11=~P11:}P10=~P10:}}7.9設(shè)系統(tǒng)時(shí)鐘頻率為6MHz,試用定時(shí)器T0。作為外部計(jì)數(shù)器,編程實(shí)現(xiàn)每計(jì)到1000個(gè)脈沖后,使T1定時(shí)2ms,然后T0又開(kāi)始計(jì)數(shù),這樣反復(fù)循環(huán)。7.9C語(yǔ)言程序T0計(jì)數(shù)1000個(gè)脈沖,采用方式1;T1定時(shí)2ms,fosc=6MHz,C=-2ms/2us=-1000include<reg51.h>counter<>{TH0=-1000/256;TLO=-1000%256;TR0=1;TR1=0;while<TF0!=1>;TF0=0;}timer<>{TH1=-1000/256;TL1=-1000%256;TR1=1;TR0=0;while<TF1!=0>;TF1=0;}main<>TMOD=0x15;for<;;>{counter<>:timer<>:7.10利用8XX51單片機(jī)定時(shí)器T0測(cè)量某正單脈沖寬度,已知此脈沖寬度小于10ms,主機(jī)頻率為12MHz。編程測(cè)量脈寬,并把結(jié)果轉(zhuǎn)換為BCD碼,順序存放在以片內(nèi)50H單元為首地址的內(nèi)存單元中<50H單元存?zhèn)€位>。7.10C語(yǔ)言程序#lnclue<reg51.h>sbitp3_2=P3^2;main<>{unsingcdchar*P,i;inta;P=0x50;TMOD=0x09;TL0=0;TH0=0;while<P3_2==1>;/*等待INT0變低*/TR0=1;while<P3_2==0>;/*等待-INT0變高*/while<P3_2==1>;/*等待-INT0變低*/TR0=0;i=TH0;a=i*256+TL0;for<;a!=O;>{/*轉(zhuǎn)換為非壓縮IR7D碼*/*P=a%10;a=a/10;P++;}}第8章串行口8.1什么是串行異步通信?它有哪些特點(diǎn)?MCS-51單片機(jī)的串行通信有哪幾種幀格式?8.1見(jiàn)8.1節(jié)8.2某異步通信接口按方式3傳送,已知其每分鐘傳送3600個(gè)字符,計(jì)算其傳送波特率。8.2方式3為每幀11位數(shù)據(jù)格式.即3600*11/60=660<波特>8.3為什么定時(shí)器T1用做串行口波特率發(fā)生器時(shí),常采用工作方式2?若已知系統(tǒng)時(shí)鐘頻率、通信選用的波特率,如何計(jì)算其初值?8.3T1的方式2模式不需要重裝時(shí)間常數(shù)<計(jì)數(shù)初值>,不影響cPU執(zhí)行通信程序。設(shè)波特率為fboud計(jì)數(shù)初值為X,依據(jù)公式fbaud=<2smod/32>*<fosc/12<256-X>>求得X=256-<<2smod/32>*<fosc/fbaud>>。8.4已知定時(shí)器T1設(shè)置為方式2,用做波特率發(fā)生器,系統(tǒng)時(shí)鐘頻率為6MHz,求可能產(chǎn)生的最高和最低的波特率是多少?8.4最低波特率為,T1定時(shí)最大值時(shí),此時(shí)計(jì)數(shù)初值為256,并且SMOD=0,得fbaud=<1/32>*<fosc/<12<256-0>>=61最高波特率為T1定時(shí)最小值且SOMD=1時(shí),得fbaud=<2/32>*fosc/<12<256-1>>=312508.5設(shè)甲、乙兩機(jī)采用方式1通信,波特率為4800,甲機(jī)發(fā)送O,1,2,…,1FH,乙機(jī)接收存放在內(nèi)部RAM以20H為首址的單元,試用查詢方式編寫(xiě)甲、乙兩機(jī)的程序<兩機(jī)的fosc=6MHz>。8.5取SMOD=1計(jì)算TH1=TL1=B2;;***********************發(fā)送查詢方式******ORG0000HMOVTMOD,#20HMOVTHl,#OB2HMOVTL1,#0B2HSETBTR1MOVSCON,#40HMOVA,#ONEXT:MOVSBUF,ATES:JBCT1,ADD1SJMPTESADD1:INCACJNEA,#20H,NEXTSJMP$END;************************發(fā)送中斷方式*********************************ORG0000HAJMPMAIN;轉(zhuǎn)主程序ORG0023H;中斷服務(wù)CLRTIINCAMOVSBUF,ACJNEA,#20H,RECLRESRE:RETIMAIN:MOVTMOD,#20H;主程序MOVTH1,#0B2HMOVTL1,#082HSETBTR1MOVSCON,#40HSETBEASETBESMOVA,#OMOVSBUF,ASJMP$;等待中斷;*******************************接收查詢方式***************************ORG0000HMOVTMOD,#20HMOVTH1,#0B2HMOVTL1,#0B2HSETBTR1MOVSCON,#50HMOVRO。#20HTEC:JBCR1,RECSJMPTESREC:MOV@R0,SBUFINCR0CJNER0,#40H,TECSJMP$END;******************************接收中斷斤方式****************************ORGO000HAJMPMAIN;轉(zhuǎn)主程序ORG0023H;中斷服務(wù)CLRRIMOV@RO,SBUFINCR0CJNFR0,#40,RECLRESRE:RETIMAlN:MOVTMOD,#20H;主程序MOVTH1,#0B2HMOVTL1,#0B2HSETBTR1MOVSCON,50HSETBEASETBESSJMP$;等待中斷END8.6一個(gè)8XX511單片機(jī)的雙機(jī)通信系統(tǒng)波特率為9600,fosc=12MHz,用中斷方式編寫(xiě)程序,將甲機(jī)片外RAM3400H~34AOH的數(shù)據(jù)塊通過(guò)串行口傳送到乙機(jī)的片外RAM4400H~44AOH單元中去。8.6/********************************發(fā)送程序***************************/#include<reg5.1h>#defineucharunsignedcharVOIdint4<void>ucharxdata*P;{P=Ox3400TMOD=0x20;TL1=0xfd;TH1=0xfd;SCON=0x40:TR1=1;EA=1;ES=1;SBUF=*P:whaile<1>;/*等待中斷*/}voidint4<void>interrupt4{TI=O:P++:SBUF=*P;if<P==0x34a0>EA=0;}/***********************接收程序***************************/#include<reg51.h>#defineucherUnsigeriedcharvoidint4<void>charxdata*P:voidmian<>{P=0x4400:TMOD=0x20;TL1=Oxfd:TH1=0xfd;SCON=0x50;TR1=1;EA=1;ES=1;for<;;>;/*等待中斷*/}voidint4<viod>interrupt4{RI=0;*P=SBUF;P++;if<P==0x44a1>EA=O;}8.7數(shù)據(jù)傳送要求同題8.6,要求每幀傳送一個(gè)奇校驗(yàn)位,編出查詢方式的通信程序。8.7利用串行通信方式2<波特率固定>,采用奇校驗(yàn)方式,將校驗(yàn)位放在TB8中.乙機(jī)檢驗(yàn)校驗(yàn)位,如正確,則存于片外4400H開(kāi)始的RAM中,如錯(cuò)誤,通知對(duì)方重發(fā),R6存放數(shù)據(jù)塊長(zhǎng)度。匯編語(yǔ)言程序如下:發(fā)送方ORG0000HMOVDPTR,#3400HMOVR6,#0A1HMOVSCON,#90HMOVSBUF,R6L2:JBCTI,L3AJMPL2L3:MOVA,@DPTRJBP,L4SETBTB8L4:MOVSBUF,AL5:JBCTI,L6AJMPL5L6:JBCRI,L7AJMPL6L7:MOVA,SBUFCJNEA,#0FFH,L8AJMPL3L8:INCDPLDJNZR6,L4SJMP$接收方ORG0000HMOVDPTR,#4400HMOVSCON,#90HL1:JBCRI,L2AJMPL1L2:MOVA,SBUFMOVR6,AL3:JBCRI,L4AJMPL3L4:MOVA,SBUFJBP,L5JNBRB8,L8sIMP$L5:JBJB8,L8L6:MOVX@DPTR,AINCDPLINCDPHDJNZR6,L3SJMP$L8:MOVA,#0FFHMOVSBUF,AL9:JBCTI,L3AJMPL9SJMP$END8.8利用89C51串行口設(shè)計(jì)4位靜態(tài)數(shù)碼管顯示器,畫(huà)出電路并編寫(xiě)程序,要求4位顯示器上每隔1s交替地顯示"0123"和"4567"。8.8電路圖見(jiàn)圖8-12/*****************************查詢方式****************************/#include<reg51.h>#defineucharunsignedcharsbitP3_3=P3^3;charcodetab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,Oxf8,0xf8,0x80,0xg0};voidtimer<uchar>;main<>{uchai,a=3;SCON=0;for<;;>{P3_3=1;for<i=0;i<4;i++>{SBUF=tab[a];a--;while<!TI>;TI=O;if<a==255>a=7;P3_3=0;timet<100>;}}voidtimer<uchret>{uehari;for<i=O;i<t;i++>{TMOD=0x01;TH0=-10000/256;TL0=-10000%256;}TR0=1;while<!TF0>;TF0=0;}}/*****************************中斷方式******************************/#include<reg51.h>#defineueharunsignedcharsbitP3_3=P3^3;uchara=3;charcodetab[]={0xc0;0xf9;0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};voidtimet<uchart>;voidint4<void>;main<>{uchari,j;SCON=0;EA=1;ES=1;for<;;>{P3_3=1;for<i=O,i<4,i++>{SBUF=tab[a];j=a;while<j==a>;}P3_3=0;timer<100>;if<a==255>a=7;}voidint4<void>interrupt4{TI=0;a--;}voidtimer<uchart>{uchari;for<i=0;i<t;i++>{TMOD=0x01;TH0=-10000/256;TL0=-10000%256:TR0=1;while<!TF0>;TF0=0;}}第9章系統(tǒng)擴(kuò)展9.1MCS-51擴(kuò)展系統(tǒng)中,程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器共用16位地址線和8位數(shù)據(jù)線,為什么兩個(gè)存儲(chǔ)空間不會(huì)發(fā)生沖突?9.1參閱9.1節(jié)9.2在8XX51單片機(jī)上擴(kuò)展一片6116<2KBX8位RAM>。9.26116為2KBX8位RAM,共11根地址線A0~A10,接線見(jiàn)習(xí)題9.2圖。9.3在8XX51單片機(jī)上擴(kuò)展一片EPROM2732和一片RAM6264。9.32732為4KBX8位EPROM,6264為8KBX8位RAM,因各只有一片,所以各片選-CE接地·電路見(jiàn)習(xí)題9.3圖。9.4在8XX51單片機(jī)上擴(kuò)展一片RAM6116和一片EPROM2716,要求6116既能作為數(shù)據(jù)存儲(chǔ)器,又能作為程序存儲(chǔ)器使用。9.46116為2KBX8位RAM,2716為2KBX8位EPROM,地址線均為11根,地址線接線參見(jiàn)習(xí)題9.3圖。9.5在8XX51單片機(jī)上擴(kuò)展4片2764,地址從0000~7FFFH,采用74LSl38作地址譯碼,寫(xiě)出每片的地址空間范圍。9.5設(shè)計(jì)電路見(jiàn)習(xí)題9.5圖。4片2764的-CE分別接138譯碼器為y0,yl,y2.y3端,各片地址為:2764<4>0000H~lFFFH2764<3>2000H~3FFFH2764<2>4000H~5FFFH2764<1>6000H~7FFFH9.6在8XX51單片機(jī)上接一片74LS244和一片74LS273,使74LS244的地址為BFFFH,74LS273的地址為DFFFH,并編程從74LS244輸入向74LS273輸出。9.6設(shè)計(jì)電路見(jiàn)習(xí)題9.6圖。圖中采用的是80C31,由于80C31內(nèi)部無(wú)ROM,片外必須擴(kuò)展一片程序存儲(chǔ)器。圖中擴(kuò)展27648K×4EPROM。根據(jù)地址需求,分別以P2.5和P2.6作為273和244的片選,程序參見(jiàn)例9-2。9.7在題9.6的基礎(chǔ)上,74LS244接一按鍵開(kāi)關(guān),74LS273接一個(gè)數(shù)碼管LED,編程序,使數(shù)碼管顯示按鍵次數(shù)。9.7程序參閱習(xí)題5.4,將MOVA,P1改為MOVXA,@DPTR,DPTR指向244地址BFFFH;將MOVP1,A改為MOVX@DPTR,A,DPTR指向273地址DFFFH。9.8設(shè)置8255地址為CFFCH~CFFFH,使用部分譯碼法設(shè)計(jì)電路,并設(shè)置A口方式1輸出,B口方式O輸入,C口不用的初始化程序。9.8設(shè)計(jì)電路見(jiàn)習(xí)題9.8圖。MOVDPTR,#OCFFFHMOVA,#0A2HMOVX@DPTR,A9.9在8XXSl單片機(jī)上擴(kuò)展一片8255,使A口可接1個(gè)數(shù)碼管,PC0接陰極,使用C口的置位/復(fù)位控制字,數(shù)碼管顯示的"P"字閃爍。9.9按習(xí)題9.9圖的設(shè)計(jì),8255A口、B口、C口、控制口地址分別為7CFFH、7DFFH、7EFFH、7FFFH.A口方式0輸出,C口置位/復(fù)位控制。匯編語(yǔ)言程序:MOVDPTR,#7FFFHMOVA,#80H;寫(xiě)控制字MOVX@DPTR,AMOVDPTR,#7CFFH;指向A口MOVA,#0F3H;輸出"P"段碼MOVX@DPTR,AMOVDPTR,#7FFFH;指向控制口MOVA,#0H;PC0置0控制字NEXT:MOVX@DPTR,A;寫(xiě)入控制口ACALLDAY;延時(shí)XRLA,#OlH;使PC0位變反AJMPNEXTC語(yǔ)言程序#inclde<reg51.h>#defineCOM8255XBYTE[0x7fff]#defineA8255xBYTE[0x7fff]main<>{unsignedintj;COM8255=0x80;A8255=0xf3:while<1>{COM8255=0x0;for<j=O;j<=10000;j++>;COM8255=0x01:for<j=0;j<=10000;j++>;}}9.10在8XX51單片機(jī)上擴(kuò)展一片8255,使用A口和C口設(shè)計(jì)4位數(shù)碼管動(dòng)態(tài)顯示電路,顯示"good"字符<G為小寫(xiě)>。9.108255A口、B口、C口、控制口地址分別為7CFFH、7DFFH、7EFFH、7FFFH,A口方式O輸出,C口輸出,控制字80H。設(shè)計(jì)見(jiàn)習(xí)題9.10圖。ORG0000HMOVDPTR,#7FFFH;指向控制口MOVA,#80H;A口、B口均采用基本輸出方式MOVX@DPTR,A;寫(xiě)控制字MOVDPTR,#7CFFHMOVA,#0MOVX@DPTR,A;清顯示AGAIN:MOVR0,#0;R0存字形表偏移量MOVR1,#01;R1置數(shù)碼表位選代碼NEXT:MOVDPTR,#7EFFH;指向C口MOVA,R1MOVX@DPTR,A;從C口輸出位選碼MOVA,R0MOVDPTR,#TAB;置字形表頭地址MOVCA,@A+DPTR;查字形碼表MOVDPTR,#7CFFH;指向A口MOVX@DPTR,A;從A口輸出字形碼ACALLDAY;延時(shí)INCR0;指向下一位字形MOVA,R1RLA;指向下一位MOVR1,ACJNERl,#10H,NEXT;4個(gè)數(shù)碼管顯示完SJMPAGAINDAY:MOVR6,#50;延時(shí)子程序DL2:MOVR7,#7DHDL1:NOP
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 畢業(yè)班學(xué)生心理疏導(dǎo)計(jì)劃
- 口算除法 (教學(xué)設(shè)計(jì))-2023-2024學(xué)年三年級(jí)下冊(cè)數(shù)學(xué)人教版
- 投資咨詢工程師常見(jiàn)錯(cuò)誤試題及答案2024
- 注冊(cè)會(huì)計(jì)師跨國(guó)公司財(cái)務(wù)試題及答案
- Unit 4 Plants around us大單元備課 (教學(xué)設(shè)計(jì))-2024-2025學(xué)年人教PEP版(2024)英語(yǔ)三年級(jí)上冊(cè)
- 2024年預(yù)算員考試實(shí)務(wù)試題及答案分享
- 品牌管理的重要性試題及答案
- 理解全媒體運(yùn)營(yíng)師的數(shù)據(jù)驅(qū)動(dòng)營(yíng)銷:試題及答案
- 2024年人力資源管理師考試精要試題及答案
- 2024人力資源管理師科目試題及答案
- 電力項(xiàng)目勞務(wù)施工安全方案
- 跨學(xué)科主題學(xué)習(xí)的設(shè)計(jì)
- 完整版:美制螺紋尺寸對(duì)照表(牙數(shù)、牙高、螺距、小徑、中徑外徑、鉆孔)
- 幼兒園大班社會(huì)公開(kāi)課《生活中的標(biāo)志》課件
- 債權(quán)法學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 安全生產(chǎn)標(biāo)準(zhǔn)化基本規(guī)范評(píng)分表
- 幼兒園中班語(yǔ)言散文欣賞《芽》課件
- (正式版)FZ∕T 63001-2024 縫紉線用滌綸本色紗線
- 公司籃球隊(duì)管理制度范文
- 期中測(cè)試卷(1-4單元)(試題)-2023-2024學(xué)年六年級(jí)下冊(cè)數(shù)學(xué)蘇教版
- 2023年拍賣師考試真題模擬匯編(共469題)
評(píng)論
0/150
提交評(píng)論