单片机设计分析与编程题总结

设计分析1.MSC-51

1.MCS-51单片机系统时钟为12MHZ,解释以下程序的意义。

LOOP:  CLR P1.0

MOV R7,#2

ABC1:  NOP        

NOP

                DJNZ    R7,ABC1

                SETB    P1.0

MOV R7,#5 

ABC2:  NOP

NOP

NOP

                DJNZ    R7,ABC2   

NOP

SJMP    LOOP   

答:分析可知,这是1个方波波形发生程序。

低电平10mS,高电平30mS,周期40mS。

2.MCS-51单片机系统时钟为12MHZ,分析以下程序,指出其功能

LOOP:  SETB    P1.0        ;1TCY, P1.0输出高电平

            NOP             ;1TCY

            NOP             ;1TCY

            NOP             ;1TCY

            CLR P1.0        ;1TCY,P1.0输出低电平

            NOP             ;1TCY

            NOP             ;1TCY

            NOP             ;1TCY

            NOP             ;1TCY

            SJMP    LOOP        ;2TCY

分析可知,这是1个方波波形发生程序。高电平4mS,低电平7mS,周期11mS。

3.MCS-51单片机系统时钟为12MHZ,解释以下程序的意义。

    LOOP:  CLR P1.0

MOV R7,#2

ABC1:  NOP        

NOP

            DJNZ    R7,ABC1

            SETB    P1.0

MOV R7,#5 

ABC2:  NOP

NOP

NOP

            DJNZ    R7,ABC2   

NOP

SJMP    LOOP   

答:这是1个方波波形发生程序。低电平10mS,高电平30mS,周期40mS。

4.MCS-51单片机系统时钟为12MHZ,解释以下程序的意义。

LOOP:  SETB    P1.0

                        NOP

                        NOP

                        CLR P1.0

                        NOP

                        NOP

                        NOP

                                          SJMP    LOOP

分析可知,这是1个方波波形发生程序。高电平3mS,低电平6mS,周期9mS

5.MCS-51单片机系统时钟为12MHZ,试利用定时/计数器0控制每隔200mS从P1.6

口输出1个4mS低电平脉冲。

1).定时/计数器的模式选定   由于8位定时时间为256ms,因此,将定时/计数器0设置为模式2(8位自动重装载方式)。设置定时200ms。

    2).控制字设置    TMOD=****0010B   3).时间常数确定

    F=12´106HZ,T=200´10-6S代入,得X=256-200=156=9CH (X=256-200=56=38H) 初值设置为:TH0=TL0=#09CH38H)?

4).程序设计    主程序

ORG   0000H           ;系统复位入口

AJMP  0100H           ;系统主程序从0100H开始

ORG   000BH           ;定时器0中断入口

AJMP  0500H           ;定时器0中断服务程序放在0500H处

ORG   0100H

MOV   SP,#30H        ;置栈顶

MOV   TH0,#9CH       ;设置定时器初值

MOV   TL0,#9CH       ;

MOV   TMOD,#04H(02H)    ;设置定时器0为模式2

SETB  TR0             ;启动定时器0

SETB  ET0             ;允许定时器0中断

SETB  EA              ;开系统中断

SETB  P1.6

。。。。。。。。。

中断服务程序ORG     0500H      

T200US:    PUSH    PSW             ;栈保护

            CLR     P1.6            ;P1.6输出低电平

            NOP                     ;延时4ms

            NOP

            NOP

SETB    P1.6            ;P1.6输出高电平

POP     PSW

                SETB    ET0             ;开中断

                RETI

6.MCS-51单片机系统时钟为6MHZ,试利用定时/计数器0控制每隔200mS从P1.6口输出1个8mS低电平脉冲。

1)、定时/计数器的模式选定

    由于8位定时时间为256ms,因此,将定时/计数器0设置为模式2(8位自动重装

载方式)。设置定时200ms。

    2)、控制字设置

    TMOD=****0110B(0010B)

3)、时间常数确定

    F=6´106HZ,T=200´10-6S代入,得

X=256-100=156=9CH

初值设置为:TH0=TL0=#09CH

4)、程序设计       主程序

ORG     0000H           ;系统复位入口

AJMP    0100H           ;系统主程序从0100H开始

ORG     000BH           ;定时器0中断入口

AJMP    0500H           ;定时器0中断服务程序放在0500H处

ORG     0100H

MOV     SP,#30H        ;置栈顶

MOV     TH0,#9CH       ;设置定时器初值

MOV     TL0,#9CH       ;

MOV     TMOD,#06H(02H)        ;设置定时器0为模式2

SETB    TR0             ;启动定时器0

SETB    ET0             ;允许定时器0中断

SETB    EA              ;开系统中断

SETB    P1.6

。。。。。。。。。

中断服务程序ORG     0500H      

T200US:    PUSH    PSW             ;栈保护

            CLR     P1.6            ;P1.6输出低电平

            NOP                     ;延时6ms

            NOP

            NOP

NOP

            NOP

SETB    P1.6            ;P1.6输出高电平

            POP     PSW

                SETB    ET0             ;开中断

                RETI

2.子程序7.设计1个子程序,将8位二进制数(0-FFH)转换为BCD码数(0-256)。

入口: (A)=二进制数

出口: (R0+1)=BCD数的十位数、个位数

(R0)=BCD数的百位数 (本题15分)

答:BINBCD1:MOV    B,#100

DIV     AB      ;(A)=百位数,(B)=余数

MOV @R0,A      ;保存百位数

INC     R0

MOV A,#10

XCH A,B

DIV     AB      ;(A)=十位数,(B)=余数(个位数)

SWAP    A       ;放到A的高4位

ADD A,B        ;合成,A的高4位为十位数,低4位为个位数

MOV @R0,A      ;保存十位数、个位数

RET

8、设计1个子程序,将2组N字节的无符号数相加。(本题15分)

入口: (R0)=被加数低位地址指针

(R1)=加数低位地址指针

(R2)=字节数

出口: (R0)=和数高位地址指针

答:程序:  ADD2:      CLR     C

ADD12:    MOV A,@R0

               ADDC    A,@R1

               MOV @R0,A

               INC     R0

               INC     R1

               DJNZ    R2,ADD12

               JNC     GET             ;和的字节数为N

               MOV @R0,#1     ;和的字节数为N+1

               RET

GET:      DEC R0

          RET

9.设计一个子程序,将2组N字节的无符号数相减

入口:(R0)=被减数低位字节地址指针

(R1)=减数低位字节地址指

(R2)=字节数

出口:(R0)=差数高位字节地址指针

答:程序如下SUB:   CLR     C

SUB10:  MOV     A,@R0

SUBB    A,@R1

        MOV     @R0,A

        INC     R0

        INC     R1

        DJNZ    R2,SUB10

        JNC     OK

        …    …

 OK:    DEC     R0

RET

3.11.解释以下程序执行完后,内部RAM中00H~1FH各单元的数值为多少?

CLR   A

MOV   R0,#31

MOV   R1,#16

LOOP: MOV   @R0,A

DEC   R0

DJNZ  R1,LOOP

SETB  RS1

SETB  RS0

MOV   R7,#45

CLR   RS0

MOV   R7,#33

答:(00H)—(0FH)中的

(00H)=15(0FH) 

(01H)=0       

其它未变       

(10H)—(1FH)中的

(1FH)=45(2DH)

(17H)=33(21H)

10、图示为一个自动包装系统。单片机系统时钟为6MHZ,试编制一个计数程

序,对T1口的脉冲数进行监测,每200个脉冲,继电器J状态改变1次

(对T0口 200个脉冲;对T1口120个脉冲)

                     

解:T1口200个脉冲

(1)设置定时/计数器1为计数状态,选择工作模式2。

即控制字TMOD=0110****B   时间常数为TL1=TH1=256-200=56

(2)程序设计如下:

ORG    0000H

   AJMP    0100H  

   ORG     000BH

                AJMP    0400H

                ORG     0100H

    MAIN:  。。

                MOV     TMOD,60H       

                MOV     TL1,#56

                MOV     TH1,#56

            SETB    TR1             ;启动定时器1

            SETB    ET1             ;允许定时器1中断

            SETB    EA              ;开系统中断

                。。

                ORG     0400H

                CLR     ET1

PUSH    PSW

                CPL     P1.7

                POP     PSW

                SETB    ET1         ;重新允许定时器1中断

                RETI

对T1口120个脉冲

(1)设置定时/计数器1为计数状态,选择工作模式2。

即控制字TMOD=0110****B   时间常数为TL1=TH1=256-120=136

(2)程序设计如下:

ORG     0000H

   AJMP    0100H  

   ORG     000BH

                AJMP    0400H

                ORG     0100H

MAIN:    。。

CLR     TMOD.4 

                SETB    TMOD.5         

                SETB    TMOD.6     

                CLR     TMOD.7     

                MOV     TL1,#136

                MOV     TH1,#136

SETB    TR1        

            SETB    ET1            

            SETB    EA         

                。。

                ORG     0400H

                CLR     ET1

PUSH    PSW

                CPL     P1.7

                POP     PSW

                SETB    ET1         ;重新允许定时器1中断

                RETI

对T0口 200个脉冲

1)设置定时/计数器1为计数状态,选择工作模式2。

即控制字TMOD=****0110B   时间常数为TL1=TH1=256-200=56

(2)程序设计如下:

ORG     0000H

   AJMP    0100H  

   ORG     000BH

                AJMP    0400H

                ORG     0100H

MAIN:    。。

CLR     TMOD.0 

                SETB    TMOD.1         

                SETB    TMOD.2     

                CLR     TMOD.3     

                MOV     TL1,#56

                MOV     TH1,#56

SETB    TR0            

            SETB    ET0            

            SETB    EA             

                。。

                ORG     0400H

               (CLR  ET0?有没有)

PUSH    PSW

                CPL     P1.0

                POP     PSW

                SETB    ET0    

                RETI

12、将图示器件连接起来,组成1个完整的8KB EPROM系统。可根据需要添加

13、将图示器件连接起来,组成1个完整的2KB EPROM系统。可根据需要添加元器件。

14.将图示器件连接起来,组成1个完整的2KB EPROM系统。可根据需要添加元器

15.如图所示MCS-51单片机串行口应用系统,试设计程序实现对24路输入信号检测。将检测到的数据保存于20H21H22H单元中。

答:1)、UART模式设置

UART设置为模式0,即8位移位寄存器方式。

2)、中断方式设置

采用接收标志查询方式,不采用中断,RI=0

3)、在REN=1和RI=0时,1条读SBUF数据的操作指令则启动接收1个数据。

4)、以下为读入3个字节并行口数据的子程序

        CLR     P1.0                ;74LS165装载数据

SETB    P1.0                ;允许74LS165移位

MOV     SCON,#10H      ;UART设置为模式0,REN=1,RI=0允许接收

            MOV     A,SBUF         ;接收第1个数据

JNB     RI,$               ;等待接收结束

MOV     20H,A              ;第1个数据保存于20H单元

CLR     RI

MOV     A,SBUF         ;接收第2个数据

JNB     RI,$               ;等待接收结束

MOV     21H,A              ;第2个数据保存于21H单元

CLR     RI

MOV     A,SBUF         ;接收第2个数据

JNB     RI,$               ;等待接收结束

MOV     22H,A              ;第3个数据保存于22H单元

CLR     RI

CLR     REN             ;禁止接收

RET

16.片内RAM30H开始的单元中有10B的二进制数,请编程求它们之和

(和≦256 )解 ADDIO:MOV     R0,30H

                  MOV      R7,#9

                  MOV      A,@R0

          LOOP: INC       R0

                  ADD       A,@R0

                  DJNZ      R7,LOOP

                  MOV      30H,A

                  RET

17. 试编程对8155进行初始化,设A口为选通输出,B口为选通输入,C口作为控制联络口,并启动定时器/记数器按方式1工作,工作时间为10ms,定时器计数脉冲频率为单片机的时钟频率24分频,fosc=12MHz。

解:算得初值=5000 =1388H

MOV   DPTR,#7F04    ;定时器低八位寄存器地址     DPTR

MOV   A,#88H        ;低8位初值     A

MOVX  @DPTR,A     ; 低8位初值    低8位寄存器

INC     DPTR         ;DPTR指向定时器高8位

MOV    A,#13H        ;高8位初值    A

MOVX   @DPTR,A     ;高8位初值       高8位寄存器

MOV    DPTR,#7F00H  ;8155命令寄存器地址     DPTR

MOV    A,0C5H        ;命令字     A

MOVX   @DPTR,A     ;命令字     命令寄存器

18.应用单片机内部定时器T0工作在方式1下,从P1.0输出周期为1ms的方波脉冲信号,已知单片机的晶振频率为6MHZ。

解(1)计算时间常数X,应用公式X=216-t(f/12)

(2)写出程序清单

解:解:X=216-t(F/12)

=216-1*10-3*6*106/12

=OFEOCH

ORG   3000H

START:MOV  TMOD,#01H

MOV  TL0,#OCH

MOV  THO,#OFEH

SETB   TR0

LOOP:  JBC  TFO,DONE

SJMP  LOOP

DONE: MOV  TL0,#OCH

MOV  THO,#OFEH

CPL  P1.0

SJMP LOOP

19,应用单片机内部定时器T0工作在方式1,P1.0输出周期为2ms的方波脉冲信号,已知单片机的晶振频率为6MHZ

请(1)计算时间常数X,应用公式X=216-t(f/12)

(2)写出程序清单

解:X=216-t(F/12)

=216-1*10-3*6*106/12(2*10-3*6*106/12)

=OFEOCH0F418H

ORG   3000H

START:MOV  TMOD,#01H

MOV  TL0,#OCH(18H)

MOV  THO,#OFEH(0F4H)

SETB   TR0

LOOP:  JBC  TFO,DONE

SJMP  LOOP

DONE: MOV  TL0,#OCH(18H)

MOV  THO,#OFEH(0F4H)

CPL  P1.0

SJMP LOOP

20.片内RAM40H开始的单元内有10B二进制数,编程找出其中最大值并存于50H单元中。 解   START:  MOV    R0,#40H       ;数据块首地址送R0

MOV     R7,#09H       ;比较次数送R7

         MOV     A,@R0        ;取数送A

    LOOP:     INC      R0 

                 MOV     30H,@R0      ;取数送30H

                 CJNE     A,30H,NEHT   ;(A)与(30H)相比

      NEXT:     JNC      BIE1          (A)≥(30H)转BIR1

                 MOV     A,30H        ;(A)<(30H),大数送A

   BIE1:      DJNZ     R7,LOOP      ;比较次数减1,不为0,继续比较

         MOV     50H,A         ;比较结束,大数送50H

         RET     

21. 设计一个2×2行列式键盘电路并编写键盘扫描子程序。(20分) 

单片机设计分析与编程题总结

扫描子程序:

KEY1:  ACALL    KS1      ;调用判断有无键按下子程序

         JNZ       LK1      ;有键按下,转LK1

         AJMP     KEY1     ;无键按下,返回

LK1:     ACALL   T12MS    ;调延时12ms子程序

         ACALL   KS1       ;查有无键按下

         JNZ      LK2       ;若有,则为键确实按下,转逐列扫描

         AJMP    KEY1      ;无键按下,返回

LK2:       MOV    R4,#00H    ;首列号    R4

           MOV    R2,#FEH    ;首列扫描字    R2

LK4:       MOV    A,R2       ;列扫描字     P1口

           MOV    P1,A        ;使第一列线为0

MOV   A,P1       ;读入行状态

           JB       ACC.0,LONE;第0行无键按下,转查第一行

           MOV    A,#00H   ;第0行有键按下,该行首键号#00H     A

           AJMP    LKP        ;转求键号

LONE:     JB       ACC.1,NEXT ;第一行无键按下,转查下一列

          MOV    A,#02       ;第一行有键按下,该行首键号#02     A

LKP:      ADD    A,R4        ;键号=首行号+列号

          PUSH    ACC        ;键号进栈保护

LK3:      ACALL   KS1        ;等待键释放

          JNZ      LK3        ;未释放,等待

          POP      AC         ;键释放,键号     A

          RET                  ;键扫描结束

NEXT:    INC      R4          ;列号加1,指向下一列

          MOV     A,R2        ;列扫描字     A

          JNB      ACC.1,KND  ;判断2列全扫描完?扫描完,转KND

          RL       A           ;没扫描完,扫描字左移一位,形成下一列扫描字      MOV     R2,A        ;扫描字     R2

          AJMP     LK4        ;扫描下一列

          AJMP     KEY1       ;全扫描完,返回

          MOV     A,#FCH      ;全扫描字11111100B     A

          MOV     P1,A         ;全扫描字    所有行

          MOV     A,P1         ;读取列值

          CPL      A            ;取正逻辑,高电平表示有键按下

          ANL      A,#0C0H     ;屏蔽低6位,取高2位

          RET                   ;出口状态(A)!=0,有键按下

23 编程将片内RAM30H单元开始的15B的数据传送到片外RAM3000H开始的单元中去。

 解:STRAT: MOV     R0,#30H

              MOV     R7,#0FH

              MOV     DPTR,#3000H

      LOOP:  MOV     A,@R0

              MOVX    @DPTR,A

              INC       R0

              INC       DPTR

              DJNZ      R7,LOOP

              RET

24.将31H、32H单元与41 H、40H单元的双字节十进制无符号数相加,结果存入32H,31H,30H单元。即(32H)(31H)(30H)= (31H) (30H)+(41H)(40H)。

(1).输入程序:

参考程序

MOV  R0,#30H

MOV  R1,#40H

MOV  R2,#02H

CLR   C

L1: MOV  A,@R0

ADDC  A,@R1

DA     A

MOV   @R0,A

INC    R0

INC    R1

DJNZ   R2,L1

CLR    A

MOV   ACC.0,C

MOV   @R0,A

(2).在31H、30H单元存入加数如3018,在41H,40H单元存入被加数如8975。

(3).输入程序首地址,(从处为2000H),然后开始单步或断点运行该段程序。

(4).运行过程中检查数据的变化,并在最后检查(32H)=      ,(31H)=     , (30H)=     。

25. 编程实现逻辑运算:Q=(U *(V+W))+X.Y)+Z。设U~Z的位地址为00H~05H.Q的位地址为07H。《实际中U~Z可以是外部输入端口信号或软件设定的一些控制位》。

实习步骤:

(1)输入所编程序。

MOV    C,01H

ORL    C,02H

ANL     C,00H

MOV     F0,C             ;暂存U*(V+W)的值

MOV    C,03H

ANL     C,/04H

ORL     C,F0

ORL     C,/05H

MOV     07H,C            ; 保存结果

(2)内部RAM20H单元(位地址00H~07H的位在20H单元)输入某个数据(注意此时各位的状态并做好记录)。

(3)单步或断点运行所编程序,逐步检查Cy及个数据的变化情况(注意检查时也按字节读出,再观察其相应位)。

(4)验证运行结果

(5)改变20H单元的置数,

    26、应用8751单片机、8KB数据存储器6264、74LS138译码器、8位锁存器等器件组成1个完整的MCS—51单片机RAM扩展系统,写出地址空间。可根据需要添器件

地址空间0000H—1FFFH

27.如图所示系统应用74LS138译码器进行地址译码,试指出6116、2716、A/D、D/A、LED等部件的地址范围。

答:2716的地址:0000H-07FFH (1分)

6116的地址:0000H-07FFH(1分)

A/D的地址: 0800H-0FFFH (1分)

D/A的地址: 1000H-17FFH (1分)

LED的地址: 1800H-1FFFH (1分)

28、如图所示MCS-51单片机串行口应用系统,试说明串行口的工作方式以及信号检测的过程,并设计子程序实现对12路输入信号检测。将检测到的数据保存于20H、21H单元中。(10分)

答:串行口工作在方式0,即8位同步移位寄存器状态。(1分)

在REN=0和TI=0时,1条向SBUF写数据的操作指令即启动发送1个数据;(1分)

在REN=1和RI=0时,1条读SBUF数据的操作指令则启动接收1个数据(1分)

程序如下:

READ: CLR P1.0              ;74LS165装载数据

          SETB P1.0             ;允许74LS165移位(1分)

MOV SCON,#10H      ; UART设置为模式0,REN=1,RI=0允许接收(1分)

              MOV A,SBUF           ;接收第1个数据 (1分)

JNB       RI,$       ;等待接收结束

MOV   20H,A          ;第1个数据保存于20H单元(1分)

CLR       RI                          (1分)

MOV   A,SBUF         ;接收第2个数据

JNB       RI,$       ;等待接收结束

MOV   21H,A          ;第2个数据保存于21H单元

CLR   REN             ;禁止接收 (1分)

CLR   RI              

RET                    (1分)

29.采用线选法扩展2´2716(2´2KB)EPROM,线选线分别要求使用P2.3和P2.4, 并写出P2口高3位都为0时的一组地址映射。(10分)

1# 芯片地址范围:1000H―17FFH (1分)

2#芯片地址范围:0800H-0FFFH (1分)

30.分析分析下面程序功能,(A)是无符号的二进制数。

CHENGXU:  MOV B,#100

DIV AB

MOV @R0,A

INC R0

MOV A,#10

XCH A,B

DIV AB

SWAP A

ADD A,B

MOV @R0,A

RET

如果(A)=#0CFH,那么执行以上程序后结果是什么。(给出简单的分析过程

解:将(A)是无符号的二进制数转换成十进制数,并已BCD码从高位到低位(R0-1)和RO的内容所指的单元中。  (A)=#0CFH=207(十进制数)

31.将8031外部扩展2K EPROM,同时扩展16K RAM作数据存储器;采用的2716是2K的EPROM芯片,6264是8K的RAM芯片,74LS373是8位锁存器。请画出连接示意图并写出各片的地址范围。

       

将高位地址线不用:

2716的地址范围:0000H-07FFH

6264A的地址范围:0000H-1FFFH

6264A的地址范围:2000H-3FFFH

31.单片机系统时钟12MHz,利用定时/计数器0模式1产生一个50Hz的方波,由P1.0口输出。写一个子程序完成以上功能

解:  先计算定时/计数器0的初值。

           

解之的 x=55536=D8F0H

子程序   T00:MOV TMOD ,#01H

                SETB TR0

         LOOP:  MOV TH0,#0D8H

                MOV TL0,#0F0H

JNB  TF0,$

CLR TF0

CPL  P1.0(P1.0口,同理P1.6口

SJMP LOOP

RET

32、单片机系统的外部数据寄存器的2000H单元放入一个无符号数,在程序存储器中,从标号DATA开始的数据区中也放入一个无符号数;编写子程序一个,实现数据寄存器中的一个无符号数和程序存储器中的一个无符号数相加,结果放入数据寄存器3000H(高位)和3001H(低位)两个单元中。

画出流程图,编写子程序

程序存储器中的数据是:DATA DB DATA1

ADDDATA:

MOV DPTR,#2000H  ;取数据寄存器数据放入R0中

MOVX A,@DPTR

MOV R0,A

MOV DPTR,#DATA   ; 取程序寄存器数据放入A中

MOVC A,@DPTR

CLR C             ;两个无符号数相加

ADD  A,R0

MOV DPTR,#3001H

MOVX @DPTR, A

DEC DPTR

JC  LOOP           ;进位转移,保存高位数据

MOV A,#00H

MOVX @DPTR, A

SJMP LOOP1

LOOP:  MOV A,#01H

MOVX @DPTR,A

LOOP1: RET

33.程序分析 单片机外接RAM 4000H、4001H单元的内容分别为56H,2DH,试分析如下程序并回答问题。程序如下:

MOV SP,#40H

MOV DPTR,#4000H

MOV R1,#60H

MOVX A,@DPTR

MOV @R1,A

INC R1

INC DPTR

MOVX A,@DPTR

MOV @R1,A

PUSH R1

问题:若执行长述程序后,(DPTR)=   4001H     ,(R1)=    61H    ,

8031内部RAM (41H)=  61H   , (60H)=  56H   ,(61H)=   2DH   

34. 编制一个循环闪烁灯的程序。有8个发光二极管,每次其中某个灯闪烁点亮10次后,转到下一个闪烁10次,循环不止。编制程序,画出电路图。

答:1)本程序的硬件连接如图所示。当P1.0输出高电平时,LED灯亮,否则不亮。

  2)程序如下:

MOV     A,#01H      ;灯亮初值

SHIFT:    LCAIL    FLASH     ;调闪亮10次子程序

RR       A            ;右移一位

SJMP     SHIFT        ;循环

FLASH:    MOV     R2,#0AH     ;闪烁10次计数

FLASH1:  MOV     P1,A         ;点亮

LCALL   DELAY       ;延时

MOV     P1,#00H       ;熄灭

LCALL    DELAY       ;延时

DJNZ      R2,FLASH1    ;循环

RET

35.试将8031单片机外接一片2716 EPROM和一片6116 RAM组成一个应用系统,请画出硬件连线图,并指出扩展存储器的地址范围。

答:2716是2K×8位的EPROM,6116是2K×8位的静态RAM,两者都仅需要11根地址线。由于没有规定地址范围,故可按最简单的方式来连接,即省去地址译码器,程序存储器的地址必须从0开始,基本地址为0000H—07FFH。数据存储器的地址为0000H—07FFH。控制线的连接为/PSEN控制EPROM的读出,/RD和/WR控制RAM的读写,两个芯片的片选端都固定接地,连线图如图所示。

1. MOV  A,#10H          (A)=  10H          

MOV  B,A             (B)=    10H        

MOV  A,B             (A)=    20H        

ADD   A,B            (A)=     20H       

MOV  20H,A           (20H)=   21H        

INC   A              (A)=     21H       

MOV  21H,A           (21H)=    22H        

INC   A              (A)=     22H       

MOV  22H,A           (22H)=   22H         

2.MOV    DPTR,#2000H   (DPTR)=  2000H       

   MOV    A,#80H           (A)=    80H        

   MOVX   @DPTR,A          (2000H)=  80H        

   INC      DPTR           (DPTR)=   2001H      

   MOV     A,#90H          (A)=     90H        

   MOVX   @DPTR,A          (2001H)= 90H       

   MOV    DPTR,#2000H      (DPTR)=  2000H      

   MOVX   A,@DPTR           (A)=     80H       

   MOV     B,A              (B)=   80H         

   INC      DPTR           (DPTR)=  2001H       

   MOVX    A,@DPTR          (A)=  90H          

二。改错题

36.请判断下列个条指令的书写格式是否有错,如有错说明原因

1、MUL    R0R1

2、MOV  A,@R7

3、MOV  A,#3000H

4、MOVC @A+DPTR ,A

5、MOVX  B, @DPTR

解:1、 MUL R0R1 错  此指令是MUL AB。

    2、 MOV  A,@R7   对。

3、MOV  A,#3000H  错 A 是8位的累加器。

4、MOVC @A+DPTR ,A  错 程序存储器只能读,不能写。

5、MOVX  B, @DPTR   错  此指令只能用累加器A。

37.改正下列指令MOV   A,DPTR              MOVX   A,@DPTR

MOV   DPTR,10H            MOV   A,10H

MOV   DPTR,40H            MOV   A,40H      

MOVX  40H,#30H            MOV  40H,#30H

ADD   20H,#10H            ADD   A,#10H

3、改正下列指令

MOV   @R3,A              MOV     @R1 ,A        

MOV   DPTR,A             MOVX   DPTR,A           

INC    @R3                 INC   A             

DEC    DPTR                DEC    R0          

ADDC   #30H,A              ADDC  A,#30H          

38.若(10H)=0FFH,(11H)=00H,(12H)=0FFH,(13H)=00H,写出每一步指令运行结果

MOV   A,10H       (A)=     0FFH       ,

ANL    A,#01H      (A)=     01H        ,

MOV   A,11H       (A)=     00H        ,

ORL    A,#01H      (A)=    01H          ,

MOV   A,12H       (A)=   FFH           ,

XRL    A,#01H      (A)=    01H          ,

MOV    A,13H       (A)=     00H       ,

XRL    A,#0AA      (A)=    0A         ,

(10H)= FFH   , (11H)=  00H   , (12H)=   FFH   , (13H)= 00H    

2.MOV   30H,#60H

   MOV   R0,#60H

   MOV   A,30H

   MOV   B,A

   MOV   @R0,B

   (A)=   60H    ,(R0)=  60H    ,(B)=  60H    ,

3.MOV   SP,#60H

   MOV   A,#01H         (A)=     01H        ,

   MOV   B,#02H         (B)=     02H       ,

   PUSH   A           (SP)=    61H      ,

   PUSH   B           (SP)=    62H      ,

   POP     A

   POP     B          (60H)=  01H        ,

39.如果(DPTR)=5678H,(SP)=42H,(3FH)=12H ,(40H)=34H,(41H)=50H,(42H)=80H,则执行下列指令后:POP       DPH

POP    DPL

RET

则:(PCH) =__34H__;(PCL)=___12H____ ;(DPH)=__80H__;

(DPL)=___50H__;

40.位地址为M、N、Y,程序如下:MOV  C, M   

ANL  C,       

MOV  Y,C     

MOV  C,M     

ANL  C,N    

ORL  C,Y       ;

MOV  Y,C 

求程序功能表达式:(Y)=(M)*(/N)+(M)*(N)

41.阅读下列程序并回答问题CLR       C

MOV      A,#9AH

                    SUBB      A,60H

                    ADD       A,61H,

                    DA         A

                    MOV       62H,A

(1).请问该程序执行何种操作?

答:操作是单字节BCD码运算,是将

(62H)=(61H)-(60H)

或 (61H)-(60H) 送(62H)

(2).已知初值:(60H)=23H,(61H)=61H,请问运行程序后:(62H)=  38H

  42. 外部RAM 3000H,3001H单元的内容分别为55H,0DDH,试分析如下程序,并答题

单片机设计分析与编程题总结

程序1:  MOV  DPTR,#3000H

              MOV  R1,#40H

               MOVX  A ,@DPTR

               MOV  @R1,A

              INC  R1

               INC  DPTR

              MOVX  A,@DPTR

               MOV  @ R1,A

    问题1:若执行上述程序,则结束后,DPTR值为__3001H _________,R1的内容为_____ 41H ______,8031内部RAM41H单元的内容__ DDH _________,40H单元内容为___55H ________。

在上程序中,若继续执行如下程序

程序2:START:MOV  DPTR,#3000H

               MOV  R1  ,#40H

               MOV  A,@R1

               MOVX  @DPTR,A

问题2、START执行结束后,DPTR的值为__   3000H   _________,4000H单元的内容为______ 40H _____,R1的内容为____55H _______。

问题3:执行如下程序,填出A寄存器的内容。

程序3、      MOV  A、#88H

              MOV  R7,#AAH

ORL  A、R7  :A的内容为______ AAH _____

MOV  A,#37H

MOV  R7,#89H

ANL  A,R7    A的内容为:__01H _________

XRL  A,R7    A的内容为:_____88H ______

              RET

相关推荐