单片机考试常见试题程序分析题

程序分析及编程
1.设(A)=04H,(CY)=1, 写出下列各条指令的结果。
RL  A; (A)= 08H
RR  A;  (A)= 02H
RLC A;  (A)= 09H
RRC A;  (A)= 82H
2设(A)=7AH,(R0)=30H,(30H)=A5H,(CY)=1, 写出下列各条指令的结果。
MOV  A ,R0  (A)=30H  (R0)=30H
XCH  A, R0  (A)=30H  (R0)=30H
XCHD A,@R0 (A)=A5H  (R0)=30H  (30H)=30H
ADD  A,#30H (A)=D5H (CY)=1
ADDC A,30H  (A)=06H  (CY)=1
SUBB A,#30H (A)=D5H  (CY)=1
4.已知程序执行前有A=02H,SP=52H,(51H)=FFH,(52H)=FFH。下述程序执行后:请问:A=( ),SP=( ),(51H)=( ),(52H)=( ),PC=( )。
POP        DPH
POP        DPL
MOV    DPTR,#4000H
RL        A
MOV    B,A
MOVC    A,@A+DPTR
PUSH    A
MOV    A,B
INC        A
MOVC    A,@A+DPTR
PUSH    A
RET
ORG    4000H
DB        10H,80H,30H,50H,30H,50H
    答:(A)=50H ,  (SP)=50H ,  (51H)=30H ,  (52H)=50H ,  (PC)=5030H
5.假定A=83H,(R0)=17H,(17H)=34H,执行以下指令后,A的内容为( )。:
        ANL    A,#17H
        ORL    17H,A
        XRL    A,@R0
        CPL    A答:0CBH
6.如果DPTR=507BH,SP=32H,(30H)=50H,(31H)=5FH,(32H)=3CH,则执行下列指令后则:DPH=( ),DPL=( ),SP=( ):
            POP        DPH
            POP        DPL
            POP        SP
   
答:DPH=3CH ,  DPL=5FH ,  SP=4FH
7.假定,SP=60H,A=30H,B=70H,执行下列指令后,SP的内容为( ),61H单元的内容为( ),62H单元的内容为( )。
        PUSH    A
        PUSH    B答:62H ,  30H ,  70H
8.计算下面子程序中指令的偏移量和程序执行的时间(晶振频率为 12MHz)。
MOV    R3,#15H        ;1个机器周期
DL1:MOV    R4,#255    ;1个机器周期
DL2:MOV    P1,R3    ;2个机器周期
DJNZ    R4,DL2        ;2个机器周期
DJNZ    R3,DL1        ;2个机器周期
RET                ;2个机器周期
答:15348us  析:((2+2)×255+1+2)×15+1+2=15348us
9. 假定A=83H,(R0)=17H,(17H)=34H,执行以下指令后,A的内容为( )。
    ANL    A,#17H
    ORL    17H,A
    XRL    A,@R0
    CPL        A  答:0CBH
10. 如果(DPTR)=507BH,(SP)=32H,(30H)=50H,(31H)=5FH,(32H)=3CH,则执行下列指令后:DPH内容为(    ),DPL内容为(    ),SP内容为(    )。
POP        DPH;
POP        DPL;
POP        SP;
答:(DPH)= 3CH,(DPL)=5FH,(SP)=50H
11.假设外部数据存储器2000H单元的内容为80H,执行下列指令后,累加器A中的内容为(  )。
MOV            P2,#20H
MOV            R0,#00H
MOVX            A,@R0
答:累加器A中的内容为(80H)
12.阅读下列程序段并回答问题 。(1).该程序执行何种操作  (2).已知初值(60H)=23H,(61H)=61H,运行程序后62H内容       
  CLR  C
  MOV  A,#9AH
  SUBB  A,60H
  ADD A,61H
  DA  A
  MOV  62H,A答: 1)、该程序是单字节BCD码运算,是将(61H)—(60H)→62H
        2)、(62H)=38H
13.试编写1个程序,将内部RAM中45H单元的高4位清0,低4位置1。
答:MOV    A, 45H
        ANL    A, #0FH
        ORL    A, #0FH
        MOV    45H, A
14.试编写程序,查在内部RAM的30H~50H单元中是否有0AAH这一数据。若有,则将51H单元置为“01H”;若未到,则将51H单元置为“00H”。
答:START:    MOV    R0,#30H
                MOV    R2,#20H
        LOOP:    MOV    A,@R0
                CJNE    A,#0AAH,NEXT
                MOV    51H,#01H
                LJMP    EXIT
        NEXT:    INC        R0
                DJNZ    R2,LOOP
                MOV    51H,#00H
        EXIT:    RET
15. 编写程序,要求使用T0,采用方式2定时,在P1.0输出周期为400μs,占空比为10:1的矩形脉冲。
解:根据题意,从P1.0输出的矩形脉冲的高低电平的时间为10:1,则高低电平的时间分别为363.63μs和36.37μs。如果系统采用6MHz晶振的话,,因此高低电平输出取整,则约为364μs和36μs。编写程序如下:
ORG    0000H
        LJMP    MAIN
        ORG    000BH
        LJMP    IT0P
MAIN:MOV    TMOD,#02H    ;定时器/计数器T0为定时方式2
MOV    TL0,#4AH    ;定时364μs初值赋值
SETB    TR0        ;启动T0,开始计数
SETB    ET0    ;允许T0中断
SETB    EA    ;CPU开中断
SETB    P1.0
WAIT:    AJMP    WAIT
IT0P:    CLR        EA
CLR        P1.0            ;关中断
        MOV    R0,#9
DLY:    DJNZ    R0,DLY        ;延时26μs
MOV    TL0,#4AH    ;定时364μs初值赋值
        SETB    P1.0
        SETB    EA
        RETI
16. 设在外部RAM中有三个连续单元2001H,2002H,2003H,其中2001H和2002H单元中分别存放两个8位无符号二进制数,比较这两个数的大小,然后将大数送到2003H单元。
COMPARE:MOV DPTR, #2001H
MOVX A , @DPTR
MOV  R0,A
INC DPTR
MOVX  A,@DPTR
SUBB A ,R0
JNC  LOOP
MOV  A, R0
INC DPTR
MOVX  @DPTR ,A
RET
LOOP:INC DPTR
MOVX  @DPTR ,A
RET
  17.将内部RAM  40H开始的10个单元,搬移到50H开始的10个单元中。
MOV R0,#40H
MOV R1,#50H
MOV R2, #10
LOOP1:MOV  A, @R0
MOV  @R1,A
INC  R0
INC  R1
DJNZ R2 ,LOOP1
RET
18. 设单片机晶振频率为6MHz,使用定时器0,以工作方式2,在P1.5引脚输出一个周期为200us连续方波?
解:  MOV  TMOD,#02H
  MOV  TH0, #0CEH
MOV  TL0 ,#0CEH
SETB TR0
LOOP:  JBC TF0,LOOP1
      AJMP LOOP
单片机编程100例详解LOOP1: CPL  P1.0
19. 编写一段程序,功能要求为:当P1.0引脚的电平正跳变时,对P1.1的输入脉冲进行计数;当P1.2引脚的电平负跳变时,停止计数,并将计数值写入R0、R1(高位存R1,低位存R0)。
答:将P1.1的输入脉冲接入INT0,即使用T0计数器完成对P1.1口的脉冲计数。编写程序如下:
ORG    0000H
        LJMP    MAIN
        ORG    000BH
        LJMP    IT0P
MAIN:    JNB        P1.0,MAIN
MOV    TMOD,#05H    ;定时器/计数器T0为计数方式1
SETB    TR0            ;启动T0,开始计数
SETB    ET0            ;允许T0中断
SETB    EA            ;CPU开中断
WAIT:    JB        P1.2,WAIT
        CLR        EA
        CLR        TR0
        MOV    R1,TH0
        MOV    R0,TL0
    AJMP    $
IT0P:    INC        R2
        RETI
20.试编写一个程序(例如将05H和06H拼为56H),设原始数据放在片外数据区2001H单元和2002H单元中,按顺序拼装后的单字节数放入2002H。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。