单片机原理与接口技术 赵嘉蔚 清华大学出版社.docx

上传人:b****6 文档编号:5805774 上传时间:2023-01-01 格式:DOCX 页数:14 大小:19.15KB
下载 相关 举报
单片机原理与接口技术 赵嘉蔚 清华大学出版社.docx_第1页
第1页 / 共14页
单片机原理与接口技术 赵嘉蔚 清华大学出版社.docx_第2页
第2页 / 共14页
单片机原理与接口技术 赵嘉蔚 清华大学出版社.docx_第3页
第3页 / 共14页
单片机原理与接口技术 赵嘉蔚 清华大学出版社.docx_第4页
第4页 / 共14页
单片机原理与接口技术 赵嘉蔚 清华大学出版社.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

单片机原理与接口技术 赵嘉蔚 清华大学出版社.docx

《单片机原理与接口技术 赵嘉蔚 清华大学出版社.docx》由会员分享,可在线阅读,更多相关《单片机原理与接口技术 赵嘉蔚 清华大学出版社.docx(14页珍藏版)》请在冰豆网上搜索。

单片机原理与接口技术 赵嘉蔚 清华大学出版社.docx

单片机原理与接口技术赵嘉蔚清华大学出版社

单片机原理与接口技术

第三章习题与思考题

3-5指出下列指令中45H代表什么。

MOVA,#45H

MOVA,45H

MOV45H,46H

MOVC,45H

答案:

MOVA,#45H中的45H代表立即数45H,该立即数为16进制。

MOVA,45H中的45H代表直接地址45H单元。

MOV45H,46H中的45H代表目的操作数所指定的单元为45H。

MOVC,45H中的45H代表45H位。

3-6分析下列程序执行的结果。

(1)MOVA,#60H

MOVR0,#40H

MOV@R0,A

MOV41H,R0

XCHA,R0

执行结果为:

(A)=40H(R0)=60H(40H)=60H(41H)=40H

(2)MOVDPTR,#2003H

MOVA,#18H

MOV20H,#38H

MOVR0,#20H

XCHA,@R0

执行结果为:

(DPH)=20H(DPL)=03H(A)=38H(20H)=18H

(R0)=20H

(3)MOV20H,#01H

MOVA,20H

INCA

CPLA

MOVDPTR,#2000H

MOVX@DPTR,A

执行结果为:

(20H)=01H(A)=FDH(DPTR)=2000H

(2000H)=FDH

3-8按要求写出相应的指令。

(1)把寄存器R6的内容送到累加器A中。

(2)把外部RAM1000H单元的内容传送到内部RAM30H单元中。

(3)清除内部RAM3FH单元的高4位。

(4)使累加器A的最低位置1。

(5)清除进位位。

(6)使ACC.4和ACC.5置1。

(7)把外部ROM2000H单元中的内容送到内部RAM的20H单元中。

(8)把外部ROM2000H单元中的内容送到外部RAM的3000H单元中。

答案:

(1)MOVA,R6

(2)MOVDPTR,#1000H

MOVXA,@DPTR

MOVR0,#30H

MOV@R0,A

(3)ANL3FH,#0FH

(4)ORLA,#01H

(5)CLRC

(6)ORLA,#30H

(7)CLRA

MOVDPTR,#2000H

MOVCA,@A+DPTR

MOV20H,A

(8)CLRA

MOVDPTR,#2000H

MOVCA,@A+DPTR

MOVDPTR,#3000H

MOVX@DPTR,A

3-10编写程序段完成如下要求。

(1)将寄存器R0中的内容乘以10(积小于256)。

(2)将片内RAM30H单元开始的15个字节的数据传送到片外RAM3000H开始的单元中。

(3)将片外RAM2000H开始的5个字节的数据传送到片内RAM20H开始的单元中。

(4)有10个字节的二进制数存放在片内RAM以40H开始的单元内,编程找出其中的最大值并存于内部50H单元中。

(5)将片外RAM空间2000H~200AH中的数据的高4位变零,低4位不变,原址存放。

(6)将外部RAM2040H单元的内容与3040H单元的内容互换。

答案:

(1)MOVB,#0AH

MOVA,R0

MULAB

MOVR0,A

(2)ORG0000H

MOVR0,#30H

MOVDPTR,#3000H

MOVR7,#0FH

LOOP:

MOVA,@R0

MOVX@DPRT,A

INCR0

INCDPTR

DJNZR7,LOOP

SJMP$

END

(3)MOVDPTR,#2000H

MOVR0,#20H

MOVR7,#05H

LOOP:

MOVXA,@DPTR

MOV@R0,A

INCR0

INCDPTR

DJNZR7,LOOP

SJMP$

END

(4)ORG0000H

MOV50H,40H;50H放最大值,且初始化最大值(默认第一个数)

MOVR3,#09H;比较次数

MOVR0,#41H

START:

MOVA,@R0

CJNEA,50H,LOOP

LOOP:

JCLOOP1;如果A比50H的值小,则跳转到LOOP1

MOV50H,@R0;如果比50H的值大,则更新50H(最大值)的值

LOOP1:

INCR0

DJNZR3,START

SJMP$

END

(5)MOVDPTR,#2000H

MOVR1,#0BH

LOOP:

MOVXA,@DPTR

ANLA,#0FH

MOVX@DPTR,A

INCDPTR

DJNZR1,LOOP

SJMP$

(6)MOVDPTR,#2040H

MOVXA,@DPTR

MOVR0,#20H

MOV@R0,A

MOVDPTR,#3040H

MOVXA,@DPTR

XCHA,@R0

MOVX@DPTRA

MOVA,@R0

MOVDPTR,#2040H

MOVX@DPTR,A

3-14被乘数是16位无符号数,低8位在M1单元,高8位在M1+1单元;乘数为8位无符号数,在M2单元。

试编写将两数相乘并将积存入R2、R3和R4中的程序(R2内为高8位、R4内为低8位)。

M1DATA20H

M2DATA30H

ORG0000H

MOVA,M1

MOVB,M2

MULAB

MOVR4,A

MOVR3,B

MOVA,M1+1

MOVB,M2

MULAB

ADDA,R3

MOVR3,A

MOVA,B

ADDCA,#00H

MOVR2,A

SJMP$

END

3-15设有一带符号的十六位数以补码形式存放在R2、R3寄存器中,试编制求其原码的程序。

ORG0000H

START:

MOVA,R3

JBACC.7,NEXT;判读符号位,如果是正数则原码与补码一样,如果为负,求原码的方法是符号位不变,其余位取反加1

MOVR3,A

HERE:

SJMP$

NEXT:

XRLA,#7FH;高八位,符号位不变,其余取反

MOVR3,A;放回R3

MOVA,R2;低八位

XRLA,#0FFH;取反

ADDA,#01H;加1

MOVR2,A;放回R2

MOVA,R3;看低八位是否有向高八位进位

ADDCA,#00H

MOVR3,A

SJMP$

END

3-16设有一不带符号的十六进制数组,存放在8031单片机片内RAM以BUFFER为首址的连续单元中,其长度为30个字节,要求统计小于10,等于10及大于10的数的个数,并把它们分别存放到片内RAM的LESS、EQUAL、BIG单元中,试编制实现上述要求的程序并画出相应的流程图。

ORG0000H

BUFFERDATA10H

LESSDATA30H

EQUALDATA31H

BIGDATA32H

MOVR0,#BUFFER

MOVR7,#1EH

MOVLESS,#00H

MOVEQUAL,#00H

MOVBIG,#00H

NEXT:

CJNE@R0,#0AH,LOOP1;循环次数

INCEQUAL

AJMPLOOP3

LOOP1:

JCLOOP2

INCBIG

AJMPLOOP3

LOOP2:

INCLESS

LOOP3:

INCR0

DJNZR7,NEXT

SJMP$

END

3-17在外部RAM1000H单元开始的存储区域存放着10个用ASCII码表示的0~9之间的数字,请编程将它们转换成BCD码,然后存放在2000H~2004H单元(以压缩BCD码存放)。

ORG0000H

MOVR2,#05H

MOVDPTR,#1000H

MOVR0,#20H

LOOP:

MOVXA,@DPTR

ANLA,#0FH

MOVR4,A

INCDPTR

MOVXA,@DPTR

ANLA,#0FH

SWAPA

ADDA,R4

MOV@R0,A

INCR0

INCDPTR

DJNZR2,LOOP

MOVR5,#05H

MOVR0,#20H

MOVDPTR,#2000H

LOOP1:

MOVA,@R0

MOVX@DPTR,A

INCR0

INCDPTR

DJNZR5,LOOP1

SJMP$

END

3-18设有50个无符号8位二进制数,存放在8031单片机内部RAM以BOFER为首址的连续单元中,试编制将其中最小数存放到内部RAM的MIN单元的程序并画出相应的流程图。

BOFERDATA20H

MINDATA60H

ORG0000H

MOVR2,#31H;循环49次

MOVR1,#BOFER+1

MOVMIN,BOFER;把最小值放MIN,且初始化时把第一个数放入MIN

LOOP:

MOVA,@R1

CJNEA,MIN,LOOP1

LOOP1:

JNCLOOP2;@R1>MIN

MOVMIN,@R1;MIN>@R1,MIN要更新

LOOP2:

INCR1

DJNZR2,LOOP

SJMP$

END

3-19设有一字符串存放在8031单片机内部RAM以20H为首址的连续单元中,字符串以回车结束。

要求统计该字符串中字符B(‘B’=42H)的个数,并将其存入外部RAM的40H单元中。

试编写实现上述要求的程序并画出相应的流程图。

ORG0000H

MOVR0,#20H

MOVR1,#00H;‘B’的个数初始化

LOOP:

MOVA,@R0

CJNEA,#0DH,LOOP1;判断是否结束(回车键)

MOVDPTR,#0040H;把结果放外部RAM中

MOVA,R1

MOVX@DPTR,A

SJMP$

LOOP1:

CJNEA,#42H,NEXT;不为B则跳转

INCR1;为B则使计数器加1

NEXT:

INCR0

AJMPLOOP

END

3-20设晶振频率为6MHz,试编写能延时30ms的程序。

MOVR2,#30

LOOPS:

MOVR3,#250

LOOPR:

DJNZR3,LOOPR

DJNZR2,LOOPS

SJMP$

END

3-21编写一程序将30H~3FH单元的数据依次送到P1口输出,每送一个数据延时10ms再送第二个,直到数据全部输完为止。

ORG0000H

MOVR0,#30H

MOVR1,#16

LOOP:

MOVP1,@R0

INCR0

MOVR2,#19

LOOPS:

MOVR3,#250

LOOPR:

DJNZR3,LOOPR

DJNZR2,LOOPS

DJNZR1,LOOP

SJMP$

END

3-22设在片内RAM的20H单元中有一数,其值在0~100之间,要求利用查表法求此数的平方值并将结果存入片外RAM的20H和21H单元,试编写相应程序。

MOVR0,#21H

MOVA,20H

MOVB,A

ADDA,B

MOVB,A

MOVDPTR,#TABLE

MOVCA,@A+DPTR;查出平方值的第一字节

MOVX@R0,A

INCB

MOVA,B

MOVCA,@A+DPTR;查出平方值的第二字节

DECR0

MOVX@R0,A

SJMP$

ORG0100H

TABLE:

DW0000H,0001H,0004H,0009H,…

END

3-23已知MDA和MDB单元内分别存有两个小于10的整数a和b,试用查表子程序实现c=a2+2ab+b2,并把和存于MDC和MDC+1单元中(MDC单元中放低字节,MDC+1单元中放高字节)。

ORG0000H

MDADATA20H

MDBDATA21H

MDCDATA22H

MOVA,MDA

ACALLSQR

MOVR2,A

MOVA,MDB

ACALLSQR

ADDA,R2

MOVR2,A;a2+b2结果暂时放入R2

MOVB,MDA;下面算2*a*b

MOVA,MDB

MULAB

RLA

ADDA,R2

MOVMDC,A

CLRA

ADDCA,#00H

MOVMDC+1,A

SJMP$

SQR:

ADDA,#01H

MOVCA,@A+PC

RET

SQRTAB:

DB0149162536496481100

END

3-24设有3个不带符号的8位二进制数a、b、c,分别存放在8031单片机片内RAM的30H、31H和32H单元中,要求计算y=(a+b)2+(b+c)2+(c+a)2(设y<256),并将结果y存入内部RAM的33H单元。

试用调用子程序的方法编写实现上述要求的程序。

ORG0000H

MOVA,30H

ADDA,31H

ACALLSQR

MOVR2,A

MOVA,31H

ADDA,32H

ACALLSQR

ADDA,R2

MOVR2,A;(a+b)2+(b+c)2结果暂时放入R2

MOVA,30H;

ADDA,32H

ACALLSQR

ADDA,R2

MOV33H,A

SJMP$

SQR:

ADDA,#01H

MOVCA,@A+PC

RET

SQRTAB:

DB0149162536496481100

END

3-25设有一长度为20H的字符串,存放在8031单片机片内RAM以10H为首地址的连续单元中,试编制将其中数字与字母分开并将它们分别送到以30H和50H为首地址的连续单元中的程序。

ORG0000H

MOVR2,#20H;循环次数

MOVR1,#10H

MOV60H,#30H;数字存储首地址

MOV61H,#50H;字母存储首地址

LOOP:

MOVA,@R1

CJNEA,#40H,NEXT

NEXT:

JNCNEXT1;如果是字母则跳转到NEXT1

MOVR0,60H;是数字,把数字的存储地址给R0

MOV@R0,A

INC60H

SJMPLOOP1

NEXT1:

MOVR0,61H

MOV@R0,A;是字母,把字母的存储地址给R0

INC61H

LOOP1:

INCR1

DJNZR2,LOOP

SJMP$

END

3-26设有50个无符号8位二进制数,存放在8031单片机外部RAM以1000H为首地址的连续单元中,要求编写程序,将这50个数从大到小依次存入片内以20H开始的RAM存储区,并画出程序流程图.

ORG0000H

MOVDPTR,#1000H

MOVR0,#20H

MOVR2,#50

LOOP1:

MOVXA,@DPTR

MOV@R0,A

INCDPTR

INCR0

DJNZR2,LOOP1

MOV75H,#50

BUB:

DJNZ75H,BI

SJMPJIE

BI:

MOVR2,75H

MOVR0,#20H

CLR7FH

BULOOP:

MOV70H,@R0

MOVA,@R0

INCR0

MOV71H,@R0

CJNEA,71H,LOOP

LOOP:

JNCBUNEXT

MOV@R0,70H

DECR0

MOV@R0,71H

INCR0

SETB7FH

BUNEXT:

DJNZR2,BULOOP

JIE:

JB7FH,BUB

SJMP$

END

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

当前位置:首页 > IT计算机 > 互联网

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

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