单片机习题及答案

发布时间 : 星期二 文章单片机习题及答案更新完毕开始阅读

答:这是因为P0口是扩展储存器系统的多路低8位地址和数据总线,在访问外部存储器时,P0口分时用作输出外部储存器低8位地址和传送数据,为了在整个访问外部存储器期间,对外部存储器存在着有效的低8位地址信号,所以P0口需要外接一个地址锁存器。ALE信号就是用来把P0口输出的地址字节锁存在这个外接的锁存器中,再从锁存器输出外部存储器的低8位地址。而P2口只用作扩展存储器系统的高8位地址线,并在整个访问外部存储器期间不变,所以不必外接地址锁存器。

2 在8031扩展系统中,外部程序存储器和数据存储器共用16位地址线和8位数据线,为什么两个存储空间不会发生冲突? 答:这是因为外部程序存储器和外部数据存储器所使用的控制信号不同。对外部程序存储器的选读通是用PSEN控制线,而对外部数据存储器的读/写控制是用RD和WR读、写控制线,所以不会发生地址冲突。

3 8031单片机需要外接程序存储器,实际上它还有多少条I/O线可以用?当使用外部存储器时,还剩下多少条I/O线可用?

答:8031系统必须外接程序促成器,原则上说,P0和P2口要用作数据和地址总线,所以只有P1和P3口可用作I/O口,共16条I/O线。在使用外部存储器时,除了占用P0和P2口外,还需要用P3口RD(P3.7)和WR(P3.6)两条控制线,所以这种情况下就只剩下14条I/O线可用了。

4 试将8031单片机外接一片2716 EPROM和一片6116 RAM组成一个应用系统,请画出硬件连线图,并指出扩展存储器的地址范围。 答:2716是2K×8位的EPROM,6116是2K×8位的静态RAM,两者都仅需要11根地址线。由于没有规定地址范围,故可按最简单的方式来连接,即省去地址译码器,程序存储器的地址必须从0开始,基本地址为0000H—07FFH。数据存储器的地址为0000H—07FFH。控制线的连接为/PSEN控制EPROM的读出,/RD和/WR控制RAM的读写,两个芯片的片选端都固定接地,连线图如图所示。

P2.2 P2.1 P2.0

D7 Q7 .

D0 Q0 G /E A7 A10 . A9 A0 A8 /OE D7 . 2764

D0 /CE EEEDDEE/CEE P0

8031 ALE /PSEN /EA A7 A10 . A9 A0 A8 /OE /WE D7 . 6116 D0 /CE

/RD /WE

5 简述可编程并行接口8255 A的内部结构?

答:8255 A的内部结构由三部分组成:总线接口部分,内部逻辑部分,外部接口部分。 总线接口部分 其中有数据总线驱动器,读/写控制逻辑 内部逻辑部分 由A组和B组控制电路。

外部接口部分 该部分有3个8位并行I/O端口,即A口、B口和C口。

5-4编程题

1 试编程对8155进行初始化,设A口为选通输出,B口为选通输入,C口作为控制联络口,并启动定时器/记数器按方式1工作,工作时间为10ms,定时器计数脉冲频率为单片机的时钟频率24分频,fosc=12MHz。 解:算得初值=5000 =1388H

MOV DPTR,#7F04 ;定时器低八位寄存器地址 DPTR MOV A,#88H ;低8位初值 A

MOVX @DPTR,A ; 低8位初值 低8位寄存器 INC DPTR ;DPTR指向定时器高8位 MOV A,#13H ;高8位初值 A

MOVX @DPTR,A ;高8位初值 高8位寄存器 MOV DPTR,#7F00H ;8155命令寄存器地址 DPTR MOV A,0C5H ;命令字 A

MOVX @DPTR,A ;命令字 命令寄存器

2 设单片机采用8051,未扩展片外ROM,片外RAM采用一片6116,编程将其片内ROM从0100H单元开始的10B得内容依次外接到片外RAM从100H单元开始得10B中去。 解: MOV R2,#00H ;源数据缓冲器地址偏移量00H A MOV R3,#0AH ;字节长度 R3

MOV DPTR,#0100H ;源数据缓冲区首地址 DPTR MOV A,R2 ;源地址偏移量 A MOVC A,@A+DPTR ;传送一个数据 MOVX @DPTR,A

INC DPTR ;源地址(目的地址)加1

DJNZ R3,L1 ;数据全部传送完?没传送完,转L1继续传送 SJMP $ ;结束

3 8031扩展8255A,将PA口设置成输入方式,PB口设置成输出方式,PC口设置成输出方式,给出初始化程序。

解: 根据题目要求,A口输入,B口输出,二者均采用工作方式0,则控制字为98H。编程如下:

MOV A,#98H ;方式控制字 A

MOV DPTR,#7FFFH ;选通控制寄存器

MOVX @TPTR,A ;方式控制字送入8255A MOV DPTR,#7FFCH

MOVX A,@DPTR ;读PA口数据 MOV DPTR,#7FFDH ;

MOVX @DPTR,A ;送PB口数据

4 设计一个2×2行列式键盘电路并编写键盘扫描子程序。 解: (1)2×2行列式键盘电路如图所示。 5V

P1.7 P1.6 P1.1 P1.0

89C51

(2)键盘扫描子程序:

KEY1: ACALL KS1 ;调用判断有无键按下子程序 JNZ LK1 ;有键按下,转LK1 AJMP KEY1 ;无键按下,返回

LK1: ACALL T12MS ;调延时12ms子程序 ACALL KS1 ;查有无键按下

JNZ LK2 ;若有,则为键确实按下,转逐列扫描 AJMP KEY1 ;无键按下,返回 LK2: MOV R4,#00H ;首列号 R4 MOV R2,#FEH ;首列扫描字 R2 LK4: MOV A,R2 ;列扫描字 P1口 MOV P1,A ;使第一列线为0 MOV A,P1 ;读入行状态

JB ACC.0,LONE;第0行无键按下,转查第一行

MOV A,#00H ;第0行有键按下,该行首键号#00H A AJMP LKP ;转求键号

LONE: JB ACC.1,NEXT ;第一行无键按下,转查下一列 MOV A,#02 ;第一行有键按下,该行首键号#02 A LKP: ADD A,R4 ;键号=首行号+列号 PUSH ACC ;键号进栈保护 LK3: ACALL KS1 ;等待键释放 JNZ LK3 ;未释放,等待 POP AC ;键释放,键号 A RET ;键扫描结束

NEXT: INC R4 ;列号加1,指向下一列 MOV A,R2 ;列扫描字 A

JNB ACC.1,KND ;判断2列全扫描完?扫描完,转KND RL A ;没扫描完,扫描字左移一位,形成下一列扫描字 MOV R2,A ;扫描字 R2 AJMP LK4 ;扫描下一列

AJMP KEY1 ;全扫描完,返回

MOV A,#FCH ;全扫描字11111100B A MOV P1,A ;全扫描字 所有行 MOV A,P1 ;读取列值

CPL A ;取正逻辑,高电平表示有键按下 ANL A,#0C0H ;屏蔽低6位,取高2位 RET ;出口状态(A)!=0,有键按下

5 要求将存放在8031单片机内部RAM中30H—33H单元的4字节数据,按十六进制(8位)从做到右显示,试编制程序。 ORG 1000H ;指向显示缓冲区 MOV R0,#30H ;显示字节数

MOV R2,#04 ;初始显示位置(最高位) MOV P1,#08H ;取1B

联系合同范文客服:xxxxx#qq.com(#替换为@)