您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 单片机原理与应用练习题3答案
练习题3答案1.简述下列基本概念:指令,指令系统,机器语言,汇编语言。答:指令是单片机CPU执行某种操作的命令。指令系统是一台计算机所能执行的指令集合。机器语言即二进制代码语言,是计算机可以直接识别。汇编语言是用助记符、字符串和数字等来表示指令的程序语。2.简述AT89S51单片机的指令格式答:该单片机的指令由两部分组成,即操作码和操作数。操作码用来规定指令进行什么操作,而操作数则是指令操作的对象,操作数可能是一个具体的数据,也可能是指出到哪里取得数据的地址或符号。指令格式一般为:[标号:]操作码[操作数1][,操作数2][,操作数3][;注释]3.简述AT89S51的寻址方式和所能涉及的寻址空间答:共有7种寻址方式,见表3-2。分别是:(1)寄存器寻址:寻址范围为通用寄存器组,共4组32个,但只能使用当前寄存器组,因此使用前需要通过对PSW种的RS1、RS0位的状态进行设置;(2)直接寻址:寻址范围为内部RAM,包括低128位用户RAM区和高128位专用寄存器;(3)寄存器间接寻址:寻址范围为内部RAM低128位,外部RAM64KB(低256单元可以使用DPTR和R0、R1作为间接寻址寄存器,而其他单元只能用DPTR作为间接寻址寄存器);(4)立即寻址:直接给出立即数,不涉及寻址空间;(5)变址寻址:只对程序寄存器进行寻址;(6)相对寻址:以PC的内容为基值,加上指令机器代码中‘相对地址’形成新的PC值转移;(7)位寻址:寻址空间包括内部RAM位寻址区(20~2FH)和专用寄存器的可寻址位。4.要访问片外程序存储器和片外数据存储器,应采用哪些寻址方式?答:访问片外程序存储器采用变址寻址方式,片外数据存储器采用寄存器间接寻址方式,且用DPTR可以访问64KB,而用R0或者R1只可访问低256字节。5.在AT89S51片内RAM中,已知(30H)=38H,(38H)=40H,(40H)=48H,(48H)=90H。请分析下面各是什么指令,说明源操作数的寻址方式及按顺序执行每条指令后的结果。答:指令指令说明源操作数寻址方式结果表3-2寻址方式及相应的寻址存储器范围寻址方式寻址存储器范围立即寻址程序存储器ROM直接寻址片内RAM低128B,特殊功能寄存器寄存器寻址工作寄存器R0~R7,A,C,DPTR,AB寄存器间接寻址片内RAM低128B,片外RAM变址寻址程序存储器ROM(@A+DPTR,@A+PC)相对寻址程序存储器ROM(相对寻址指令的下一指令PC值加-128~+127)位寻址片内RAM的20H~2FH字节地址中所有的位,可位寻址的特殊功能寄存器MOVA,40H将内部RAM中40H内容传送到累加器A中(A)←(40H)直接寻址(A)=48HMOVR0,A再将A中内容传送给R0(R0)←(A)寄存器寻址(R0)=48HMOVP1,#0F0H将立即数0F0H送到P1口,即P1.4~P1.7位1,其余为0(P1)←0F0H立即数寻址(P1)=0F0HMOV@R0,30H将30H中的内容,传放到以R0单元内容为地址的单元中((R0))←(30H)直接寻址((R0))=(48H)=38HMOVDPTR,#3848H将立即数3848传送给DPTR数据指针(dptr)←3848H立即数寻址(DPTR)=3848HMOV40H,38H将内部RAM中38H内容传送到40H单元中(40H)←(38H)直接寻址(40H)=40HMOVR0,30H将30H中的内容给R0寄存器(R0)←(30H)直接寻址(R0)=38HMOVP0,R0将R0的内容传送到P0(P0)←(R0)寄存器寻址(P0)=38HMOVA,@R0将R0内容为地址的该单元内容传送给A(A)←((R0))寄存器间接寻址(A)=40HMOVP2,P1将P1的内容传送给P2(P2)←(P1)直接寻址(P2)=0F0H6.指出下列指令的源操作数的寻址方式MOVA,65H直接寻址MOVA,#65H立即数寻址MOVA,@R0寄存器间接寻址MOVA,R2寄存器寻址MOVCA,@A+PC变址寻址7.内部RAM和特殊功能寄存器各用什么寻址方式?答:内部RAM有寄存器寻址方式、直接寻址方式和间接寻址方式;特殊功能寄存器除A外只能进行直接寻址。8.已知:(A)=5BH,(R1)=30H,(30H)=0CEH,(P1)=71H,(PSW)=80H,(PC)=2000H,(205CH)=46H,(SP)=30H,(B)=78H。分别求各条指令执行后的结果(要求进行二进制运算验证)及标志位Cy、P的影响。(1)MOVA,@R1(A)=0CEHP=1,C不变(2)MOV40H,30H(40H)=0CEHP和C不变(3)MOVP1,R1(P1)=30HP和C不变(4)MOVCA,@A+PC(A)=46HP=1,C不变(5)PUSHB(31H)=78H,(SP)=31HP和C不变(6)POPDPH(DPH)=0CEH,(SP)=29HP和C不变(7)XCHDA,@R1(A)=05EH,(30H)=CBHP=1,C不变(8)ADDA,30H(A)=29HP=1,C=1(9)ADDCA,P1(A)=CDHP=1,C=0(10)SUBBA,P1(A)=E9HP=1,C=1(11)ANLP1,#0FH(P1)=01HP和C不变(12)CLRPSW.7C=0(13)RLCA(A)=B7HP=0,C=0(14)ORLC,90HC=1,P不变9.对下面一段程序加上机器码和注释,并说明程序运行后寄存器A、R0和内部RAM50H、51H、52H单元的内容。MOV50H,#50H755050;(50H)←50HMOVA,50HE550;(A)←(50H)MOVR0,AF8;(R0)←(A)MOVA,#30H7430;(A)←30HMOV@R0,AF6;((R0))←(A)MOVA,#50H7450;(A)←50HMOV51H,AF551;(51H)←(A)MOV52H,#00H755200;(52H)←00H答:运行后寄存器(A)=50H,(R0)=50H,(50H)=30H,(51)=50H,(52H)=00H10.区别下列各指令中20H的含义,在每条指令后加上注释。MOVA,#20H将20H立即数传送给AMOV45H,20H将内部RAM中20H单元的内容传送到45H中MOVC,20H.0将内部RAM中20H单元内容的第0位(最低位)传送给CMOVC,20H将内部RAM中20H位地址内容传送给C11.写出完成以下功能的指令(1)将立即数30H送到R1;(2)将内RAM30H中的数据送到内RAM78H单元;(3)将立即数30H送到以R0中内容为地址的存储器中;(4)将R2中的内容送到P1;(5)将内RAM60H单元的数据送到外RAM60H单元;(6)将内RAM60H单元的数据送到外RAM1060H单元;(7)将ROM1000H单元的内容送到内RAM30H单元;(8)使ACC.7置位;(9)使累加器的低4位清零;(10)使P1.2与CY相与,结果送CY;(11)立即数45H、93H进行逻辑与、或、异或操作;(12)两立即数求和:1C0H+45H,结果按高低8位存在30H、31H中。答案:(1)MOVR1,#30H(2)MOV78H,30H(3)MOV@R0,#30H(4)MOVP1,R2(5)MOVA,60H;;MOVP2,#0;MOVR0,#60H;MOVX@R0,A(6)MOVA,60H;;MOVDPTR,#1060;MOVX@DPTR,A(7)MOVA,#00HMOVDPTR,#1000HMOVCA,@A+DPTRMOV30H,A(8)SETBACC.7(9)ANLA,#0F0H(10)ANLC,p1.2(11)与:MOVA,#45HANLA,#59H或:MOVA,#45HORLA,#59H异或:PMOVA,#45HXRLA,#59H(12)CLRCMOVR2,#1MOVA,#0C0HADDA,#45HMOV31H,AMOVA,R2ADDCA,#0MOV30H,A12.写出下列指令执行过程中堆栈的变化设堆栈初值为X:MOVR6,#11H(SP)=X(堆栈不变)MOVR7,#23H(SP)=X(堆栈不变)ACALL200H(SP)=X+2;(X+1)=第4条指令的首址PC低8位(X+2)=第4条指令的首址PC高8位POP50H(SP)=X-1POP51H(SP)=X-2SJMP$ORG200HRET答:执行过程中,前面两条为立即寻址指令,堆栈不变;执行第三条ACALL指令时,首先将程序寄存器PC的当前值加2,接着先后将PC的低八位和高八位分别进栈,(SP)=(SP)+2;然后再将PC内容中的低11位用200H来替代,同时程序跳到第七条ORG200H中,接着RET表示子程序返回,将原先压入堆栈的PC值弹出,(SP)=(SP)-2;最后两条POP指令执行后将SP所指地址中的内容赋给50H,SP减1后再将SP所指地址中的内容赋给51H,SP内容再减1给SP,最后程序结束。13.请写出能实现下列功能的程序段:(1)一个16位数据,高低字节分别放在20H和21H中,试将该数乘以2MOVA,21HCLRCRRCAMOV21H,AMOVA,20HRRCAMOV20H,A(2)16位二进制数由高位到低位放在30H和31H单元,将其内容加1;MOVA,31HADDA,#01HMOV31H,AMOVA,30HADDCA,#00HMOV30H,A(3)将DPTR中的数据减5;CLRCMOVA,DPLSUBBA,#05HMOVDPL,AMOVA,DPHSUBBA,#00HMOVDPh,A(4)有3个位变量X,Y,Z,请编写程序实现Y=X+YZ的逻辑关系式。XBIT30HYBIT31HZBIT32HMOVC,YANLC,ZMOV20H,CMOVC,XORLC,20HMOVY,C14.将一个按高低字节存放在21H、20H中的一个双字节乘以2后,再按高低次序将结果存放到22H、21H、20H单元ORG0STAR:CLRCMOV20H,#0E2H;设低字节的数据是E2HMOV21H,#0F3H;设高字节的数据是F3HMOVA,20HMOVB,#2HMULABMOV20H,AMOV23H,BMOVA,21HMOVB,#2HMULABADDCA,23HMOV21H,AMOV22H,BSJMP$END15.试编程,将片外RAM1000H~1050H单元的内容置为55H。MOVP2,#10HMOVR0,#00HMOVA,#55HMOVX@R0,AMOVR0,#50HL0:MOVX@R0,ADJNZR0,L0SJMP$END16.试编程统计数据区长度的程序,设数据区从片内RAM30H单元开始,该数据区以0结束,统计结果放入2FH中。MOVR0,#30HL0:MOVA,@R0JZL1INCR1INCR0SJMPL0L1:MOV2FH,R117.试编写程序,将片外RAM2000H~200FH数据区中的数据由大到小排列起来。ORG0L0:MOVP2,#20HMOVR0,#00HMOVR7,#0FHCLRF0LOOP:MOVXA,@R0MOV31H,AINCR0MOVXA,@R0CLRCCJNEA,31H,L1L1:JCL2DECR0MOVX@R0,AMOVA,31HINCR0MOVX@R0,ASETBF0L2:DJNZR7,LOOPJBF0,L0SJMP$END18.若晶振频率位6MHZ,试计算下面延时子程序的延时时间DELAY:MOVR7,#0F6H;1个机器周期LP:MOVR6,#0FAH;1个机器周期DJNZR6,$;2个机器周期DJNZR7,LP;2个机器周期RET;2个机器周期答:机器周期为2us,则有:[1+(1+2×250+2)×246+2]×2us=247482us19.试分别编写延时20ms和1s的程序设晶振频率为12M20ms:ORG0MOVR1,#102L1:MOVR0,#48L2:NOPNOPDJNZR0,L2NOPDJNZR1,L1NO
本文标题:单片机原理与应用练习题3答案
链接地址:https://www.777doc.com/doc-4231704 .html