当前位置:文档之家› 单片机原理与应用 习题答案

单片机原理与应用 习题答案

习题解答第三章3-1 已知A=7AH,R0=30H(30H=A5H),PSW=80H,SP=65H,试分析下面每条指令的执行结果及对标志位的影响。

(1)ADD A,@R0;01111010+=1,00011111,(A)=1FH,Cy=1 ,AC=0,OV=0,P=1(2)ADD A,#30H;01111010+00110000=,(A)=AAH,Cy=0,AC=0,OV=1,P=0 (3)ADDC A,30H;01111010++1=1,00100000,(A)=20H,Cy=1,AC=1,OV=0,P=1(4)SUBB A,@R0;0101-1=1,,(A)=D4H,Cy=1,AC=0,OV=1,P=0(5)DA A;01111010+00000110=,(A)=80H,Cy=0,其他无变化(6)RLC A;(A)=B=F5H,Cy=0,AC=0,OV=0,P=0(7)RR A;(A)=00111101B=3DH,Cy=1,AC=0,OV=0,P=1《(8)PUSH 30H;SP=66H,(66H)=A5H(9)POP B;SP=64H,(B)=(65H)(10)XCH A,@R0;(A)=A5H,(30H)=7AH,Cy=1,OV=0,AC=0,P=0 3-4 试分析在执行完下面的程序段后,A,R0,R1,R7,SP以及片内RAM的一些单元中内容各是什么MOV SP,#65HMOV R7,#5MOV R0,#30HMOV R1,#40HLOOP:MOV A,@R1PUSH ACC$MOV A,@R0MOV @R1,AINC R0INC R1DJNZ R7,LOOP结果:(A)=(34H),(R0)=34H,(R1)=44H,(R7)=0,SP=70H ,(70H)=(44H),(30H)=(40H),…(34H)=(44H)。

3-5 已知SP=62H,(62H)=50H,(61H)=30H,问执行指令RET后,PC=,SP=并解释。

答:执行指令RET,从堆栈中弹出地址值给PC,栈指针减2,(62H),(61H)中的内容分别弹出PC=5030H,SP=60H 3-7 试编程求出片外RAM从2000H开始的连续20个单元的平均值,并将结果存入内部RAM20H单元。

MOV DPTR,#2000H)ACALL AVG子程序名:AVG子程序功能:求20个无符号数平均值子程序子程序入口:(DPTR)=数据区首地址指针子程序出口:(R3)(R4)=均值AVG:MOV R2,#20MOV R3,#00H;部分和高位字节单元清零MOV R4,#00H;部分和低位字节单元清零ACALL D-ADD;调用累加和子程序ACALL D-DIV;调用除以20的子程序%求多字节累加和子程序子程序名:D-ADD子程序功能:多字节累加和子程序子程序入口:(DPTR)=数据区首地址指针子程序出口:(R3)(R4)=累加和,R3中内容为和高字节,R4中内容为和低字节D-ADD:CLR CLOOP:MOVX A,@DPTRADD A,R4MOV R4,ACLR A\ADDC A,R3MOV R3,AINC DPTRDJNZ R2,LOOPRET双字节除以20的子程序子程序名:D-DIV子程序功能:除以20的子程序子程序入口:(R3)(R4)=被除数子程序出口:(R3)(R4)=商!D-DIV:MOV R7,#08H;置计数初值DV1:CLR CMOV A,R4;将(R3)(R4)左移1位RLC AMOV R4,AMOV A,R3RLC AMOV 00H,C;将移出的标志位送00HCLR CSUBB A,R2;余数高位减除数…JB 00H,GOU;标志位为1够减JNC GOU;无借位,也说明够减ADD A,R2,不够减,恢复余数AJMP DV2GOU:INC R4;够减,商上1DV2:MOV R3,ADJNZ R7,DV1;减完没完继续MOV 20H,R3;转存20HMOV 21H,R4;转存21HRET}3-9 在外部数据存储区首地址为TABLE的数据表中存有10B的数据,编程将每个字节的最高位置1,并送回原来的单元。

ORG 0030HMOV DPTR,#TABLEMOV R2,#10LOOP:MOVX A,@DPTRSETBMOVX @DPTR,AINC DPTRDJNZ R2,LOOPEND~3-10 编写能延时1s的子程序,设晶振频率为12MHz。

DELAY1S:MOV R6,#4 ;1TDL1:MOV R5,#251 ;1TDL2:MOV R4,#248;1TDL3:NOP ;1TNOP ;1TDJNZ R4,DL3 ;2TDJNZ R5,DL2;2TDJNZ R6,DL1;2TRET ;2T|延时时间:((248 × 4+1+2)× 251+1+2)×4+1+2=998995㎲3-12 编程实现:将30H,31H中的双字节二进制数转换为3B压缩BCD码,并存放到40H开始的空间中。

因为(a15a14…a1a0)=(…(0×2+a15) ×2+a14) ×2+…+a0),所以将二进制从最高位逐次左移入BCD码寄存器的最低位,并且每次都实现(…)×2+ai的运算。

BINBCD2:CLR AMOV R4,AMOV R5,AMOV R6,AMOV R7,#16LOOP: CLR C}MOV A,R3RLC AMOV R3,AMOV A,R2RLC AMOV R2,AMOV A,R6ADDC A,R6DA AMOV R6,A¥MOV A,R5ADDC A,R5DA AMOV R5,AMOV A,R4ADDC A,R4DA AMOV R4,ADJNZ R7,LOOPRET¥3-13 试编写一个查表程序,求X2(设X≤50)。

X已存于50H单元,X2存入51H 和52H单元。

MOV DPTR,#TABLEMOV A,50HCJNE A,#15,$+3JNC GOMOVC A,@A+DPTRMOV 51H,AGO: CLR CMOV R1,ASUBB A,#15¥ADD A,DPLMOV DPL,AMOV A,R1MOVC A, @A+DPTRMOV 52H,ADEC DPTRMOVC A, @A+DPTRMOV 51H,ARET3-14 从P1口输入50个带符号数,编程统计其中正数、负数和零的个数,结果分别存入片内RAM30H、31H、32H单元。

ORG 0030HMOV 30H,#00HMOV 31H,#00HMOV 32H,#00HMOV R5,#50LOOP:ORL P1,#0FFHMOV A,P1JZ NEXT1JB NEXT2INC 30H*SJMP DONENEXT1:INC 32HSJMP DONENEXT2:INC 31HDONE: DJNZ R5,LOOPSJMP $3-17 设计带有两个按键和2个LED显示器的系统,每当按一下S1键,则使LED1点亮、LED2暗,若按一下S2键,则使LED2点亮、LED1暗。

绘出相应的电路示意图,并编写相应的程序。

ORG 0030HORL P1,#0FHLOOP1:JNB ,NEXT1.JNB ,NEXT2AJMP LOOP1NEXT1:LCALL DL10msJB ,LOOP1JNB ,$MOV P1,#FEHAJMP LOOP1NEXT2:LCALL DL10msJB ,LOOP1JNB ,$MOV P1,#FDHAJMP LOOP1RETDL10ms:┇RET第四章4-1 MCS-51单片机内部有几个定时/计数器定时/计数器是由哪些专用寄存器组成的答:有T0和T1两个定时/计数器;工作方式寄存器TMOD,用于定义T0和T1的工作模式选择定时/计数工作方式以及启动方式等;控制寄存器TCON,主要用于定时/计数器T0或T1的启停控制,标志定时/计数器的溢出和中断情况。

&4-3 定时/计数器有哪几种工作方式各有什么特点适用于什么应用场合答:有四种工作方式,方式0,13位定时/计数器;方式1,16位定时/计数器;方式2,8位定时/计数器,初值自动重装;方式3,T0运行,而T1停止工作,8位定时/计数器。

方式0,1,2需要重装初值,使得定时的时间产生误差,方式2自动重装初值,可精确定时。

4-5 设某单片机的晶振频率为12MHz,定时/计数器T0工作于定时方式1,定时时间为20μs;定时/计数器T1工作于计数方式2,计数长度为100,请计算T0,T1的初始值,并写出其控制字。

答:T0的初始值X=2M-fosc×t/12=216-12×106×20×10-6/12=65536-20=65516=0FFECHT1的初始值X=2M-N=28-100=256-100=156=9CH控制字为01100001B=61HMOV TMOD,#61HMOV TH0,#0FFH~MOV TL0,#0ECHMOV TH1,#09CHMOV TL1,#09CH4-7 试用定时/计数器T1对外部事件计数,要求每计数100,就将T1改成定时方式,控制从输出一个脉宽为10ms的正脉冲,然后又转为计数方式,如此反复循环。

设系统晶振频率为12MHz。

解:(1)T1设置为工作方式1计数,由软件启动(2)T1计数方式控制字TMOD=01010000=50H,X1=216-100=65436=FF9CH,TH1=0FFH,TL1=9CHT1定时方式控制字TMOD=0001000=10H,X2=216-12×106×5×10-3/12=65536-5000=60536=B=0EC78HORG 0000HSJMP MAIN、ORG 0030HMAIN:MOV TMOD,#50HMOV TH1,#0FFCHMOV TL1,#9CHSETB TR1STA1:JBC TF1,NEXT1SJMP STA1NEXT1:MOV TMOD,#10HMOV TH1,#0ECHMOV TL1,#78H/SETBLP:JBC TF1,NEXT2SJMP LPNEXT2: MOV TH1,#0ECHMOV TL1,#78HCPLNEXT3:JBC TF1,MAINSJMP NEXT3RET4-9 利用单片机内部定时/计数器T1产生定时时钟,由P1口输出信号控制8个LED 指示灯,试编程使8个指示灯依次轮流闪动,闪动频率10Hz。

Fosc=12MHz。

"解:T=1/10==100ms,因此T1定时50ms,方式1TMOD=00010000B=10HX0=216-50×103/1=65536-50000=15536=000=3C78HORG 0000HSJMP MAINORG 001BHAJMP DVT1ORG 0030HMAIN:MOV TMOD,#10HMOV TH1,#3CH*MOV TL1,#78HSETB ET1SETB EASETB TR1CLR CMOV A,#0FFHMOV P1,ASJMP $DVT1: MOV TH1,#3CHMOV TL1,#78H?RLC AMOV P1,ARETI4-10利用定时/计数器测量某正脉冲宽度,已知此脉冲宽度小于10ms,系统晶振频率为12MHz。

相关主题