单片机考试常见试题程序分析题Word文件下载.doc

上传人:聆听****声音 文档编号:470870 上传时间:2023-04-29 格式:DOC 页数:4 大小:100.50KB
下载 相关 举报
单片机考试常见试题程序分析题Word文件下载.doc_第1页
第1页 / 共4页
单片机考试常见试题程序分析题Word文件下载.doc_第2页
第2页 / 共4页
单片机考试常见试题程序分析题Word文件下载.doc_第3页
第3页 / 共4页
单片机考试常见试题程序分析题Word文件下载.doc_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

单片机考试常见试题程序分析题Word文件下载.doc

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

单片机考试常见试题程序分析题Word文件下载.doc

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

MOV R3,#15H ;

1个机器周期

DL1:

MOV R4,#255 ;

DL2:

MOV P1,R3 ;

2个机器周期

DJNZ R4,DL2 ;

DJNZ R3,DL1 ;

RET ;

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答:

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内容

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。

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

SETB P1.0

SETB EA

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

LOOP:

MOVX@DPTR,A

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口的脉冲计数。

JNB P1.0,MAIN

MOV TMOD,#05H ;

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

SETB TR0 ;

SETB ET0 ;

SETB EA ;

JB P1.2,WAIT

CLR EA

CLR TR0

MOV R1,TH0

MOV R0,TL0

AJMP $

INC R2

20.试编写一个程序(例如将05H和06H拼为56H),设原始数据放在片外数据区2001H单元和2002H单元中,按顺序拼装后的单字节数放入2002H。

编程思路:

首先读取2001H的值,保存在寄存器A中,将寄存器A的高四位和低四位互换,再屏蔽掉低四位然后将寄存器A的值保存到30H中,然后再读取2002H的值,保存在寄存器A中,屏蔽掉高四位,然后将寄存器A的值与30H进行或运算,将运算后的结果保存在2002H中。

ORG0000H

MAIN:

MOVDPTR,#2001H ;

设置数据指针的初值

MOVX A,@DPTR ;

读取2001H的值

SWAP A

ANL A,#0F0H ;

屏蔽掉低四位

MOV 30H,A ;

保存A

INC DPTR ;

指针指向下一个

读取2002H的值

ANL A,#0FH ;

屏蔽掉高四位

ORL A,30H;

进行拼装

MOVX @DPTR,A ;

保存到2002H

END

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

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

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

MOVA,#0;

送预置数给A

MOV R0,#0FFH ;

设置循环次数

MOV DPTR,#4000H;

LOOP:

MOVX @DPTR,A ;

当前单元清零

指向下一个单元

DJNZR0,LOOP;

是否结束

22.编写程序,采用8255A的C口按位置位/复位控制字,将PC7置0,PC4置1,(已知8255A各端口的地址为7FFCH-7FFFH)。

本题主要考察对8255A的C口的操作。

其方式控制字的高位为0时,低四位对C口进行置位。

由题目我们得到了方式控制字的地址为7FFFH。

ORG 0000H

MAIN:

MOV DPTR,#7FFFH ;

控制字寄存器地址送DPTR

MOV A,#0EH ;

将PC7置0

MOVX@DPTR,A

MOV A,#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

RET

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;

中位加

MOV@R0,A;

存中位和

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

SJMPLPO;

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

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

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

解:

程序如下:

MEQU30H

NEQU2FH

MOVR0,#M

MOVR1,#20

CJNE@R0,#0AH,LP1

MOVN,R0

RET

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

MOVR0,#30H

ALOP:

MOVA,@R0

JNZLP1

INC2FH

INCR0

SJMPALOP

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

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

MOVRO,#3OH

MOV20H,#FFH

MOVA,@R0

CJNEA,20H,NEXT

NEXT:

JNCSLP1

MOV20H,A

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

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.

程序编写如下:

ORG0000H

ACALLADDTEN

AJMPWAIT

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

1、请用数据传送指令来实现下列要求的数据传送。

(14分)

(1)把R0的内容送到R1

 

MOV 

A,R0

MOV 

R1,A

(2)内部RAM20H单元的内容传送到A中。

A,20H

(3)外部RAM2000H单元的内容送到R0。

DPTR,#2000H(1分)

MOVX 

A,@DPTR(1分)

R0,A 

(2分)

(4)外部ROM1000H单元的内容送内部RAM20H单元。

DPTR,#1000H

A,#00H(2分)

MOVCA,@A+DPTR

20H,A 

1.请将片外RAM20H—25H单元清零MOVR0,#20H

MOVR7,#06H

CLRA

MOVX@R0,A

INCR0

DJNZR7,LOOP

2.请将ROM3000H单元内容送R7

MOVDPTR,#3000H

MOVCA,@A+DPTR

MOVR7,A

1、设(A)=38H,R0=28H,(28H)=18H,执行下列程序后,(A)=0E7H

ORLA,#27H

ANLA,28H

XCHDA,@R0

CPLA

2、

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

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2