单片机基础课后答案.docx

上传人:b****7 文档编号:9301990 上传时间:2023-02-04 格式:DOCX 页数:17 大小:21.79KB
下载 相关 举报
单片机基础课后答案.docx_第1页
第1页 / 共17页
单片机基础课后答案.docx_第2页
第2页 / 共17页
单片机基础课后答案.docx_第3页
第3页 / 共17页
单片机基础课后答案.docx_第4页
第4页 / 共17页
单片机基础课后答案.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

单片机基础课后答案.docx

《单片机基础课后答案.docx》由会员分享,可在线阅读,更多相关《单片机基础课后答案.docx(17页珍藏版)》请在冰豆网上搜索。

单片机基础课后答案.docx

单片机基础课后答案

单片机基础课后答案

第一章

一、填空题

1.11100EH1001110001100100

2.4

3.255-51

4.输入设备

5.84

6.630*8*1024

7.位字节字bitbtypeword

8.111111110010010011011011

9.11089-115-50

二、单选:

DBCABBBCB

第二章

一、填空

1.PCPC

2.反向器晶振两只电容短

3.加电手动0000H07H第000H07H

4.62112

5.DPTRDPHDPL

6.64KB

单选题

DCCACAD

第三章

一、填空题:

1.1031

2.34H111

3.略

4.1100H

5.2

6.30H71H

0A5H

0A5H

75H

0A7H

0AAH01

IFH11

0AAH01

20H10

0D5H11

49H00

二、单选题

CCBDCA

三、其它类型题

错错对

错错错

对错错

错错对

对对对

错对对

错对错

错对

(三)其它类型题

3.编写程序将RAM20H-23H单元的高4位写1,低4位写0。

分析:

就是把这四个单元写入F0H。

用一个DJNZ的循环。

ORG0000H

MOVR0,#1FH;R0指向20H单元

MOVR5,#04H;四个数

LOOP:

INCR0

MOV@R0,#0F0H;写入

DJNZR5,LOOP;循环4次

END

4.把m和m+1单元存有两个BCD数,将它们合并到m单元中,编写程序完成。

(设m=30H,高位在30H,低数在31H)

ORG0000H

MOVA,30H

ANLA,#0FH;把它的高四位清零

SWAPA

MOV30H,A;高低四位调一下,放回原处

MOVA,31H

ANLA,#0FH

ORLA,30H;合并起来

MOV30H,A

END

5.将内部RAM中从data单元开始的10个无符号数相加,其和送sum单元多,假定相加结果小于255。

编写程序完成。

(设data=30H,sun=50H)

ORG0000H

MOVR0,#2FH;指向前一个单元

MOVR5,#0AH;循环10次

CLRA;先加到A中

LOOP:

INCR0

ADDA,@R0

DJNZR5,LOOP

MOV50H,A

END

6.假定8位二进制带符号数丰于R0中,要求编写一个求补程序,所得补码入入R1中。

ORG0000H

MOVA,R0

CPLA;按位取反

ADDA,#01H;+1

MOVR1,A

END

第四章

一、填空题

1.25H40H03H

2.2.914ms

3.略

4.(A)=((30H)(A)>(30H)(A)<(30H)

5.32.87ms

编程题

1.把长度为10H的字符串从内部RAM的输入缓冲区inbuf向位物外部RAM的输出缓冲区outbuf传送,一直进行到遇见回车或整个字符串传送

完毕。

试编程实现。

ORG0030H

MOVR0,#inbuf

MOVR1,#outbuf

MOVR4,#10H

LOOP:

MOVA,@R0;从内部RAM取数

CJNEA,#0DH,LL;是否为回车符CR

SJMPSTOP;是转停止传送

LL:

MOVX@R1,A;不是则传送到外部RAM

INCR0

INCR1

DJNZR4,LL;沒传送完则循环

STOP:

SJMP$

2、内部RAM从list单元开始存放一正数表,表中之数作无序排列,并以“-1”作结束标志。

编程实现在表中找出最小数。

(3AH存放在运行程序时的最小的数)

ORG0030H

MOVR0,#list

MOVA,@R0;取第一个正数

LOOP:

INCR0;指向下一个正数

MOV3AH,@R0

CJNEA,3AH,CHK;前一个数与后一个数比较

CHK:

JCLOOP1;前一个数小,则转

MOVA,@R0;前一个数大,取后一个数

LOOP1:

XCHA,3AH

CJNEA,#0FFH,LOOP

XCHA,3AH;取最小数

MOV3BH,A

SJMP$

3.内部RAM的X,Y单元中各存放一个带符号的数,试编程实现按如下条件进行的运算,并将结果存入Z单元中。

若X为正奇数,Z=X+Y;

若X为正偶数,Z=X∨Y;

若X为负奇数,Z=X∧Y;

若X为负偶数,Z=X⊕Y。

分析:

负数:

第7位为1,正数:

第7位为0

奇数:

第0位为1,偶数:

第0位为0

ORG0000H

MOVA,20H

CLRC

RLA

JCFS;移到负数处处理

RRA

RRA;第0位移到C再判定一下是不是1

JCZJS;到正奇数处

MOVA,20H

ORLA,21H

MOV22H,A

SJMPOK

ZJS:

MOVA,20H

ADDA,21H

MOV22H,A

SJMPOK

FS:

MOVA,20H

CLRC

RRA

JCFJS;第0位是1,移到正奇数处理

MOVA,20H

XRLA,21H

MOV22H,A

SJMPOK

FJS:

MOVA,20H

ANLA,21H

MOV22H,A

OK:

END

4、把一个8位二进制数的各位用ASCII码表示之(亦即为“0”的位用30H表示,为“1”的位用31H表示)。

该数存放在内部RAM中byte

单元中。

变换后得到的8个ASCII码存放在外部RAM以buf始的存储单元中去。

ORG0030H

MOVR0,#byte

MOVDPTR,#buf

MOVR5,#08H

MOVA,@R0

LOOP:

RLCA

MOVR7,A

JCLOOP1

MOVA,#30H

SJMPLOOP2

LOOP1:

MOVA,#31H

LOOP2:

MOVX@DPTR,A

MOVA,R7

INCDPTR

DJNZR5,LOOP

5.编程实现运算式c=a22+b假定a、b、c3个数分别存放在内部RAM的DA、DB、DC单元中,别有平方运算子程序调用。

(内部RAM的DA、DB、DC单元设为20H21H22H)

ORG0000H

MOVA,20H

PUSHACC

AJMPSQR

POPACC

MOV22H,A

MOVA,21H

PUSHACC

AJMPSQR

POPACC

ADDA,22H

MOV22H,A

END

6、比较两个ASCII码字符串是否相等。

字符串的长度在内部RAM41H单元,第一个字符串的首地址为42H,第二个字符串的首地址为52H。

果两个字符串相等,则置内部RAM40H单元为00H;否则置40H单元为FF。

ORG0030H

MOVR0,#42H

MOVR1,#52H

MOVR7,41H;字符串长度

LOOP:

MOVA,@R0

MOV30H,@R1

CJNEA,30H,LK

INCR0

INCR1

DJNZR7,LOOP

MOV40H,#00H

SJMPDD

LK:

MOV40H,#0FFH

DD:

SJMPDD

7.外部RAM首址为table的数据表中,有10个字节的数据。

编程将每个字节的最高位无条件地置“1”。

ORG0030H

MOVDPTR,#table

MOVR6,#10

LOOP:

MOVXA,@DPTR

SETBE7H;E7H就是累加器A的最高位(ACC.7),也可:

SETBACC.7

MOVX@DPTR,A

INCDPTR

DJNZR6,LOOP

3.编写程序将RAM20H-23H单元的高4位写1,低4位写0。

分析:

就是把这四个单元写入F0H。

用一个DJNZ的循环。

ORG0000H

MOVR0,#1FH;R0指向20H单元

MOVR5,#04H;四个数

LOOP:

INCR0

MOV@R0,#0F0H;写入

DJNZR5,LOOP;循环4次

END

4.把m和m+1单元存有两个BCD数,将它们合并到m单元中,编写程序完成。

(设m=30H,高位在30H,低数在31H)

ORG0000H

MOVA,30H

ANLA,#0FH;把它的高四位清零

SWAPA

MOV30H,A;高低四位调一下,放回原处

MOVA,31H

ANLA,#0FH

ORLA,30H;合并起来

MOV30H,A

END

5.将内部RAM中从data单元开始的10个无符号数相加,其和送sum单元多,假定相加结果小于255。

编写程序完成。

(设data=30H,sun=50H)

ORG0000H

MOVR0,#2FH;指向前一个单元

MOVR5,#0AH;循环10次

CLRA;先加到A中

LOOP:

INCR0

ADDA,@R0

DJNZR5,LOOP

MOV50H,A

END

6.假定8位二进制带符号数丰于R0中,要求编写一个求补程序,所得补码入入R1中。

ORG0000H

MOVA,R0

CPLA;按位取反

ADDA,#01H;+1

MOVR1,A

END

第四章

一、填空题

1.25H40H03H

2.2.914ms

3.略

4.(A)=((30H)(A)>(30H)(A)<(30H)

5.32.87ms

编程题

1.把长度为10H的字符串从内部RAM的输入缓冲区inbuf向位物外部RAM的输出缓冲区outbuf传送,一直进行到遇见回车或整个字符串传送

完毕。

试编程实现。

ORG0030H

MOVR0,#inbuf

MOVR1,#outbuf

MOVR4,#10H

LOOP:

MOVA,@R0;从内部RAM取数

CJNEA,#0DH,LL;是否为回车符CR

SJMPSTOP;是转停止传送

LL:

MOVX@R1,A;不是则传送到外部RAM

INCR0

INCR1

DJNZR4,LL;沒传送完则循环

STOP:

SJMP$

2、内部RAM从list单元开始存放一正数表,表中之数作无序排列,并以“-1”作结束标志。

编程实现在表中找出最小数。

(3AH存放在运行程序时的最小的数)

ORG0030H

MOVR0,#list

MOVA,@R0;取第一个正数

LOOP:

INCR0;指向下一个正数

MOV3AH,@R0

CJNEA,3AH,CHK;前一个数与后一个数比较

CHK:

JCLOOP1;前一个数小,则转

MOVA,@R0;前一个数大,取后一个数

LOOP1:

XCHA,3AH

CJNEA,#0FFH,LOOP

XCHA,3AH;取最小数

MOV3BH,A

SJMP$

3.内部RAM的X,Y单元中各存放一个带符号的数,试编程实现按如下条件进行的运算,并将结果存入Z单元中。

若X为正奇数,Z=X+Y;

若X为正偶数,Z=X∨Y;

若X为负奇数,Z=X∧Y;

若X为负偶数,Z=X⊕Y。

分析:

负数:

第7位为1,正数:

第7位为0

奇数:

第0位为1,偶数:

第0位为0

ORG0000H

MOVA,20H

CLRC

RLA

JCFS;移到负数处处理

RRA

RRA;第0位移到C再判定一下是不是1

JCZJS;到正奇数处

MOVA,20H

ORLA,21H

MOV22H,A

SJMPOK

ZJS:

MOVA,20H

ADDA,21H

MOV22H,A

SJMPOK

FS:

MOVA,20H

CLRC

RRA

JCFJS;第0位是1,移到正奇数处理

MOVA,20H

XRLA,21H

MOV22H,A

SJMPOK

FJS:

MOVA,20H

ANLA,21H

MOV22H,A

OK:

END

4、把一个8位二进制数的各位用ASCII码表示之(亦即为“0”的位用30H表示,为“1”的位用31H表示)。

该数存放在内部RAM中byte

单元中。

变换后得到的8个ASCII码存放在外部RAM以buf始的存储单元中去。

ORG0030H

MOVR0,#byte

MOVDPTR,#buf

MOVR5,#08H

MOVA,@R0

LOOP:

RLCA

MOVR7,A

JCLOOP1

MOVA,#30H

SJMPLOOP2

LOOP1:

MOVA,#31H

LOOP2:

MOVX@DPTR,A

MOVA,R7

INCDPTR

DJNZR5,LOOP

5.编程实现运算式c=a2+b2假定a、b、c3个数分别存放在内部RAM的DA、DB、DC单元中,别有平方运算子程序调用。

(内部RAM的DA、DB、DC单元设为20H21H22H)

ORG0000H

MOVA,20H

PUSHACC

AJMPSQR

POPACC

MOV22H,A

MOVA,21H

PUSHACC

AJMPSQR

POPACC

ADDA,22H

MOV22H,A

END

6、比较两个ASCII码字符串是否相等。

字符串的长度在内部RAM41H单元,第一个字符串的首地址为42H,第二个字符串的首地址为52H。

果两个字符串相等,则置内部RAM40H单元为00H;否则置40H单元为FF。

ORG0030H

MOVR0,#42H

MOVR1,#52H

MOVR7,41H;字符串长度

LOOP:

MOVA,@R0

MOV30H,@R1

CJNEA,30H,LK

INCR0

INCR1

DJNZR7,LOOP

MOV40H,#00H

SJMPDD

LK:

MOV40H,#0FFH

DD:

SJMPDD

7.外部RAM首址为table的数据表中,有10个字节的数据。

编程将每个字节的最高位无条件地置“1”。

ORG0030H

MOVDPTR,#table

MOVR6,#10

LOOP:

MOVXA,@DPTR

SETBE7H;E7H就是累加器A的最高位(ACC.7),也可:

SETBACC.7

MOVX@DPTR,A

INCDPTR

DJNZR6,LOOP

第五章

一、填空题

1.各项任务

2.INT0T0INT1T1串口

3.PCPCROM

4.中断源查询状态

5.10000001000000/65536=15.26

6.100ms

7.111101

8.T120FFH001BH

二、单选题:

DCAADCD

单片机基础第五章习题

课本5。

.1设单片机的晶振频率为6MHZ,使用定时器1以方式0产生500us的等宽正方波连续脉冲,并由P1.0输出。

分析:

使用P1.0输出脉冲,可由定时器产生一个250us的定时,到了时间,就执行CPLP1.0就可以了。

所以问题转化为产生定时。

解:

(1)计算定时器的初值:

(213-X)*T机=T定时

代入数据得:

X=8067

由于方式0的特点(高8位,低5位),计算出TH1,TL1

得TH1=0FCHTL1=03H

(2)计算出TMOD的初始值:

TMOD=00H

(3)编程实现:

方法一:

使用查询法。

程序不断地查询TF1的值。

如定时器溢出(TF1=1),则CPLP1.0

所以:

MOVTMOD,#00H

MOVTH1,#0FCH

MOVTL1,#03H

MOVIE,#00H;不用中断的方法,关掉

SETBTR1;开启定时器

LOOP:

JBCTF1,LOOP1

AJMPLOOP

LOOP1:

MOVTH1,#0FCH

MOVTL1,#03H

CPLP1.0

AJMPLOOP

方法二:

使用中断的方法。

需确定寄存器:

TMOD=00H

IE=88HTCON=40H(或SETBTR1)

T1的中断向量=001BH

程序如下:

ORG0000H

AJMPMAIN

ORG001BH

AJMPT1_TIMER

MAIN:

MOVTMOD,#00H

MOVTCON,#40H

MOVIE,#88H

MOVTCON,#40H

MOVTH1,#0FCH

MOVTL1,#03H

Here:

AJMPHere

T1_TIMER:

MOVTH1,#0FCH

MOVTL1,#03H

CPLP1.0

RETI

注意:

定时器定时或计数,不会影响CPU的工作。

定时方式1:

与方式0没有大的区别,只有定时器是16位的。

所以

定时=(2x–初值)T机

方式2:

8位初值自动赋值的定时/计数器

解法一样:

(1)计算T的初始值

(2)TMOD=?

(2)程序设计

方式三:

T0:

――TL08位,可作定时也可作计数,与方式0,一样使用。

――TH0:

8位,只能作定时,借作TR1TF1

T1:

没法中断,只能产生不断的脉冲,--全波特率

可用方式0,1,2。

如要停止脉冲,要强制设方式3

第六章

一、填空题

1、816132

2、高电平低电平高阻

3、256数据4KB程序64KB数据64KB程序

4、16P0P2

5、PSENRDWRALECEALE6

6、16KB31FFH

7、外存

8、片选

9、3PSENALE

二、单选题

DADDCADA

第七章

填空题

1.数据ALERDWR

2.无条件传送查询中断

3.缓冲锁存

4.1211

5.高口方式定义C位置位/复位

6.方式1输出方式1输出输出输入

7.10100111

单选题

DACDBB

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

当前位置:首页 > 高等教育 > 农学

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

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