51单片机考试常见试题分析题Word文件下载.docx

上传人:b****6 文档编号:21113417 上传时间:2023-01-27 格式:DOCX 页数:15 大小:20.18KB
下载 相关 举报
51单片机考试常见试题分析题Word文件下载.docx_第1页
第1页 / 共15页
51单片机考试常见试题分析题Word文件下载.docx_第2页
第2页 / 共15页
51单片机考试常见试题分析题Word文件下载.docx_第3页
第3页 / 共15页
51单片机考试常见试题分析题Word文件下载.docx_第4页
第4页 / 共15页
51单片机考试常见试题分析题Word文件下载.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

51单片机考试常见试题分析题Word文件下载.docx

《51单片机考试常见试题分析题Word文件下载.docx》由会员分享,可在线阅读,更多相关《51单片机考试常见试题分析题Word文件下载.docx(15页珍藏版)》请在冰豆网上搜索。

51单片机考试常见试题分析题Word文件下载.docx

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单元的内容为()。

62H,30H,70H

8.计算下面子程序中指令的偏移量和程序执行的时间(晶振频率为12MHz)。

MOVR3,#15H;

1个机器周期

DL1:

MOVR4,#255;

DL2:

MOVP1,R3;

2个机器周期

DJNZR4,DL2;

DJNZR3,DL1;

RET;

15348us

析:

((2+2)×

255+1+2)×

15+1+2=15348us

9.假定A=83H,(R0)=17H,(17H)=34H,执行以下指令后,A的内容为()。

CPLA

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

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

MOVX@DPTR,A

RET

LOOP:

17.将内部RAM40H开始的10个单元,搬移到50H开始的10个单元中。

MOVR0,#40H

MOVR1,#50H

MOVR2,#10

LOOP1:

MOVA,@R0

MOV@R1,A

INCR0

INCR1

DJNZR2,LOOP1

18.设单片机晶振频率为6MHz,使用定时器0,以工作方式2,在P1.5引脚输出一个周期为200us连续方波?

MOVTMOD,#02H

MOVTH0,#0CEH

MOVTL0,#0CEH

SETBTR0

JBCTF0,LOOP1

AJMPLOOP

CPLP1.0

19.编写一段程序,功能要求为:

当P1.0引脚的电平正跳变时,对P1.1的输入脉冲进行计数;

当P1.2引脚的电平负跳变时,停止计数,并将计数值写入R0、R1(高位存R1,低位存R0)。

将P1.1的输入脉冲接入INT0,即使用T0计数器完成对P1.1口的脉冲计数。

JNBP1.0,MAIN

MOVTMOD,#05H;

定时器/计数器T0为计数方式1

JBP1.2,WAIT

CLREA

CLRTR0

MOVR1,TH0

MOVR0,TL0

AJMP$

INCR2

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;

指针指向下一个

读取2002H的值

ANLA,#0FH;

屏蔽掉高四位

ORLA,30H;

进行拼装

MOVX@DPTR,A;

保存到2002H

END

21.编写程序,将外部数据存储器中的4000H—40FFH单元全部清零。

本题主要考察了对外部数据块的写操作;

编程时只要注意循环次数和MOVX指令的使用就可以了。

MOVA,#0;

送预置数给A

MOVR0,#0FFH;

设置循环次数

MOVDPTR,#4000H;

LOOP:

当前单元清零

指向下一个单元

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

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:

ANLC,Z;

YZ→C

ANLC,/X;

XYZ→C

CPLC;

XYZ→F

24.试编写程序,统计内RAM30H~50H单元中FFH的个数,并将统计结果存51H。

编程如下:

LOKF:

MOV51H,#0;

计数器清零

MOVR0,#30H;

置数据区首址

LOP:

MOVA,@R0;

读数据

CPLA;

取反

JNZLP1;

判FFH,非FFH,转

INC51H;

FFH,计数

LP1:

INCRO;

指向下一数据

CJNER0,#51H,LOP;

判循环

25.试编写程序,找出外RAM2000H~200FH数据区中的最小值,并放入R2中。

SECH:

MOVDPTR,#2000H;

置外RAM数据区首址

MOVR2,#OFH;

置外RAM数据区长度(N-1)

MOVXA,@DPTR;

读第一个数据

MOVB,A;

假设第一个数据为最小值

SLOP:

INCDPTR;

指向下一个数据

读下一个数据

CJNEA,B,SLP1;

新数据与最小值比较

SLP1:

JNCSLP2;

新数据≥最小值,判断循环

MOVB,A;

新数据<最小值,新数据→B

SLP2:

DJNZR2,SLOP;

判循环结束否?

MOVR2,B;

最小值→R2

26.已知ROM中存有0~100的平方表,首地址为TABDS,试根据累加器A(≤100)中的数值查找对应的平方值,存入内RAM31H30H(双字节)。

解:

DSQR:

MOVDPTR,#TABDS;

置ROM平方表首地址

ADDA,Acc;

2→A

MOVCA,@A+DPTR;

读平方值高8位

MOV31H,A;

平方值高8位→31H

INCA;

指向平方值低8位

MOVCA,@A+DPTR;

读平方值低8位

MOV30H,A;

平方值低8位→30H

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;

中位加

存中位和

MOVA,R7;

ADDCA,R7;

高位加

存高位和

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;

29.从内RAM20H单元开始存有一组带符号数(补码),其个数已存放在1FH单元。

要求统计其中大于0,等于0和小于0的数的个数,并把统计结果分别存入ONE,TWO,THREE3个单元。

ONEEQU30H

TWOEQU31H

THREEEQU32H

STOR:

MOVR0,#20H;

MOVA,@R0;

JZLP1;

数据=0,转

JBAcc.7,LP2;

数据<0,转

INCONE;

数据>0,ONE单元加1

LP0:

INCRO;

DJNZ1FH,SLOP;

判统计结束否?

未结束循环

RET;

统计结束,TWO单元加1

INCTWO;

数据=0,TWO单元加1

SJMPLPO;

返回循环体

LP2:

INCTHREE;

数据<0,THREE单元加1

30.设在内部数据存储器中存放有20个字节数据,其起始地址为M。

试编写程序,找出数0AH的存放地址,并送入N单元。

若OAH不存在,则将N单元清零。

程序如下:

MEQU30H

NEQU2FH

MOVR0,#M

MOVR1,#20

CJNE@R0,#0AH,LP1

MOVN,R0

INCR0

DJNZR1,LOOP

MOVN,#0

31.试编写程序,求出内RAM20H单元中“1”的个数,并将结果存入21H单元。

LOK1:

MOV21H,#O

MOVR2,#08H

MOVA,20H

RLCA

JNCLP1

JNC21H

LP1:

DJNER2,LOP

32.试编写统计数据区长度的程序,设数据区从内RAM30H开始,该数据区以0结束,统计结果送入2FH中。

ADUP:

MOV2FH,#0

ALOP:

MOVA,@R0

JNZLP1

INC2FH

SJMPALOP

33.从内RAM30H单元开始存放着一组无符号数,其个数存在21H单元中。

试编写程序,找出其中最小的数,并将其存入20H单元中。

MOVRO,#3OH

MOV20H,#FFH

CJNEA,20H,NEXT

NEXT:

JNCSLP1

MOV20H,A

DJNZ21H,SLOP

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

ADDA,DD

ADDCA,CC

MOVCC,A

35.利用定时、计数器T1测量某正脉冲宽度,并存入内RAM31H30H。

设fosc=12MHz,脉冲从P3.3引脚输入,宽度小于65536us。

PLUS:

MOVTMOD,#90H

MOVTH1,#0

MOVTL1,#0

JBP3.3,$

SETBTR1

JNBP3.3,$

CLRTR1

MOV31H,THO

MOV30H,TLO

36.设在内部RAM中50H开始有连续的10个单元,求这10个单元之和,结果放在60H,61H,低位放在60H,高位在61H.

程序编写如下:

ACALLADDTEN

ADDTEN:

MOVR0,50H

MOVR1,#10

MOVA,#00H

MOV60H,A

MOV61H,A

ADDA,@R0

MOV60H,A

JCLOOP2

DJNZR1,LOOP1

LOOP2:

MOVA,61H;

ADDA,#01H

DJNZR1,LOOP1

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1