单片机习题参考答案0812.docx

上传人:b****8 文档编号:10342915 上传时间:2023-02-10 格式:DOCX 页数:35 大小:183.96KB
下载 相关 举报
单片机习题参考答案0812.docx_第1页
第1页 / 共35页
单片机习题参考答案0812.docx_第2页
第2页 / 共35页
单片机习题参考答案0812.docx_第3页
第3页 / 共35页
单片机习题参考答案0812.docx_第4页
第4页 / 共35页
单片机习题参考答案0812.docx_第5页
第5页 / 共35页
点击查看更多>>
下载资源
资源描述

单片机习题参考答案0812.docx

《单片机习题参考答案0812.docx》由会员分享,可在线阅读,更多相关《单片机习题参考答案0812.docx(35页珍藏版)》请在冰豆网上搜索。

单片机习题参考答案0812.docx

单片机习题参考答案0812

单片机习题参考答案

第四章P976,7,9,10,12,16,17,18,19,23,27,28,29

6.在80C51片RAM中,已知(30H)=38H,(38H)=40H,(40H)=48H,(48H)=90H,请分析下段程序中各指令的作用,并翻译成相应的机器码;说明源操作数的寻址方式与顺序执行每条指令后的结果。

机器码(H)指令结果源操作数的寻址方式

E540MOVA,40H;A=(40H)=48H直接寻址

F8MOVR0,A;R0=48H寄存器寻址

7590F0MOVP1,#0F0H;P1=0F0H立即寻址

A630MOVR0,30H;(48H)=38H直接寻址

901246MOVDPTR,#1246H;DPTR=1246H立即寻址

853840MOV40H,38H;(40H)=40H直接寻址

A830MOVR0,30H;R0=38H直接寻址

8890MOV90H,R0;(90H)=38H寄存器寻址

754830MOV48H,#30H;(48H)=30H立即寻址

E6MOVA,@R0;A=40H寄存器间接寻址

8590A0MOVP2,P1;P2=P1=38H直接寻址

7.试说明以下指令的作用,并将其翻译成机器码,执行最后一条指令对PSW有何影响?

A的终值为多少?

机器码(H)指令结果

(1)7872MOVR0,#72H;R0=72H

E8MOVA,R0;A=72H,P=0

244BADDA,#4BH;A=BDH,CY=0,OV=1,AC=0,P=0

(2)7402MOVA,#02H;A=02H,P=1

F5F0MOVB,A;B=02H

740AMOVA,#0AH;A=0AH,P=0

25F0ADDA,B;A=0CH,CY=0,OV=0,AC=0,P=0

A4MULAB;A=18H,B=0,CY=0,OV=0,AC=0,P=0

(3)7420MOVA,#20H;A=20H,P=1

F5F0MOVB,A;B=20H

25F0ADDA,B;A=40H,CY=0,OV=0,AC=0,P=1

9410SUBBA,#10H;A=30H,CY=0,OV=0,AC=0,P=0

84DIVAB;A=01H,B=10H,CY=0,OV=0,AC=0,P=1

9.试编程将片外数据存储器60H中的容传送到片RAM54H单元中。

MOVDPTR,#0060H

MOVXA,DPTR

MOV54H,A

(MOVP2,#0

MOVR0,#60H

MOVXA,R0

MOV54H,A)

10.试编程将寄存器R7容传送到R1中去。

MOVA,R7

MOVR1,A

12.试说明下段程序中每条指令的作用,并分析当执行完指令后,R0中的容是什么?

MOVR0,#0A7H;R0=A7H

XCHA,R0;A=A7H,A的容暂存R0

SWAPA;A=7AH

XCHA,R0;R0=7AH,A的容恢复

16.试编程将片外RAM中30H和31H单元的容相乘,结果存放在32H和33H单元中,高位存放在33H单元中。

MOVP2,#0

MOVR0,#30H

MOVXA,R0

MOVB,A

INCR0

MOVXA,R0

MULAB

INCR0

MOVXR0,A

INCR0

MOVA,B

MOVXR0,A

MOVDPTR,#30H

MOVXA,DPTR

MOVB,A

INCDPTR

MOVXA,DPTR

MULAB

INCDPTR

MOVXDPTR,A

INCDPTR

MOVA,B

MOVXDPTR,A

17.试用三种方法将累加器A中无符号数乘2。

(1)CLRC

RLCA

(2)MOVR0,A

ADDA,R0

或ADDA,ACC

(3)MOVB,#2

MULAB

18.请分析依次执行下面指令的结果:

MOV30H,#0A4H;(30H)=A4H

MOVA,#0D6H;A=D6H,P=1

MOVR0,#30H;R0=30H

MOVR2,#47H;R2=47H

ANLA,R2;A=46H,P=1

ORLA,@R0;A=E6H,P=1

SWAPA;A=6EH,P=1

CPLA;A=91H,P=1

XRLA,#0FFH;A=6EH,P=1

ORL30H,A;(30H)=EEH

19.求执行以下指令后,累加器A与PSW中进位位CY、奇偶位P和溢出位OV的值。

(1)当A=5BH时;ADDA,#8CH

01011011

+)10001100

11100111

结果:

A=E7H,CY=0,OV=0,P=0,AC=1

(2)当A=5BH时;ANLA,#7AH

01011011

∧)01111010

01011010

结果:

A=5AH,P=0

(3)当A=5BH时;XRLA,#7FH

01011011

⊕)01111111

00100100

结果:

A=24H,P=0

(4)当A=5BH,CY=1时;SUBBA,#0E8H

01011011或将减法转换成补码加法01011011

11101000-E8H的补码00011000

-)1-1的补码+)11111111

01110010101110010

结果:

A=72H,CY=1,OV=0,P=0,AC=0

23.执行下述程序后,SP=?

A=?

B=?

解释每一条指令的作用,并将其翻译成机器码。

地址(H)机器码(H)ORG200H

0200758140MOVSP,#40H;SP=40H

02037430MOVA,#30H;A=30H

0205120250LCALL250H;调用250H开始的子程序SP=42H,

;(42H)=02H,(41H)=08H

02082410ADDA,#10H;此句没有执行

020AF5F0MOVB,A;B=30H

020C80FEL1:

SJMPL1;

ORG0250H

025090020AMOVDPTR,#20AH;DPTR=020AH

0253C082PUSHDPL;DPL进栈,SP=43H,(43H)=0AH

0255C083PUSHDPH;DPH进栈,SP=44H,(44H)=02H

025722RET;返回,此处是利用RET将栈顶容弹出

PC=020AH,SP=42H

44H

02H

43H

0AH

栈区42H

02H

41H

08H

40H

执行程序后,SP=42H,A=30H,B=30H

27.试编一程序将外部数据存储器2100H单元中的高4位置“1”,其余位清”0”。

MOVDPTR,#2100H

MOVXA,DPTR

ANLA,#0F0HMOVA,#0F0H

ORLA,#0F0H

MOVXDPTR,A

28.试编程将部数据存储器40H单元的第0位和第7位置”1”,其余位变反。

MOVA,40H

CPLA

SETBACC.0(或ORLA,#81H)

SETBACC.7

MOV40H,A

29.请用位操作指令,求下面逻辑方程:

MOVC,P2.1

ORLC,B.0

ANLC,ACC.0

ORLC,/P3.2

MOVP1.7,C

MOVC,P1.3

ANLC,ACC.2

ORLC,B.5

ANLC,/P1.1

MOVPSW.5,C

MOVC,B.4

ANLC,/P1.5

ORLC,/ACC.7

ANLC,P1.0

MOVP2.3,C

第五章P1121,3,6,7,11,20

1.编程将片40H~60H单元中容送到以3000H为首的片外RAM存储区中

方法1:

MOVR0,#40H

MOVDPTR,#3000H

MOVR2,#21H

LOOP:

MOVA,R0

MOVXDPTR,A

INCR0

INCDPTR

DJNZR2,LOOP

方法2:

MOVR0,#40H

MOVDPTR,#3000H

MOVR2,#0

LOOP:

MOVA,R0

MOVXDPTR,A

INCR0

INCDPTR

INCR2

CJNER2,#21H,LOOP

方法3:

MOVR0,#40H

MOVDPTR,#3000H

LOOP:

MOVA,R0

MOVXDPTR,A

INCR0

INCDPTR

CJNER0,#61H,LOOP

补充:

编程将ROM中3000H~3020H单元的容送片RAM40H~60H单元中去。

MOVR0,#40H

MOVDPTR,#3000H

MOVR2,#21H

LOOP:

CLRA

MOVCA,A+DPTR

MOVR0,A

INCR0

INCDPTR

DJNZR2,LOOP

3.编程计算片RAM区50H~57H8个单元中数的算术平均值,结果存放在5AH中。

解:

ORG2000H

MOVR0,#50H

CLRA

MOVR2,A

LOOP:

ADDA,R0

JNCDOWN

INCR2

DOWN:

INCR0

CJNER0,#58H,LOOP

MOVR7,#3

SHIFT:

XCHA,R2

CLRC

RRCA

XCHA,R2

RRCA

DJNZR7,SHIFT

MOV5AH,A

6.设有100个有符号数,连续存放在以2000H为首地址的片外RAM存储区中,试编程统计其中正数、负数、零的个数。

方法1:

CLRA

MOVR5,A;存零的个数

MOVR6,A;存负数的个数

MOVR7,A;存正数的个数

MOVR2,#100

MOVDPTR,#2000H

LOOP:

MOVXA,DPTR

JNZNZERO

INCR5

SJMPDOWN

NZERO:

JNBACC.7,PLUS

INCR6

SJMPDOWN

PLUS:

INCR7

DOWN:

INCDPTR

DJNZR2,LOOP

方法2:

CLRA

MOVR5,A;存零的个数

MOVR6,A;存负数的个数

MOVR7,A;存正数的个数

MOVR2,#100

MOVDPTR,#2000H

LOOP:

MOVXA,DPTR

INCDPTR

CJNEA,#0,NZERO

INCR5

SJMPDOWN

NZERO:

JCNEGATIVE

INCR7

SJMPDOWN

NEGATIVE:

INCR6

DOWN:

DJNZR2,LOOP

7.请将片外数据存储器地址为1000H~1030H的数据块,全部搬迁到片RAM30H~60H中,并将原数据块区域全部清“0”。

解:

ORG1000H

MOVDPTR,#1000H

MOVR0,#30H

MOVR2,#31H

LOOP:

MOVXA,DPTR

MOVR0,A

CLRA

MOVXDPTR,A

INCR0

INCDPTR

DJNZR2,LOOP

8.试编写一子程序,使间址寄存器R1所指向的2个片外RAM连续单元中的高4位二进制数合并为1个字节装入累加器A中。

已知R0指向低地址,并要求该单元高4位放在A的高4位中。

##:

MOVXA,R1

ANLA,#0F0H

MOVB,A

INCR1

MOVXA,R1

ANLA,#0F0H

SWAPA

ORLA,B

RET

10.试编一查表程序,从首地址为1000H、长度为100的数据块中找出ASCII码A,将其地址送到10A0H和10A1H单元中。

MOVDPTR,#1000H

MOVR7,#100

LOOP:

MOVXA,DPTR

CJNEA,#’A’,NXET

MOVA,DPL

MOVB,DPH

MOVDPTR,#10A0H

MOVXDPTR,A

MOVA,B

INCDPTR

MOVXDPTR,A

SJMP$

NEXT:

INCDPTR

DJNZR7,LOOP

SJMP$

11.设在200H~204H单元中存放有5个压缩BCD码,编程将它们转换成ASCII码,存放到以205H单元为首地址的存储区中。

方法1:

ORG1000H

MOVP2,#02H

MOVR0,#00H

MOVR1,#05H

MOVR2,#05

LOOP:

MOVXA,R0

ANLA,#0FH

ORLA,#30H

MOVXR1,A

INCR1

MOVXA,R0

SWAPA

ANLA,#0FH

ORLA,#30H

MOVXR1,A

INCR1

INCR0

DJNZR2,LOOP

方法2:

ORG1000H

MOVR2,#02H

MOVR3,#00H

MOVR4,#05H

MOVR7,#05

MOVDPH,R2

LOOP:

MOVDPL,R3

MOVXA,DPTR

MOVB,A

INCDPTR

MOVR3,DPL

MOVDPL,R4

ANLA,#0FH

ORLA,#30H

MOVXDPTR,A

INCDPTR

MOVA,B

SWAPA

ANLA,#0FH

ORLA,#30H

MOVXDPTR,A

INCDPTR

MOVR4,DPL

DJNZR7,LOOP

13.试编程实现以下逻辑表达式的功能。

设P1.7~P1.0为8个变量的输入端,而其中P1.7又作为变量输出端。

解:

X0BITP1.0

X1BITP1.1

X2BITP1.2

X3BITP1.3

X4BITP1.4

X5BITP1.5

X6BITP1.6

X7BITP1.7

ORG2000H

MOVC,X0

ANLC,X1

ANLC,/X2

ORLC,/X3

ORLC,X4

ANLC,X5

ANLC,X6

ORLC,/X7

MOVP1.7,C

解:

ONEBIT20H;存第一项逻辑值

TWOBIT21H;存第二项逻辑值

X0BITP1.0

X1BITP1.1

X2BITP1.2

X3BITP1.3

X4BITP1.4

X5BITP1.5

X6BITP1.6

X7BITP1.7

ORG2000H

MOVC,X0

ANLC,X1

CPLC

MOVONE,C

MOVC,X2

ANLC,X3

ANLC,X4

CPLC

MOVTWO,C

MOVC,X5

ANLC,X6

ANLC,X7

CPLC

ORLC,TWO

CPLC

ORLC,ONE

MOVP1.7,C

20.根据图5.6的线路设计灯亮移位程序,要求8只发光二极管每次亮一个,点亮时间为40ms。

顺次一个一个地循环右移点亮,循环不止。

已知时钟频率为24MHz。

解:

MOVA,#01H

LOOP:

MOVP1,A

LCALLD40MS

RRA

SJMPLOOP

D40MS:

MOVR2,#160

EXTERNAL:

MOVR3,#250

INTERNAL:

DJNZR3,INTERNAL

DJNZR2,EXTERNAL

RET

第六章P1555,6,8

5.已知80C51单片机系统时钟频率为24MHz,请利用定时器T0和P1.2输出矩形脉冲其波形如下:

选择T0工作于方式2(8位重置初值)定时50μs

fosc=24MHz

(28-X)×0.5μS=50μsX=156=9CH

方法1:

MOVTMOD,#02H

MOVTH0,#9CH

MOVTL0,#9CH

CLRP1.2;P1.2=0

SETBTR0

HIGH:

SETBP1.2;P1.2=1,输出50μs高电平

HIGH1:

JBCTF0,LOW;50μs到清TF0,转输出低电平

AJMPHIGH1;50μs未到,转HIGH1等待

LOW:

MOVR7,#7;350μs=7×50μs

CLRP1.2;P1.2=0输出350μs低电平

LOW1:

JBCTF0,LOW2;50μs到清TF0,转LOW2

AJMPLOW1

LOW2:

DJNZR7,LOW1;7次未到,转LOW1

AJMPHIGH;7次到,转HIGH,输出50μs高电平

方法2:

MOVTMOD,#02H;设置T0为方式2定时

MOVTH0,#9CH;赋初值

MOVTL0,#9CH

CLRP1.2

SETBTR0;启动T0工作

L1:

SETBP1.2;P1.2=1,输出50μs高电平

MOVR7,#8

DEL:

JBCTF0,REP;50μs到清TF0,转输出低电平

AJMPDEL

REP:

CLRP1.2;P1.2=0输出350μs低电平

DJNZR7,DEL

AJMPL1

方法3:

选择T0工作于方式1定时50μs

(216-X)×0.5μS=50μsX=65436=FF9CH

选择T0工作于方式1定时350μs

(216-X)×0.5μS=350μsX=64836=FD44H

START:

MOVTMOD,#01H;设置T0为方式1定时

LP0:

MOVTH0,#0FFH;赋初值定时50μs

MOVTL0,#9CH

CLRP1.2

SETBTR0;启动T0工作

SETBP1.2

LP1:

JBCTF0,LP2;P1.2=1,输出50μs高电平

SJMPLP1

LP2:

CLRP1.2

MOVTH0,#0FDH;赋初值定时350μs

MOVTL0,#44H

LP3:

JBCTF0,LP4;P1.2=1,输出350μs低电平

SJMPLP3

LP4:

SJMPLP0

6.在80C51单片机中,已知时钟频率为12MHz,请编程使P1.0和P1.1分别输出周期为2ms和500μs的方波。

方法1:

选择T0工作于方式1定时250μs

fosc=12MHz

(216-X)×1μS=250μsX=65286=FF06H

MOVTMOD,#01H

MOVTH0,#0FFH

MOVTL0,#06H

SETBTR0

DEL:

MOVR7,#4;1ms=4×250μs

D250:

JBCTF0,D2;250μs到清TF0,转移

AJMPD250;250μs未到,等待

D2:

CPLP1.1

MOVTH0,#0FFH;重装初值

MOVTL0,#06H

DJNZR7,D250;4次未到,转D500

CPLP1.0

AJMPDEL;4次到,转DEL

方法2:

选择T0工作于方式2定时250μs

(28-X)×1μS=250μsX=6

MOVTMOD,#02H

MOVTH0,#06H

MOVTL0,#06H

SETBTR0

DEL:

MOVR7,#4;1ms=4×250μs

D250:

JBCTF0,D2;250μs到清TF0,转移

AJMPD250;250μs未到,等待

D2:

CPLP1.1

DJNZR7,D250;4次未到,转D250

CPLP1.0

AJMPDEL;4次到,转DEL

方法3:

选择T0工作于方式2定时250μs,中断

(28-X)×1μS=250μsX=6

T1工作于方式1定时1ms,中断

(216-X)×1μS=1000μsX=64536=FC18H

ORG0000H

LJMPMAIN

ORG000BH

LJMPT00

ORG001BH

LJMPT11

MAIN:

MOVTMOD,#12H

MOVTH0,#06H

MOVTL0,#06H

MOVTH1,#0FCH

MOVTL1,#18H

MOVIE,#8AH

SETBTR0

SETBTR1

SJMP$

T00:

CPLP1.1

RETI

T11:

MOVTH1,#0FCH

MOVTL1,#18H

CPLP1.0

RETI

方法4:

选择T0工作于方式3定时250μs,中断。

(28-X)×1μS=250μsX=6

T0方式3时TL0占用TR0、TF0,TH0占用TR1、TF1。

ORG0000H

LJMPMAIN

ORG000BH

LJMPITL0

ORG001BH

LJ

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 社交礼仪

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1