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

上传人:b****1 文档编号:3030293 上传时间:2023-05-05 格式:DOCX 页数:33 大小:291.79KB
下载 相关 举报
单片机习题参考答案0812.docx_第1页
第1页 / 共33页
单片机习题参考答案0812.docx_第2页
第2页 / 共33页
单片机习题参考答案0812.docx_第3页
第3页 / 共33页
单片机习题参考答案0812.docx_第4页
第4页 / 共33页
单片机习题参考答案0812.docx_第5页
第5页 / 共33页
单片机习题参考答案0812.docx_第6页
第6页 / 共33页
单片机习题参考答案0812.docx_第7页
第7页 / 共33页
单片机习题参考答案0812.docx_第8页
第8页 / 共33页
单片机习题参考答案0812.docx_第9页
第9页 / 共33页
单片机习题参考答案0812.docx_第10页
第10页 / 共33页
单片机习题参考答案0812.docx_第11页
第11页 / 共33页
单片机习题参考答案0812.docx_第12页
第12页 / 共33页
单片机习题参考答案0812.docx_第13页
第13页 / 共33页
单片机习题参考答案0812.docx_第14页
第14页 / 共33页
单片机习题参考答案0812.docx_第15页
第15页 / 共33页
单片机习题参考答案0812.docx_第16页
第16页 / 共33页
单片机习题参考答案0812.docx_第17页
第17页 / 共33页
单片机习题参考答案0812.docx_第18页
第18页 / 共33页
单片机习题参考答案0812.docx_第19页
第19页 / 共33页
单片机习题参考答案0812.docx_第20页
第20页 / 共33页
亲,该文档总共33页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

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

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

单片机习题参考答案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立即寻址

A630MOV@R0,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

MOVX@R0,A

INCR0

MOVA,B

MOVX@R0,A

MOVDPTR,#30H

MOVXA,@DPTR

MOVB,A

INCDPTR

MOVXA,@DPTR

MULAB

INCDPTR

MOVX@DPTR,A

INCDPTR

MOVA,B

MOVX@DPTR,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

MOVX@DPTR,A

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

MOVA,40H

CPLA

SETBACC.0〔或ORLA,#81H〕

MOV40H,A

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

 

MOVP1.7,C

 

MOVPSW.5,C

 

AN

MOVP2.3,C

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

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

方法1:

MOVR0,#40H

MOVDPTR,#3000H

MOVR2,#21H

LOOP:

MOVA,@R0

MOVX@DPTR,A

INCR0

INCDPTR

DJNZR2,LOOP

方法2:

MOVR0,#40H

MOVDPTR,#3000H

MOVR2,#0

LOOP:

MOVA,@R0

MOVX@DPTR,A

INCR0

INCDPTR

INCR2

CJNER2,#21H,LOOP

方法3:

MOVR0,#40H

MOVDPTR,#3000H

LOOP:

MOVA,@R0

MOVX@DPTR,A

INCR0

INCDPTR

CJNER0,#61H,LOOP

补充:

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

MOVR0,#40H

MOVDPTR,#3000H

MOVR2,#21H

LOOP:

CLRA

MOVCA,@A+DPTR

MOV@R0,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

MOV@R0,A

CLRA

MOVX@DPTR,A

INCR0

INCDPTR

DJNZR2,LOOP

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

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

XX:

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

MOVX@DPTR,A

MOVA,B

INCDPTR

MOVX@DPTR,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

MOVX@R1,A

INCR1

MOVXA,@R0

SWAPA

ANLA,#0FH

ORLA,#30H

MOVX@R1,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

MOVX@DPTR,A

INCDPTR

MOVA,B

SWAPA

ANLA,#0FH

ORLA,#30H

MOVX@DPTR,A

INCDPTR

MOVR4,DPL

DJNZR7,LOOP

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

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

 

X7BITP1.7

ORG2000H

MOVC,X0

ANLC,X1

ANLC,/X2

ORLC,/X3

ORLC,X4

ANLC,X5

ANLC,X6

ORLC,/X7

MOVP1.7,C

解:

ONEBIT20H;存第一项逻辑值

TWOBIT21H;存第二项逻辑值

 

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〕×μ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

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〕×μS=50μsX=65436=FF9CH

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

〔216-X〕×μS=350μsX=64836=FD44H

START:

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

LP0:

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

MOVTL0,#9CH

SETBTR0;启动T0工作

LP1:

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

SJMPLP1

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

MOVTL0,#44H

LP3:

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

SJMPLP3

LP4:

SJMPLP0

6.在80Cμ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未到,等待

MOVTH0,#0FFH;重装初值

MOVTL0,#06H

DJNZR7,D250;4次未到,转D500

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未到,等待

DJNZR7,D250;4次未到,转D250

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$

RETI

T11:

MOVTH1,#0FCH

MOVTL1,#18H

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

LJMPITH0

MAIN:

MOVSP,#50H

MOVTMOD,#03H

MOVTH0,#06H

MOVTL0,#06H

MOVR7,#4

SETBTR0

SETBTR1

MOVIE,#8AH

SJMP$

ITL0:

MOVTL0,#06H

RETI

ITH0:

MOVTH1,#06H

DJNZR7,ITH01

MOVR7,#4

ITH01:

RETI

7.设系统时钟频率为24MHz,试用定时器T0作外部计数器,编程实现每计到1000个脉冲,使T1开始2ms定时,定时时间到后,T0又开始计数,这样反复循环不止。

fosc=24MHz

T0作外部计数器选择工作于方式1:

1000=216-XX=64536=FC18H

T1定时2ms选择工作于方式1:

〔216-X〕×μS=2000μsX=61536=F060H

MOVTMOD,#15H

ST

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

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2