51单片机考试常见试题分析题.docx
- 文档编号:29868284
- 上传时间:2023-08-03
- 格式:DOCX
- 页数:18
- 大小:20.12KB
51单片机考试常见试题分析题.docx
《51单片机考试常见试题分析题.docx》由会员分享,可在线阅读,更多相关《51单片机考试常见试题分析题.docx(18页珍藏版)》请在冰豆网上搜索。
51单片机考试常见试题分析题
四、程序分析及编程
1.设(A)=04H,(CY)=1,写出下列各条指令的结果。
RLA;(A)=08H
RRA;(A)=02H
RLCA;(A)=09H
RRCA;(A)=82H
2.设(A)=7AH,(R0)=30H,(30H)=A5H,(CY)=1,写出下列各条指令的结果。
MOVA,R0(A)=30H(R0)=30H
XCHA,R0(A)=30H(R0)=30H
XCHDA,@R0(A)=A5H(R0)=30H(30H)=30H
ADDA,#30H(A)=D5H(CY)=1
ADDCA,30H(A)=06H(CY)=1
SUBBA,#30H(A)=D5H(CY)=1
3.下列程序段的功能是什么?
PUSHA
PUSHB
POPA
POPB
答:
交换A、B的内容
4.已知程序执行前有A=02H,SP=52H,(51H)=FFH,(52H)=FFH。
下述程序执行后:
请问:
A=(),SP=(),(51H)=(),(52H)=(),PC=()。
POPDPH
POPDPL
MOVDPTR,#4000H
RLA
MOVB,A
MOVCA,@A+DPTR
PUSHA
MOVA,B
INCA
MOVCA,@A+DPTR
PUSHA
RET
ORG4000H
DB10H,80H,30H,50H,30H,50H
答:
(A)=50H,(SP)=50H,(51H)=30H,(52H)=50H,(PC)=5030H
5.假定A=83H,(R0)=17H,(17H)=34H,执行以下指令后,A的内容为()。
:
ANLA,#17H
ORL17H,A
XRLA,@R0
CPLA
答:
0CBH
6.如果DPTR=507BH,SP=32H,(30H)=50H,(31H)=5FH,(32H)=3CH,则执行下列指令后则:
DPH=(),DPL=(),SP=():
POPDPH
POPDPL
POPSP
答:
DPH=3CH,DPL=5FH,SP=4FH
7.假定,SP=60H,A=30H,B=70H,执行下列指令后,SP的内容为(),61H单元的内容为(),62H单元的内容为()。
PUSHA
PUSHB
答:
62H,30H,70H
8.计算下面子程序中指令的偏移量和程序执行的时间(晶振频率为12MHz)。
MOVR3,#15H;1个机器周期
DL1:
MOVR4,#255;1个机器周期
DL2:
MOVP1,R3;2个机器周期
DJNZR4,DL2;2个机器周期
DJNZR3,DL1;2个机器周期
RET;2个机器周期
答:
15348us
析:
((2+2)×255+1+2)×15+1+2=15348us
9.假定A=83H,(R0)=17H,(17H)=34H,执行以下指令后,A的内容为()。
ANLA,#17H
ORL17H,A
XRLA,@R0
CPLA
答:
0CBH
10.如果(DPTR)=507BH,(SP)=32H,(30H)=50H,(31H)=5FH,(32H)=3CH,则执行下列指令后:
DPH内容为(),DPL内容为(),SP内容为()。
POPDPH;
POPDPL;
POPSP;
答:
(DPH)=3CH,(DPL)=5FH,(SP)=50H
11.假设外部数据存储器2000H单元的内容为80H,执行下列指令后,累加器A中的内容为()。
MOVP2,#20H
MOVR0,#00H
MOVXA,@R0
答:
累加器A中的内容为(80H)
12.阅读下列程序段并回答问题。
(1).该程序执行何种操作?
(2).已知初值(60H)=23H,(61H)=61H,运行程序后62H内容()
CLRC
MOVA,#9AH
SUBBA,60H
ADDA,61H
DAA
MOV62H,A
答:
1)、该程序是单字节BCD码运算,是将(61H)—(60H)→62H
2)、(62H)=38H
13.试编写1个程序,将内部RAM中45H单元的高4位清0,低4位置1。
答:
MOVA,45H
ANLA,#0FH
ORLA,#0FH
MOV45H,A
14.试编写程序,查找在内部RAM的30H~50H单元中是否有0AAH这一数据。
若有,则将51H单元置为“01H”;若未找到,则将51H单元置为“00H”。
答:
START:
MOVR0,#30H
MOVR2,#20H
LOOP:
MOVA,@R0
CJNEA,#0AAH,NEXT
MOV51H,#01H
LJMPEXIT
NEXT:
INCR0
DJNZR2,LOOP
MOV51H,#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。
编写程序如下:
ORG0000H
LJMPMAIN
ORG000BH
LJMPIT0P
MAIN:
MOVTMOD,#02H;定时器/计数器T0为定时方式2
MOVTL0,#4AH;定时364μs初值赋值
SETBTR0;启动T0,开始计数
SETBET0;允许T0中断
SETBEA;CPU开中断
SETBP1.0
WAIT:
AJMPWAIT
IT0P:
CLREA
CLRP1.0;关中断
MOVR0,#9
DLY:
DJNZR0,DLY;延时26μs
MOVTL0,#4AH;定时364μs初值赋值
SETBP1.0
SETBEA
RETI
16.设在外部RAM中有三个连续单元2001H,2002H,2003H,其中2001H和2002H单元中分别存放两个8位无符号二进制数,比较这两个数的大小,然后将大数送到2003H单元。
COMPARE:
MOVDPTR,#2001H
MOVXA,@DPTR
MOVR0,A
INCDPTR
MOVXA,@DPTR
SUBBA,R0
JNCLOOP
MOVA,R0
INCDPTR
MOVX@DPTR,A
RET
LOOP:
INCDPTR
MOVX@DPTR,A
RET
17.将内部RAM40H开始的10个单元,搬移到50H开始的10个单元中。
MOVR0,#40H
MOVR1,#50H
MOVR2,#10
LOOP1:
MOVA,@R0
MOV@R1,A
INCR0
INCR1
DJNZR2,LOOP1
RET
18.设单片机晶振频率为6MHz,使用定时器0,以工作方式2,在P1.5引脚输出一个周期为200us连续方波?
解:
MOVTMOD,#02H
MOVTH0,#0CEH
MOVTL0,#0CEH
SETBTR0
LOOP:
JBCTF0,LOOP1
AJMPLOOP
LOOP1:
CPLP1.0
19.编写一段程序,功能要求为:
当P1.0引脚的电平正跳变时,对P1.1的输入脉冲进行计数;当P1.2引脚的电平负跳变时,停止计数,并将计数值写入R0、R1(高位存R1,低位存R0)。
答:
将P1.1的输入脉冲接入INT0,即使用T0计数器完成对P1.1口的脉冲计数。
编写程序如下:
ORG0000H
LJMPMAIN
ORG000BH
LJMPIT0P
MAIN:
JNBP1.0,MAIN
MOVTMOD,#05H;定时器/计数器T0为计数方式1
SETBTR0;启动T0,开始计数
SETBET0;允许T0中断
SETBEA;CPU开中断
WAIT:
JBP1.2,WAIT
CLREA
CLRTR0
MOVR1,TH0
MOVR0,TL0
AJMP$
IT0P:
INCR2
RETI
20.试编写一个程序(例如将05H和06H拼为56H),设原始数据放在片外数据区2001H单元和2002H单元中,按顺序拼装后的单字节数放入2002H。
答:
编程思路:
首先读取2001H的值,保存在寄存器A中,将寄存器A的高四位和低四位互换,再屏蔽掉低四位然后将寄存器A的值保存到30H中,然后再读取2002H的值,保存在寄存器A中,屏蔽掉高四位,然后将寄存器A的值与30H进行或运算,将运算后的结果保存在2002H中。
ORG0000H
MAIN:
MOVDPTR,#2001H;设置数据指针的初值
MOVXA,@DPTR;读取2001H的值
SWAPA
ANLA,#0F0H;屏蔽掉低四位
MOV30H,A;保存A
INCDPTR;指针指向下一个
MOVXA,@DPTR;读取2002H的值
ANLA,#0FH;屏蔽掉高四位
ORLA,30H;进行拼装
MOVX@DPTR,A;保存到2002H
END
21.编写程序,将外部数据存储器中的4000H—40FFH单元全部清零。
解:
本题主要考察了对外部数据块的写操作;编程时只要注意循环次数和MOVX指令的使用就可以了。
ORG0000H
MAIN:
MOVA,#0;送预置数给A
MOVR0,#0FFH;设置循环次数
MOVDPTR,#4000H;设置数据指针的初值
LOOP:
MOVX@DPTR,A;当前单元清零
INCDPTR;指向下一个单元
DJNZR0,LOOP;是否结束
END
22.编写程序,采用8255A的C口按位置位/复位控制字,将PC7置0,PC4置1,(已知8255A各端口的地址为7FFCH-7FFFH)。
解:
本题主要考察对8255A的C口的操作。
其方式控制字的高位为0时,低四位对C口进行置位。
由题目我们得到了方式控制字的地址为7FFFH。
ORG0000H
MAIN:
MOVDPTR,#7FFFH;控制字寄存器地址送DPTR
MOVA,#0EH;将PC7置0
MOVX@DPTR,A
MOVA,#09H;将PC4置1
MOVX@DPTR,A
END
23.试编写逻辑运算程序,功能为:
F=X(Y+Z);
F=XYZ
其中FXYZ均为位变量,依次存在以30H为首址的位寻址区中。
解
(1):
FBIT30H
XBIT31H
YBIT32H
ZBIT33H
LOG1:
MOVC,Y;Y→C
ORLC,Z;(Y+Z)→C
ANLC,X;X(Y+Z)→C
MOVF,C;X(Y+Z)→F
RET;
解
(2):
LOG2:
MOVC,Y;Y→C
ANLC,Z;YZ→C
ANLC,/X;XYZ→C
CPLC;XYZ→C
MOVF,C;XYZ→F
RET;
24.试编写程序,统计内RAM30H~50H单元中FFH的个数,并将统计结果存51H。
解:
编程如下:
LOKF:
MOV51H,#0;计数器清零
MOVR0,#30H;置数据区首址
LOP:
MOVA,@R0;读数据
CPLA;取反
JNZLP1;判FFH,非FFH,转
INC51H;FFH,计数
LP1:
INCRO;指向下一数据
CJNER0,#51H,LOP;判循环
RET
25.试编写程序,找出外RAM2000H~200FH数据区中的最小值,并放入R2中。
解:
编程如下:
SECH:
MOVDPTR,#2000H;置外RAM数据区首址
MOVR2,#OFH;置外RAM数据区长度(N-1)
MOVXA,@DPTR;读第一个数据
MOVB,A;假设第一个数据为最小值
SLOP:
INCDPTR;指向下一个数据
MOVXA,@DPTR;读下一个数据
CJNEA,B,SLP1;新数据与最小值比较
SLP1:
JNCSLP2;新数据≥最小值,判断循环
MOVB,A;新数据<最小值,新数据→B
SLP2:
DJNZR2,SLOP;判循环结束否?
MOVR2,B;最小值→R2
RET
26.已知ROM中存有0~100的平方表,首地址为TABDS,试根据累加器A(≤100)中的数值查找对应的平方值,存入内RAM31H30H(双字节)。
解:
编程如下:
DSQR:
MOVDPTR,#TABDS;置ROM平方表首地址
ADDA,Acc;A×2→A
MOVCA,@A+DPTR;读平方值高8位
MOV31H,A;平方值高8位→31H
INCA;指向平方值低8位
MOVCA,@A+DPTR;读平方值低8位
MOV30H,A;平方值低8位→30H
RET
TABDS:
DW0,0,0,1,0,4,0,9,0,16,0,25,…,27H,10H;0~100平方表(双字节)
27.试编程实现3字节无符号数加法:
R7R6R5+R4R3R2→@R0(3个连续单元)。
解:
编程如下:
ADD3:
MOVA,R5
ADDA,R2;低位加
MOV@R0,A;存低位和
INCR0;修改存储单元
MOVA,R6;
ADDCA,R3;中位加
MOV@R0,A;存中位和
INCR0;修改存储单元
MOVA,R7;
ADDCA,R7;高位加
MOV@R0,A;存高位和
RET
28.试编写程序,将外部RAM2000H~20FH数据块,传送到3000H~30FFH区域。
解:
编程如下:
DMOV:
MOVDPTR,#2000H;置源数据区首址
MOVR2,#00H;置数据长度(256个)
DLOP:
MOVXA,@DPTR;读数据
MOVDPH,#30H;置目的数据区高8位地址
MOVX@DPTR,A;存数据
MOVDPH,#20H;置源数据区高8位地址
INCDPTR;修改源数据区地址
DJNZR2,DLOP;判循环结束否?
RET
29.从内RAM20H单元开始存有一组带符号数(补码),其个数已存放在1FH单元。
要求统计其中大于0,等于0和小于0的数的个数,并把统计结果分别存入ONE,TWO,THREE3个单元。
解:
编程如下:
ONEEQU30H
TWOEQU31H
THREEEQU32H
STOR:
MOVR0,#20H;置数据区首址
SLOP:
MOVA,@R0;读数据
JZLP1;数据=0,转
JBAcc.7,LP2;数据<0,转
INCONE;数据>0,ONE单元加1
LP0:
INCRO;指向下一数据
DJNZ1FH,SLOP;判统计结束否?
未结束循环
RET;统计结束,TWO单元加1
LP1:
INCTWO;数据=0,TWO单元加1
SJMPLPO;返回循环体
LP2:
INCTHREE;数据<0,THREE单元加1
SJMPLPO;返回循环体
30.设在内部数据存储器中存放有20个字节数据,其起始地址为M。
试编写程序,找出数0AH的存放地址,并送入N单元。
若OAH不存在,则将N单元清零。
解:
程序如下:
MEQU30H
NEQU2FH
SECH:
MOVR0,#M
MOVR1,#20
LOOP:
CJNE@R0,#0AH,LP1
MOVN,R0
RET
LP1:
INCR0
DJNZR1,LOOP
MOVN,#0
RET
31.试编写程序,求出内RAM20H单元中“1”的个数,并将结果存入21H单元。
解:
编程如下:
LOK1:
MOV21H,#O
MOVR2,#08H
MOVA,20H
LOP:
RLCA
JNCLP1
JNC21H
LP1:
DJNER2,LOP
RET
32.试编写统计数据区长度的程序,设数据区从内RAM30H开始,该数据区以0结束,统计结果送入2FH中。
解:
编程如下:
ADUP:
MOV2FH,#0
MOVR0,#30H
ALOP:
MOVA,@R0
JNZLP1
RET
LP1:
INC2FH
INCR0
SJMPALOP
33.从内RAM30H单元开始存放着一组无符号数,其个数存在21H单元中。
试编写程序,找出其中最小的数,并将其存入20H单元中。
解:
编程如下:
SECH:
MOVRO,#3OH
MOV20H,#FFH
SLOP:
MOVA,@R0
CJNEA,20H,NEXT
NEXT:
JNCSLP1
MOV20H,A
SLP1:
INCR0
DJNZ21H,SLOP
RET
34.用程序实现c=a2+b2。
设a2b2存于内RAM,AA,BB单元;c为双字节,存于内RAMCC,DD单元。
解:
该题可用于程序来实现。
通过两次调用查平方表子程序来得到a和b,并在主程序中完成相加。
编程如下:
AAEQU40H
BBEQU41H
CCEQU42H
DDEQU43H
FUNC:
MOVA,AA
LCALLDSQR
MOVDD,A
MOVCC,31H
MOVA,BB
LCALLDSQR
ADDA,DD
MOVDD,A
ADDCA,CC
MOVCC,A
RET
35.利用定时、计数器T1测量某正脉冲宽度,并存入内RAM31H30H。
设fosc=12MHz,脉冲从P3.3引脚输入,宽度小于65536us。
解:
编程如下:
PLUS:
MOVTMOD,#90H
MOVTH1,#0
MOVTL1,#0
JBP3.3,$
SETBTR1
JNBP3.3,$
JBP3.3,$
CLRTR1
MOV31H,THO
MOV30H,TLO
RET
36.设在内部RAM中50H开始有连续的10个单元,求这10个单元之和,结果放在60H,61H,低位放在60H,高位在61H.
解:
程序编写如下:
ORG0000H
ACALLADDTEN
WAIT:
AJMPWAIT
ADDTEN:
MOVR0,50H
MOVR1,#10
MOVA,#00H
MOV60H,A
MOV61H,A
LOOP1:
ADDA,@R0
INCR0
MOV60H,A
JCLOOP2
DJNZR1,LOOP1
RET
LOOP2:
MOVA,61H;
ADDA,#01H
DJNZR1,LOOP1
RET
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 51 单片机 考试 常见 试题 分析