西华大学 单片机复习题集 答案更全

更新时间:2024-01-27 15:11:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

西华大学单片机习题

一.填空

1.在MCS-51单片机中,若采用6MHz晶振,则1个机器周期为 2us 。 2.若A中的内容为63H,则标志位P的值为 0 。

3.MCS-51单片机复位后,R4对应的存储单元的地址为 04H ,若RS1=1,RS0=0,R4对应的存储单元地址又为 14H 。

4.使用8031时,需将EA接 低 电平。

5.MCS-51单片机程序存储器的寻址范围为 64 KB,数据存储器的寻址范围为 0000H~FFFFH 。

6.11根地址线可以寻址 2^11(2KB) 个存储单元,16KB存储单元需要 14 根地址线。

7.写出下列每条指令源操作数的寻址方式:

MOV A , R0 寄存器寻址 ; MOV A , @R0 寄存器间接寻址 , MOVX A , @DPTR 基址寄存器间接寻址 ; MOVC A , @A+DPTR 基址寄存器加变址寄存器间接寻址 。

8.MCS-51单片机的串行口工作在方式0时,引脚P3.0的作用是 送出串行数据 ,引脚P3.1的作用是 送出移动脉冲 。 二.选择题

1.MCS-51单片机的串行口工作在方式1时,其波特率是( D )。 (A) 固定的,为fosc/32 (B) 固定的,为fosc/12

(C) 固定的,为fosc/64 (D) 可变的,由定时器/计数器1的溢出速率确定 2.在MCS-51单片机存储器扩展中,区分扩展的是片外程序存储器还是片外数据存储器的最可靠的方法是:( D )。

(A) 看其位于地址范围的低端还是高端 (B) 看其离CPU芯片距离的远近 (C) 看其芯片是ROM还是RAM

(D) 看其是与CPU的RD信号连接还是与PSEN信号连接 3.CPU对程序计数器PC的操作是( C )。

(A) 自动进行的 (B) 通过传送指令进行的 (C) 通过加1指令进行的 (D) 通过减1指令进行的 4.以下有关PC和DPTR的描述中错误的是( C )。 (A) DPTR是可以访问的而PC是不能访问的

(B) 它们都是16位的寄存器 (C) 它们都有自动加1功能 (D) DPTR可以分为两个8位的寄存器使用,但PC不能 5.PC的值是( C )。

(A) 当前正在执行指令前一条指令的地址 (B) 当前正在执行指令的地址

(C) 当前正在执行指令后一条指令的地址 (D) 控制器中指令寄存器的地址

6.假定堆栈指针的值为39H,在进行了一条子程序调用指令后,SP的值为( C )。

(A) 40H (B) 3AH (C) 3BH (D) 41H

7.在MCS-51单片机中,下列关于地址线的说法正确的是( C )。 (A) 具有独立的专用的地址线 (B) 由P0口和P1口的口线作地址线 (C) 由P0口和P2口的口线作地址线 (D) 由P1口和P2口的口线作地址线 8.MCS-51单片机在寄存器间接寻址方式中,寄存器中存放的是( B )。

(A) 操作数 (B) 操作数地址 (C) 转移地址 (D) 地址偏移量 9.对程序存储器的读操作,只能使用( D )。

(A) MOV指令 (B) PUSH指令 (C) MOVX指令 (D) MOVC指令

10.下列算术运算指令后可以进行十进制调整的是( C )。

(A) 加法和减法 (B) 乘法和除法 (C) 只有加法 (D) 只有减法

11.下列有关MCS-51单片机中断优先级控制的叙述中,错误的是( D )。 (A) 低优先级不能中断高优先级,但高优先级能中断低优先级 (B) 同级中断不能嵌套

(C) 同级中断请求按请求的先后顺序执行

(D) 多个同级的中断请求同时申请,将形成阻塞,系统无法相应 12.在MCS-51单片机中,需要外加电路实现中断撤除的是( D )。 (A) 定时中断 (B) 脉冲触发方式的外部中断 (C) 串行中断 (D) 电平触发方式的外部中断 13.CPU进行中断查询,查询的是( B )。 (A) 中断请求信号 (B) 中断标志位 (C) 中断允许控制位 (D) 外中断触发方式控制位

14.在MCS-51单片机的下列寄存器中,与定时器/计数器控制无关的是( C )。 (A) TCON (B) TMOD (C) SCON (D) IE 15.MCS-51单片机定时器/计数器在工作方式0下,其计数范围是( A )。 (A) 1~8192 (B) 0~8191 (C) 0~8192 (D) 1~65536 三.简答题

1.简述MCS-51单片机P0~P3口的功能。

答:P0:该端口为漏极开路的8位双向口,它为外部低8位地址线和8位数据线复用端口,驱动能力为8个LSTTL负载。

P1:它是一个内部带上拉电阻的8 位准双向口I/O口,P1 的驱动能力为4个LSTTL负载。

P2:它是一个内部带上拉电阻的8位准双向口I/O口,P2的驱动能力也为4个LSTTL负载。在访问外部存储器是作为8 位地址线。

P3:为内部带上拉电阻的8位准双向I/O口,P3口除了作为一般的I/O口使用之外,每一个引脚都具有第二功能。

2.MCS-51单片机的INT0、INT1引脚分别输入压力超限及温度超限中断请求信号,

定时器/计数器0作定时检测的定时时钟,现要求中断优先权排队的顺序为: 压力超限→温度超限→定时检测,请确定IE、IP的值。

答: D7 EA 1 D7 - 0 D6 - 0 D5 - 0 D4 PS 0 D3 PX1 0 D2 PX1 1 D1 PT0 0 D0 PX0 1 D6 - 0 D5 - 0 D4 ES 0 D3 ET1 0 D2 EX1 1 D1 ET0 1 D0 EX0 1 (1)中断控制寄存器各位定义: D7:CPU中断允许位EA,应设为1 D6:未定义,可为随意量,取为0

D5:定时器/计数器2中断允许位ET2,可取0 D4:串行口中断允许位ES, 可取0

D3:定时器/计数器1中断允许位ET1, 应取0 D2:外部中断1中断允许位EX1, 应取1

D1:定时器/计数器0中断允许位ET0, 应取1 D0:外部中断0中断允许位EX0, 应取1 故IE=87H

(2)由硬件确定的同一优先级中断源的优先权排队顺序如下: 由题意,根据IP各位的定义: D7:未定义,可为随意量,取为0 D6:未定义,可为随意量,取为0

D5:定时器/计数器2优先权选择位PT2,可取0 D4:串行口优先权选择位PS, 可取0

D3:定时器/计数器1优先权选择位PT1, 应取0

D2:外部中断1优先权选择位PX1, 应取1,应接温度超限信号

D1:定时器/计数器0优先权选择位PT0, 由于其优先级最低,所以应取0 D0:外部中断0优先权选择位PX0, 应取1,应接压力超限信号。 故IP=05H

综上:IE=87H;IP=05H

3.常用的I/O端口编址有哪两种方式?它们各有什么特点?MCS-51单片机采用的是何种编址方式?

答:一.独立编址方式:独立编址方式就是I/O地址空间和存储器地址空间分开编址。独立编址的优点是I/O地址空间和存储器地址空间相互独立,界限分明。但是,却需要设置一套专门的读写I/O的指令和控制信号。二.统一编址方式:这种编址方式是把I/O端口的寄存器与数据存储器单元同等对待,统一进行编址。统一编址的优点是不需要专门的I/O指令,直接使用访问数据存储器的指令进行I/O操作,简单、方便且功能强大。MCS-51单片机使用的是I/O和外部数据存储器RAM统一编址的方式。

4.简述数码管动态显示的工作原理。

答:静态显示方式时,各位的共阴极或共阳极连接在一起并接地,每位的断码线分别与一个8位的I/O口锁存器输出相连。如果送往各个LED数码管所显示字符的段码一经确定,则相应I/O锁存器锁存的段码输出将维持不变,直到送人另一个字符的段码为止。动态显示方式是指无论在任何时刻只有一个LED数码管处于显示状态,即单片机采用’扫描’方式控制各个数码管轮流显示。

5.指出下列指令中的错误指令:

MOV A , P1 MUL A , B MOV A , @R2

MOV R1 , R2 SUBB A , @R0 MOVX A , @A+PC CJNE R7 , #77H , $ INC DPTR DEC DPTR PUSH ACC PUSH DPTR POP R0

XCHD A , R3 XCH A , R3 MOVC A , @A+DPTR 答:错误的指令如下:

MOV A , P1 (p1不是操作数) MUL A , B AB中应无“,”

MOV A , @R2 MOV A,@Ri其中i=0或1

MOV R1 , R2 不能从寄存器把数据在送到寄存器中去 DEC DPTR DEC 不能操作DPTR PUSH ACC PUSH只有PUSH direct指令 PUSH DPTR PUSH只有PUSH direct指令 POP R0 POP只有PUSH direct指令 XCHD A , R3 XCHD只有XCHD A,@Ri指令

1.8051单片机的指令系统有何特点?

答:8051的指令系统由111条指令组成。如果按字节数分类,有49条单字节指令46条双

字节指令和16条三字节指令,以单字节指令为主;如果按照指令执行时间分类,有64条单周期指令、45条双周期指令和2条四周期指令,以单周期指令为主。 8051的指令系统具有以下特点:

(1)存储效率高、执行速度快,可以进行直接地址到直接地址的数据传送,能把一个并行

I/O口中的内容传送到内部RAM单元中而不必经过累加器A或工作寄存器Rn。这样可以大大提高传送速度和缓解累加器A的瓶颈效应。

(2)用变址寻址方式访问程序存储器中的表格,将程序存储器单元中的固定常数或表格字

节内容传送到累加器A中。这为编成翻译算法提供了方便。 (3)在算术运算指令中设有乘法和除法指令

(4)指令系统中一些对I/O口进行操作的指令具有“读——修改——写”的功能。这一功

能指:在执行读锁存器的指令时,CPU首先完成将锁存器的值通过缓冲器BUF2度入内部,进行修改、改变,然后重新写到锁存器中去。这种类型指令包含所有的逻辑操作和位操作指令。

(5)8051单片机内部有一个布尔处理器,对为地址空间具有丰富的位操作指令。布尔操作

类指令有17条,包括布尔传送指令、布尔状态控制指令、布尔逻辑操作指令、布尔条件转移指令。

2.8051单片机指令系统按功能可分为几类?具有几种寻址方式?它们的寻址范围如何? 答:MCS-51单片机指令系统按功能可分为5类: (1)数据传送指令 (2)算术运算指令

(3)逻辑运算和移位指令 (4)控制转移指令 (5)位操作指令

MCS-51单片机的指令系统提供了七种寻址方式,其对应的寻址范围如下表:

寻址方式 立即寻址 直接寻址 寄存器寻址 寄存器间接寻址 变址寻址 相对寻址 位寻址

3.访问特殊功能寄存器和外部数据存储器应采用哪种寻址方式? 答: 访问特殊功能寄存器,应采用直接寻址、位寻址方式。 访问外部数据存储器,应采用寄存器间接寻址方式。 在0~255B范围内,可用寄存器R0、R1间接寻址: MOVX A,@R0 或 MOVX A,@R1 MOVX @R0,A 或 MOVX @R1,A

在0~64KB范围内,可用16位寄存器DPTR间接寻址: MOVX A,@DPTR MOVX @DPTR,A

4.“DA A”指令的作用是什么?怎样使用?

答:这条指令是在进行BCD码加法运算时,跟在“ADD”和“ADDC”指令之后,用来对

BCD码的加法运算结果自动进行修正的,使其仍为BCD码表达形式。

使用的变量 R0~R7;A、B、DPTR、C @R0、@R1、SP @R0、@R1、@DPTR @A+PC、@A+DPTR PC+偏移量 寻址范围 程序存储器 内部RAM低128个字节; 特殊功能寄存器SFR 内部RAM、堆栈指针SP 外部RAM 程序存储器 程序存储器 内部RAM低128B位寻址区 可位寻址的特殊功能寄存器位

在计算机中,遇到十进制调整指令时,中间结果的修正是由ALU硬件中的十进制修正电路

自动进行的。用户不必考虑何时该加“6”,使用时只需在上述加法指令后面紧跟一条“DA A”指令即可。

5.片内RAM 20H~2FH单元中的128个位地址与直接地址00H~7FH形式完全相同,如何

在指令中区分出位寻址操作和直接寻址操作?

答: 虽然内部RAM位寻址区的位地址范围00H~7FH与低128个单元的单元地址范围

00H~7FH形式完全相同,但是在应用中可以通过指令的类型区分单元地址和位地址。 位寻址的操作只适用于下列位指令,而直接寻址操作对这些指令是无效的。 MOV C,bit MOV bit,C CLR bit SETB bit CPL bit ANL C,bit ANLC,/bit JB bit,rel JNB bit,rel

6.8051单片机指令系统中有长跳转LJMP,长调用LCALL指令,为何还没有设置了绝对

跳转AJMP,绝对调用ACALL指令?在实际使用是应怎样考虑?

答: 在实际应用中,可从寻址范围和指令长度两个方面来选择长跳转指令LJMP和短跳转指

令AJMP、长调用指令LCALL和短调用指令ACALL。

长跳转LJMP在64KB范围内转移,而短跳转AJMP只能在2KB空间转移。长调用LCALL

调用位于64KB程序空间的子程序,而短调用ACALL调用位于2KB程序空间范围的子程序。AJMP、ACALL指令代码长度为2个字节;LJMP、LCALL指令代码长度为3个字节。

7.SJMP,AJMP和LJMP指令在功能上有何不同? 答: 指令的转移范围不同。

SJMP是256B范围内的相对转移指令,AJMP是2KB范围内的无条件短跳转指令,LJMP

是64KB范围内的无条件长跳转指令。

8.MOVC A,@DPTR与MOVX A,@DPTR指令有何不同? 答: 指令的转移范围不同。

SJMP是256B范围内的相对转移指令,AJMP是2KB范围内的无条件短跳转指令,LJMP

是64KB范围内的无条件长跳转指令。

9. 在“MOVC A,@A+DPTR”和“MOVC A,@A+PC”中,分别使用了DPTR和PC

作基址,请问这两个基址代表什么地址?使用中有何不同?

答: 使用@A+DPTR基址变址寻址时,DPTR为常数且是表格的首地址,A为从表格首址到

被访问字节地址的偏移量。

使用@A+PC基址变址寻址时,PC仍是下条指令首地址,而A则是从下条指令首地址到常

数表格中的被访问字节的偏移量。

10.设片内RAM中的(40H)=50H,写出执行下列程序段后寄存器A和R0,以及片内RAM

中50H和51H单元的内容为何值? MOV A,40H MOV R0,A MOV A,#00 MOV @R0,A MOV A,#30H MOV 51H,A MOV 52H,#70H

答:结果为:(A)=30H (R0)=50H (50H)=00H (51H)=30H

11.设堆栈指针(SP)=60H,片内RAM中的(30H)=24H,(31H)=10H。执行下列程序

段后,61H,62H,30H,31H,DPTR及SP中的内容将有何变化? 答:

结果为: (61H)=24H (62H)=10H (30H)=00H

12.在8051的片内RAM中,已知(20H)=30H,(30H)=40H,(40H)=50H,(50H)=55H。

分析下面各条指令,说明源操作数的寻址方式,分析按顺序执行各条指令后的结果。 MOV A,40H MOV R0,A MOV P1,#0F0H MOV @R0,20H MOV 50H,R0 MOV A,@R0 MOV P2,P1

答: 指令 源操作数的寻址方式 执行指令后的结果 MOV A,40H 直接寻址 (A)=50H MOV R0,A 寄存器寻址 (R0)=50H MOV P1,#80H 立即寻址 (P1)=80H MOV @R0,20H 寄存器间接寻址 (50H)=30H

(31H)=0FFH DPTR=2410H SP=60H

MOV DPTR,#2000H 立即寻址 (DPTR)=2000H MOV 40H,30H 直接寻址 (40H)=40H MOV R0,30H 直接寻址 (R0)=40H MOV D0H,R0 直接寻址 (D0H)=40H MOV 10H,#10H 立即寻址 (10H)=10H MOV A,@R0 寄存器间接寻址 (A)=50H MOV P2,P1 寄存器寻址 (P2)=80H

13.完成以下的数据传送过程。 (1)R1的内容传送到R0。

(2)片外RAM 20H单元的内容送R0。

(3)片外RAM 20H单元的内容送片内RAM 20H (4)片外RAM 1000H单元的内容送片内RAM 20H (5)片外RAM 20H单元的内容送R0。

(6)片外RAM 2000H单元的内容送片内RAM 20H (7)片外RAM 20H单元的内容送片外RAM 20H 答:(1)R1的内容传送到R0 ; MOV A, R1

MOV R0, MOV

A

(2)片外RAM 20H单元内容送R0 ;

DPTR, #0020H

@DPTR

MOVX A,

MOV R0, A

(3)片外 RAM 20H单元的内容送片内RAM 20H单元; MOV DPTR, #0020H

MOVX A, @DPTR MOV 20H, A

(4)片外RAM 1000H单元的内容送片内 RAM 20H 单元; MOV DPTR, #1000H MOVX A, MOV

@DPTR

20H, A

(5)ROM 2000H单元的内容送R0单元; MOV A, #00H MOV DPTR, #2000H MOVC A, @A+DPTR MOV

R0H, A

(6)ROM 2000H 单元的内容送片内RAM 20H单元; MOV A, #00H

MOV DPTR, #2000H MOVC A, @A+DPTR MOV 20H, A

(7)ROM 2000H单元的内容送片外RAM 20H单元。 MOV A, #00H MOV DPTR, #2000H MOVC A, @A+DPTR MOV DPTR, #0020H MOVX @DPTR, A

14.设有两个4位BCD码,分别存放在片内RAM的23H,22H单元和33H,32H单元中,

求它们的和,并送入43H,42H单元中去。(以上均为低位字节,高位在高字节)。 答:

ORG 0000H

15.编程将片内RAM的40H~60H单元中内容送到片外RAM以3000H开始的单元中。 答: ORG 0000H 答:ORG 0000H

LJMP MAIN ORG 0030H MOV R1,#00H MOV R2,#00H

MOV R3,#07H

MOV A,@R0 ADD A,R2 MOV R2,A JNC LP1 INC R1 LP2:

LJMP MAIN ORG 0030H MOV R1,#40H MOV DPTR,#3000H LOOP:MOV A,@R1

MOVX @DPTR,A INC R1 INC DPTR DJNZ R7,LOOP SJMP $ END

LJMP START ORG 0030H

MOV A,22H

ADD A,32H DA A MOV 42H,A

MOV A,23H ADDC A,33H DA A

MOV 43H,A SJMP $ END

START:

MAIN: MOV R7,#20H

16.编程计算片内RAM区30H~37H的8个单元中数的算术平均值,结果存在3AH单元中。

MAIN: MOV R0,#30H

LP1:

INC R0

MOV A,R2 RRC A MOV R2,A DJNZ R3,LP3 MOV 3AH,R2 SJMP $ END

DJNZ R3,LP2 MOV R3,#03H

CLR C MOV A,R1 RRC A MOV R1,A

LP3:

17.编写计算下式的程序,设乘积的结果均小于255,A,B值分别存放在片外RAM的2001H

和2002H单元中,结果存于2000H单元中。

(A+B*(A+B)+10 若(A+B)*(A+B)〈 10 Y=(A+B)*(A+B) 若(A+B)*(A+B)=10 (A+B)*(A+B)-10 若(A+B)*(A+B) 〉10 答:ORG 0000H

19.设有100个有符号数,连续存放在片外RAM以2200H为首地址的存储区中,试片成统

计其中正数|、负数、零的个数。 答:ORG 0000H

LJMP MAIN ORG 0030H MOV R3,#00H MOV R4,#00H

MOV R5,#00H MOV DPTR,#2000H CJNE A,#00H,NET1 INC R3 INC DPTR

LJMP START ORG 0030H

MOV DPTR,#2001H

MOVX A,@DPTR MOV 30H,A MOV DPTR,#2002H MOVX A,@DPTR ADD A,30H MOV B,A MUL AB MOV R1,A CJNE A,#10,NET1 MOV DPTR,#2000H MOVX @DPTR,A

SJMP NET3 CLR C MOV A,R1 ADD A,#10 MOV DPTR,#2000H MOVX @DPTR,A SJMP NET3 SUBB A,#10 MOV DPTR,#2000H MOVX @DPTR,A

END

NET1: JNC NET2

START:

NET2: MOV A,R1

NET3: SJMP $

LOOP: MOVX A,@DPTR

MAIN: MOV R2,#100

22.试编一查表程序,从首地址为2000H、长度为9FH的数据块中找出第一个ASCII码A,

将其地址送到20A0H和20A1H单元中。 答: ORG

0000H

MAIN 0030H

TT:

A,30H

A,#41H

INC DPTR MOV MOV MOV CJNE RET END

30H,DPH 31H,DPL A,31H A,@00H,LOOP

$

DPTR,#2000H

MOV MOV MOV RET

DPTR,#20A0H DPTR,#20A1H A,31H

LJMP ORG

MOVX @DPTR,A

DJNZ R2,LOOP SJMP NET3 INC R4 INC DPTR DJNZ R2,LOOP

SJMP NET3 INC DPTR DJNZ R2,LOOP END

NET2: INC R5

NET1: JC NET2

NET3: SJMP $

MAIN:

LCALL SUBONE AJMP

MOVX @DPTR,A

; SUBONE use dptr,a,30h,31h SUBONE:

MOV LOOP:

MOVX A,@DPTR XRL JNZ TT MOV

四.阅读程序

1.下列程序段经汇编后,从2000H开始的各有关程序存储器单元的内容是什么? TAB:

ORG 2000H EQU 2010H DB 10H , 10 DW 2100H ORG 2050H DW TAB DB “TAB”

答:汇编后:(2000H)=10H,(2001H)=0AH,(2002H)=21H,(2003H)=00H;

(2050H)=20H,(20051H)=10H, (2052H)=54H,(2053H)=41H,(2054H)=42H;

2.已知程序执行前,(A) = 02H,(SP) = 42H,(41H) = FFH,(42H) = FFH。下列程序段执行后,请问(A) = ?,(SP) = ?,(41H) = ?,(42H) = ?,(PC) = ?。

POP DPH

3.设(R2) = 3,分析下列程序段的执行结果,并指明该程序段的功能。 MOV DPTR , #TAB MOV A ,R2 MOV B , #3

MUL AB MOV R6 , A MOV A , B ADD A , DPH MOV A , R6 JMP @A+DPTR

┋ PRG0

PRG1 PRG2 ┋ PRGn

LJMP LJMP LJMP LJMP POP MOV RL MOV MOVC PUSH MOV INC MOVC PUSH RET ORG DB

DPL

DPTR , #3000H A B , A

A , @A+DPTR ACC A , B A

A , @A+DPTR ACC

3000H

10H , 80H , 30H , 80H , 50H , 80H

答:A=80H ,SP=40H,(41H)=50H,(42H)=80H ,PC=8050H

TAB:

答:程序的执行结果是转向处理程序PRG3,该程序段的功能是实现程序的多分支转移。 五.编程题

1.将程序存储器中2000H~2050H中的数据按序传送到片外RAM2150H单元开始的存储单元中。 答:

MOVX R0 ,#2000H MOV DPTR ,#2150H; LOOP: MOV A,@R0;

MOV @DPTR ,A;

2.用定时器中断方式,编程实现从P1.0输出一个频率为 1KHz的连续方波。设fosc = 12MHz。

INC RO INC DPTR

CJNE RO ,#2051H, LOOP; RET

答:(1)计算计数初值X 机器周期=1us=1*10^-6s

设需要装入T0的初值为X,则有 (2^16-X)*1*10^-6=5*10^-4

X=65036;将X化为16进制数,即X=FE0CH.所以T0的初值为TH0=FEH,TL0=0CH. 程序如下:

ORG 0000H

RESET:AJMP MAIN ORG 000BH AJMP IT0P ORG 0100H

MAIN: MOV SP,#60H MOV TMOD,#01H ACALL PI0M0

HERE: AJMP HERE

PT0M0: MOV TL0,#0CH

3.如图6-1所示为8031与DAC0832接口部分的电路,试编程输出如图6-2所示的等边三角波,要求三角波的周期为500ms,设晶振频率为12MHz。

?5VMOV TH0,#0FEH SETB ET0 SETB EA SETB TR0 RET

IN0P: MOV TL0,#0CH MOV TH0,#0FEH CPL P1.0 RETI

P0 P2.7 WR8031ILE VCC DI0~DI7 VREFRFCSIOUT1XFERIOUT2WR1WR2AGNDDGND?5V??VODAC0832图6?1

v4Vo0答:

ORG 2000H

START:MOV R0,#0FEH MOV A,#00H

UP:MOVX @R0,A INC A

图6?2t

JNZ UP

DOWN: DEC A MOVX @R0,A JNZ DOWN SJMP UP

4. 从内部存储器20H单元开始,有30个数据。试编一个程序,把其中的正数、负数分别送5H和71H开始的存储单元,并分别记下正数、负数的个数送50H和70H单元。 答: PUSH 0 MOV A,@R0 PUSH 1 MOV @R1,A PUSH 2 INC R1 PUSH 3 _SUM_END: MOV R3,#30 INC R0 MOV R1,#51H DJNZ R3, _SUM_LOOP MOV R2,#71H CLR C MOV R0,#20H MOV A,R1 _SUM_LOOP: MOV A,@R0 SUBB A,#51H ANL A,#80H MOV 50H,A JZ _SUM_ZHENG CLR C _SUM_FU: MOV A,@R0 MOV A,R2 PUSH 0 SUBB A,#71H MOV A,R2 MOV 70H,A MOV R0,A POP 3 MOV @R0,A ; POP 2 POP 0 POP 1 INC R2 POP 0 AJMP _SUM_END RET _SUM_ZHENG: END

5. 以BUF1为起始地址的外存储区中,存放有16个单字节无符号二进制数,试编一程序,求其平均值并送BUF2单元 答:PUSH 0 _CAL_ADD_END: PUSH 1 INC DPTR PUSH 2 DJNZ R0, _CAL_ADD MOV R0,#010H MOV DPTR,#BUF1 MOV R0,#4 ; /16 CLR A CLR C CLR C _DIV_LOOP: MOV R1,#0 MOV A,R2 MOV R2,#0 RRC A _CAL_ADD: MOV R2,A MOVX A,@DPTR MOV A,R1 ADDC A,R1 RRC A MOV R1,A MOV R1,A JNC _CAL_ADD_END DJNZ R0, _DIV_LOOP INC R2 JNC _CAL_END

INC R1 _CAL_END: POP 2 MOV A,R1 POP 1 MOV DPTR,#BUF2 ; (1+2+3+..+16) /16 POP 0 =8.5 YUEDENGYU 9 RET MOVX @DPTR,A END

6.设有100个有符号数,连续存放在片外RAM以2200H为首地址的存储区中,试片成统计其中正数|、负数、零的个数。 答:

ORG 0000H DJNZ R2,LOOP LJMP MAIN SJMP NET3 ORG 0030H NET1: JC NET2

INC R4 MAIN: MOV R2,#100

MOV R3 ,#00H INC DPTR MOV R4,#00H DJNZ R2,LOOP

SJMP NET3 MOV R5,#00H

MOV DPTR,#2000H NET2:INC R5 LOOP: MOVX A,@DPTR INC DPTR CJNE A,#00H,NET1 DJNZ R2,LOOP INC R3 NET3:SJMP $ INC DPTR END

7.试编一查表程序,从首地址为2000H、长度为9FH的数据块中找出第一个ASCII码A,将其地址送到20A0H和20A1H单元中。 答:

ORG 0000H MOV DPTR,#20A0H LJMP MAIN MOVX @DPTR,A ORG 0030H MOV DPTR,#20A1H MAIN: MOV A,31H LCALL SUBONE MOVX @DPTR,A AJMP $ RET ; SUBONE USE DPTR A,30H,31H TT: SUBONE: INC DPTR MOV DPTR,#2000H MOV 30H,DPH LOOP: MOV 31H,DPL MOVX A,@DPTR MOV A,31H XRL A,#41H CJNE A,@00H,LOOP JNZ TT RET MOV A,30H END

8.一只8051单片机系统的时钟频率为6MHZ,请利用定时器T0和P1.2输出矩形脉冲,其波形如图P3.1所示,试编程实现之。

50us 350us

图P3.1 例3.20的波形图

答: ORG 0000H LJMP START ORG 0100H

START: MOV SP, #60H

MOV TMOD, #02H MOV TH0, #0E7H MOV TL0, #0E7H CLR Pl. 2 SETB TR0

HIGH0: SETB Pl. 2

9.在8051单片机中,已知时钟频率为12MHZ,请编程使P1.0和P1.1分别输出周期为2ms和500us的方波。

答:选择定时器 T0 ,工作方式 l,定时 500us,则机器周期 T= lus.则(2?x)?500, x=65036D=OFEOCH 程序:

ORG 0000H D2: CPL Pl.0 MOV TMOD, #0lH MOV TH0, #0FEH MOV TH0, #0FEH MOV TL0, #OCH MOV TL0, #OCH DJNZ R7, D500 SETB TR0 CPL Pl.l DEL: MOV R7, #4 AJMP DEL D500: JBC TF0, D2 SJMP $

AJMP D500 END

10.利用8051单片机定时器/计数器测量某正脉冲宽度,已知此脉冲宽度小于10ms,主机频率为12MHZ。编程测量脉冲宽度,并把结果转换为BCD码,顺序存放在以片内50H单元为首地址的内存单元中(50H单元存各位)。 答:

ORG 0000H START: MOV TMOD, #09H ; T0方式 LJMP START 1,GATE= l ORG 0030H MOV TH0, #00H MOV TL0, #00H

16HIGHl : JBC TF0, LOW0

AJMP HIGHl

LOW0 : MOV R7, #7

CLR Pl. 2

LOWl : JBC TF0, LOW2

AJMP LOWl

LOW2: DJNZ R7, LOWl

AJMP HIGH0 END

MOV R0, #4EH

WAITl : JB P3.2, WAITl; 等待INT0变低

SETB TR0

WAIT2: JNB P3.2, WAIT2;等待INT0变高

WAIT3: JB P3 .2, WAIT3; 等待INT1变低

MOV R7, #l0H

LOOP2: MOV R0, #4EH

MOV R6, #2H CLR C

LOOP3: MOV A, @R0

CLR A

MOV @R0, A INC R0

DJNZ R6, LOOP3 MOV R5, #3 MOV Rl, #50H

LOOP4: MOV A, @Rl

ADDC A, @Rl DA A

MOV @Rl, A INC Rl

DJNZ R5, LOOP4 DJNZ R7, LOOP2 SJMP $ END

CLR TR0

MOV @R0, TL0 INC R0

MOV @R0, TH0 MOV Rl, #50H MOV R5, #3H CLR A

LOOPl: MOV @Rl , A

INC Rl

DJNZ R5, LOOPl

11.波特率、比特率和数据传送的含义是什么?

答:为了衡量串行通信的速度,应该有一个测量单位,在数据通信中,描述数据传送速度的方式有3种: 波特率定义为每秒传送信号的数量,单位为波特(Baud)。比特率定义为每秒传送二进制数的信号数(或每秒传送二进制码元的个数),单位是bps(bit per second)或写成b/s(位/秒)。数据传送速率(或字符传送速率)定义为每秒传送多少个字符(或单位时间内平均数据传移速率,单位是字符/秒。

在串行通信中,传送的信号可能是二进制、八进制或十进制等。只有在传送的信号是二进制信号时,波特率才与比特率数值上相等。而在采用调制技术进行串行通信时,波特率是描述载波信号每秒钟变化为信号的数量(又称为调制速率)。在这种情况下,波特率与比特率在数值上可能不相等。

12.什么是串行异步通信?它有哪些特征?

答:异步通信中,接收器和发送器有各自的时钟,数据常以字符为单位组成字符帧传送,用一帧来表示一个字符,其字符帧的数据格式为:在一帧格式中,先是一个起始位“0”(低电平),然后是5~8个数据位,规定低位在前,高位在后,接下来是1位奇偶校验位(可以省略),最后是1~2位的停止位“1”(高电平)。

异步通信的优点是不需要传送同步脉冲,可靠性高,所需设备简单;缺点是字符帧中因包含有起始位和停止位而降低了有效数据的传输速率。

13.简述串行接口接收和发送数据的过程?

答:串行接口的接收和发送是对同一地址(99H)两个物理空间的特殊功能寄存器SBUF进行读或写的。当向SBUF发\写\命令时(执行\,A\指令),即向发送缓冲器SBUF装

载并开始由TXD引脚向外发送一帧数据,发送完使发送中断标志位TI=1。在满足串行接口接收中断标志位RI(SCON.O)=0的条件下,置允许接收位REN(SCON.4)=1,就会接收一帧数据进入移位寄存器,并装载到接收SBUF中,同时使R1=1。当发读SBUF命令时(执行\A,SBUF\指令),便从接收缓冲器SBUF读取信息通过80C5l内部总线送CPU。

14.利用8051串行口控制8位发光二极管工作,要求发光二极管每1s交替地亮、灭,画出电路图并编写程序。 答:

主程序框图如下: 串口初始化 FFH送SBUF

设 标 志

调延时程序

标志位取反

标志为1 标志为零 FF送SBUF

标志为零

OOH送SBUF

程序如下: ORG 0040H BB:MOV SBUF,#0FFH MOV SCON,#00H CC:AJMP AA MOV SBUF,#0FFH DELAY: MOV R7,#8 SETB C D1:MOV R6,#250 MOV 00H,C D2:MOV R5,#250 AA:ACALL DELAY D3:DJNZ R5,D3 CPL 00H DJNZ R6,D2 MOV C,00H DJNZ R7,D1 JC BB RET

END MOV SBUF,#00H

SJMP CC

15.试编写一串行通讯的数据发送程序,发送片内RAM的20H~2FH单元的16字节数据,串行接口方式设定为方式2,采用偶校验方式。设晶振频率 为6MHZ。

答:采用查询方式编写发送程序如下: ORG 0000H LJMP START ORG 0030H START: MOV SCON,#80H ;设定方式2发送 MOV PCON,#80H MOV R0,#20H ;给待发送数据块地址指针R0置初值 MOV R7,#16 ;给数据块长度计数器R7置初值 LS: MOV A,@R0 ;取一字节数据送A MOV C,P MOV TB8,C ;P随A变,P→TB8 MOV SBUF,A ;启动发送 JNB TI,$ ;查询发送标志,等待一字节发送完 CLR TI ;清TI标志位 DJNZ R7,LS RET END

16.试编写一串行通讯的数据接收发送程序,将接收到的16字节数据送入片内RAM 30H ~3FH单元中。串行接口设定为方式3,波特率为1200bps,晶振频率为6MHZ。 答:程序如下: ORG 0000H LJMP START ORG 0100H START: MOV TMOD,#20H ;设定T1为模式2定时 MOV TH1,#0F3H ;送时间常数 MOV TL1,#0F3H SETB TR1 ;启动定时器T1 MOV SCON,#0D0H ;串行接口设定为方式3,并允许接收 MOV R0,#30H MOV R7,#16 JNB RI,$ ;查询等待接收 CLR RI MOV A,SUBF ;从串行接口中读取数据 JN BP,PN ;对该字节进行查错处理若P=RB8无错,否则有错 JNB RB8,PER ;若P=1,RB8=0,有错,转出错处理 LJMP RIG ;若P=1,RB8=1,无错,转保存数据

PN: JB RB8,PER ;若P=0,RB8=1,有错,转出错处理

RIG: MOV @R0,A ;若P=0,RB8=0,无错,保存接收到的数据 INC R0 DJNZ R7,LOOP ;16字节未接收完,则继续 CLR 7F ;正确接收完16位数据,清出错标志位7F SJMP $ PER: SETB 7F ;校验有错,置位7F

SJMP $ END

17、某晶振为12MHz的单片机控制系统有8个发光二极管。试画出89C51与外设的连接图并编程使它们由右向左轮流点亮,并延时约0.5S. 答:

连接图如右所示: MOV A,#80H UP:MOV P1,A

RR A SJMP UP

六、分析题

1、下图是四片8K*8位存储器芯片的连接图。请确定每片存储器芯片的地址范围。

74LS138真值表G1 G2A G2B C B A Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0 答:从左到右

1#芯片地址为0000H~1FFFH; 2#芯片地址为2000H~3FFFH;

3#芯片地址为4000H~5FFFH;

4#芯片地址为6000H~7FFFH

2.改错。

下面的程序段有5个遗误之处,请指出并改正之。可直接在源程序中指出并改正。

本程序功能:如右图所示,通过拨码开关将一位十进制数在共阴数码管中显示。

ORG 0000H SJMP MAIN ORG 0200H

MAIN: SETB P3.0 MOVX A, @R0 ANL A, #0F0H ACALL GETCODE MOV P1, A CLR P3.1 SJMP MAIN

GETCODE: MOV DPTR, #TAB MOV A, @A+DPTR

TAB: DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H, 7FH, 6FH END 答:第 1 处错误:“SJMP MAIN”改为“AJMP MAIN”或者“LJMP MAIN”,在不改变“SJMP MAIN”的情况下,可将“ORG 0200H”改为“ORG 0002H”至“ORG 0081H”中的一种。 第 2 处错误:“SETB P3.0”改为“CLR P3.0” 第 3 处错误:“ANL A,#0F0H”改为“ANL A,#0FH” 第 4 处错误: “MOV A,@A+DPTR”改为“MOVX A,@A+DPTR”

第 5 处错误:在“MOV A,@A+DPTR”和标号“TAB”之间增加语句“RET”

3、该程序是信号灯控制程序,采用P1口控制八个发光二极管的亮与灭(设输出低电平时,对应发光二极管被点亮)。

ORG 0000H

AJMP MAIN ;转主程序

ORG 001BH ;该地址是( T1的中断入口 )的地址

AJMP CONT ;当出现( 中断 )时,才会执行到该指令 ORG 0100H

MAIN: MOV TMOD,#10H ;执行该指令的目的是(设定T1的工作方式)

MOV TH1,#3CH ;置50ms定时初值

MOV TL1,#0B0H ;此时堆栈指针SP的内容是( 07H )

SETB EA ;执行该指令前,EA的初始值是( 0 ) SETB ET1 ;定时器T1开中断

SETB TR1 ;执行该指令的目的是(启动定时器T1工作 )

CLR 08H ;清1s计满标志位 MOV R3,#14H ;置50ms循环初值 DISP: MOV R2,07H

MOV A,#0FEH

NEXT: MOV P1,A ;第2次执行完该指令后,对应( 第2位 )灯被点亮

JNB 08H,$ ;查询1s时间到否 CLR 08H ;清标志位 RL A DJNZ R2,NEXT MOV R2,#07H NEXT1:MOV P1,A

JNB 08H,$ CLR 08H RR A

DJNZ R2,NEXT1 SJMP DISP

CONT: MOV TH1,#3CH ;程序执行到此处时,堆栈指针SP的内容是( 09H )

MOV TL1,#0B0H

DJNZ R3,EXIT ;判1s定时到否 MOV R3,#14H ;重置50ms循环初值 SETB 08H ;标志位置1

EXIT: RETI ;该指令的功能是将( 堆栈的内容 )送至PC 连续运行该程序时,观察二极管的变化规律是( 灯被依次循环点亮 ) 4、程序设计

假设系统时钟频率采用12MHz,要在P1.0上输出一个周期为2ms的方波,如图所示。 要求:填写程序中空格部分的指令

ORG __0000H____ RESET: _AJMP MAIN___ ORG ___000BH____ AJMP IT0P ORG 0100H

MAIN: MOV SP,#60H MOV TMOD,__#01H____ ;设置T0为方式1

ACALL INIT0

HERE: AJMP HERE

INIT0: MOV TL0,#018H MOV TH0,#0FCH SETB TR0 SETB EA_ SETB TR0 RET

ITOP: MOV TL0,#018H MOV TH0,#0FCH CPL P1.0 _RETI___ END

5、根据图1读程序,按下列要求完成答题。 (1)、对程序带分号的指令加上注释;

(2)、说明连续运行程序时,二极管的变化规律;

(3)、如果要使发光二极管依次轮流点亮,如何修改程序 ORG 0000H;定义下面一条指令地址 SJMP MAIN;无条件跳转到MAIN标号指令 ORG 0100H;定义下面一条指令地址 MAIN: MOV SP,#60H;(sp)=60H; 给堆栈指针 LOOP: MOV R2,#80H;(R2)=80H MOV R1,#08H;(R1)=08H

CLR P2.7; P2.7取反;因为三极管是PNP型,所以要求输入端P2.7为0,输出高电平才能点亮二极管,即要对P2.7清零

NEXT: MOV P1,R2;(P1)=R2(灯为d1-d8)使除了D8外都亮 ACALL DELAY; 调用子程序DELAY;灯亮延时 MOV A,R2;(A)=R2

RR A;循环右移A;循环右移一位,使D7不亮 MOV R2,A;(R2)=A

DJNZ R1,NEXT; R1减1不为0跳转到IEDUP;继续使D6到D1依次不亮 SJMP LOOP; 无条件跳转到LEDRESET;循环亮灯过程 END

答:2、8个发光二极管总是保持7个亮、1个熄灭,并且是依次轮流熄灭,周而复始。 3、修改R2中的初始值,如下所示:LEDRESET: MOV R2,#01H

七、 1、下图为基于线选法的单片机存储器扩展硬件接口电路图。 1)完成电路各端口口线连接;

2)外部扩展的程序存储器和数据存储器容量各是多少?

3)四片存储器芯片的地址范围分别是多少?(地址线未用到的位填1)

2、如图所示,现有89C51单片机、74LS373锁存器、74LS138、l块2764EPROM(其首地址为1000H)和1块6264RAM.试利用它们组成一单片微型计算机系统,要求:

1)、画出硬件连线图(含控制信号、片选信号、数据线和地址线) 2)、指出该系统程序存储空间和数据存储空间各自的范围。

U1123456781312151431191891716P10P11P12P13P14P15P16P17INT1INT0T1T0EA/VPX1X2RESETRDWR89C51P00P01P02P03P04P05P06P07P20P21P22P23P24P25P26P2739383736353433322122232425262728347813141718111U274LS373D0D1D2D3D4D5D6D7OELEQ0Q1Q2Q3Q4Q5Q6Q72569121516191098765432524212322022271U3A0A1A2A3A4A5A6A7A8A9A10A11A12CEOEPGMVPP2764D0D1D2D3D4D5D6D7111213151617181910987654325242123222272620U46264A0A1A2A3A4A5A6A7A8A9A10A11A12OEWECS2CS1D0D1D2D3D4D5D6D71112131516171819U574LS138123ABCY0Y1Y2Y3Y4Y5Y6Y715141312111097RXDTXDALE/PPSEN10113029456E1E2E3

3、这里有8031、74LS373、74LS138、27128EPROM(16KB×8bit,首地址4000H)和6264RAM(8KB×8bit,首地址A000H),请画出该单片机应用系统。

4、图1为基于线选法的单片机存储器扩展硬件接口电路图。要求用P2.5对2764EPROM进行片选;P2.6对1#6264RAM进行片选;P2.7对2#6264RAM进行片选。 1)完成电路各端口口线连接; 2)ALE、PSEN、WR、RD的功能;

3)外部扩展的程序存储器和数据存储器容量各是多少?

4)三片存储器芯片的地址范围分别是多少?(地址线未用到的位填1)

P2.7 P2.6 P2.5 P2.4 5│ P2.0 8D0 │ D7 Q0 8│ Q7 8 5A0-A7 A8-A12 CE +5V CS 8 A0-A7 5 8 A0-A7 5 AT89S51 ALE A8-A12 CE A8-A12 74LS373 G OE +5VCS2764 1# 6264 +5V CS CE 2# 6264 EAP0.7 8 │ P0.0 PSEN RD WR D0-D7 8 OE 8 OE WR D0-D7 OE WR 8

图1 单片机存储器扩

4、图1为基于线选法的单片机存储器扩展硬件接口电路图。要求用P2.5对2764EPROM进行片选;P2.6对1#6264RAM进行片选;P2.7对2#6264RAM进行片选。 1)完成电路各端口口线连接; 2)ALE、PSEN、WR、RD的功能;

3)外部扩展的程序存储器和数据存储器容量各是多少?

4)三片存储器芯片的地址范围分别是多少?(地址线未用到的位填1)

P2.7 P2.6 P2.5 P2.4 5│ P2.0 8D0 │ D7 Q0 8│ Q7 8 5A0-A7 A8-A12 CE +5V CS 8 A0-A7 5 8 A0-A7 5 AT89S51 ALE A8-A12 CE A8-A12 74LS373 G OE +5VCS2764 1# 6264 +5V CS CE 2# 6264 EAP0.7 8 │ P0.0 PSEN RD WR D0-D7 8 OE 8 OE WR D0-D7 OE WR 8

图1 单片机存储器扩

本文来源:https://www.bwwdw.com/article/wtkw.html

Top