单片机课后习题解答_第1页
单片机课后习题解答_第2页
单片机课后习题解答_第3页
单片机课后习题解答_第4页
单片机课后习题解答_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第二章单片机结构及原理

LMCS-51单片机内部包含哪些主要功能部件?它们的作用是什么?

答(1)一个8bitCPU是微处理器的核心,是运算和逻辑计算的中心.

(2)片内震荡器及时钟电路:提供标准时钟信号,所有动作都依据此进行。

(3)4KROM程序存贮器:存贮程序及常用表格。

(4)128BRAM数据存贮器:存贮-•些中间变量和常数等.

(5)两个16bit定时器/计数器:完全硬件定时器

(6)32根可编程I/O口线:标准8位双向(4个)I/O接口,每一条I/O线都能独立地作输入或输出.

(7)一个可编程全双工串行口.

(8)五个中断源。

2、什么是指令?什么是程序?

答:指令是规定计算机执行某种操作的命令.

程序是根据任务要求有序编排指令的集合.

3、如何认识89s51/52存储器空间在物理结构上可以划分为4个空间,而在逻辑上又可以划分为3个空间?

答:89s51/52存储器空间在物理结构上设有4个存储器空间:片内程序存储器、片外程序存储器、片内数据存

储器、片外数据存储器.在逻辑上有3个存储器地址空间:片内、片外统一的64KB程序存储器地址空间,片内256

B数据存储器地址空间,片外64KB的数据存储器地址空间.

4、开机复位后,CPU使用的是哪组工作寄存器?他们的地址是多少?CPU如何确定和改变当前工作寄存器组?

答:开机复位后,CPU使用的是第0组工作寄存器,地址为00H~07H,CPU通过改变状态字寄存器PSW中的RSO和

RS1来确定工作寄存器组.

5、什么是堆栈?堆栈有何作用?在程序设计时,有时为什么要对堆栈指针SP重新赋值?如果CPU在操作中要使用

两组工作寄存器,SP应该多大?

答:堆栈是一个特殊的存储区,主要功能是暂时存放数据和地址,通常用来保护断点和现场.堆栈指针SP复位后

指向07"单元,OOH~1FH为工作寄存器区,20H~2FH为位寻址区,这些单元有其他功能,因此在程序设计时,需

要对SP重新赋值.如果CPU在操作中要使用两组工作寄存器,SP应该至少设置为0FH。

6、89S51/52的时钟周期、机器周期、指令周期是如何分配的?当振荡频率为8MHz时,一个单片机周期为多少微

秒?

答:时钟周期为时钟脉冲频率的倒数,他是单片机中最基本的、最小的时间单位.机器周期是指完成一个基本操作

所需要的时间,一个机器周期由12个时钟周期组成.指令周期是执行一条指令所需要的时间,由若干个机器周期

组成。

若fosc=8MHz,则一个机器周期=1/8*12us=l.5us

7、89s51/52扩展系统中,片外程序存储器和片外数据存储器共处同一地址空间为什么不会发生总线冲突?

答:访问片外程序存储器和访问数据存储器使用不同的指令用来区分同一地址空间.

8、程序状态字寄存器PSW的作用是什么?常用状态标志有哪些位?作用是什么?

答:程序状态字PSW是8位寄存器,用于存放程序运行的状态信息,PSW中各位状态通常是在指令执行的过程中自

动形成的,但也可以由用户根据需要采用传送指令加以改变.各个标志位的意义如下:

PSW.7(C,):进位标志位.

PSW.6(AC):辅助进位标志位,又称为半进位标志位.

PSW.5(F0):用户标志位。

PSW.4、PSW.3(RS1和RS0):寄存器组选择位。

PSW.2(0V):溢出标志位.

PSW.1(空缺位):此位未定义.

PSW.0(P):奇偶校脸位.

9、位地址7cH和字节地址7cH有何区别?位地址7cH具体在内存中什么位置?

答:字节地址7cH是片内数据存储器中的一个地址单元,该地址单元中可以存放8位二进制数,位地址7cH是内部

数据存储器中位寻址区中的一位,该地址单元中可以存放1位二进制数。位地址7cH具体在片内数据存储器字节地

址为2FH中的第4位(2FH.4).

10、89s51/52中4个I/O端口的作用是什么?89s51/52的片外三总线是如何分配的?

答:I/O端口是单片机与外界联系的重要通道,实现与外部设备的信息的传输。总线分配:片外数据总线(8根)

通过P0口输出,片外地址总线(16根)通过P0口(低8位)和P2口(高8位)输出,片外控制总线(PSEN,ALE,

RD,WR,EA)主要通过P3口。

11、89s51/52中4个I/O端口在结构上有何异同?

89s51/52单片机的4个I/O口在结构上是基本相同的,但又各具特点。这四个端口都是8位双向口,每个端口

都包括一个锁存器、一个输出驱动器和输入缓冲器.在无片外扩展存储器的系统中,这四个端口的每一位都可以作

为双向通用I/O端口使用.在作为一般的通用I/O输入时,都必须先向锁存器写入“1”,使输出驱动场效应管FET

截止,以免误读数据。各自特点如下:

(1)POo为双向8位三态1/0□,它既可作为通用I/O口,又可作为外部扩展时的数据总线及低8位地址总

线的分时复用口.作为通用I/O口时,输出数据可以得到锁存,不需外接专用锁存器;输入数据可以得到缓冲,增

加了数据输入的可靠性。每个引脚可驱动8个TTL负载.

(2)P1口为8位准双向I/O0,内部具有上拉电阻,一般作通用I/O口使用,它的每一位都可以分别定义为

输入线或输出线,作为输入时,锁存器必须置1,每个引脚可驱动4个TTL负载.

(3)P2口为8位准双向1/0□,内部具有上拉电阻,可直接连接外部I/O设备。它与地址总线高8位复用,

可驱动4个TTL负载。一般作为外部扩展时的高8位地址总线使用。

(4)P3口为8位准双向I/O口,内部具有上拉电阻,它是双功能复用口,每个引脚可驱动4个TTL负载.作为通

用I/O口时,功能与Pier相同,常用第二功能。

12、复位的作用是什么?有几种复位方法?复位后单片机的状态如何?

答:复位是单片机的初始化操作。单片机在RST引脚产生两个机器周期(即24个时钟周期)以上的高电平即可实

现复位.主要的复位方法有上电自动复位和按键手动复位两种.按键手动复位又分:按键电平复位和按键脉冲复位.

第三章指令系统

1、简述下列名词术语的基本概念:指令、指令系统、程序、汇编语言指令

答:指令:规定单片机进行某种操作的命令称为指令.

指令系统:单片机能够执行的各种指令的集合.

程序:一系列指令的有序集合称为程序.

汇编语言指令:用助记符形式来表示机器指令。

2、80c51单片机有哪几种寻址方式?这几种寻址方式是如何寻址的?

答:共7种寻址方式,分别为:寄存器寻址,直接寻址,寄存器间接寻址,立即寻址,变址寻址,位寻址和相对寻

址.

寄存器寻址方式:由指令指出某一寄存器的内容做为操作数。

直接寻址方式:指令中操作数直接以单元地址的形式给出.

寄存器间接寻址方式:寄存器间接寻址方式,寄存器中存放的则是操作数的地址,即操作数是通过寄存器间

接得到的.

立即寻址方式:操作数在指令中直接给出.

变址寻址方式:变址寻址是为了访问程序存储器中的数据和表格。MCS-51的变址寻址是以DPTR或PC作基址

寄存器,以累加器A作变址寄存器,并以两者内容相加形成的16位地址做为操作数地址,以达到访问数据和表格

的目的。

位寻址方式:指对片内RAM的位寻址区和某些可寻址的特殊功能寄存器进行位操作的寻址方式.

相对寻址方式:相对寻址方式是为解决程序转移而专门设置的,为转移指令所采用.

3、要访问特殊功能寄存器和片外数据寄存器,应采用哪些寻址方式?

答:访问特殊功能寄存器可以采用直接寻址、立即寻址、寄存器寻址和位寻址(针对可以进行位寻址的特殊功能寄

存器)方式.访问片外数据存储器可采用寄存器间接寻址方式.

4.80c51单片机的指令系统可以分为哪几类?说明各指令的功能.

答:51单片机指令系统按功能可分为5类:

(1)数据传送指令主要进行数据的传送、交换等;

(2)算术运算指令主要进行基本的加减乘除运算;

(3)逻辑运算指令主要实现逻辑运算与移位运算;

(4)控制转移指令主要是实现对程序流程的控制;

(5)位操作指令

5、外部数据传送指令有哪几条?有和区别?

答:外部数据传送指令有读指令和写指令两类,每类指令的寻址范围不同,分别为:

读外部存储器指令:MOVXA,3Ri;寻址范围为256字节

MOVXA,fflDPTR;寻址范围为64K字节

写外部存储器指令:MOVXfflRi,A;寻址范围为256字节

MOVXMPTR,A;寻址范围为64K字节

6、在89S51片内RAM中,已知(30H)-38H,(38H)-40H,(40H)-48H,(48H)-90H,请分别分析下段程序按序执

行后的结果。

MOVA,40H;A=48H

MOVRO,A;R0=48H

MOVPl,#OFFH;P1=FFH

MOV4R0,30H;(48H)=38H

MOVDPTR,#1246H;DPTR=1246H

MOV4OH,38H;(4OH)=4OH

MOVRO,30H;R0=38H

MOV9OH,RO;(90H)=

MOV48H,#30H;(48H)=30H

MOVA,QRO;A=40H

MOVP2,Pl;P2=38H

7、略

8、DAA指令的作用是什么?怎样使用?

答:对十进制BCD数作加法时进行调整,当结果的低4位A0~A3>9,或半进位AC=1,则A0~A3+6,否则不加;当

结果的高4位A4~A7>9,或进位CY=1,则A4-A7+6,否则不加;这条指令是在进行BCD码加法运算时,跟在“ADD”

和“ADDC”指令之后,用来对BCD码的加法运算结果自动进行修正,使其仍为BCD码表示形式.

9、试编程将片外数据存储器60H中的内容传送到片内RAM54H单元中.

答:MOVRO,#60H

MOVXA,BRO

MOV54H,A

10、试编程将寄存器R7的内容传送到R1中去.

答:MOVA,R7

MOVRI,A

11、已知当前PC值为210H,请用两种方法将程序存储器2F0H中的常数送入累加器A中.

答:(1)以程序计数器PC作为基址寄存器

MOVA,#OEOH

MOVCA,fflA+PC

(2)以数据指针DPTR作为基址寄存器

MOVDPTR,#02F0H

MOVA,#00H

MOVCA,QA+DPTR

12、试说明下段程序中每条指令的作用,并分析当指令执行完后,R0中的内容是什么?

MOVRO,#0A7H;R0=A7H,立即数送寄存器RO

XCHA,RO;A=A7H,累加器A中的数据与R0中的数据进行交换

SWAPA;A=7AH,累加器A中的高低四位进行交换

XCHA,RO;R0=7AH,数据交换回R0

13、请用两种方法实现累加器A与寄存器B的内容交换。

答:(1)MOVRO,A

MOVA,B

MOVB,RO

(2)MOVRO,B

XCHA,RO

14、试编程将片外RAM中40H单元的内容与RI的内容交换。

答:MOVRO,#40H

MOVXA,QRO

XCHA,RI

MOVX向RO,A

15、已知:A=0C9H,B=8DH,CY-1.

执行指令ADDCA,B结果如何?A=57H,CY=1,OV=1,AC=1,P=1

执行指令SUBBA,B结果如何?A=3BH,CY=0,AC=1,OV=1

16、试编程将片外RAM中30H和31H单元中的内容相乘,结果存放在32H(低位)和33H(高位)单元中。

答:MOVRO,#30H

MOVXA,QRO

MOVB,

INCRO

MOVXA,BO

MULAB

INCRO

MOVX⑪RO,A

MOVA,

INCRO

MOVX®R0,A

17、试用3种方法将累加器A中的无符号数乘2.

答:(1)MOVRO,A

ADDA,RO

(2)MOVB,#2

MULAB

(3)RLA

18、分析依次执行下列指令的结果:

MOV30H,#0A4H;(30H)=A4H

MOVA,#0D6H;A=D6H

MOVRO,#30H;R0=30H

MOVR2,#47H;R2=47II

ANLA,R2;A=46H

ORLA,砒0;A=E6H

SWAPA;A=6EH

CPLA;A=91H

XRLA,#OFFH;A=6EH

ORL30H,A;(30H)=EEH

19、求下列指令执行后,累加器A及PSW中进位CY、奇偶位P和溢出位0V的值。

(1)当A=5BH时;ADDA,#8CH

(2)当A=5BH时;ANLA,#7AH

(3)当A=5BH时;XRLA,#7FH

(4)当A=5BH,CY=1时;SUBBA,#0E8H

答:(1)A=E7H,CY=1,P=0,ov=o

(2)A=5AH,P=0

(3)A=24H,P=0

(4)A=72H,CY=1,P=0,OV=0

20、把累加器A中的低4位数据送到外部数据存储器的2000H单元.

答:ANLA,#OFH

MOVDPTR,#2000H

MOVXo)DPTR,A

21、试说明指令CJNBBl,#7AH,10H的作用,若本指令地址为25OH,其转移地址是多少?

答:指令作用:如果以R1内容为地址的单元中的数据等于7AH,则程序顺序执行,否则转移后继续执行。若本指令

地址为250H,则转移地址为250H+03H+10H=263H。

22、将累加器A中的数据由0递增,加到50,结果在累加器A中。

答:CLRA

MOVRO,#50

LI:INCA

DJNZRO,LI

23、试说明压栈指令和弹栈指令的作用及执行过程。

答:压栈(入栈或进栈)指令的作用是将数据存入堆栈中,其执行过程是先将堆栈指针SP的内容加1,然后将直接

地址单元中的数据压入SP指向的单元中。若数据已推入堆栈,则SP指向最后推入数据所在的存储单元(即指向栈

顶)。

弹栈(出栈)指令的作用是将数据从堆栈中取出,其执行过程为先将堆栈指针SP所指出单元的内容送入直接

寻址单元中,然后将SP的内容减1,此时SP指向新的栈顶。

24、下述程序执行后,SP=?,A=?,B=?0

ORG2000H

MOVSP,#40H

MOVA,#3OH

LCALL250H;下条指令地址2008H送41H、42H,SP=42H

ADDA,#10H

MOVB,A;地址为200AH

LI:SJMPL1

ORG250H

MOVDPTR,#200AH

PUSHDPL;SP+1=43H,DPL-*(43H)

PUSHDPH;SP+1=44H,DP1I-*(44H)

RET;200AH->PC

答:上述程序执行后,SP=42H,A=30H,B=30Ho

25、发光二极管点亮规律:先是第1和第8个亮,延时一段时间后,第2和第7个亮,延时后,再是第3和第6个

亮,延时后,最后是第4和第5个点亮,延时后循环。

26、若系统晶振频率为6MHz,求子程序DELAY的延时时间,若想加长或缩短时间,应该怎样修改?

答:DELAY:MOVR2,#0FAH

L1:MOVR3,#0FAH

L2:DJNZR3,L2

DJNZR2,LI

RET

总时间计算:T=4ps+(250x4ps+4ps)x250+4ps=251.008ms

估算:T=250x4psx250=250ms

若想加长延时时间,可以增加循环次数或再加一重循环;

若想减小延时时间,可以减少循环次数或较少一重循环。

27、P1口连接8个共阳极连接的发光二极管,是编制灯亮移位程序。

答:MOVA,#OFEH

LI:MOVPl,A

RLA

LCALLDELAY;DELAY子程序同上题

SJMPLI

28、试编一程序,将外部数据存储器2100H单元中的高4位置“1”,其余位清“0”。

答:MOVDPTR,#2100H

MOVXA,aJDPTR

ORLA,#OFOH

ANLA,#0F0H

MOVX0DPTR,A

29、试编程将片内数据存储器40H单元的第0为和第7位置1,其余取反.

答:MOVA,40H

CPLA

SETBACC.0

SETBACC.7

MOV40H,A

30、将A.5与80H位相与的结果,通过Pl.4输出.

MOVC,80H

ANLC,ACC.5

MOVPL4,C

31、请用位操作指令,求下列逻辑方程。

(1)PI.7=ACC.0X(B.0+P2.1)+P32

MOVc,B.0

ORLC,P2.1

ANLC,ACC.0

ORLC,/P3.2

MOVPl.7,C

(2)PSW.5=P1.3xACC.2+B.5xPl.1

MOVC,Pl.3

ANLC,ACC.2

MOV20H,C

MOVC,B.5

ANLC,/Pl.1

ORLC,2OH

MOVPSW.5,C

(3)P2.3=Pl.5xBA+ACC.lxPl.0

MOVC,B.4

ANLC,/Pl.5

MOV20H,C

MOVC,Pl.0

ANLC,/ACC.7

ORLC,20H(今下一行)MOVP2.3,C

第四章汇编语言程序设计

1、编程将片内40H~60H单元中的内容送到以3000H为首的存储区内。

答:MOVRI,#40H

MOVR2,#21H

MOVDPTR,#3000H

LI:MOVA,0R1

MOVXolDPTR,A

INCRI

INCDPTR

DJNZR2,LI

2、编程计算下列算式的程序

(1)23H+45H+ABH+03H=

MOVA,#23H

ADDA,#45H

ADDA,#OABH

XCIIA,B;溢出处理

ADDCA,#0011

XCHA,B

ADDA,#03H;A中为结果低位,B中为高位

(2)CDH+15H-38H-46H=

MOVA,#OCDH

ADDA,#15H

SUBBA,#38H

SUBBA,#46H

(3)1234H+8347H=

MOVA,#34H

ADDA,#47H

MOV30H,A

MOVA,#12H

ADDCA,#83H

MOV31,A;30H存结果低位,31H存结果高位

(4)AB123H-43ADCH=

CLRC

MOVA,#23H

SUBBA,DCH

MOV30H,A

MOVA,#OB1H

SUBBA,#3AH

MOV31H,A

MOVA,#0AH

SUBBA,,#04H

MOV32H,A;30H为低位,32H为高位

3、设有两个4位BCD码,分别存放在23H、22H单元和33H、32H单元中,求他们的和,并送入43H、42H单元中(低

位在低字节,高位在高字节)。

答:MOVA,22H

ADDA,32H

MOV42H,A

MOVA,23H

ADDCA,33H

MOV43H,A

4、略

5、编程计算片内RAM区50H~59H单元中数的平均值,结果存放在5AH中。

答:MOVRO,#8

MOVRI,#50H

MOVA,#00H

LI:ADDA,0R1

INCRI

DJNZRO,LI

MOVB,#8

DIVAB

MOV5AH,A

6、编写计算下式的程序。设乘积和平方结果均小于255.a、b值分别存在片外3001H和3002H单元中,结果存于

片外3000H单元中。

25,a=b

(i)y=<axb<b

a+b,a>b

MOVDPTR,#300111

MOVXA,QDPTR

MOV30H,A;a暂存30H单元

INCDPL

MOVXA,tODPTR

CJNEA,30H,LI;是否a=b

MOVA,#25

SJMPSAVE

LI:JNCL2

MOVB,30H

MULAB

SJMPSAVE

L2:MOVB,A

MOVA,30H

DIVAB

SAVE:MOVDPTR,#3000H

MOVXtiJDPRT,A

(o+/?)2+10,(a+b)2<10

(2)y=,(a+6)2,(a+&)2=10

(«+Z?)2-10,(a+b)2>10

MOVDPTR,#3001H

MOVXA,0DPTR

MOV30H,A

INCDPTR

MOVXA,tiJDPTR

ADDA,30H

MOVB,A

MULAB;(a+b)

MOV31H,A

CJNEA,#10,LI

SJMPSAVE

LI:JCL2

CLRC

SUBBA,#10

SJMPSAVE

L2:ADDA,#10

SAVE:MOVDPTR,#3000H

MOVCoJDPTR,A

7、设有两个长度均为15的数组,分别存放在以200H和210H为首地址的存储区中,试编程求其对应项之和,结果

存放到以220H为首地址的存储区中。

答:MOVDPH,#02H

MOVRI,#15

MOVR2,#00H;数组1首地址低位

MOVR3,#10H;数组2首地址低位

MOVR4,#20H;和首地址低位

MOVDPL,R2

MOVXA,④DPTR

MOVRI,A

MOVDPL,R3

MOVXA,QDPTR

ADDA,RI

MOVDPL,R4

MOVX0DTPR,A

INCR2

INCR3

INCR4

DJNZRI,LI

SJMP$

8、设有100个无符号数,连续存放在以2000H为首地址的存储区中,试编程统计正数、负数和零的个数。

答:MOV3OH,#00H;正数计数器

MOV31H,#00H;负数计数器

MOV32H,#00H;零计数器

MOVDPTR,#2000H

MOVRI,#100

L4:MOVXA,WPTR

INCDPTR

CJNEA,#0,LI

INC32H

SJMPL2

LI:JCL3

INC3OH

SJMPL2

L3:INC31H

L2:DJNZRI,L4

SJMP$

9、将片外数据存储器地址为1000H~1030H的数据块,全部搬迁到片内RAM30H~60H中,并将原数据块区域全部

清零.

答:M0VR0,#30H

MOVR2,#31H

MOVDPTR,#1000H

LP:MOVXA,向DPTR

MOV©RO,A

ANDA,#00H

MOVXQDPTR,A

INCR0

INCDPTR

DJNZR2,LP

SJMP$

10、试编写一子程序,是RI、R0指向的两个片外RAM连续单元中的高4位二进制数,合并成一个字节,装入累加

器A中。已知R0指向低地址,并要求该单元高四位放在A中高四位.

答:MOVXA,0R1

ANLA,#OFOH

SWAPA

MOVR2,A

MOVXA,QRO

ANLA,#OFOH

ORLA,R2

11、试编程把以2040H为首地址的连续50个单元的无符号数按降序排列,存放到以3000H为首地址的存储区中.

答:MOVR2,#50

MOVR3,#20H

MOVR4,#40H;源地址

MOVR5,#30H

MOVR6,#00H;目的地址

SEND:MOVDPH,R3;SEND将2040H数据块移入3000H存储区

MOVDPL,R4

MOVXA,5)DPTR

INCDPTR

MOVR3,DPH

MOVR4,DPL

MOVDPH,R5

MOVDPL,R6

MOVX0DPTR,A

INCDPTR

MOVR5,DPH

MOVR6,DPL

DJNZR2,SEND

MOVR2,#49;重复次数

CMP1:MOVDPTR,#3000H

MOVR3,#49;比较次数

CMP2:MOVXA,aJDPTR

MOVB,A

INCDPTR

MOVXA,WPTR

CJNEA,B,LI

LI:JCNOMOVE

MOV30H,A

CLRC

MOVA,DPL

SUBBA,#0111

MOVDPL,A

MOVA,30H

MOVXQDPTR,A

INCDPTR

MOVA,B

MOVXoJDPTR,A

NOMOVE:DJNZR3,CMP2;50个数重复一遍?

DJNZR2,CMP1;排序结束?

LJMP$

12、试编一查表程序,从首地址为2000H,长度为100的数据块中找出ASCII码为A,将其地址送到20A0H和20A1H

单元中.

答:MOVDPTR,#200011

MOVR2,#100

GO-ON:MOVXA,WDPTR

CJNEA,#41H,IFEND

MOVA,DPH

MOVB,DPL

MOVDPTR,#20A0H

MOVXoJDPTR,A

INCDPTR

XCHA,B

MOVXQDPTR,A

SJMPOVER

IFEND:INCDPTR

DJNZR2,GO-ON

OVER:SJMPOVER

13、设在200H~204H单元中,存放5个压缩BCD码,编程将他们转换成ASCII码,存放到以205H单元为首地址的

存储区.

答:MOVR2,#05H

MOVR3,#02H

MOVR4,#00H

MOVR5,#02H

MOVR6,#05H

CHLP:MOVDPH,R3

MOVDPL,R4

MOVXA,aJDPTR

INCDPTR

MOVR3,DPH

MOVR4,DPL

MOVB,A

SWAPA

ANLA,#0FH

ORLA,#30H

MOVDPH,R5

MOVDPL,R6

MOVX®DPTR,A

INCDPTR

MOVA,B

ANLA,#0FH

ORLA,#3OH

MOVXoJDPTR,A

MOVR5,DPH

MOVR6,DPL

DJNZR2,CHLP

14、有一无符号数据块长度在30H单元中,其首地址为31H单元,求出数据块中最大值,并存入40H中.

答:MOVRO,#31H

MOVRI,3OH

MOV40H,#00H

LOOP:MOVA,砒0

CJNEA,40H,LI

SJMPAGAIN

L1:JNCL2

SJMPAGAIN

L2:MOV40H,A

AGAIN:INCRO

DJNZRI,LOOP

SJMP$

15、略

16、在以2000H为首地址的存储区内,存放20个用ASCII码表示的0~9之间的数,试编程,将它们转换成BCD码,

并以压缩BCD码的形式存在3000H~3009H单元中。

答:MOVR2,#10

MOVR3,#20H

MOVR4,#00H

MOVR5,#30H

MOVR6,#00H

LP:MOVDPH,R3

MOVDPL,R4

MOVXA,WDPTR

ANLA,#OFH

SWAPA

XCHA,B

INCDPTR

MOVXA,tODPTR

ANLA,#OFH

ORLA,B

INCDPTR

MOVR3,DPH

MOVR4,DPL

MOVDPH,R5

MOVDPL,R6

MOVX0DPTR,A

INCDPTR

MOVR5,DPH

MOVR6,DPL

DJNZR2,LP

SJMP$

17、试编程实现下列逻辑表达式功能。设PL7~PL0为8个变量的输入端,而其中PL7又作为变量的输出端。

;输入端定义

XOEQUPl.0

XIEQUPl.1

X2EQUPl.2

X3EQUPl.3

X4EQUPl.4

X5EQUP1.5

X6EQUP1.6

X7EQUP1.7

(1)y=x0X]元+月+X4X5X6+X;

MOVC,XO

ANLC,XI

ANLC,/X2

ORLC,X3

MOVOOH,C

MOVC,X4

ANLC,X5

ANLC,X6

ORLC,/X7

ORLC,OOH

MOVPl.7,C

(2)r=+x2x3x4+x5x6x7

MOVC,XO

ANLC,XI

CPLC

MOVOOH,C

MOVC,X2

ANLC,X3

ANLC,X4

CPLC

MOV01H,C

MOVC,X5

ANLC,X6

ANLC,X7

CPLC

ORLC,01H

CPLC

ORLC,OOH

MOVPl.7,C

18、略

19、略

20、试编写延时Is、lmin、lh子程序。

;单片机时钟fosc=12MHz,计算为近似值

;1s延时子程序

DLY-1S:MOVRO,#10

L3:MOVRI,#200

L2:MOVR2,#250

LI:DJNZR2,LI

DJNZRI,L2

DJNZRO,L3

RET

;延时Imin

DLY-1M:MOVR3,#60

L4:LCALLDLY_1S

DJNZR3,L4

RET

;延时lh

DLY-1H:MOVR4,#60

L5:LCALLDLY_1M

DJNZR4,L5

RET

21、用程序实现c=a2+b2.设a、b均小于10,a存在31H单元中,b存在32H单元中,c存33H单元。

答:ORG1000H

SR:MOVA,31H

ACALLSQR

MOVRI,A

MOVA,32H

ACALLSQR

ADDA,RI

MOV33H,A

SJMP$

;求平方子程序如下(采用查平方表的方法)

SQR:INCA

MOVCA,3A+PC

RET

TABLE:DB0,1,4,9,16

DB25,36,49,64,81

END

22、如何实现将内存单元40H-60H的数逐个对应传到片外2540H~2560H单元中?

答:MOVR0,#4011

MOVDPTR,#254011

MOVR2,#21H

LI:MOVA,M0

MOVXQDPTR,A

INCR0

INCDPTR

DJNZR2,LI

SJMP$

23、参考21题24、参考21题25、参考实验程序26、参考实验程序

第五章定时/计数器

1、89s51单片机内部有几个定时/计数器,他们有哪些专用寄存器组成?

答:89s51单片机内部有两个16位定时/计数器,为定时器0(T0)和定时器1(T1)。在定时器/计数器的16位的

计数器是由两个8位的专用寄存器THO、TLO,THETL1组成。

2、89s51单片机的定时/计数器有哪几种工作方式,各有什么特点?

答:定时器/计数器有四种工作方式:方式0,方式1,方式2,方式3.其中,方式3只适用于T0。

以TO为例:①方式0,16位寄存器只用了13位,TLO的高三位未用。由THO的8位和TLO的低5位组成一个

13位计数器;②方式1,和方式0的工作相同,唯一的差别是THO和TLO组成一个16位计数器;③方式2,把TLO

配置成一个可以自动恢复初值的8位计数器,THO作为常数缓冲器.THO由软件预置值.当TLO产生溢出时,一方

面使溢出标志TFO置1,同时把THO中的8位数据重新装入TLO中;④方式3,将使TLO和THO成为两个相互独立

的8位计数器,TLO利用T0本身的一些控制,它的操作与方式0和方式1类似。而TII0被规定为只用作定时器功能,

对机器周期计数,并借用了T1的控制位TR1和TF1。在这种情况下THO控制了T1的中断。这时T1还可以设置为方

式0~2,用于任何不需要中断控制的场合,或者用作串行口的波特率发生器-

3、定时/计数器用作定时方式时,其定时时间与哪些因素有关?作为计数时,对外界计数频率有何限制?

答:定时/计数器作定时时,其计数脉冲由系统振荡器产生的内部时钟信号12分频后提供.定时时间与时钟频率和

定时初值有关。

定时/计数器作计数时,由于确认1次负跳变要花2个机器周期,即24个振荡周期,因此外部输入的计数脉冲

的最高频率为系统振荡器频率的1/24。

4、当定时器T0用作方式3时,由

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论