您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 单片机课后作业答案(万福君)
11.1第3章MCS-51指令系统1.1.13-4设(70H)=60H,(60H)=20H,P1口为输入口,当前输入状态为B7H,执行下面程序:MOVR0,#70H;给R0赋值,R0=70HMOVA,@R0;将(70H)单元中的值送入累加器,A=60HMOVR1,A;R1和累加器的值交换,相当于将A的值送入R1,R1=60HMOVB,@R1;将(60H)的值送入B,B=20HMOVP1,#0FFH;P1口输入前的准备,使P1场效应管截止MOV@R0,P1;(R0)=(70H)=P1=0B7H试分析(70H)、(B)、(R1)、(R0)的内容是什么?答:(70H)=0B7H、(B)=20H、(R1)=60H、(R0)=70H1.1.23-5分析下面程序段的执行功能。CLRA;累加器清零MOVR2,A;R2清零MOVR7,#4;设置循环次数LOOP:CLRC;进位标志清零MOVA,R0;将R0的值放入累加器ARLCA;累加器A的值带进位标志循环左移1位MOVR0,A;R0左移一位MOVA,R1;将R1的值放入累加器ARLCA;累加器A的值带进位标志循环左移1位MOVR1,A;R1左移一位MOVA,R2;将R2的值放入累加器ARLCA;累加器A的值带进位标志循环左移1位MOVR2,A;R2左移一位DJNZR7,LOOP;循环4次,总共左移4位,相当于乘以16SJMP$;停止答:将R2:R1:R0所表示的24位二进制数左移4位。(相当×16)1.1.33-6设系统晶振为12MHZ,阅读下列程序,分析其功能。START:SETBP1.0;P1.0高电平NEXT:MOV30H,#10;外循环次数(2us)LOOP2:MOV31H,#0FAH;内循环次数(2us)LOOP1:NOP;延时(1us)NOP;1usDJNZ31H,LOOP1;2usDJNZ30H,LOOP2;2usCPLP1.0;P1.0电平反转(1us)AJMPNEXT;2usSJMP$2答:((2+1+1)*250+2+2)*10+2=10.042(ms)在P1.0引脚上输出周期为20ms的方波。我觉得应为:((2+1+1)*250+2+2)*10+1+2+2=10045us。1.1.43-7阅读下列程序,分析其功能。MOVR7,#10;设置循环次数MOVA,#30H;第一个值为40HMOVDPTR,#2000H;设定外部数据存储器的起始地址LOOP:MOVX@DPTR,A;将累加器A的值传送到外部数据存储器INCA;内部数据存储器地址加1INCDPL;外部数据存储器地址加1,用INCTPTR也可以DJNZR7,LOOP;判断是否将数据传送完SJMP$;结束答:在外部数据存储器中的以下地址内存放数据:(向外部存储器放数据)(2000H)=30H(2001H)=31H(2002H)=32H┇┇(2009H)=39H1.1.53-8简述下列程序段完成的功能,程序完成后SP指针应指向哪里?MOVSP,#2FH;设置栈底MOVDPTR,#2000HMOVR7,#50H;共50H个数据NEXT:MOVXA,@DPTRPUSHA;堆栈指针先加1再赋值INCDPLDJNZR7,NEXTSJMP$答:以内部存储器地址2FH作为栈底,从30H开始一直到7FH,依次存放外部数据存储器中2000H~204FH地址中的数据。7FH作为栈顶。程序完成后SP=7FH。(将外部RAM中的数据通过堆栈传送到内部RAM)1.1.63-9分析下列程序段执行结果,程序执行完后,SP指向哪里?MOVSP,#3FH;设置堆栈指针MOVR0,#40H;设置R0的值MOVR7,#10H;设置循环次数NEXT:POPA;将堆栈中的值放入A,SP自动减1MOV@R0,A;实际上是将堆栈中的值放入R0指向的地址DECR0;R0中的地址指针减1DJNZR7,NEXT;判断是否将数据移完SJMP$;停止答:通过堆栈将内部RAM地址为3FH、3EH、……、30H中的内容移放入地址为40H、3FH、……、31H的单元中。相当于把一段数据整体挪一位。执行完后SP=2FH。31.1.73-10分析下列程序段执行结果。XCHA,30H;将(30H)中的值放入AMOVB,A;相当于将(30H)中的值放入BANLA,#0FH;相当于取(30H)的低4位MOV33H,A;(30H)的低4位放入(33H)MOVA,B;相当于将(30H)中的值放入ASWAPA;交换(30H)的高4位与低4位ANLA,#15;15=0FH,仅保留A的低4位,相当于取(30H)的高4位MOV34H,A;相当于将(30H)的高4位放入(34H)SJMP$答:将30H单元中的数的高四位放入34H中,低四位放入33H中。或把(30H)的BCD码扩展成非组合BCD码存放至34H、33H中。1.1.83-13下列指令执行后,求(A)=?PSW中CY、OV、AC为何值?(1)当(A)=6BH,ADDA,#81H(2)当(A)=6BH,ADDA,#8CH(3)当(A)=6BH、CY=0,ADDCA,#72H(4)当(A)=6BH、CY=1,ADDCA,#79H(5)当(A)=6BH、CY=1,SUBBA,#0F9H(6)当(A)=6BH、CY=0,SUBBA,#0FCH(7)当(A)=6BH、CY=1,SUBBA,#7AH(8)当(A)=6BH、CY=0,SUBBA,#8CH答:6BH=01101011B(1)81H=10000001BA=0ECHCY=0OV=0AC=0(2)8CH=10001100BA=0F7HCY=0OV=0AC=1(3)72H=01110010BA=0DDHCY=0OV=1AC=0(4)79H=01111001BA=0E5HCY=0OV=1AC=1(5)F9H=11111001BA=71HCY=1OV=0AC=0(6)FCH=11111100BA=6FHCY=1OV=0AC=1(7)7AH=01111010BA=0F0HCY=1OV=0AC=0(8)8CH=10001100BA=0DFHCY=1OV=1AC=11.1.93-14阅读(1)、(2)、(3)程序段,分析其功能。运算结果存在哪里?(1)MOVA,R2;R2→AADDA,R0;R2+R0→AMOV30H,A;A→(30H),相当于R2+R0→30H)MOVA,R3;R3→AADDCA,R1;R3+R1+C→AMOV31H,A;A→(31H),相当于R3+R1→(31H),带符号位,考虑了R2+R0的进位MOVA,#0;0→AADDCA,#0;0+C→AMOV32H,A;A→(32H),相当于将R3+R1的进位放入(32H)SJMP$;结束4(2)CLRCMOVA,R4SUBBA,R2MOVR0,A;R4-R2→R0MOVA,R5SUBBA,R3MOVR1,A;R5-R3→R1,同时考虑了R4-R2的借位标志SJMP$(3)MOVA,R1MOVB,R0MULABMOV30H,A;R1×R0的低8位→(30H)MOV31H,B;R1×R0的高8位→(31H)MOVA,R2MOVB,R0MULAB;R2×R0→BAADDA,31HMOV31H,A;R2×R0的低8位和R1×R0的高8位相加后存入(31H)MOVA,BADDCA,#0MOV32H,A;R2×R0的高8位存入(32H),考虑了进位标志SJMP$答:(1)将R3:R2和R1:R0中的两个16位数相加,结果存放在32H:31H:30H中。功能:双字节带符号加法。被加数存放在寄存器R1(存放高八位)、R0(存放低八位)中,加数存放在寄存器R3(存放高八位)、R2(存放低八位)中,和(共17位)由高到低依次存放在32H(存放最高一位)、31H(存放中八位)、30H(存放低八位)单元中。(2)用R5:R4中的16位数减去R3:R2中16位数,结果存放在R1:R0中。功能:双字节无符号减法。被减数存放在寄存器R5(存放高八位)、R4(存放低八位)中,减数存放在寄存器R3(存放高八位)、R2(存放低八位)中,差存放在寄存器R1(存放高八位)、R0(存放低八位)中。(3)R2:R1中的16位数乘以R0中的数,结果存放在32H:31H:30H中。功能:无符号乘法。被乘数16位存放在寄存器R2(存放高八位)、R1(存放低八位)中,乘数8位存放在寄存器R0中,乘积(共24位)存放在32H(存放高八位)、31H(存放中八位)、30H(存放低八位)单元中。1.1.103-20分析以下程序段,何时转向LABEL1?何时转向LABEL2?MOVA,R0CPLAJZLABEL1INCAJZLABEL2……答:R0中内容为0FFH时转向LABEL1,R0中内容为00H时转向LABEL2。1.1.113-235有四个变量U、V、W、X分别从P1.0~P1.3输入,阅读如下程序,写出逻辑表达式并画出逻辑电路图。请使用ORG、END、BIT等伪指令重新编写该程序段。MOVP1,#0FH;P1作为输入前的准备,使场效应管截止MOVC,P1.0;读入P1.0,存入在进位标志ANLC,P1.1;P1.0&P1.1CPLC;取反MOVACC.0,C;暂存ACC.0MOVC,P1.2ORLC,/P1.3;P1.2|/P1.3ORLC,ACC.0MOVF,CSJMP$答:电路图如下:≥1XWUV&≥1F逻辑表达式:)(XWVUF重新整理编写程序如下:ORG0100HUBITP1.0VBITP1.1WBITP1.2XBITP1.3START:MOVP1,#0FH;P1作为输入前的准备,使场效应管截止MOVC,U;读入P1.0,存入在进位标志ANLC,V;P1.0&P1.1CPLC;取反MOVACC.0,CMOVC,WORLC,/X;P1.2|/P1.3ORLC,ACC.0MOVF,CSJMP$END1.1.123-24用布尔指令,求解逻辑方程。(1)1.15.ACC.2P1.3PSW.5PB(2)P1.0ACC.7B.4P1.5PSW.5答:(1)实际上是求)1.15.(ACC.2)P1.3(PSW.5PB。注意布尔运算符的优先顺序是“非、与、或”。MOVP1,#0FFHMOVC,P1.3ANLC,ACC.26MOVACC.0,C;P1.3&ACC.2后暂存ACC.0MOVC,B.5ANLC,P1.1;B5&P1.1ORLC,ACC.0MOVPSW.5,CSJMP$END(2)MOVP1,#0FFHMOVC,P1.5ANLC,B.4MOVACC.0,C;(P1.5&B.4)后暂存ACC.0MOVC,ACC.7ANLC,P1.0;ACC.7&P1.0ORLC,ACC.0CPLCMOVPSW.5,CSJMP$END1.2第4章汇编语言程序设计1.2.14-5试求内部RAM30~37H单元8个无符号数的算术平均值,结果存入38H单元。答:方法一:相加后和放在R3:38H中,然后将结果整体右移3位,得数放在38H单元中。ORG0100HSTART:MOVR7,#07H;循环次数MOVR3,#00H;将存放进位的寄存器清零MOVA,30H;从30开始MOVR0,#31HLOOP:ADDA,@R0JNCNEXT;没有进位则跳转到NEXTINCR3;进位放R3,有进位的情况加1NEXT:INCR0;指向下一地址DJNZR7,LOOPMOV38H,A;累加结果放(38H)MOVR7,#3;设置循环次数,共右移3次,相当于除以8LOOP1:CLRC;进位标志清零MOVA,R3;将前面加法产生的进位放入累加器RRCA;带进位位循环右移一位,相当于将R3的最低位放进进位标志MOVR3,A;结果放回R3,暂存MOVA,38HRRCA;此处带进位位循环右移,把R3的最低位移进来了,相当于除以2MOV38H,A;结果放回(38H)DJNZR7,LOOP1SJMP$END方法二:相加后和放在R3:38H中,然后将R3中的数乘以32,将38H中的数除以8,然后将两个结果相加,放
本文标题:单片机课后作业答案(万福君)
链接地址:https://www.777doc.com/doc-1544074 .html