北工大单片机期末复习题A4一纸开 - 图文 下载本文

ORG 500H MOV A,#0 MOV B,#0 MOV R0,#30H MOV DPTR,#TAB

SUBB A,@R1 POP ACC

JC L4 (升序改为JNC) INC R0 INC R1

CJNE R1,#36H,L3 AJMP L5 XCH A,@R1 INC R0 INC R1 AJMP L3

←ASCTAB

MOV A, R0 ; A←项数 ANL A, #0FH ; 屏蔽高4位 MOVC A, @A+DPTR ; A←结果

MOV R0, A ; 送回R0

SJMP $

ASCTAB: DB ‘0’, ‘1’ ?, ‘9’ END

2)采用PC作基址

ORG 1000H

MOV A, R0 ; A←项数

L1: CLR A

MOVC A,@A+DPTR MOV @R0,A

MOV R0,#30H INC DPTR INC R0

CJNE R0,#40H,L1

L4:

MOV @R0,A DB ‘A’, ‘B’ ? , ‘F’

CLR A L2: ADD A,@R0 PUSH ACC CLR A ADDC A,#0 MOV 42H,A POP ACC INC R0

CJNE R0,#40H,L2 MOV 40H,A

MOV R0,40H MOV R1,42H

MOV A,40H MOV B,#3 DIV AB

END 3. 排序(降序) AJMP 100H

ORG 30H

TAB: DB 4,3,6,5,9,1

ORG 100H MOV R0,#30H

MOV DPTR,#TAB L1: CLR A

MOVC A,@A+DPTR MOV @R0,A INC R0 INC DPTR

CJNE R0,#36H,L1

MOV R3,#0 L2: MOV R0,#30H MOV R1,#31H L3: MOV A,@R0

PUSH ACC

L5: INC R3 CJNE R3,#6,L2

END

4. 求最大值: AJMP 100H

ORG 30H LEN EQU 30H+6

BLOCK: DB 41,6,3,10,7,255 ORG 100H MOV R0,#30H

MOV DPTR,#BLOCK

L1: CLR A

MOVC A,@A+DPTR MOV @R0,A INC R0 INC DPTR

CJNE R0,#LEN,L1

MOV R0,#30H

MOV R1,#0 L2: MOV A,R1 SUBB A,@R0 JNC MAX(求最小值改为JC MIN) MOV A,@R0 MOV R1,A INC R0

CJNE R0,#LEN,L2

MAX(MIN): INC R0 CJNE R0,#LEN,L2

L3: NOP END

例:已知R0中有1个0-F的数,编程将其变换成ASCII码。

求解:(1)采用DPTR作基址 ORG 3000H

MOV DPTR, #ASCTAB ; DPTR

ANL A, #0FH ; 屏蔽高4位

ADD A, #data ; A←A+data

MOVC A, @A+PC ; 查表

MOV R0, A ; 存结果 SJMP $

ASCTAB: DB ‘0’, ‘1’ ?, ‘9’

DB ‘A’, ‘B’ ? , ‘F’ END

注意:data=查表指令和表始址间的指令字节数=03H 2.子程序设计

·子程序始址应以子程序任务定名 例如:延时程序可用 DELAY ·参数传递

入口参数:子程序所需的原始数据,如SIN(X)中的X

出口参数:子程序执行后的结果数据,如SIN(0.5)的值

·主程序中的CALL指令自动把断点压入堆栈,

子程序中的RET指令自动把断点地址从堆栈中恢复到PC;

·子程序中应使用相对转移指令,以生成浮动代码

例:已知 MDA=a 和 MDB=b,编程求C=a2+b2,并送回MDC

求解:利用累加器A传送参数。 ORG 1000H MDA DATA 20H MDB DATA

21H

MDC DATA 22H MOV A, MDA ; A←a(入参)

ACALL SQR ; 求a2 MOV R1, A ; R1← a2

MOV A, MDB ; A←b ACALL SQR ; 求b2 ADD A, R1 ; A←a2+b2

MOV MDC, A ; 存入MDC SJMP $

SQR: ADD A, #01H ; 修正A

MOVC A, @A+PC ; 查表RET

SQRTAB: DB 0, 1, 4, 9, 16

DB 25, 36, 49, 64, 81 END

第2单元 结构和原理

P3.0,1——RXD,TXD(串行输入,输出口) 0000H-0002H单元:上电时,程序计数器PC所指向的单元; P3.2,3——INT0,1(外部中断0,1) 0003H-000AH单元:外部中断/INT0的入口地址; P3.4,5——T0,T1(定时器0外部输入) (两个16位可编程000BH-0012H单元:定时器T0的溢出中断入口地址; 定时/计数器,分别由两个8位寄存器拼装而成。最大计数值为0013H-001AH单元:外部中断/INT1的入口地址; 216-1,即65535。) 001BH-0022H单元:定时器T1的溢出中断入口地址; P3.6,7——WR,RD(外部数据存储器写、读控制) 0023H-002AH单元:串行口接收、传送的中断入口地址。 XTAL1,2(19,18) :振荡器输入,出端(单片机内部反向放大器注:中断响应后,由硬件控制PC自动转到各中断区的首地址。的输入,出端) 但每个中断区只有8个单元,无法放置完整的中断处理子程序,ALE/PROG (30):外部存储器地址锁存允许/编程线访问外部存储器,CPU在P0口输出片外存储器低8位地址的同时,在该线上输出一个高电平脉冲,其下降沿用于控制地址锁存;不访问片外存储器时,CPU自动在该线上输出可用作外部时钟源的脉冲序列,频率为振荡器频率的1/6。 EA/VPP(31) :允许访问片外程序存储器/编程电源线 EA接高电位,访问内部程序存储器 PSEN(29) :片外ROM选通线。RST/VPD(9): 复位/备用电源线。 另外:复位时高电位有效。

程序状态寄存器:PSW 是一个8位标志寄存器,用来存放指

令执行后的有关状态。

PSW的格式:CY AC F0 RS1 RS0 OV 空 P P——奇偶标志位(1个数为双P=0) F0 ——用户标志位(用户根据程序执行的需要通过传送指令确定) RS1 RS0——寄存器选择位(用于决定8051的8个8位工作寄存器R0~R7在RAM中的实际物理地址) RS1 RS0对工作寄存器的选择00对应00-07H以此类推 IP——中断优先级寄存器 IE——中断允许寄存器 TMOD——计数器方式寄存器 TCON——计数器控制寄存器 SCON——串行口控制寄存器 SBUF——串行口数据缓冲器 PCON——电源控制寄存器 存储器分类 程序存储器:

内部(/EA=1,)4K;外部(/EA=0),/PSEN=0,60K; 地址:0000H—FFFFH,64K单元;使用MOVC指令 数据存储器:

内部RAM(00H—7FH, 低128B; 80H—FFH, 高128B) 外部RAM(0000H——FFFFH,64K单元) 控制信号:/RD或/WR有效(=0) 使用计数器:DPTR 使用指令:内部RAM用MOV;外部RAM用MOVX

程序存储器和数据存储器使用独立的两个地址空间。由/PSEN和/RD(/WR)区分。 程序存储器ROM

存放程序代码和表格数据,64KB,地址指针是16位PC。注意6个特殊的单元:

编程时必须在中断入口区放置一条无条件转移指令,将程序引导到真正的中断处理程序的实际入口位置。 复位操作 复位的主要功能:把PC初始化为0000H,使CPU从0000H单元开始执行程序;解除锁死和错误;复位不影响内部RAM状态。 复位后的内部寄存器状态 SP=07H P0-P3=FFH ;其余全置零。 P0(39~32),8位双向三态I/O口,有较大的负载能力。①8051不带片外存储器时,为通用I/O口,传送输入/输出数据。②带片外存储器并访问时,先传送低8位地址后传送数据。 P1(1~8),8位准双向I/O口,用于传送输入/输出数据。8位准双向I/O口。 P2(21~28),①8051不带片外存储器时,为通用I/O口,传送输入/输出数据。 ②带片外存储器并访问时,传送高8位地址。P3(10~17),8位准双向I/O口。可作普通I/O口和专用口。 二、选择题 1.PC的值是_3_

1当前指令前一条指令的地址○2当前正在执行指令的地址○3下一条指令的地址 ○

4控制器中指令寄存器的地址 ○

2.下列指令中正确的是_2_

1PUSH A○2MOV A,@R1○3MOVC A,@DPTR○4MOVX 20H,@RO ○

3.8031单片机的串行口的中断程序入口地址为__2__ 1001BH○20023H○3000BH○40013H ○

4.下列有关MCS-51中断优先级控制过程的叙述中,错误的是__4__ 1低优先级的中断不能中断高优先级的中断处理 ○

2同级中断不能嵌套 ○

3同级中断请求按时间先后顺序响应 ○

4同时间级的多中断请求将形成阻塞,系统无法响应 ○

5.进行系统扩展时,为使PO口实现数据和低8位地址信号的复用,应使用_1__ 1地址锁存器○2地址寄存器○3地址缓冲器○4地址译码器 ○

6.以下有关PC和DPTR的说法错误的是_3__

1DPTR是可以访问的,而PC不能访问○2它们都是16位系统 ○

3它们都具有自动加一功能○4DPTR可以分为2个8位寄存器使用而PC不能 ○

一、 填空题: 5. 为实现内/外程序存储器地址的衔接,单片机EA引1. 是单片机(8051)复位有上电复位和手动按键复位脚必接_高_电平。 两种方法,复位后CPU使用第_00_组工作寄存器6. ADC 0809中,既可作位差查询的状态标志,又可作(r0-r7),他们分别对应的内存地址为__00H___至为中断请求信号使用的信号是_EOC ___07H__,若要求使用第二组工作寄存器,RS1和7. MCS-51系列单片机P0口主要以分时放式传送__地RS0应设置为_10_. 址__和__数据__信号,传送高八位地址信号是通过2. MCS-51系列单片机片内和片外数据存储器的寻址__P2__口实现的。 空间分别为__128B___、___64K__. 8. 在单片机时序中,每一个机器周期有__6__个状态,3. MCS-51系列单片机数据指针是__DPTR_;堆栈指针有_6_个时钟周期。 是_SP_;访问外部存储器用_MOVX_(填助记符)指9. 复位后,单片机内部状态,内部RAM内容为__不变令。 __,寄存器SP内容为_07H_,其他寄存器的内容为4. 在定时器工作方式0下,计时器的宽度为13位,如__00H___. 果系统振荡频率为3MHZ,则最大的定时时间为___2^13*12/3M

有六组无符号数4字节数,被加数和加数分别存在FIRST 和SECOND(低字节在前) .求和,并存在sum开始的空间中: ORG 0100H MOV R5, #03H MOV @R0,A ST:MOV R0,#SUM LOOP:MOV A,@R1 POP R1 MOV R1,#FIRST PUSH R1 INC R1 MOV R2,#SECOND MOV R1,R2 INC R2 MOV R4,#06H ADD A ,@R1 INC R0

DEC R4

LOOP1: MOV A,@R1 PUSH R1 MOV R1,R2 ADDC A , @R1 MOV @R0,A

POP R1 INC R1 INC R2 INC R0

DJNZ R5 LOOP1 CLR A ADDC A

MOV @R0,A INC R0

DJNZ R4, LOOP EXIT:SJMP $ END

例题2.在内部RAM从30H开始的单元中,存有16个单字节无符号数。求其和(2字节)及平均值,分别存于40H单元和42单元。 ORG 0000H LOOP:INC R0; SWAP A; AJMP MAIN MOV A,@R0; ANL A, #0FH; ORG 0030H ADD A,41H; MOV R7,A MAIN:MOV 40H,#00H; MOV 41H,A; MOV A, 40H MOV 41H,#00H; CLR A; SWAP A MOV 42H,#00H; ADDC A,40H; ADD A, R7 MOV 43H,#00H; MOV 40H,A; MOV 42H, A MOV R0,#30H; CJNE R0,#3FH,LOOP; SJMP $ MOV 41H,30H; MOV A, 41H; END 移位法

下面是某一电路的地址译码部分,某输出端地址应为C008H但电路设计有错误。请指出错误并改正,画出正确的电路图,并写出输出端T0—T5的各自输出范围。 错误原因:原接法最低地址:1000 0000 0000 0000B 最高地址:1001 1111 1111 1111B

这当中没有包含地址:C008H(C008H=1100 0000 0000 1000B) 改正方法:在P2.6后面加一个非门