视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
单片机答案(北京航空航天大学出版社)
2025-10-05 00:50:00 责编:小OO
文档
第一章:

一、填空题

 1. 1110   0EH  10011100    01100100

 2. 4

 3.   255   -51

  4.   输入设备

 5.   84

  6.   630 * 8 * 1024

  7.   位 字节  字   bit  btype  word

  8.   1111 1111    00100100   11011011

  9.   110       -115    -50

二、单选:

    DBCAB   BBCB

第二章:

一、填空

 1. PC PC 

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

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

 4. 6  2  1  12

 5. DPTR  DPH  DPL 

 6. KB

单选题

    DCCAC AD 

第三章:

一、填空题:

 1. 1031

 2. 34H   1   1   1

 3. 略

 4. 1100H

 5. 2

 6. 30H  71H

    0A5H

       0A5H

       75H

       0A7H

       0AAH    0   1

       IFH   1    1

       0AAH  0   1

       20H   1    0

       0D5H    1    1

       49H   0   0

       

   二、单选题

      CCBDCA

 

    

三、其它类型题

  错   错   对

  错   错   错 

  对   错   错 

  错   错   对

  对   对   对

  错   对   对

错    对    错 

错    对

(三)其它类型题

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

分析:就是把这四个单元写入F0H。用一个DJNZ的循环。

      ORG 0000H

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

        MOV R5,#04H; 四个数

LOOP:   INC R0

        MOV @R0,#0F0H ; 写入

        DJNZ R5,LOOP ; 循环4次

        END

    

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

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

     ORG 0000H

        MOV A,30H

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

        SWAP A

        MOV 30H ,A ;高低四位调一下,放回原处

        MOV A,31H

        ANL A,#0FH

        ORL A,30H ;合并起来

        MOV 30H,A

        END

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

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

       ORG 0000H

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

        MOV R5,#0AH ;循环10次

        CLR A  ;先加到A中

  LOOP: INC R0

        ADD A,@R0

        DJNZ  R5,LOOP

        MOV 50H,A

        END

   

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

      ORG 0000H

        MOV A,R0

        CPL A ;按位取反

        ADD A,#01H ;+1

        MOV  R1,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

            MOV R0,#list

            MOV A,@R0      ;取第一个正数

      LOOP: INC R0      ;指向下一个正数

            MOV 3AH,@R0

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

      CHK:  JC  LOOP1       ;前一个数小,则转

            MOV A,@R0    ;前一个数大,取后一个数

LOOP1:      XCH A,3AH

            CJNE A,#0FFH,LOOP

            XCH A,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 

ORG 0000H

        MOV A,20H

        CLR C

        RL A

        JC  FS         ;移到负数处处理

        RR A

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

        JC ZJS         ;到正奇数处

        MOV A,20H

        ORL A,21H

        MOV 22H,A

        SJMP OK

   ZJS:  MOV A,20H

         ADD A,21H

         MOV 22H,A

        SJMP OK

   FS:  MOV A,20H

        CLR C

        RR A

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

        MOV A,20H

        XRL A,21H

        MOV 22H,A

        SJMP OK

  FJS:  MOV A,20H

        ANL A,21H

        MOV 22H,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、 c 3个数分别存放在内部RAM的DA、DB、DC单元中,别有平方运算子程序调用。

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

  ORG 0000H

    MOV A,20H

    PUSH ACC

    AJMP SQR

    POP ACC

    MOV 22H,A

    MOV A,21H

    PUSH ACC

    AJMP SQR

    POP ACC

    ADD A,22H

    MOV 22H,A

    END

6、比较两个ASCII码字符串是否相等。字符串的长度在内部RAM 41H单元,第一个字符串的首地址为42H,第二个字符串的首地址为52H。如果两个字符串相等,则置内部RAM 40H单元为00H;否则置40H单元为FF。

        ORG  0030H

        MOV R0,#42H

        MOV R1,#52H

        MOV R7,41H ;字符串长度

  LOOP: MOV A,@R0

        MOV 30H,@R1 

        CJNE A,30H,LK

        INC  R0

        INC  R1

        DJNZ  R7,LOOP

        MOV  40H ,#00H

        SJMP  DD

   LK:  MOV 40H,#0FFH

   DD:  SJMP DD

7.外部RAM首址为table的数据表中,有10个字节的数据。编程将每个字节的最高位无条件地置“1”。

         ORG 0030H

         MOV  DPTR,#table

         MOV  R6,#10

    LOOP:MOVX A,@DPTR

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

          MOVX @DPTR,A

          INC  DPTR

          DJNZ R6,LOOP

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

分析:就是把这四个单元写入F0H。用一个DJNZ的循环。

      ORG 0000H

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

        MOV R5,#04H; 四个数

LOOP:   INC R0

        MOV @R0,#0F0H ; 写入

        DJNZ R5,LOOP ; 循环4次

        END

    

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

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

     ORG 0000H

        MOV A,30H

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

        SWAP A

        MOV 30H ,A ;高低四位调一下,放回原处

        MOV A,31H

        ANL A,#0FH

        ORL A,30H ;合并起来

        MOV 30H,A

        END

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

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

       ORG 0000H

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

        MOV R5,#0AH ;循环10次

        CLR A  ;先加到A中

  LOOP: INC R0

        ADD A,@R0

        DJNZ  R5,LOOP

        MOV 50H,A

        END

   

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

      ORG 0000H

        MOV A,R0

        CPL A ;按位取反

        ADD A,#01H ;+1

        MOV  R1,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

            MOV R0,#list

            MOV A,@R0      ;取第一个正数

      LOOP: INC R0      ;指向下一个正数

            MOV 3AH,@R0

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

      CHK:  JC  LOOP1       ;前一个数小,则转

            MOV A,@R0    ;前一个数大,取后一个数

LOOP1:      XCH A,3AH

            CJNE A,#0FFH,LOOP

            XCH A,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 

ORG 0000H

        MOV A,20H

        CLR C

        RL A

        JC  FS         ;移到负数处处理

        RR A

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

        JC ZJS         ;到正奇数处

        MOV A,20H

        ORL A,21H

        MOV 22H,A

        SJMP OK

   ZJS:  MOV A,20H

         ADD A,21H

         MOV 22H,A

        SJMP OK

   FS:  MOV A,20H

        CLR C

        RR A

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

        MOV A,20H

        XRL A,21H

        MOV 22H,A

        SJMP OK

  FJS:  MOV A,20H

        ANL A,21H

        MOV 22H,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、 c 3个数分别存放在内部RAM的DA、DB、DC单元中,别有平方运算子程序调用。

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

  ORG 0000H

    MOV A,20H

    PUSH ACC

    AJMP SQR

    POP ACC

    MOV 22H,A

    MOV A,21H

    PUSH ACC

    AJMP SQR

    POP ACC

    ADD A,22H

    MOV 22H,A

    END

6、比较两个ASCII码字符串是否相等。字符串的长度在内部RAM 41H单元,第一个字符串的首地址为42H,第二个字符串的首地址为52H。如果两个字符串相等,则置内部RAM 40H单元为00H;否则置40H单元为FF。

        ORG  0030H

        MOV R0,#42H

        MOV R1,#52H

        MOV R7,41H ;字符串长度

  LOOP: MOV A,@R0

        MOV 30H,@R1 

        CJNE A,30H,LK

        INC  R0

        INC  R1

        DJNZ  R7,LOOP

        MOV  40H ,#00H

        SJMP  DD

   LK:  MOV 40H,#0FFH

   DD:  SJMP DD

7.外部RAM首址为table的数据表中,有10个字节的数据。编程将每个字节的最高位无条件地置“1”。

         ORG 0030H

         MOV  DPTR,#table

         MOV  R6,#10

    LOOP:MOVX A,@DPTR

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

          MOVX @DPTR,A

          INC  DPTR

          DJNZ R6,LOOP

第五章

一、填空题

1.各项任务

2.INT0   T0  INT1  T1  串口

3.PC   PC   ROM

4.中断源   查询状态

5.1000000   1000000/65536 = 15.26

6.100 ms    

7.111      101

8.T1   2  0FFH   001BH

二、单选题:

   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

所以:  MOV TMOD ,#00H

        MOV TH1,#0FCH

        MOV TL1,#03H

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

        SETB TR1    ;开启定时器

LOOP:  JBC TF1,LOOP1

        AJMP LOOP

LOOP1:  MOV TH1,#0FCH

         MOV TL1,#03H

        CPL P1.0

       AJMP LOOP

方法二:使用中断的方法。需确定寄存器:TMOD = 00H

IE =88H   TCON =40H (或SETB TR1) 

 T1的中断向量=001BH

程序如下:

   ORG 0000H

      AJMP  MAIN

      ORG 001BH

   AJMP T1_TIMER 

MAIN:MOV TMOD,#00H

    MOV TCON,#40H

    MOV IE,#88H

        MOV  TCON ,#40H

        MOV TH1,#0FCH

        MOV TL1,#03H

Here :AJMP Here

T1_TIMER:  MOV TH1,#0FCH

            MOV TL1,#03H

            CPL P1.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 程序  KB  数据  KB  程序

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

  下载本文

显示全文
专题