单片机课后习题

第一章:

一、填空题

 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   89   -115    -50

二、单选:

    DBCAB  BBCB

第二章:

一、填空

1.堆栈实现子程序调用(1. PC PC )

 2.80C51时钟电路两部分( 反向器 )( 晶振  两只电容) 短

 3.单片机两种复位操作 (加电复位) (手动复位)  复位后PC值:(0000H) SP值:07H  通用寄存器当前组为:第0 

地址范围:00H~07H

 4.80C51单片机一个机器周期包含 :6个机器状态 一个状态为 2个节拍  一个节拍为1个震荡脉冲周期 一个机器周期包含12个脉冲周期

 5.80C51唯一用户可使用的16位寄存器是:DPTR 可以拆分为两个8位 :DPH  :DPL 

 6.程序存储器寻址范围由PC位数决定,16位PC寻址范围 64KB

单选题

    DCCAC AD 

 

第三章:

 

一、填空题:

 1. 1031

 2. 34H   1   1   1

 3. (P1.0^P1.1)^(~p1.2) 上面逻辑反

 4. 1100H(AJMP 加2高位补0)

 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

 

    

三、其它类型题

  错   错   对

  错   错   错 

  对   错   错 

  错   错   对

  对   对   对

  错   对   对

错    对    错 

错    对

 

(三)其它类型题

  2.  ①  D=(~10HνP1.0) Λ (11HνCY)

              MOV  C  P1.0

              ORL   C  /10H

        MOV B  11H

        ORL  B  CY

         ②  E =ACC.2ΛP2.7νACC.1ΛP2.0

 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中。

      ORG0000H

        MOV A,R0

        CPL A ;按位取反

        ADD A,#01H ;+1

        MOV  R1,A

        END

第四章:

一、填空题

1.假定A=40H,R1=23H,40H=05H。执行以下指令后A=()、R1=()、40H=():

XCH   A, R1 

XCHD  A,  @R1

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
            CJNEA,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)

       ORG0000H

        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中。

      ORG0000H

        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 程序  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

  

你可能感兴趣的:(interview)