单片机基础+第三版+课后习题答案.docx

上传人:b****8 文档编号:29646636 上传时间:2023-07-25 格式:DOCX 页数:19 大小:20.20KB
下载 相关 举报
单片机基础+第三版+课后习题答案.docx_第1页
第1页 / 共19页
单片机基础+第三版+课后习题答案.docx_第2页
第2页 / 共19页
单片机基础+第三版+课后习题答案.docx_第3页
第3页 / 共19页
单片机基础+第三版+课后习题答案.docx_第4页
第4页 / 共19页
单片机基础+第三版+课后习题答案.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

单片机基础+第三版+课后习题答案.docx

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

单片机基础+第三版+课后习题答案.docx

单片机基础+第三版+课后习题答案

单片机基础+第三版+课后习题答案

第一章:

一、填空题

 1. 1110   0EH  10011100    01100100

 2. 4

 3.255-51

4.输入设备

 5.84

6.630*8*1024

7.位 字节  字 bitbtypeword

8.111111110010010011011011

9.11089-115-50

二、单选:

    DBCABBBCB

第二章:

一、填空

 1. PC PC 

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

 3. 加电 手动  0000H 07H  第0 00H  07H

 4. 6  2  1  12

 5. DPTR  DPH  DPL 

 6. 64KB

单选题

    DCCAC AD 

第三章:

一、填空题:

 1. 1031

 2. 34H   1   1   1

 3. 略

 4. 1100H

 5. 2

 6. 30H  71H

   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. 25H 40H  03H

2.2.914ms

3.略

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

5.32.87ms

编程题

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

试编程实现。

       ORG 0030H

        MOV R0,#inbuf

        MOV R1,#outbuf       

        MOV R4,#10H

  LOOP:

MOV A,@R0;从内部RAM取数

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

       SJMP STOP;是转停止传送

 LL:

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

      INC R0

      INC R1 

      DJNZ R4,LL;沒传送完则循环

STOP:

 SJMP$

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

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

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

ORG 0030H

      MOVR0,#list

      MOVA,@R0;取第一个正数

 LOOP:

INCR0;指向下一个正数

      MOV3AH,@R0

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

CHK:

 JC LOOP1;前一个数小,则转

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

LOOP1:

XCHA,3AH

      CJNEA,#0FFH,LOOP

      XCHA,3AH;取最小数

      MOV 3BH,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始的存储单元中去。

   

   ORG 0030H

     MOV R0,#byte

     MOV DPTR,#buf

     MOV R5,#08H

     MOV A,@R0

 LOOP:

RLC A

    MOV R7,A

     JC LOOP1

      MOV A,#30H

      SJMP LOOP2

 LOOP1:

 MOV A,#31H

 LOOP2:

MOVX @DPTR,A

      MOV A,R7

      INC DPTR

       DJNZ R5,LOOP

 

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

(内部RAM的DA、DB、DC单元设为20H 21H 22H)

 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。

    ORG 0030H

   MOVR0,#42H

   MOVR1,#52H

   MOVR7,41H;字符串长度

LOOP:

MOVA,@R0

   MOV30H,@R1

    CJNEA,30H,LK

    INC R0

    INC R1

    DJNZ R7,LOOP

    MOV 40H,#00H

    SJMP DD

 LK:

 MOV40H,#0FFH

 DD:

 SJMPDD

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

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

    ORG0030H

  MOV DPTR,#table

   MOV R6,#10

LOOP:

MOVXA,@DPTR

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

SETBACC.7

   MOVX@DPTR,A

   INC DPTR

   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. 25H 40H  03H

2.2.914ms

3.略

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

5.32.87ms

编程题

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

试编程实现。

       ORG 0030H

        MOV R0,#inbuf

        MOV R1,#outbuf       

        MOV R4,#10H

  LOOP:

MOV A,@R0;从内部RAM取数

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

       SJMP STOP;是转停止传送

 LL:

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

      INC R0

      INC R1 

      DJNZ R4,LL;沒传送完则循环

STOP:

 SJMP$

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

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

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

ORG 0030H

      MOVR0,#list

      MOVA,@R0;取第一个正数

 LOOP:

INCR0;指向下一个正数

      MOV3AH,@R0

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

CHK:

 JC LOOP1;前一个数小,则转

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

LOOP1:

XCHA,3AH

      CJNEA,#0FFH,LOOP

      XCHA,3AH;取最小数

      MOV 3BH,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始的存储单元中去。

   

   ORG 0030H

     MOV R0,#byte

     MOV DPTR,#buf

     MOV R5,#08H

     MOV A,@R0

 LOOP:

RLC A

    MOV R7,A

     JC LOOP1

      MOV A,#30H

      SJMP LOOP2

 LOOP1:

 MOV A,#31H

 LOOP2:

MOVX @DPTR,A

      MOV A,R7

      INC DPTR

       DJNZ R5,LOOP

 

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

(内部RAM的DA、DB、DC单元设为20H 21H 22H)

 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。

    ORG 0030H

   MOVR0,#42H

   MOVR1,#52H

   MOVR7,41H;字符串长度

LOOP:

MOVA,@R0

   MOV30H,@R1

    CJNEA,30H,LK

    INC R0

    INC R1

    DJNZ R7,LOOP

    MOV 40H,#00H

    SJMP DD

 LK:

 MOV40H,#0FFH

 DD:

 SJMPDD

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

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

    ORG0030H

  MOV DPTR,#table

   MOV R6,#10

LOOP:

MOVXA,@DPTR

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

SETBACC.7

   MOVX@DPTR,A

   INC DPTR

   DJNZR6,LOOP

第五章

一、填空题

1.各项任务

2.INT0   T0  INT1  T1  串口

3.PC   PC   ROM

4.中断源   查询状态

5.1000000   1000000/65536=15.26

6.100ms

7.111101

8.T120FFH001BH

 

二、单选题:

   DCAADCD

单片机基础  第五章 习题

课本5。

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

分析:

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

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

解:

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

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

代入数据得:

X = 8067

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

得TH1 = 0FCH   TL1 = 03H

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

TMOD =00H

(3)编程实现:

 方法一:

使用查询法。

程序不断地查询TF1的值。

如定时器溢出(TF1=1),则CPL P1.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(或SETB TR1) 

 T1的中断向量=001BH

程序如下:

   ORG0000H

AJMPMAIN

ORG 001BH

   AJMP T1_TIMER

MAIN:

MOV TMOD,#00H

    MOV TCON,#40H

    MOV IE,#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:

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

――TH0:

8位,只能作定时,借作TR1 TF1  

   T1:

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

     可用方式0,1,2。

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

第六章

一、填空题

1、 8  16  13  2

2、 高电平  低电平   高阻

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

4、 16   P0   P2

5、 PSEN  RD   WR  ALE  CE  ALE 6

6、 16KB  31FFH

7、 外存 

8、 片选

9、 3  PSEN ALE

二、单选题

DADDC  ADA

第七章

填空题

 1. 数据 ALE  RD  WR

 2. 无条件传送  查询    中断

 3. 缓冲  锁存

 4.  12   11

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

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

 7.   10100111

单选题

   DACDBB

  

 

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

当前位置:首页 > 人文社科 > 法律资料

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

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