单片机课后部分答案.docx
《单片机课后部分答案.docx》由会员分享,可在线阅读,更多相关《单片机课后部分答案.docx(19页珍藏版)》请在冰豆网上搜索。
单片机课后部分答案
1.12写出下列各十进制数在八位微型计算机中的原码、反码和补码形式。
①X=+38②X=+76③X=-54
④X=-115⑤X=-42
解:
①[X]原=[X]反=[X]补=00100110B;
②[X]原=[X]反=[X]补=01001100B
③[X]原=10110110B,[X]反=11001001B,[X]补=11001010B
④[X]原=11110011B,[X]反=10001100B,[X]补=10001101B
⑤[X]原=10101010B,[X]反=11010101B,[X]补=11010110B
1.13已知原码如下,写出其反码和补码。
①[X]原=01011001B②[X]原=11011001B
③[X]原=00101110B④[X]原=1111100B
解:
①[X]原=[X]反=[X]补=01011001B;
②[X]原=11011001B,[X]反=10100110B,[X]补=10100111B
1.14先把下列各数转换成二进制数,然后按补码运算规则求出[X+Y]补及其真值。
①X=+46,Y=+55②X=+78,Y=+15
③X=-51,Y=+97④X=+112,Y=-83
解:
①[X]补=00101110B,[Y]补=00110111B;[X+Y]补=01100101B=+101D
②[X]补=01001110B,[Y]补=00001111B;[X+Y]补=01011101B=+93D
③[X]补=11001101B,[Y]补=01100001B;[X+Y]补=00101110B=+46D
④[X]补=01110000B,[Y]补=10101101B;[X+Y]补=00011101B=+29D
1.15已知X和Y的补码,计算[X+Y]补和[X-Y]补,并判断运算结果是否有溢出。
①[X]补=10011011B②[X]补=00100110B③[X]补=10110001B
[Y]补=11100011B[Y]补=00010111B[Y]补=10001110B
解:
①[X+Y]补=101111110B,C7⊕C6=1⊕0=1,结果溢出;
[-Y]补=00011101B,[X-Y]补=010111000B,C7⊕C6=0⊕0=0,结果无溢出;
②[X+Y]补=000111101B,C7⊕C6=0⊕0=0,结果无溢出;
[-Y]补=11101001B,[X-Y]补=100001111B,C7⊕C6=1⊕1=0,结果无溢出;
③[X+Y]补=100111111B,C7⊕C6=1⊕0=1,结果溢出;
[-Y]补=01110010B,[X-Y]补=100100011B,C7⊕C6=1⊕1=0,结果无溢出;
第2章
2.1,8051单片机内部结构主要有哪些部件组成?
它们的主要功能各是什么?
答:
8051单片机内部结构主要有:
(1)中央处理器CPU,是单片机的核心,完成运算和控制功能;
(2)内部数据存储器(256字节),前面128个单元00H~7FH存储内部数据,后面128个单元80H~FFH被专用寄存器占用,用来实现对片内各部件进行管理、控制、监视;
(3)程序计数器PC,是一个16位专用寄存器,其内容为下一条执行指令的地址;
(4)内部程序存储器ROM(4K),用于存储程序、原始数据、表格等;
(5)4个并行I/O口(8位),实现数据的并行输入输出;
(6)串行通信口,实现单片机和其他数据设备之间的串行数据传送;
(7)2个定时器/计数器(16位),实现定时或计数功能;
(8)中断控制系统,共5个中断源,分高低两个优先级;
(9)一个片内振荡器和时钟电路,为单片机产生时钟脉冲序列;
(10)总线,用于连接各个部件和单片机系统的扩展。
3.8051单片机的引脚/
/VPP、RST/VPD、ALE/
和
的功能分别是什么?
答:
:
:
片内外ROM选择端,ROM的寻址范围为64KB,而AT89C51内部只有4KBROM,当不够用时可在外扩展ROM。
当/EA信号为低电平时,指访问外部ROM;当/EA为高电平时,则先访问内部ROM,当PC值超过4KB时自动转向外部ROM中执行。
RST:
复位信号,当此引脚上的信号出现至少两个机器周期的高电平将使单片机复位。
ALE:
地址锁存控制信号,当系统扩展时,ALE用于控制把P0口输出的低8位地址送入锁存器存起来,以实现低位地址和数据的分时传送。
:
外部ROM的读选通信号,在访问外部ROM时,每个机器周期两次PSEN有效(低电平),但在此期间内,每当访问外部数据存储器时,这两次有效的PSEN将不出现。
第5章
5.9已知单片机晶振频率为6MHz,要求使用T1定时50ms,工作在方式1,允许中断,试计算初值并编写初始化程序。
答:
①计算定时器T1的初值
已知晶振频率为6MHz,则机器周期为12/fosc=2µs
使用T1定时功能,工作在方式1,定时时间为50ms,则T1的初值为:
所以T1的初值为:
TH1=9EH,TL1=58H。
②定时/计数器方式寄存器TMOD的设置
要求用T1定时、工作在方式1、软启动,所以TMOD寄存器应按如下设置:
T1
T0
GATE
M1
M0
GATE
M1
M0
0
0
0
1
×
×
×
×
所以TMOD=10H。
③允许T1中断,中断允许寄存器IE设置如下:
④T1的初始化程序如下:
MOVTMOD,#10H;置定时器1工作方式1
MOVTH1,#9EH;送初值
MOVTL1,#58H
MOVIE,#88H;开中断
SETBTR1;启动定时器
5.12设MCS-51单片机时钟为12MHz,请利用内部定时器T1编写从P1.1引脚输出3ms矩形波的程序,要求占空比为2:
1(高电平2ms,低电平1ms)。
答:
要求矩形波周期3ms,占空比2:
1,就是在一个周期中,高电平2ms,低电平1ms
①定时器T1工作在方式1,其方式寄存器TMOD为:
②计算初值:
机器周期=12/fosc=1µs
对1ms定时,初值X1为:
X1=65536—1000/1=64536=FC18H
对2ms定时,初值X2为:
X2=65536—2000/1=63536=F830H
③中断允许寄存器IE为:
④程序如下:
ORG0000H
LJMPSTART
ORG001BH
LJMPBRT1
ORG0030H
START:
MOVTMOD,#10H
MOVTH1,#0F8H
MOVTL1,#30H
MOVIE,#88H
SETBTR1
SETBP1.1
LOOP:
SJMPLOOP
ORG0100H
BRT0:
MOVC,P1.1
JCNEXT
MOVTH1,#0F8H
MOVTL1,#30H
SJMPCOM
NEXT:
MOVTH1,#0FCH
MOVTL1,#18H
COM:
CPLP1.1
RETI
END
5.13已知晶振频率为6MHz,设计程序使P1.4和P1.5外接灯自动轮流点亮,间隔时间为0.5s。
答:
要求间隔0.5s轮流点亮两个灯,则定时器需要定时0.5s,这个值已经超过了定时器的最大定时时间。
为此,可采用定时器定时与软件计数相结合的方法来解决问题。
本题用定时器T0,每隔0.1s中断1次,向CPU申请中断,用R0计中断的次数。
当R0计到5次中断时,则0.5秒时间到,轮流点亮两个只发光二极管。
①定时/计数器方式寄存器TMOD的设置
要求用T0定时、工作在方式1、软启动,所以TMOD寄存器应按如下设置:
T1
T0
GATE
M1
M0
GATE
M1
M0
×
×
×
×
0
0
0
1
所以TMOD=01H。
②计算定时器T0的初值
已知晶振频率为6MHz,则机器周期为12/fosc=2µs
采用定时功能工作方式1,定时时间为100ms,则T0的初值为:
所以T0的初值为:
TH0=3CH,TL0=B0H。
③当T0定时到向CPU申请中断,所以T0应开中断,中断允许寄存器IE设置如下:
④程序如下:
ORG0000H
LJMPSTART
ORG000BH;T0中断入口
LJMPBKT0
ORG0100H
START:
SETBP1.4;点亮1个LED灯
CLRP1.5
MOVR0,#05H;设置中断次数5次
MOVTMOD,#01H;置定时器0工作方式1
MOVTH0,#3CH;送初值
MOVTL0,#0B0H
MOVIE,#82H;开中断
SETBTR0;启动定时器
LOOP:
CJNER0,#00H,NEXT;R0≠0则转NEXT
MOVR0,#05H;否则1s延时到,重置R0
CPLP1.4
CPLP1.5
NEXT:
SJMPLOOP
ORG0300H
BKT0:
DECR0
MOVTH0,#3CH;重置初值
MOVTL0,#0B0H
RETI
END
第6章
6.5试用线选法画出8031对二片2764的连线图,并详细列出基本地址范围和重叠地址范围。
答:
8031通过P2.7和P2.6两根口线分别选通二片2764的接线图如图所示:
上图程序存储器扩展系统中各片2764的地址范围见下表,其中P2.5脚悬空,取不同值时可得重叠地址范围如表所列。
2764编号
A15A14A13A12A11A10A9A8A7A6A5A4A3A2A1A0
重叠地址范围
1#
2764
(P2.7=0)
01×0000000000000
………………………………………
01×1111111111111
4000H~5FFFH
6000H~7FFFH
2#
2764
(P2.6=0)
10×0000000000000
………………………………………
10×1111111111111
8000H~9FFFH
A000H~BFFFH
当悬空脚P2.5取0时的地址范围即为基本地址范围,即1#2764的基本地址范围为4000H~5FFFH,2#2764的基本地址范围为8000H~9FFFH。
6.9MCS-51单片机P1口的P1.0~P1.7分别通过反相器接8个发光二极管。
要求编写程序,每当外中断1有中断请求信号输入时,点亮的发光二极管向右移一位,试编写程序。
答:
依题意,51单片机I/O接口电路如下图所示:
程序如下:
ORG0000H
LJMPMAIN
ORG0013H;INT1中断入口
LJMPBREAK1
ORG0030H
MAIN:
SETBIT1;置下降沿触发方式
SETBEA
SETBEX1
MOVP1,#80H;先点亮VL7
WAIT:
NOP
SJMPWAIT
ORG0100H;中断服务程序
BREAK1:
RRA;每中断1次,灯右移1位
MOVP1,A
RETI
END
6.12用8255A扩展MCS-51单片机的I/O接口,若8255A的A口用作输入,每一位外接一个开关;C口用作输出,每一位通过反相器接一个发光二极管。
要求当A口开关闭合(低电平)时C口对应位发光二极管点亮,画出接口电路,列出8255A各I/O口地址并编写程序。
答:
①51单片机与8255A接口电路如下图所示:
②依题意,8255A的A口和C口都工作于方式0,且A口用作输入,C口用作输出,则方式控制字设置如下:
③根据硬件连接,8255A各I/O口地址如下表所列,其中A15(P2.7)必须取0,才能选中8255A,而A14~A8可任意取,此处均取“1”。
8255A端口
A15A14A13A12A11A10A9A8A7A6A5A4A3A2A1A0
十六进制地址
A口
0111111100000000
7F00H
B口
0111111100000001
7F01H
C口
0111111100000010
7F02H
控制口
0111111100000011
7F03H
④由于某开关闭合时对应的引脚是逻辑“0”,而要点亮发光管应该输出逻辑“1”,因此从A口输入的开关状态需要取反后再从C口输出,才能对应点亮外接发光二极管,程序如下:
ORG0500H
MAIN:
MOVDPTR,#7F03H;DPTR←控制口地址
MOVA,#90H;方式控制字
MOVX@DPTR,A;8255A←控制字
INPA:
MOVDPTR,#7F00H;指向8255的A口
MOVXA,@DPTR;A←8255的A口
CPLA;取反
MOVDPTR,#7F02H;指向8255的C口
MOVX@DPTR,A;8255的C口←A
MOVR7,#20;延时
DEL0:
MOVR6,#0FFH
DEL1:
DJNZR6,DEL1
DJNZR7,DEL0
SJMPINPA
END
7.4说明静态显示和动态显示的特点?
答:
静态显示是指LED显示器显示某一字符时,相应的发光二极管恒定导通或恒定截止。
这种显示方式要求各位显示块的公共端恒定接地(共阴极)或接正电源(共阳极)。
每个显示块的8个段选线分别与一个8位并行I/O口的8位口线相接,I/O口只要有段码输出,相应字符就被显示出来,并保持不变。
直到I/O口输出新的段码。
动态显示是一位一位地轮流点亮各位显示器,这种逐位点亮显示器的方式称为位扫描。
这种显示方式要求各位显示器的段选线应并联在一起,由一个8位的I/O口控制;各位的位选线(公共阴极或阳极)由另外的口线控制。
该方式显示时,各位显示器轮流选通,要使其稳定显示必须采用扫描方式,即在某一时刻只选通一位显示器,并送出相应的段码,进行适当延时(延时时间约为1~5ms),接着选通另一位显示器,并送出相应的段码,如此循环往复,即可使各位显示器显示相应的字符。
只要循环时间足够短,利用人眼的视觉暂留效应,就可以给人同时显示的感觉。
7.11请用AT89C51单片机的P1口设计一个3×3的键盘电路,并编写相应的键盘程序。
答:
ORG0030H
KEYSCAN:
ACALLKSCAN;查有没有键按下
JZGORET;A=0表示没有键按下,返回
LCALLDELAY10ms;有键按下,延时10ms(DELAY10ms略)。
ACALLKSCAN;再查有没有键按下
JZGORET;A=0表示没有键按下,返回
ACALLKEYSUM;有键按下,扫描确定键值
RLA
RLA;键值×4
;主要考虑FTAB以下指令LCALL(3字节)和RET(1字节)的总字节数为4
MOVDPTR,#FTAB
JMP@A+DPTR;散转,执行所按键相应功能子程序
GORET:
RET
FTAB:
LCALLFUNC0;调用0号键功能子程序
RET
LCALLFUNC1;调用1键功能子程序
RET
……
LCALLFUNC8;调用8键功能子程序
RET
LCALLERRSUB;键值为9,异常处理
RET
;KSCAN为判断有无键按下子程序,
表示有键按下
KSCAN:
MOVP1,#0F8H;行线置低电平,列线置输入态
MOVA,P1;读列线数据
CPLA;A取反
ANLA,#0F8H;屏蔽行线
RET;返回,
表示有键按下
;KEYSUM为求键值子程序,键值在A中
KEYSUM:
MOVR6,#00H;R6存放每行最左键的键值,初始清零
MOVR7,#0FEH;准备扫描第0行
LOOP:
MOVP1,R7;逐行输出0扫描
MOVA,P1;读列线数据
JBACC.3,L1;第0列无键按下,转查第1列
MOVA,#0;第0列有键按下,
SJMPKSOLVE;转求键值
L1:
JBACC.4,L2;第1列无键按下,转查第2列
MOVA,#1;第1列有键按下,
SJMPKSOLVE;转求键值
L2:
JBACC.5,NEXT;4列均无键按下,本行扫描结束
MOVA,#2;第3列有键按下,
SJMPKSOLVE;转求键值
NEXT:
MOVA,R7;准备扫描下一行
JNBACC.2,ERR;扫描完未读到键值,异常处理
RLA;R7循环左移一位
MOVR7,A;得到下一行行扫描字
ADDR6,#3;得到下一行首键键值
SJMPLOOP;转LOOP,扫描下一行
ERR:
MOVA,#9;键值赋9,表示出错!
RET
KSOLVE:
ADDA,R6;得键值
PUSHACC;键值进栈暂存
WAIT:
ACALLKSCAN;查按键释放否?
防止重复执行键功能
JNZWAIT;没有释放,等待
POPACC;键值出栈
RET
8.3什么是D/A转换器,它有哪些主要指标?
简述其含义?
答:
1).D/A转换器的基本原理实际上是把输入数字量中的每位都按其权值分别转换成模拟量,并通过运算放大器求和相加,即“按权展开,然后相加”,实现数模转换。
2).它有以下主要指标:
分辨率,其含义是D/A转换器能分辨的最小输出电压增量,常为满量程的
倍。
转换精度,其含义是D/A转换器实际输出值和理论值的接近程度。
偏移误差,其含义是输入数字量为0时,输出模拟量对0的偏移值。
线性度,其含义是D/A转换器实际转换特性和理想直线间的最大偏差。
8.4什么是A/D转换器,它有哪些主要指标?
简述其含义?
答:
1).A/D转换器是一种能把输入模拟电压或电流变成与它成正比的数字量,即能把被控对象的各种模拟信息变成计算机可以识别的数字信息。
2).它有以下主要指标:
分辨率,其含义是使输出数字量变化一个相邻数码所需输入模拟电压的变化量。
量化误差,其含义是ADC的有限位数对模拟量进行量化而引起的误差。
偏移误差,其含义是当输入信号为0时,输出信号不为0的值。
满刻度误差,其含义是满刻度输出数码所对应的实际输入电压与理想输入电压之差。
线性度,其含义是转换器实际的转换特性与理想直线的最大偏差。
绝对精度,其含义是在一个转换器中,任何数码所对应的实际模拟量输入与理论模拟输入之差的最大值。
转换速率,其含义是能够重复进行数据转换的速度,即每秒转换的次数。
8.5DAC0832芯片内部逻辑上由哪几部分组成?
有哪几种工作方式?
答:
DAC0832芯片内部逻辑由一个8位输入寄存器、一个8位DAC寄存器和一个8位D/A转换电路组成。
DAC0832芯片共有三种工作方式,分别是直通方式、单缓冲器方式和双缓冲器方式。
8.15请画出实现从A/D转换芯片ADC0809的IN0路采集模拟信号,并从D/A转换芯片DAC0832输出的AT89C51单片机的接口电路,并编写相应的程序。
答:
ORG0000H
LJMPSTART
ORG0003H;外部中断0入口地址
LJMPADINT0
ORG0030H
START:
SETBIT0;置INT0边缘触发
SETBEX0
SETBEA;开中断
MOVDPTR,#7FF8H;指向ADC0809IN0的通道地址
MOVX@DPTR,A;启动A/D转换
SJMP$
ADINT0:
MOVDPTR,#7FF8H;指向IN0的通道地址
MOVXA,@DPTR;读取转换结果
MOVDPTR,#0BFFFH;片选DAC0832
MOVX@DPTR,A;完成D/A输出
MOVDPTR,#7FF8H;指向ADC0809IN0的通道地址
MOVX@DPTR,A;再次启动A/D转换
RETI
END