单片机原理及接口技术课后习题第9章答案.docx

上传人:b****3 文档编号:5077125 上传时间:2022-12-13 格式:DOCX 页数:33 大小:457.16KB
下载 相关 举报
单片机原理及接口技术课后习题第9章答案.docx_第1页
第1页 / 共33页
单片机原理及接口技术课后习题第9章答案.docx_第2页
第2页 / 共33页
单片机原理及接口技术课后习题第9章答案.docx_第3页
第3页 / 共33页
单片机原理及接口技术课后习题第9章答案.docx_第4页
第4页 / 共33页
单片机原理及接口技术课后习题第9章答案.docx_第5页
第5页 / 共33页
点击查看更多>>
下载资源
资源描述

单片机原理及接口技术课后习题第9章答案.docx

《单片机原理及接口技术课后习题第9章答案.docx》由会员分享,可在线阅读,更多相关《单片机原理及接口技术课后习题第9章答案.docx(33页珍藏版)》请在冰豆网上搜索。

单片机原理及接口技术课后习题第9章答案.docx

单片机原理及接口技术课后习题第9章答案

 

单片机原理及接口技术课后习题第9章答案

第九章复习思考题

1.计算机系统中为什么要设置输入输出接口?

输入/输出接口电路是CPU与外设进行数据传输的桥梁。

外设输入给CPU的数据,首先由外设传递到输入接口电路,再由CPU从接口获取;而CPU输出到外设的数据,先由CPU输出到接口电路,然后与接口相接的外设获得数据。

CPU与外设之间的信息交换,实际上是与I/O接口电路之间的信息交换。

2.简述输入输出接口的作用。

I/O接口电路的作用主要体现在以下几个方面:

(1)实现单片机与外设之间的速度匹配;

(2)实现输出数据锁存;(3)实现输入数据三态缓冲;(4)实现数据格式转换。

3.在计算机系统中,CPU与输入输出接口之间传输数据的控制方式有哪几种各有什么特点

在计算机系统中,CPU与I/O接口之间传输数据有3种控制方式:

无条件方式,条件方式,中断方式,直接存储器存取方式。

在无条件方式下,只要CPU执行输入/输出指令,I/O接口就已经为数据交换做好了准备,也就是在输入数据时,外设传输的数据已经传送至输入接口,数据已经在输入接口端准备好;输出数据时,外设已经把上一次输出的数据取走,输出接口已经准备好接收新的数据。

条件控制方式也称为查询方式。

CPU进行数据传输时,先读接口的状态信息,根据状态信息判断接口是否准备好,如果没有准备就绪,CPU将继续查询接口状态,直到其准备好后才进行数据传输。

在中断控制方式下,当接口准备好数据传输时向CPU提出中断请求,如果满足中断响应条件,CPU则响应,这时CPU才暂时停止执行正在执行的程序,转去执行中断处理程序进行数据传输。

传输完数据后,返回原来的程序继续执行。

直接存储器存取方式即DMA方式,它由硬件完成数据交换,不需要CPU的介入,由DMA控制器控制,使数据在存储器与外设之间直接传送。

4.采用74LS273和74LS244为8051单片机扩展8路输入和8路输出接口,设外设8个按钮开关和8个LED,每个按钮控制1个LED,设计接口电路并编制检测控制程序。

图9.1题3接口电路原理图

接口电路原理图如图9.1源程序:

MOVDPTR,#BFFFH;设置输入/输出口地址

COMT:

MOVXA,@DPTR;读取开关状态

NOP;延时,总线稳定

MOVX@DPTR,A;输出,驱动LED显示

NOP;延时,总线稳定

AJMPCONT

5.74LS377是8D触发器,其功能表见表9.17,其中Di为触发器的数据输入端,Qi为触发器的数据输出端,

是使能控制端,CLK是时钟输入端,Q0为建立稳态输入条件之前,锁存器输出Q的状态。

采用它为8051单片机扩展1个8位的并行输出口。

图9.2题5接口电路原理图

用74LS377扩展的输出口电路如图9-2所示。

用P2.7与74LS377的使能控制端

相连,当P2.7为0时,74LS377被选中,如果默认其他未用的地址线为1,则扩展的输出口地址为7FFFH。

由于MCS-51单片机的

接到74LS377的时钟输入端CLK,当CPU执行写外部输出口指令MOVX时,把数据输出到数据总线上,在

信号由低变高时,写出的数据被打入74LS377并锁存。

程序如下:

MOVDPTR,#7FFFH;输出口地址

MOVA,R6;取数据

MOVX@DPTR,A;输出,

6.74LS245是一种具有双向驱动的8位三态输出缓冲器,它的功能表见表9.18,其中

为使能端,DIR为方向控制端,A1~A8为A端的数据输入/输出,B1~B8为B端的数据输入/输出。

为低电平时,DIR为高电平把A端数据传送至B端;DIR为低电平,把B端数据传送至A端。

在其他情况下不传送数据,并输出呈高阻态。

采用它为8051单片机扩展1个8位的输入口。

(1)

(2)

图9-3题6采用74LS245扩展输入口的2种电路

图9-3为采用74LS245扩展输人接口电路。

电路

(1)中,DIR上拉为高电平,74LS245数据传送方向强制为B端到A端,当P2.0为0时,且

为低电平时,使能端

为低电平,74LS245三态门打开,单片机CPU读取外设输入的数据。

其他情况下,74LS245的三态门呈高阻状态。

电路

(2)中,只有单片机读取外设数据时,P2.0=0使74LS245的使能端

有效,如果

为低电平,把74LS245数据传送方向置为A端到B端,其A→B方向的三态门打开,单片机CPU读取外设输入的数据。

P2.0=1时,使能端

无效,A端和B端处于隔离状态。

图9-3的2个电路都采用P2.0为片选,其输入口地址为0FEFFH(默认未用地址线为1)。

7.采用8155芯片为8051单片机系统扩展接口,外设为开关组(8个开关组成)和8个LED,每个开关控制1个LED。

现需要读取开关组的状态,并把其状态存储到8155芯片RAM中,若开关组的开关全部断开,则不记录。

设计接口电路并编制检测程序。

图9.4题7接口电路

接口电路如图9.4所示,8155的PB口用作读取开关组状态,PA口用作控制LED组,分配地址如下:

命令/状态寄存器:

0100H;PA口:

0101H;PB口:

0102H;PA和PB口为基本输入输出方式。

K0控制LED0,K1控制LED1,以此类推。

设存储开关状态的单元为STATE。

程序如下:

CMMDEQU0100H

PORTAEQU0101H

PORTBEQU0102H

PORTCEQU0103H

STATEEQU20H

MOVA,#02H;初始化,工作方式控制字

MOVDPTR,#0100H;控制寄存器地址

MOVX@DPTR,A;设置工作方式,初始化完成

MOVA,#0FFH

MOVDPTR,#0101H

MOVX@DPTR,A;上电后,熄灭LED

NOP

MOVSTATE,#0FFH;没有开关闭合

DETECT:

MOVDPTR,#0102H;PB口地址

MOVXA,@DPTR;从PB口读开关状态

MOVDPTR,#0101H;PA口地址

MOVX@DPTR,A;从PA口输出控制LED指示灯

NOP

CJNEA,#0FFH,VALID

SJMPDETECT

VALID:

MOVSTATE,A;;记录开关状态

AJMPDETECT

8.采用8255芯片为8051单片机系统扩展接口,外设为开关组(8个开关组成)和8个LED,每个开关对应1个LED。

现需要每隔50ms读取一次开关组的状态,并把其状态存储到内部RAM中。

设计接口电路并编制检测程序。

假设系统晶振频率为12MHz。

图9.5单片机与8255接口电路

图9.5为接口电路,PA、PB、PC和控制寄存器地址分别为:

0000H、0001H、0002H和0003H。

根据开关K0~K7状态控制LED0~LED7的显示状态,K0控制LED0,依此类推。

设置8255的工作方式,PA口外接开关,为方式0的输入,PB口外接LED,为方式0的输出,则工作方式控制字的标志位D7为1,D6~D3(A组):

0000,D2~D0(B组):

010,组合后的控制字为:

10000010,即82H。

设存储开关状态的单元为STATE,用定时器/计数器T0定时50ms,工作方式为方式1,初始值为:

,即3CB0H

PORTAEQU0100H

PORTBEQU0101H

PORTCEQU0102H

CMMDEQU0103H

STATEEQU20H

//mianprogram

ACALLIni8255;

ACLLIniTimer0

WAIT:

JBCTF0,DETECT

SJMPWAIT

DETECT:

MOVTH0,#3CH

MOVTL0,#0B0H

MOVDPTR,#PortB;PB口地址

MOVXA,@DPTR;从PB口读开关状态

MOVDPTR,#PortA;PA口地址

MOVX@DPTR,A;从PA口输出控制LED指示灯

NOP

MOVSTATE,A

AJMPWAIT

Ini8255:

MOVA,#82H;初始化,工作方式控制字

MOVDPTR,#CMMD;控制寄存器地址

MOVX@DPTR,A;设置工作方式,初始化完成

MOVA,#0FFH

MOVDPTR,#PORTA

MOVX@DPTR,A;上电后,熄灭LED

NOP

RET

IniTimer0:

MOVTMOD,#01H

MOVTH0,#3CH

MOVTL0,#0B0H

SETBTR0

RET

9.简述矩阵键盘的行列扫描和线反转法原理。

(1)行列扫描法:

在按键识别过程时,依次使行线输出电平,然后检查列线的输入电平,如果所有列线的输入全为高电平,则该行无按键按下;如果不全为高电平,则被按下的按键在本行,且在输入电平变为低电平的列的交叉点上。

(2)线反转法:

第一步,首先使行线为输入,列线为输出。

列线全部输出低电平,那么,行线中变为低电平的行线为按键所在的行。

第二步,使行线变为输出,列线变为输入。

行线输出全部为低电平,那么,列线中变为低电平的列线为按键所在的列。

10.一个简单计数器的电路原理图如图所示。

要求每按一次S键,计数器计数一次,计数值送P1口显示,采用单只数码管显示,计16次后从0开始。

图9.6题10原理图

1BITP3.3

VALUEEQU20H

ORG0000H

LJMPMAIN

ORG1000H

MAIN:

SETBP3.3

MOVVALUE,#00

ACALLDISP;初始化显示0

WAIT0:

JBS1,WAIT0;

ACALLDEL10MS

WAIT1:

JBS1,WAIT1;判断按下

WAIT2:

JNBS1,WAIT2;

ACALLDEL10MS

WAIT3:

JNBS1,WAIT3;判断释放

INCVALUE;加1

ANLVALUE,#00001111B;仅显示低位

ACALLDISP;显示

SJMPWAIT0

//显示子程序

DISP:

MOVA,VALUE;取显示信息

MOVDPTR,#SEG_TAB;字型码表的首地址

MOVCA,@A+DPTR;通过显示信息查其字型码

MOVP1,A;输出显示

NOP

RET

//延时子程序

DEL10MS:

MOVR5,#10

DELX:

MOVR6,#200

DEL0:

NOP

NOP

NOP

DJNZR6,DEL0

DJNZR5,DELX

RET

SEG_TAB:

DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H

DB88H,83H,0C6H,0A1H,86H,8EH;以下为显示字型码表,0~9,A~F

END

11.简述LED数码管的静态显示和动态显示原理。

(1)静态显示:

在多位静态显示时,各个LED数码管相互独立,公共端COM接地(共阴极)或接正电源(共阳极)。

每个数码管的8个显示字段控制端分别与一个8位并行输出口相连,只要输出口输出字型码,LED数码管就立即显示出相应的字符,并保持到输出口输出新的字型码。

(2)动态显示:

多位LED数码管动态显示方式是各个LED数码管一位一位地轮流显示。

在硬件电路上,各个数码管的显示字段控制端并联在一起,由一个8位并行输出口控制;各个的LED数码管的公共端作为显示位的位选线,由另外的输出口控制。

动态显示时,各个数码管分时轮流地被选通,即在某一时刻只选通一个数码管,并送出相应的字型码,并让该数码管稳定地显示一段短暂的时间,在下一时刻选通另一位数码管,并送出相应的字型码显示,并保持显示一段时间,如此循环,即可以在各个数码管上显示需要显示的字符。

图9.7LED数码管静态显示原理图9.8LED数码管动态显示原理

12.用P1和P3口作为输出口,设计一个5位的LED数码管显示系统,并在显示器上显示“HELLO”。

图9.9题12接口电路图

接口电路图如图9.9所示,用2片74LS245提高接口的驱动能力,LED数码管为共阴型。

程序如下:

SEG_OUTEQUP3

BIT_OUTEQUP1

//====================================

ORG0000H

LJMPSTART

ORG0030H

START:

MOVSP,#60H

MOV20H,#40H//显示"HELLO"对应字型表序号编码:

401223

MOV21H,#12H

MOV22H,#23H

MOVR1,#30H

MOVR0,#20H

CALLSPLIT

INCR0

INCR1

CALLSPLIT

INCR0

INCR1

CALLSPLIT

RED:

ACALLDSPLY1

SJMPRED

//===================================

SPLIT:

MOVA,@R0

ANLA,#0F0H

SWAPA

MOV@R1,A

INCR1

MOVA,@R0

ANLA,#0FH

MOV@R1,A

RET

//===========================================

//6位显示

DSPLY1:

MOVR0,#30H;显示缓冲区地址

MOVR2,#11111110B;显示起始位置

REDO:

ACALLDISP;显示1位

MOVA,R2;计算下一个显示位置

RLA

MOVR2,A

INCR0;修改显示缓冲区地址指针

XRLA,#10111111B;6位显示完否

JNZREDO;未完,继续显示

RET;返回

//==========================================

;显示一位子程序

DISP:

MOVDPTR,#LED_SEG;字型码表首地址

MOVA,@R0;取显示数据

MOVCA,@A+DPTR;求显示数据的字型码

MOVSEG_OUT,A;输出字型码

MOVA,R2;取显示位置

MOVBIT_OUT,A;显示

ACALLDL1MS

MOVA,#0FFH;稳定显示1ms

MOVBIT_OUT,A

RET

;字型码表

LED_SEG:

DB76H;H序号:

00

DB79H;E序号:

01

DB38H;L序号:

02

DB3FH;0序号:

03

DB00H;BLANK序号:

04

DL1MS:

MOVR5,#200;12M时延时1ms

DEL:

NOP

NOP

NOP

DJNZR5,DEL

RET

END

13.一个显示电路如图9.60所示。

请采用串行口方式0实现LED数码管的动态显示,在显示器上自左向右动态显示“654321”,每个字符保持时间为0.1s。

图9.10习题13原题电路图

ORG0000H

LJMPSTART

ORG0030H

START:

MOVSP,#60H

MOV20H,#12H//显示数据

MOV21H,#34H

MOV22H,#56H

MOVR1,#30H

MOVR0,#20H

CALLSPLIT//分离BCD码

INCR0

INCR1

CALLSPLIT

INCR0

INCR1

CALLSPLIT

RED:

ACALLDISPLY

SJMPRED

//===================================

SPLIT:

MOVA,@R0

ANLA,#0F0H

SWAPA

MOV@R1,A

INCR1

MOVA,@R0

ANLA,#0FH

MOV@R1,A

RET

//================================

DISPLY:

MOVR0,#30H;显示缓冲区首地址

MOVR2,#05H;显示位置,最右端1位

NEXT:

ACALLDISP11;显示

INCR0;修改显示缓冲区地址指针

DECR2;计算下一位显示位置

CJNER2,#0FFH,NEXT;6位显示完否?

RET;显示完返回

;显示1位子程序

DISP11:

MOVA,@R0;取显示数据

MOVDPTR,#SEG_TAB

MOVCA,@A+DPTR;取显示数据的字型码

MOVSBUF,A;输出字型码

GOON:

JBCTI,DPLY

AJMPGOON

DPLY:

MOVA,R2

MOVP1,A;输出显示位置

ACALLDL100MS;延时

MOVP1,#07H

RET

;字型码表

SEG_TAB:

DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H

DB88H,83H,0C6H,0A1H,86H,8EH

//====================================

DL1MS:

MOVR5,#200;12M时延时1ms

DEL:

NOP

NOP

NOP

DJNZR5,DEL

RET

DL100MS:

MOVR6,#100

DELX0:

ACALLDL1MS

DJNZR6,DELX0

RET

END

14.采用8155或8255扩展I/O口,设计一个显示电路显示“654321”。

图9.11采用8255扩展的LED数码管动态显示接口电路

图9.11为采用8255扩展的LED数码管动态显示接口电路。

图中PA口用于输出字型码,PB口用于输出显示位置,LED数码管为共阴型,显示位置采用译码器译码的方式实现。

在电路中采用同相缓冲器74LS07提高PA口的驱动能力,同相驱动器SN75451用于驱动显示器的公共端。

电路中8255的PA和PB口处于基本输入/输出方式的输出模式,PA口地址为0000H,PB口为0001H,命令寄存器地址为0003H。

定义SEG_OUT为PA口地址,BIT_OUT为PB口地址。

程序如下:

//定义区

SEG_OUTEQU0000H//PortA输出字型码

BIT_OUTEQU0001H//PortB输出位控码

PortCEQU0002H//

CMMDEQU0003H//命令寄存器地址

//========================

ORG0000H

LJMPSTART

ORG0030H

START:

MOVSP,#60H

MOVDPTR,#CMMD//8255初始化

MOVA,#10000000B//方式0,A/B/C口为输出

MOVX@DPTR,A

NOP

NOP

MOV20H,#12H//显示数据

MOV21H,#24H

MOV22H,#56H

MOVR1,#30H

MOVR0,#20H

CALLSPLIT

INCR0

INCR1

CALLSPLIT

INCR0

INCR1

CALLSPLIT

RED:

ACALLDSPLY2

SJMPRED

//===================================

SPLIT:

MOVA,@R0

ANLA,#0F0H

SWAPA

MOV@R1,A

INCR1

MOVA,@R0

ANLA,#0FH

MOV@R1,A

RET

//===========================================

//6位显示

DSPLY2:

MOVR0,#30H;显示缓冲区首地址

MOVR2,#00000000B;显示起始位置

REDO:

ACALLDISP;显示1位

INCR2;计算下一次的显示位置

INCR0;修改显示缓冲区指针

CJNER2,#06H,REDO;6位显示完否?

RET;显示结束返回

//==========================================

;显示一位子程序

DISP:

MOVDPTR,#LED_SEG;字型码表首地址

MOVA,@R0;取显示数据

MOVCA,@A+DPTR;求显示数据的字型码

MOVDPTR,#SEG_OUT;字型码输出口地址

MOVX@DPTR,A;输出字型码

MOVA,R2;取显示位置

MOVDPTR,#BIT_OUT;显示位置输出口地址

MOVX@DPTR,A;显示

ACALLDL1MS

MOVA,#0FFH;稳定显示1ms

MOVX@DPTR,A

RET

;字型码表

LED_SEG:

DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H;'0,1,2,3,4,5,6,7'

DB7FH,6FH,77H,7CH,39H,5EH,79H,71H;'8,9,A,B,C,D,E,F'

DB3EH,50H,40H,08H,00H;'U,r,-,_,BLANK

//======================================

DL1MS:

MOVR5,#

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

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1