您好,欢迎来到爱学范文!

当前位置:爱学范文网>>实用资料>>单片机课后第三章习题答案

单片机课后第三章习题答案

标签:时间:

【综合文库】

单片机原理与应用作业

第三章

1 设内部RAM中59H单元的内容为50H,写出当执行下列程序段后寄存器A,R0和内部RAM中50H,51H单元的内容为何值? MOV A,59H;A=50H MOV R0,A ;R0=50H MOV A,#00H ;A=00H MOV @R0,A ;50H=00H MOV A,#25H ;A=25H MOV 51H,A;51H=25H MOV 52H,#70H ;52H=70H A=25H R0=50H 50H=00H 51H=25H

2请选用适合的指令对P0口内容作修改(例如使P0.0~P0.3不变,P0.4~P0.7为0) mov A,P0 ANL A ,0fh mov P0,A

3访问外部数据存储器和程序存储器可以用哪些指令来实现?举例说明。 答:访问外部数据存储器指令有:

MOVX@DPTR,AMOV DPTR,#0100HMOV @DPTR,A MOVXA,@DPTRMOV DPTR,#0200HMOV A,@DPTR MOVXA,@Ri MOVX A,@R0 MOVX@Ri,A MOVX @R1,A 访问程序存储器指令有: MOVCA,@A+PC MOVCA,@A+DPTR

4设堆栈指针SP中的内容为60H,内部RAM中30H和31H单元的内容分别为24H和10H,执行下列程序段后,61H,62H,30H,31H,DPTR及SP中的内容将有何变化? PUSH30H;61H=24H

PUSH31H;62H=10H SP=62H POPDPL ;DPL=10H

POPDPH ;DPH=24HSP=60H MOV 30H,#00H ;30H=00H MOV 31H,#0FFH;31H=0FFH

5设(A)=40H,(R1)=23H,(40H)=05H。执行下列两条指令后,累加器A和R1以及内部RAM中40H单元的内容各为何值? XCHA,R1;A=23HR1=40H XCHDA,@R1 ;A=25H40H=03H

6两个四位BCD码数相加,被加数和加数分别存于50H,51H和52H,53H单元中(千位、百位在低地址中,十位、个位在高地址中),和存放在54H,55H和56H中(56H用来存放最高位的进位),试编写加法程序。 ORG0000H LJMP START ORG0100H START:MOV A,53HADD A,51H DAA MOV55H,A MOVA,52H ADDCA,50H DAA MOV56H,C SJMP$ END

7设(A)=01010101B,(R5)=10101010B,分别写出执行下列指令后结果。 ANLA , R5;00000000B ORLA , R5;11111111B XRLA , R5;11111111

8指令SJMP rel中,设rel=60H,并假设该指令存放在2114H和2115H单元中。当该条指令执行后,程序将跳转到何地址? 答:2116H+60H=2176H

9简述转移指令AJMPaddr11、SJMP rel、 LJMPaddr16及JMP@A+DPTR的应用场合。 答:AJMPaddr11 为2K字节范围内的无条件转跳指令,把程序的执行转移到指定的地址。SJMP rel是无条件转跳指令,执行时在PC加2后,把指令中补码形式的偏移量值加到PC上,并计算出转向目标地址。转向的目标地址可以在这条指令前128字节到后127字节之间。 LJMPaddr16执行这条指令时把指令的第二和第三字节分别装入PC的高位和低位字节中,无条件地转向指定地址。转移的目标地址可以在64K程序存储器地址空间的任何地方,不

影响任何标志。JMP@A+DPTR指令的功能是把累加器中8位无符号数与数据指针DPTR中的16位数相加,将结果作为下条指令地址送入PC,利用这条指令能实现程序的散转。

10试分析下列程序段,当程序执行后,位地址00H,01H中的内容将为何值?P1口的8条I/O线为何状态?

CLRC;CY=0 MOV A,#66H;A=66H JCLOOP1

CPL C;CY=1 SETB01H ;20H.1=1 LOOP1:ORL C, ACC.0;CY=1 JB ACC.2,LOOP2 ; CLR00H

LOOP2:MOVP1,A ;P1=01100110B SJMP$

20H.0=020H.1=1P1=66H

11查指令表,写出下列两条指令的机器码,并比较一下机器码中操作数排列次序的特点。 MOV 78H,80H ;85 80 78 MOV 78H,#80H ;75 78 80

答直接寻址单元传送到直接寻址单元的机器码是第二个操作数在前,而立即数传送到直接地址单元是第一个操作数在前,次序正好相反。

12手工汇编下列程序段 ORG873BH AAAEQU851AH QQQ: MOVA,35H CLR C SUBBA,#0AH JCQQ16 MOV A,36H SUBB A,#0AH JC QQ15 AJMPAAA QQ15: MOV35H,#00H QQ16: JNB02H,QQ17MOV R6,39HDEC R6

SJMPQQ18 QQ17: MOVR6,39H INC 39H QQ18:CLR05HLJMP8500HEND

13若有两个无符号数x,y分别存放在内部存储器50H、51H单元中,试编写一个 程序实现x*10+y,结果存人52H、53H两个单元中。ORG 0000H SJMP START ORG 0030H START: MOV A,50H MOV B,#10

MUL AB ;(50H)x10积的高、低字节分别在B、A中 ADD A,51H MOV 53H,A ;积的低字节加(51H)其和存放在53H中 MOV A,#00H ADDC A,B

MOV 52H,A ;积的高字节加进位位存放在52H中。 SJMP $

14从内部存储器20H单元开始,有30个数据。试编一个程序,把其中的正数、负数分别送51H和71H开始的存储单元,并分别记下正数、负数的个数送50H和70H单元。

ORG 0000H SJMP START ORG 0030H

START: MOV 1EH,#51H ;正数存放首地址51H存暂存于1EH单元 MOV 1FH,#71H ;负数存放首地址71H存暂存于1EH单元 MOV R0,#20H ;建立取数(源操作数)的地址指针 MOV R2,#30 ;预置数据长度 MOV 50H,#00H ;正数个数统计单元清零 MOV 70H,#00H ;负数个数统计单元清零 LOOP: MOV A,@R0 ;取数

JB ACC.7,NEG ;是负数转 NEG处理

POSI: MOV R1,1EH ;是正数,将暂存的地址送R1(间址寄存器) MOV @R1,A ;将正数入存

INC 50H ;正数个数加1

INC 1EH ;正数暂存地址加1修正 LOOP1: INC R0 ;取数地址加1修正

DJNZ R2,LOOP ;计数长度减1,不等于零,继续循环统计 SJMP $ ; 结束

NEG: MOV R1,1FH ;是负数,将暂存的地址送R1(间址寄存器) MOV @R1,A ;将负数入存

INC 70H ;负数个数加1

INC 1FH ;负数暂存地址加1修正 SJMP LOOP1 ;转取数地址修正

15内部存储单元40H中有一个ASCII码字符,试编一程序,给该数的最高位加上奇校验。 ORG 0000H SJMP START ORG 0030H

START: MOV A,40H ;取数给A

CLR ACC.7 ;A最高位(奇偶校验位)清零 JB P,LOOP ;40H中的ACSII码原来就是奇数个1(最高位给零) SETB ACC.7 ;40H中的ACSII码原来是偶数个1,最高位置1 LOOP: MOV 40H,A ;入存 SJMP $ ; 结束 END

16编写一段程序,将存放在自DATA单元开始的一个四字节数(高位在前),取补后送回原单元。

一:若DATA在内部数据存储器中(假如存放在30H起始的4个单元中); 解1、采用求反加1的算法 ;

ORG 0000H SJMP START ORG 0030H

START: SETB C ; 置进位位为1 MOV R2,#04H ; 预置计数长度

MOV R0,#DATA1+3 ; 取数指针指向低字节的地址 LOOP: MOV A,@R0 ; 取数

CPL A ; 求反

ADDC A,#00H ; 加进位 MOV @R0,A ; 入存

DEC R0 ; 地址指针修正

DJNZ R2,LOOP ; 4字节未处理完,继续循环处理 SJMP $ ; 结束 DATA1 EQU 30H ; END

17以BUFl为起始地址的外存储区中,存放有16个单字节无符号二进制数,试编一程序,求其平均值并送BUF2单元。

解:设R2、R3存放和,将其除以16(R2、R3联合左移4位)即为平均置值(单字节存放)

ORG 0000H SJMP START ORG 0030H

START: MOV R2,#00H ; 和高字节清零 MOV R3,#00H ; 和低字节清零

MOV DPTR,#DATA1 ; 建立外部数据存储器的地址指针 MOV R4,#10H ; 预置计数长度

LOOP: MOVX A,@DPTR ; 从外部数据存储器取数 ADD A ,R3 MOV R3,A MOV A, R2 ; ADDC A,#00H ; MOV R2,A ; 累加

INC DPTR ; 地址指针修正

DJNZ R4,LOOP ; 16字节未累加完,继续循环累加 MOV R4,#04H ; R2、R3联合移位4次(除以16) LOOP1: CLR C MOV A,R2 RRC A MOV R2,A MOV A,R3 RRC A MOV R3,A

DJNZ R4,LOOP1 ; 平均值存放于R3中 SJMP $ ; 结束

DATA1 EQU 1000H ; END

18在DATAl单元中有一个带符号8位二进制数。编一程序,按以下关系计算y值,送DATA2 x+5 x>0 x x=0 x-5 x<0

解1:设DATA1、DATA2为内部数据存储器的二个单元(假设为30H、31H) 且y的值单字节不会产生溢除出 ORG 0000H SJMP START ORG 0030H

START: MOV A,30H ; 取数X给A JZ ZERO ; 若X=0,则Y=0,转入存 JB ACC.7,NEG ; 若X<0,则转X-5

POZI: ADD A,#05H ; 若x>0,则X=5,入存 SJMP ZERO ; NEG: CLR C ;

SUBB A,#05H ;

ZERO: MOV 31H,A ; 结果入存 SJMP $ ; END

19设内部RAM中30H和31H单元中有两个带符号数,求出其中的大数存放在32H单元中。解一:思路:若两数同号,则值大的数大;两数异号,正数值大 ORG0000H

SJMPSTARTORG 0030HSTART:MOV A,30H;

XRL A,31H; 两数异或 JB ACC.7,YIHAO两数异号 TONGHAO:CLR C; 两数同

号 MOVA, 30H SUBBA, 31H JCLOOP1 2

,LOOP0: MOV A,30H;同号被减数大,值大LOOED: MOV 32H ,ASJMP $

LOOP1:MOV A,31H;异号被减数大,值小 SJMP ED; YIHAO:MOV A,30H;异号,哪个正,其值

大 JNB ACC.7,LOOP0 SJMP LOOP1END

20利用逻辑尺控制的方法,设计一个主程序,在第1、3、5、6次调用SBI子程序,第2、4、7、8次调用SB2子程序。 ORG 0000H SJMP TEST ORG 0030H 7/15页

TEST: MOV R2,#08H MOV A, #10101100B LOOP: RLC A JC LOOP1 LCALL SBI SJMP RELT LOOP1: LCALL SB2 RELT: DJNZ R2,LOOP SJMP $ PRGO: RET PRG1: RET END

21 将DATA单元存放的以ASCII码表示的16进制数转换成十进制数存放于DATA+1单元。 解:先将DATA单元的ASCII码转换成十六进制的数,再转转成十进制的数。 数字的ASCII码转成十六进制数(即为十进制数)采用减30H

字母的ASCII码转成十六进制数采用减37H,十六进制再转十进制可采用先减0AH,再加10H;这样-37H-0AH+10H=-31H,可采用直接减31H。

1、数字与字母的ASCII的区别,可采用对D6的检测D6=1为字母的ASCII码,反之为数字的ASCII码。 ;

ORG 0000H SJMP TEST ORG 0030H

TEST: MOV R0, #DATA1 MOV A,@R0 ;将DATA1的数给A CLR C ;

LOOP: JB ACC.6,LOOP1 ;是字母,转LOOP1 SUBB A,#30H ;是数字减30H ED: MOV DATA1+1,A ;入存 SJMP $ ;结束

LOOP1: SUBB A,#31H ;是字母,减31H SJMP ED ; DATA1 EQU 30H END

22编一个将十六进制数转换成十进制数的子程序。

1、编一个单字节(内部数据存储器30H)的十六进制数转换成十进制数的子程序

2、编一个将内部数据存储器30H起始的10个字节的十六进制数转换成十进制数,从40H起始存放的子程序

1解、一个单字节的十六进制的数转成十进制数一般考虑用二个字节BCD码来 存放。 设转换后的数存放在R3(高)、R4(低)中。

思路;a、一种可将其分离成高、低半字节,高半字节的数可通过查表转成BCD码,而后与低半字节相加(DA A)调整;

b、也可将高半字节的数作为计数器,以16(BCD)连续累加计数器的次数, 而后与低半字节相加(DA A)调整;

c、将单字节的十六进制(即为二进制数),反复用乘2(用自己加自己再进 行DA A调整)加低位的算法,进行编程。 ORG 0000H SJMP TEST ORG 0030H

TEST: MOV DPTR ,#TAB ; 建立表头地址 MOV A,30H ANL A,#0F0H

SWAP A ; 高半字节分离 ADD A ,0E0H ; 高半字节数乘2 MOV B, A ; 暂存 MOVC A,@A+DPTR ;

MOV R3,A ; 取转换后的高半字节存R3 INC DPTR ; MOV A,B ; 9/15页

MOVC A,@A+DPTR ;

MOV R4,A ; 取转换后的低半字节存R4 MOV A,30H ; ANL A,#0FH ; ADD A,R4 ; DA A ;

MOV R4,A ; 加原数的低半字节(DA A) MOV A,R3 ; ADDC A,#00H ; DA A ; MOV R3,A ; RET ;

TAB: DB 00H,00H,00H,16H,00H,32H,00H,48H,00H,64H DB 00H,80H,00H,96H,01H,12H,01H,28H,01H,44H DB

01H,60H,01H,76H,01H,92H,02H,08H,02H,24H DB 02H,40H,02H,40H,02H,56H END

23编一程序,将存储区DATAl单元开始的20个单字节数据依次与DATA2单元为起始地址的20个单字节数据进行交换。 START: MOV R0,# DATA1 ; 建立源操作数地址指针设DATA1、DATA2分别为内部RAM 30H和50H单元。

ORG 0000H SJMP START ORG 0030H

START: MOV R0,#30H ; 建立源地址指针 MOV R1,#50H ; 建立目标地址指针 MOV R6,#20 ; 置计数长度

LOOP: MOV A,@R0 ; 取源地址数据

XCH A,@R1 ;

MOV @R0,A ; 源地址数据与目标地址数据交换 INC R0 ; 源地址指针修正 INC R1 ; 目标地址指针修正

DJNZ R6,LOOP ; 计数长度减1,不等于0继续循环 RET ; END

24试编写一程序,将存储区DATAl单元开始的50个单字节数逐一移至DATA2单元开始的存储区中。

START: MOV R0,# DATA1 ; 建立源操作数地址指针

MOV R1,# DATA2 ; 建立目标操作数地址指针MOV R6,#50 ; 置计数长度LOOP: MOV A,@R0 ; MOV @R1,A ;INC R0; 地址指针加1INC R1; 地址指针加1DJNZ R6,LOOP ;

25 试编一采用查表法求1—20的平方数子程序(要求:x在累加器A中,1≤x≤20,平方数高位存在R6,低位在R7 )。

为编程方便起见,每一数的平方在表中统一用双字节来存放,这样只要把数乘2加表头地址,就可以找到对应的平方数的高字节存放的地址,连续取两个字节即可。ORG 0000H SJMP START ORG 0030H

START: MOV DPTR,#TAB ; 建立源地址指针 DEC A MOV B,A

ADD A,B MOV B,A

LOOP: MOVC A,@A+DPTR MOV R5,A INC DPTR MOV A,B

MOVC A,@A+DPTR MOV R6,A RET ;

TAB: DB 00H,00H,00H,01H,00H,04H,00H,09H,00H,16H ;平方数用BCD表示(也可用 DB 00H,25H,00H,36H,00H,49H,00H,64H,00H,81H ; 十六进制表示) DB 01H,00H,01H,21H,01H,44H,01H,69H,01H,96H

DB 02H,25H,02H,56H,02H,89H,03H,24H,03H,61H,04H,00H END

若平方表从0的平方存放,把程序中红色的DEC A 指令去掉,若表从1的平方存放,则将DEC A指令加上。

ADD A,B MOV B,A

LOOP: MOVC A,@A+DPTR MOV R5,A INC DPTR MOV A,B

MOVC A,@A+DPTR MOV R6,A RET ;

TAB: DB 00H,00H,00H,01H,00H,04H,00H,09H,00H,16H ;平方数用BCD表示(也可用 DB 00H,25H,00H,36H,00H,49H,00H,64H,00H,81H ; 十六进制表示) DB 01H,00H,01H,21H,01H,44H,01H,69H,01H,96H

DB 02H,25H,02H,56H,02H,89H,03H,24H,03H,61H,04H,00H END

若平方表从0的平方存放,把程序中红色的DEC A 指令去掉,若表从1的平方存放,则将DEC A指令加上。

想了解更多实用资料的资讯,请访问:实用资料
下载文档

看过《单片机课后第三章习题答案》的人还看了以下文章

延伸阅读

技术入股合同的规定 随着科技成果产业化的深入,技术入股已成为高新技术企业普遍采用的一种出资方式和组织形式,对加速科技成果转化为现实生产力,促进企业采用高新技术成果,提高企业的竞争力,以及保护技术拥有者

2022春季初三班主任工作计划初三年级第二学期的教育与教学工作,面临着初中学生升学、择校。这学期任务重、时间紧、压力大,在积极落实学校德育工作和做好学校常规工作的基础上,根据我班的具体情况及毕业年级的

九十三年风雨路,矢志不渝报国心。吴大观同志一生爱国爱党,无私奉献,事迹感人。他为我国航空发动机事业贡献了毕生的心血和才华,是报国有成的党员专家,是知识分子的优秀代表。在纪念中国共产党成立88周年的日子

本页是爱学范文网最新发布的《大学生入党申请书1000字范文2020》的详细范文参考文章,觉得应该跟大家分享,希望对网友有用。进入大学以来,我非常想加入中国共产党,今天向党组织提交入党申请书。这里给大家

20xx年是中国共产党成立100周年。为庆祝党的百年华诞,党中央决定举行一系列活动。20xx年3月23日,中宣部介绍中国共产党成立100周年庆祝活动八项主要内容。爱学范文今天为大家精心准备了建党10

廉洁,最早出现在战国时期伟大的诗人屈原的《楚辞&middot;招魂》中:&ldquo;朕幼清以廉洁兮,身服义尔未沫。&rdquo;东汉著名学者王逸在《楚辞&middot;章句》中注释说:&ldquo;

2023抗击新冠疫情学生作文精选五篇&ldquo;哪有什么岁月静好,只不过是有人为你负重前行。无数医务工作者,奔向急救室的病榻;无数仁人志士他们转身逆流而上,将满手红印按在请愿书上。下面

一年来,***公司在处领导及相关科室的大力支持下,在公司领导的正确领导下,在全体干部职工的共同努力下,实现了全年安全生产平稳运行的良好态势,现将全年所做的主要工作汇报如下:  一、公司基本概况  *总结

“医院”一词来自拉丁语,最初的意思是“医院”来宾&rdquo,起初,它是为人们提供避难场所,还有一个休息室,让游客感到舒适和娱乐。后来,它逐渐成为满足人类医疗需求和提供医疗服务的专业机构,以及接收和治

体会是指将学习的东西运用到实践中去,通过实践反思学习内容并记录下来的文字,近似于经验总结。那么你知道心得体会如何写吗?接下来我就给大家介绍一下如何才能写好一篇心得体会吧,我们一起来看一看吧。红楼梦读书