版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
./《單片微型計(jì)算機(jī)與接口技術(shù)》思考題與習(xí)題解答第0章基礎(chǔ)知識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)制無符號數(shù)轉(zhuǎn)換為十進(jìn)制數(shù):32CH,68H,D5H,100H,B78H,3ADH.O.2812,104,213,256,2936,9410.3寫出下列十進(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ù)寫出下列補(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寫出下列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見緒論1.2單片微型計(jì)算機(jī)與微處理器在結(jié)構(gòu)上和使用中有什么差異?單片機(jī)和DSP在使用上有什么差別?1.2單片微型計(jì)算機(jī)是包含CPU、存儲器和I/O接口的大規(guī)模集成芯片,即它本身包含了除外部設(shè)備以外構(gòu)成微機(jī)系統(tǒng)的各個部分,只需接外設(shè)即可構(gòu)成獨(dú)立的微機(jī)應(yīng)用系統(tǒng).微機(jī)處理器僅為CPU,CPU是構(gòu)不成獨(dú)立的微機(jī)系統(tǒng)的.DSP是數(shù)據(jù)處理的專用芯片,單片機(jī)主要用做控制,也具有簡單的數(shù)據(jù)處理能力.1.351系列單片機(jī)內(nèi)部有哪些功能部件?1.3見1.1.1節(jié)1.451系列單片機(jī)有哪些品種?結(jié)構(gòu)有什么不同?各適用于什么場合?1.4見緒論1.551系列單片機(jī)的存儲器可劃為幾個空間?各自的地址范圍和容量是多少?在使用上有什么不同?1.5見表1-51.6在單片機(jī)內(nèi)部RAM中,哪些字節(jié)有位地址,哪些沒有位地址?特殊功能寄存器SFR中哪些可以位尋址?有什么好處?1.6見表1-1和表1-21.7已知PSW=10H,通用寄存器R0~R7的地址分別是多少?1.7當(dāng)PSw=10H,表明選中的為第二組通用寄器RO~R7的地址為10H~17H1.8程序存儲器和數(shù)據(jù)存儲器可以有相同的地址,而單片機(jī)在對這兩個存儲區(qū)的數(shù)據(jù)進(jìn)行操作時,不會發(fā)生錯誤,為什么?1.8序存儲器和數(shù)據(jù)存儲器盡管地址相同,但在數(shù)據(jù)操作時,所使用的指令不同,選通信號也不同,因此不會發(fā)生錯誤.1.9填空:堆棧設(shè)在存儲區(qū),程序存放在存儲區(qū),I/0接口設(shè)置在存儲區(qū),中斷服務(wù)程序存放在存儲區(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ù)位時,A=,PSW=,SP=,P0~P3=1.11A=0,PSW=0,SP=07,P0~P3=FFH第2章指令系統(tǒng)2.1MCS-51單片機(jī)有哪幾種尋址方式,適用于什么地址空間?用表格表示.2.1見2.1節(jié)2.2MCS-51單片機(jī)的PSW程序狀態(tài)字中無ZERO<零>標(biāo)志位,怎樣判斷某內(nèi)部數(shù)據(jù)存儲單元的內(nèi)容是否為O?2.2因?yàn)槔奂悠鰽自帶零標(biāo)志,因此,若判斷某內(nèi)部RAM單元的內(nèi)容是否為零,必須將其內(nèi)容送到A,通過JZ指令即可進(jìn)行判斷.2.3設(shè)A=0,執(zhí)行下列兩條指令后,A的內(nèi)容是否相同,說明道理.<1>MOVCA,@A+DPTR<2>MOVXA,@DPTR2.3當(dāng)A=O時,兩條指令的地址雖然相同,但操作碼不同,MOVC是尋址程序存儲器,MOVX是尋址外部數(shù)據(jù)存儲器,送入A的是兩個不同存儲空間的內(nèi)容.2.4指出下列各指令中操作數(shù)的尋址方式指令目的操作數(shù)尋址方式源操作數(shù)尋址方式ADDA,40HPUSHACCMOVB,20HANLP1,#35HMOV@R1,PSWMOVCA,@A+DPTRMOVX@DPTR,A2.4目的操作數(shù)源操作數(shù)寄存器直接SP間接尋址直接直接直接直接立即寄存器問址直接寄存器變址寄存器間址寄存器2.5執(zhí)行下列程序段MOVA,#56HADDA,#74HADDA,ACC后,CY=,OV=,A=.2.5CY=1,OV=0,A=94H2.6在錯誤的指令后面括號中打×.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問A=,<50H>=,<51H>=,<52H>=.2.7A=25H,<50H>=O,<51H>=25H,<52H>=70H2.8設(shè)SP=60H,內(nèi)部RAM的<30H>=24H,<31H>=10H,在下列程序段注釋的括號中填執(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ù)存儲器的2410單元.2.9對下列程序中各條指令作出注釋,并分析程序運(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.口的高4位,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累加器中的無符號數(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有兩個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同時取反10次.<將P1.2和P1.0同時取反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ī)的移位指令只對A,且只有循環(huán)移位指令,為了使本單元的最高位移進(jìn)下一單元的最低位,必須用大循環(huán)移位指令移位4次.ORGOCLRCMOVA,20HRLCAMOV20H,AMOVA,21HRLCAMOV21H,AMOVA,22HRLCAMOV22H.AMOVA,#ORLCAMOV23H,ASLMP$第3章程序設(shè)計(jì)3.1編寫程序,把片外數(shù)據(jù)存儲器0000H~0050H中的內(nèi)容傳送到片內(nèi)數(shù)據(jù)存儲器20H~70H中.3.1因?yàn)槭嵌鄠€單元操作,為方便修改地址,使用問址操作.片外地址用DPTR指示.只能用M<>Vx指令取數(shù)到A,片內(nèi)地址用RO或R1指示,只能用MOV指令操作,因此,循環(huán)操作外部數(shù)據(jù)存儲器一A一內(nèi)部數(shù)據(jù)存儲器.ORGOOOOHMOVDPTR,#0000HMOVR0,#20HLOOP:MOVXA,@DPTRMOV@R0,AINCDPTRINCR0CJNER0,#71H,LOOPSJMP$3.2編寫程序,實(shí)現(xiàn)雙字節(jié)加法運(yùn)算,要求RIR0+R7R6=><52H><51H><50H><內(nèi)部RAM>.3.2要注意兩高字節(jié)相加應(yīng)加低字節(jié)相加時產(chǎn)生的進(jìn)位,同時要考慮最高位的進(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ù),平方表的一個數(shù)據(jù)占2個字節(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單元中有兩個帶符號數(shù),將其中的大數(shù)存放在22H單元中,編出程序.3.4先用異或指令判兩數(shù)是否同號,在同號中判大小,異號中正數(shù)為大.ORG0MOVA,20HXRLA.21HANLA,#80HJZCMPJB20H.7,BGAG:MOV22H,20HSJMP$BG:MOV22H,21HSJMP$CMP:MOVA,20HCJNEA,21H,GRGR:JNCAGMOV22H,21HSJMP$3.5若單片機(jī)的晶振頻率為6MHz,求下列延時子程序的延時時間.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ù)存儲器20H~24H單元壓縮的BCD碼轉(zhuǎn)換成ASCII碼存放在25H開始的單元內(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)部存儲器30H單元開始,有16個數(shù)據(jù),試編一個程序,把其中的正數(shù)、負(fù)數(shù)分別送40H和50H開始的存儲單元,并分別將正數(shù)、負(fù)數(shù)和零的個數(shù)送R4,R5,R6.3.7片內(nèi)RAM間址寄存器只有Ro和R1,而正數(shù)、負(fù)數(shù)和零共需3個寄存器指示地址,這時可用堆棧指針指示第3個地址,POP和PUSH指令可自動修改地址.RO指正數(shù)存放地址,Rl指負(fù)數(shù)存放地址,SP指源數(shù)據(jù)存放的末地址,POP指令取源數(shù)據(jù),每取一個數(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)部存儲單元40H中有一個ASCII字符,試編一個程序給該數(shù)的最高位加上奇校驗(yàn).3.8可直接用P標(biāo)志判斷<JBP,ret>ORG0000HMOVA.40HJBP,EN;奇數(shù)個1轉(zhuǎn)移0RLA,#80H;偶數(shù)個1最高位加"1"EN:SJMP$3.9編寫一段程序,將存放在自DATA單元開始的一個四字節(jié)數(shù)<高位在高地址>取補(bǔ)后送回原單元.3.9取補(bǔ)不同于求補(bǔ)碼,求補(bǔ)碼應(yīng)區(qū)別正、負(fù)數(shù)分別處理,而取補(bǔ)不分正、負(fù),因正、負(fù)數(shù)均有相對于模的補(bǔ)數(shù).可用取反加l求補(bǔ),也可用模<00H>減該數(shù)的方法求補(bǔ).ORG0000HMOVR7,#03HMOVR0,#DATAMOVA,@ROCPLAADDA,#01MOV@RO,AAB:INCROMOVA,@ROCPLAADDCA,#ODJNZR7,ABSJMP$3.10以BUFl為起始地址的外存儲區(qū)中,存放有16個單字節(jié)無符號二進(jìn)制數(shù),試編一個程序,求其平均值并送BUF2單元,余數(shù)存在BUF2—1單元.3.1016個單字節(jié)累加應(yīng)用ADD指令而不能用ADDC指令,和的低位存A,當(dāng)和超過一個字節(jié)時,和的高字節(jié)存于B,并要加低位相加時產(chǎn)生的進(jìn)位,16個單字節(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單元,要求用子程序編寫轉(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編寫一段程序,以實(shí)現(xiàn)圖中硬件的邏輯運(yùn)算功能.3.12要注意,位的邏輯運(yùn)算其中一個操作數(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試編寫一個3字節(jié)無符號數(shù)乘1字節(jié)的乘法程序.3.14設(shè)一字節(jié)乘數(shù)存放在R1,三字節(jié)的被乘數(shù)存放在data開始的內(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語言4.1改正下面程序的錯誤.4.11:#include<reg51.h>本程序有如下錯誤:2:main<>3:{a=c;①變量a,c必須先定義再引用4:inta=7,c;②第5句調(diào)用函數(shù)后必須加分號.5:delay<>③main<>函數(shù)沒有反大括號6:voiddelay<>;④被調(diào)函數(shù)delay<>在main<>后面,必須在前面先聲明7:{8:chari;⑤第6句函數(shù)說明語句后的分號應(yīng)去掉9:for<i=O;i<:255;i++>;10:}4.2試說明為什么xdata型的指針長度要用2個字節(jié)?4.2因?yàn)閤data是外部數(shù)據(jù)存儲器,最大可有64KB的存儲單元,xdata指針是表示外部數(shù)據(jù)存儲單元的地址,要表示64KB個單元地址,所以必須用2個字節(jié),共16位表示.4.3定義變量a、b、c;a為內(nèi)部RAM的可位尋址區(qū)的字符變量;b為外部數(shù)據(jù)存儲區(qū)浮點(diǎn)型變量;c為指向int型xdata區(qū)的指針.4.3bdatachara;xdatafloatb:xdataint~c;4.4編程將8XX51的內(nèi)部數(shù)據(jù)存儲器20H單元和35H單元的數(shù)據(jù)相乘,結(jié)果存到外部數(shù)據(jù)存儲器中<位置不固定>.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ù)存儲器25H單元中放有一個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:使用庫函數(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單元分別存放著兩個無符號的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碼的長度存放在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為首的單元中,長度存放于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個I/<>端口的作用是什么?8XX51對外的三總線是如何分配的?5.38XX51的4個I/0端口在結(jié)構(gòu)上有何異同?使用時應(yīng)注意什么?5.4為什么說8XX51能全部作為I/O口使用的僅有P1端口?5.1~5.4參閱5.1節(jié)5.5在例5-2中有如下語句:MOVP1,#0FFH;高4位的LED全滅,低4位輸入線送"1"ABC:MOVA,P1;讀P1口引腳開關(guān)狀態(tài),并送入A為什么執(zhí)行了ABC語句后A的值低4位為開關(guān)狀態(tài),而不是前一句的FFH,那么它的高4位值是什么呢?5.5由內(nèi)部結(jié)構(gòu)圖可知,MOVP1,#0FFH將使鎖存器Q=1,同時Q=0,VT截止,當(dāng)執(zhí)行MOVA,P1時,讀引腳信號有效,低4位的開關(guān)電平通過門2進(jìn)入內(nèi)部總線到A,而讀鎖存器信號無效,門1關(guān)閉,Q的信號進(jìn)不了內(nèi)部總線,高4位沒有引腳新的電平變化,由于VT截止,二極管也截止,進(jìn)入門2的是VT的漏極電壓Vcc,因此,高4位通過門2讀入的均是高電平即1111B.5.6利用8XX51的P1口,監(jiān)測某一按鍵開關(guān),使每按鍵一次,輸出一個正脈沖<脈寬隨意>,畫出電路并編出程序.5.6用P1.7監(jiān)測按鍵開關(guān),P1.0引腳輸出正脈沖,正脈沖的產(chǎn)生只需要將P1.0置零、置1、延時、再置零即可.P1.0接一示波器可觀察波形.如果再接一發(fā)光二極管,可觀察到發(fā)光二極管的閃爍.電路設(shè)計(jì)圖如習(xí)題5.6圖.習(xí)題5.6圖匯編語言程序ORG0000HABC:CLRP1.0SETBP1.7JBP1.7,$;等鍵按下JNBP1.7,$;待鍵彈起SETBP1.0MOVR2,#0DAY:NOPNOPDJNZR2,DAYSJMPABCC語言編程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個發(fā)光二極管LED.相鄰的4個LED為一組,使兩組每隔0.5s交替發(fā)亮一次,周而復(fù)始,畫出電路并編寫程序<設(shè)延時0.5s子程序?yàn)镈05,已存在>.5.7電路見習(xí)題5.7圖,初始值送0FH到P1,再和0FFH異或從P1口輸出,或使用SWAPA指令.然后從P1口輸出,循環(huán)運(yùn)行,注意輸出后要延時.習(xí)題5.7圖匯編語言程序ORG0000HMOVA,#OFHABC:MOVP1,AACALLD05SWAPASJMPABCD05:MoVR6,250DY:MOVR7,250DAY:NOPNOPDJNZR7,DAYDJNZR6,DYRETENDC語言編程sfrP1=0x90;main<>{inti;P1=0xf0;while<1>{P1=~P1;fOr<i=0;i<5000;i++>;}5.8用89C51/89S51并行口設(shè)計(jì)顯示…個數(shù)碼的電路,使數(shù)碼管循環(huán)顯示"O"~"F".5.8如使用共陰極數(shù)碼管,陰極接地,陽極a~g分別接P0~P3的某個口的7位,將0~F的段碼列成表,表的內(nèi)容順次從該口輸出.如數(shù)碼管接P3口.匯編語言程序0RG0000HMOVDPTR,#TABAGAIN:MOVR0,#0NEXT:MOVA,ROMOVCA,@A+DPTRMOVP3,AMOVR7,#0DAY:NOPNOPDJNZR7,DAYINCR0CJNER0,#10H,NEXTSJMPAGAIN;段碼表<略>TAB:DB3FH,06H…ENDC語言程序#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++>;/*延時*/}}5.9設(shè)計(jì)一個能顯示4位數(shù)碼的電路,并用C語言和匯編語言編程使"8"能跑馬顯示8遍.5.9電路設(shè)計(jì)參考5.3節(jié)的圖5-8,分別用匯編語言和C語言的編程如下:圖5-8接5個共陰極數(shù)碼管的動態(tài)顯示接口電路匯編語言程序0RG0000HMOVA,#08HM<>VDPTR,#TABMOVCA,@A+DPTRMOVP1,AMOVR2,#08HAGAIN:M<>VA,#01NEXT:M<>VP3,AACALLDAYRLACJNEA,#10H,NEXTDJNZR2,AGAINTAB:DB3FH,06H…ENDC語言程序#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的矩陣鍵盤并用箭頭標(biāo)明信號的方向.5.10P1口的8根線接行線,輸出行掃描信號,P3口的8根線接列線,輸入回饋信號.參考5.3節(jié)圖5.9.8×8的矩陣鍵盤電路設(shè)計(jì)見習(xí)題5.10圖.習(xí)題5.10圖第6章中斷6.1解釋下列名詞:中斷、中斷源、中斷優(yōu)先級、中斷的嵌套、中斷系統(tǒng).6.28XXSl有幾個中斷源?各中斷標(biāo)志是如何產(chǎn)生的,又如何清除?6.38XX51中斷源的中斷請求被響應(yīng)時,各中斷入口地址是多少?在什么物理存儲空間?6.4MCS-51系列單片機(jī)的中斷系統(tǒng)有幾個優(yōu)先級?如何設(shè)定?6.5簡述8XX51中斷處理的過程,畫出流程圖.6.1~6.5參見6.1節(jié)~6.2節(jié)6.6用8XX51的P1口接8個LED發(fā)光二極管,由INT0接一消抖開關(guān),開始P1.0的LED亮,以后每中斷一次,下一個LED亮,順序下移,且每次只一個LED亮,周而復(fù)始.畫出電路圖,并編制程序.6.6電路設(shè)計(jì)見習(xí)題6.6圖匯編語言程序ORG0000HAJMPMAlN0RG0003HRLA;中斷服務(wù)MOVP1.ARETIMAIN:MOVA,#0FEHMOVP1,A;第一燈亮SETBEASETBEX0SETBIT0SJMP$C語言程序#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īng)注意程序的執(zhí)行過程.C語言無循環(huán)移位指令,移位后,后面補(bǔ)零,因此和01相或.6.7在題6.6電路的基礎(chǔ)上,要求8個LED同時亮或同時滅,每中斷一次,變反一次,編出程序.6.7略6.8要求同題6.7,要求亮、滅變換5次<一亮,一滅為一次>,編出程序.6.8匯編語言程序ORGO000HAJMPMAINORG0003H;中斷服務(wù)XRLP1,#OFFHDJNZR0,NECLREANE:RETIORG0030HMAIN:SETBEASETBEXOSETBITOMOVP1,#OFFHMOVR0,#OAHSJMP$;等待中斷C語言程序#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個數(shù)碼管,顯示INT1中斷次數(shù)<次數(shù)不超過FFH>.6.9兩個數(shù)碼管陽極經(jīng)驅(qū)動器接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章定時計(jì)數(shù)器7.18XX51單片機(jī)內(nèi)部設(shè)有幾個定時/計(jì)數(shù)器?它們是南哪些專用寄存器組成的?7.28XX51單片機(jī)的定時/計(jì)數(shù)器有哪幾種工作方式?各有什么特點(diǎn)?7.3定時/計(jì)數(shù)器用做定時時,其定時時間與哪些因素有關(guān)?用做計(jì)數(shù)時,對外界計(jì)數(shù)頻率有何限制?7.1~7.3參7.1節(jié)7.4設(shè)單片機(jī)的fosc=6MHz,定時器處于不同工作方式時,最大定時范圍分別是多少?7.4方式0:16.38ms,方式1:131ms,方式2:512us7.5利用8XX51的T0計(jì)數(shù),每計(jì)10個脈沖,P1.0變反一次,用查詢和中斷兩種方式編程.7.5使用方式2,計(jì)數(shù)初值c=100H—OAH=F6H查詢方式:0RG0000HMOVTMOD,#06HMOVTHO,#0F6HMOVTL0,#0F6HSETBTR0ABC:JNBTF0,$CLRTF0CPLP1.0SJMPABC中斷方式:ORG0000HAJMPMAINORGOOOOBHCPLP1.0RETIMAIN:MOVTMOD,#06HMOVTH0,#OF6HSETBEASETBET0SETBTR0SJMP$;等待中斷C語言程序查詢方式:#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ū)動放大電路驅(qū)動揚(yáng)聲器,利用T1產(chǎn)生lOOOHz的音頻信號從揚(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)時鐘頻率為6MHz,利用定時器T0使P1.2每隔350us,輸出一個50us脈寬的正脈沖.7.7fosc=6MHz,MC=2us,方式2的最大定時為512us,合乎題目的要求.50us時,計(jì)數(shù)初值為C1=256-25=E7H,350us時,計(jì)數(shù)初值為C2=256-175=51H匯編語言程序ORG0000HMOVTMOD,#02HNEXT:MOVTH0,#51HMOVTL0,#51HCLRP1.2SETBTR0AB1:JBCTF0,EXTSJMPAB1EXT:SETBP1.2MOVTH0,#0E7HMOVTL0,#0E7HAB2:JBCTF0,NEXTSJMPAB2C語言程序#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++>/*延時t*50us*/{TMOD=0x01;TH0=-25/256;TL0=-25%256;TR0=1:While<TF0!=1>;TR0=0:}}上述的計(jì)數(shù)初值沒有考慮指令的執(zhí)行時間.因此誤差較大,查每條指令的機(jī)器周期,扣除這些時間.算得C—E3H,這樣誤差較小.7.8在8XX51單片機(jī)中,已知時鐘頻率為12MHz,編程使P1.0和P1.1分別輸出周期為2ms和50us的方波.7.8P1.0輸出2ms脈沖,P1.1輸出50us脈沖.匯編語言程序ORG0000HMOVTMOD,#02HMOVTH0,#06HMOVTL0,#06HSETBTR0MOVR0,#04HNE:JNBTF0,$CLRTF0CPLP1.1DJNZR0,NECPLP1.OAJMPNEC語言程序#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)時鐘頻率為6MHz,試用定時器T0.作為外部計(jì)數(shù)器,編程實(shí)現(xiàn)每計(jì)到1000個脈沖后,使T1定時2ms,然后T0又開始計(jì)數(shù),這樣反復(fù)循環(huán).7.9C語言程序T0計(jì)數(shù)1000個脈沖,采用方式1;T1定時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ī)定時器T0測量某正單脈沖寬度,已知此脈沖寬度小于10ms,主機(jī)頻率為12MHz.編程測量脈寬,并把結(jié)果轉(zhuǎn)換為BCD碼,順序存放在以片內(nèi)50H單元為首地址的內(nèi)存單元中<50H單元存?zhèn)€位>.7.10C語言程序#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見8.1節(jié)8.2某異步通信接口按方式3傳送,已知其每分鐘傳送3600個字符,計(jì)算其傳送波特率.8.2方式3為每幀11位數(shù)據(jù)格式.即3600*11/60=660<波特>8.3為什么定時器T1用做串行口波特率發(fā)生器時,常采用工作方式2?若已知系統(tǒng)時鐘頻率、通信選用的波特率,如何計(jì)算其初值?8.3T1的方式2模式不需要重裝時間常數(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已知定時器T1設(shè)置為方式2,用做波特率發(fā)生器,系統(tǒng)時鐘頻率為6MHz,求可能產(chǎn)生的最高和最低的波特率是多少?8.4最低波特率為,T1定時最大值時,此時計(jì)數(shù)初值為256,并且SMOD=0,得fbaud=<1/32>*<fosc/<12<256-0>>=61最高波特率為T1定時最小值且SOMD=1時,得fbaud=<2/32>*fosc/<12<256-1>>=312508.5設(shè)甲、乙兩機(jī)采用方式1通信,波特率為4800,甲機(jī)發(fā)送O,1,2,…,1FH,乙機(jī)接收存放在內(nèi)部RAM以20H為首址的單元,試用查詢方式編寫甲、乙兩機(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一個8XX511單片機(jī)的雙機(jī)通信系統(tǒng)波特率為9600,fosc=12MHz,用中斷方式編寫程序,將甲機(jī)片外RAM3400H~34AOH的數(shù)據(jù)塊通過串行口傳送到乙機(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,要求每幀傳送一個奇校驗(yàn)位,編出查詢方式的通信程序.8.7利用串行通信方式2<波特率固定>,采用奇校驗(yàn)方式,將校驗(yàn)位放在TB8中.乙機(jī)檢驗(yàn)校驗(yàn)位,如正確,則存于片外4400H開始的RAM中,如錯誤,通知對方重發(fā),R6存放數(shù)據(jù)塊長度.匯編語言程序如下:發(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ù)碼管顯示器,畫出電路并編寫程序,要求4位顯示器上每隔1s交替地顯示"0123"和"4567".8.8電路圖見圖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)中,程序存儲器和數(shù)據(jù)存儲器共用16位地址線和8位數(shù)據(jù)線,為什么兩個存儲空間不會發(fā)生沖突?9.1參閱9.1節(jié)9.2在8XX51單片機(jī)上擴(kuò)展一片6116<2KBX8位RAM>.9.26116為2KBX8位RAM,共11根地址線A0~A10,接線見習(xí)題9.2圖.9.3在8XX51單片機(jī)上擴(kuò)展一片EPROM2732和一片RAM6264.9.32732為4KBX8位EPROM,6264為8KBX8位RAM,因各只有一片,所以各片選-CE接地·電路見習(xí)題9.3圖.9.4在8XX51單片機(jī)上擴(kuò)展一片RAM6116和一片EPROM2716,要求6116既能作為數(shù)據(jù)存儲器,又能作為程序存儲器使用.9.46116為2KBX8位RAM,2716為2KBX8位EPROM,地址線均為11根,地址線接線參見習(xí)題9.3圖.9.5在8XX51單片機(jī)上擴(kuò)展4片2764,地址從0000~7FFFH,采用74LSl38作地址譯碼,寫出每片的地址空間范圍.9.5設(shè)計(jì)電路見習(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ì)電路見習(xí)題9.6圖.圖中采用的是80C31,由于80C31內(nèi)部無ROM,片外必須擴(kuò)展一片程序存儲器.圖中擴(kuò)展27648K×4EPROM.根據(jù)地址需求,分別以P2.5和P2.6作為273和244的片選,程序參見例9-2.9.7在題9.6的基礎(chǔ)上,74LS244接一按鍵開關(guān),74LS273接一個數(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ì)電路見習(xí)題9.8圖.MOVDPTR,#OCFFFHMOVA,#0A2HMOVX@DPTR,A9.9在8XXSl單片機(jī)上擴(kuò)展一片8255,使A口可接1個數(shù)碼管,PC0接陰極,使用C口的置位/復(fù)位控制字,數(shù)碼管顯示的"P"字閃爍.9.9按習(xí)題9.9圖的設(shè)計(jì),8255A口、B口、C口、控制口地址分別為7CFFH、7DFFH、7EFFH、7FFFH.A口方式0輸出,C口置位/復(fù)位控制.匯編語言程序:MOVDPTR,#7FFFHMOVA,#80H;寫控制字MOVX@DPTR,AMOVDPTR,#7CFFH;指向A口MOVA,#0F3H;輸出"P"段碼MOVX@DPTR,AMOVDPTR,#7FFFH;指向控制口MOVA,#0H;PC0置0控制字NEXT:MOVX@DPTR,A;寫入控制口ACALLDAY;延時XRLA,#OlH;使PC0位變反AJMPNEXTC語言程序#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ù)碼管動態(tài)顯示電路,顯示"good"字符<G為小寫>.9.108255A口、B口、C口、控制口地址分別為7CFFH、7DFFH、7EFFH、7FFFH,A口方式O輸出,C口輸出,控制字80H.設(shè)計(jì)見習(xí)題9.10圖.ORG0000HMOVDPTR,#7FFFH;指向控制口MOVA,#80H;A口、B口均采用基本輸出方式MOVX@DPTR,A;寫控制字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;延時INCR0;指向下一位字形MOVA,R1RLA;指向下一位MOVR1,ACJNERl,#10H,NEXT;4個數(shù)碼管顯示完SJMPAGAINDAY:MOVR6,#50;延時子程序DL2:MOVR7,#7DHDL1:
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年天然植物纖維及人造纖維編織工藝品合作協(xié)議書
- 2025年柔印CTP合作協(xié)議書
- 自動化儀表考試培訓(xùn)試題2
- 2025年二手車帶牌轉(zhuǎn)讓協(xié)議(三篇)
- 2025年個人房屋租賃協(xié)議合同模板(2篇)
- 2025年個人車輛轉(zhuǎn)讓協(xié)議參考樣本(三篇)
- 山西省2024七年級道德與法治上冊第三單元珍愛我們的生命第九課守護(hù)生命安全情境基礎(chǔ)小練新人教版
- 2025年互聯(lián)網(wǎng)信息網(wǎng)站公告服務(wù)協(xié)議(2篇)
- 2025年代理銷售商品房協(xié)議樣本(三篇)
- 2025年個人旅游協(xié)議格式版(2篇)
- 柴油機(jī)油-標(biāo)準(zhǔn)
- 足療店?duì)I銷策劃方案
- 《初三開學(xué)第一課 中考動員會 中考沖刺班會》課件
- 學(xué)校安全一崗雙責(zé)
- 2024年全國版圖知識競賽(小學(xué)組)考試題庫大全(含答案)
- 產(chǎn)后修復(fù)學(xué)習(xí)培訓(xùn)課件
- 高考志愿咨詢培訓(xùn)課件
- mysql課件第五章數(shù)據(jù)查詢
- 超濾培訓(xùn)課件
- 熱線電話管理制度
- 《海峽兩岸經(jīng)濟(jì)合作框架協(xié)議》全文
評論
0/150
提交評論