单片微型计算机原理及接口技术 杨光友主编课后习题答案.docx
《单片微型计算机原理及接口技术 杨光友主编课后习题答案.docx》由会员分享,可在线阅读,更多相关《单片微型计算机原理及接口技术 杨光友主编课后习题答案.docx(22页珍藏版)》请在冰豆网上搜索。
![单片微型计算机原理及接口技术 杨光友主编课后习题答案.docx](https://file1.bdocx.com/fileroot1/2023-2/1/cec0d5c7-60bb-42b7-b39a-19d1431d059d/cec0d5c7-60bb-42b7-b39a-19d1431d059d1.gif)
单片微型计算机原理及接口技术杨光友主编课后习题答案
习题二
2-1试述8051单片机主要由哪几个部分构成?
1.一个8位微处理器CPU
2.数据存储器RAM和特殊功能寄存器
3.内部程序存储器ROM
4.两个定时/计数器
5.四个8位可编程的I/O并行端口
6.一个串行端口
7.中断控制系统
8.内部时钟电路
2-2MCS-51单片机的片外总线是怎样构成的?
试画出其结构示意图。
1.片外总线构成:
1)地址总线AB2)数据总线DB3)控制总线CB
2.结构示意图
2-3MCS-51单片机四组并行I/O口在使用时各有什么特点?
1.P0口特点:
1)作输出口使用时,由于输出驱动为漏极开路式,需外接上拉电阻,阻值一般为5~10K.
2)作输入口使用时,在输入数据时,应先向端口写入”1”,使引脚处于悬浮状态,再读入数据.
3)扩展ROM和(或)RAM时,作为地址/数据总线使用(地址A7~A0,数据D7~D0)
2.P1口特点:
1)作输出口使用时,无需外接上拉电阻(内部有上拉电阻)
2)作输入口使用时,在输入数据时,应先向端口写入”1”,使引脚处于悬浮状态,再读入数据.
3.P2口特点:
1)作输出口使用时,无需外接上拉电阻(内部有上拉电阻)
2)作输入口使用时,在输入数据时,应先向端口写入”1”,使引脚处于悬浮状态,再读入数据.
3)扩展ROM和(或)RAM时,作为地址/数据总线使用(地址A15~A8,数据D15~D8)
4.P3口特点:
1)作输出口使用时,无需外接上拉电阻(内部有上拉电阻)
2)作输入口使用时,在输入数据时,应先向端口写入”1”,使引脚处于悬浮状态,再读入数据.
3)第二功能如下表
2-4MCS-51单片机的存储器有几个存储空间?
各自的地址范围和容量是多少?
使用时各有什么特点?
四个存储空间:
(不同的单片机有所不同)
1.
片内RAM,地址范围:
00H~FFH,共256个字节
1)00H~1FH为通用寄存器区,共分四组
(0组1组2组3组,由PSW的RS1RS0决定,复位时自动选中0组)
每组8个寄存器R0~R7
2)20H~2FH为位寻址区,共128位(16*8)
3)30H~7FH为通用RAM区,共64个字节
4)80H~FFH为特殊功能寄存器(SFR)区,共128个字节
并行口串行口中断系统定时/计数器等功能单元和状态寄存器等共21个单元离散的分布在这个区中,其他空闲单元不能使用
2.片外RAM,地址范围:
0000H~FFFFH,共64K字节
3.
片内ROM(EA=1),地址范围:
0000H~0FFFH,共4K字节
4.
片外ROM(EA=0),地址范围:
0000H~FFFFH,共64K字节
2-5在单片机内RAM中哪些字节有位地址?
哪些字节没有位地址?
特殊功能寄存器中安排位地址的作用何在?
有位地址的字节:
20H~2FH80H88H90H98HA0HA8HB0HB8HD0HE0HF0H
SFR安排地址位的作用:
可按位访问,方便使用
2-6什么叫振荡周期、时钟周期、机器周期和指令周期?
振荡周期----为单片机提供时钟信号的振荡源的周期
时钟(状态)周期----振荡源信号经二分频后形成的时钟脉冲信号
机器周期-----完成一个基本操作所需的时间,由6个时钟(状态)周期组成
指令周期----CPU执行一条指令所需的时间
时钟(状态)周期=2振荡周期
机器周期=6时钟(状态)周期=12振荡周期
指令周期=1个或2个或4个机器周期
2-7若单片机使用的晶振为6MHz,那么振荡周期、机器周期和指令周期分别是多少?
fosc=6MHZ
T振荡=1/fosc=0.167μs
T机器=12*T振荡=2μs
T指令=(1~4)T机器=2~8μs
2-8当单片机使用的晶振为12MHz时,执行一条指令所需的最长时间为多少?
fosc=12MHZ
T指令=1~4μs
TMAX指令<=4μs
2-9说出单片机复位后,各特殊功能寄存器的初始化状态是什么
各特殊功能寄存器的初始化状态如表
特别SP=07H,P0~P3=FFH
注意:
复位后要先给SP赋值(30H~7FH),P0~P3置初值
习题三
3-1说明下列各条指令划线部分的寻址方式,并用图说明指令实现的操作。
(1)ADDA,30H;直接寻址
(2)MOVXA,@DPTR;寄存器间接寻址
(3)MOVCA,@A+PC;变址寻址
(4)ORL60H,#22H;直接寻址立即寻址
(5)MOV@R1,A;寄存器间接寻址
3-2查附录写出下列各条指令的机器码。
ACALL0100H;3100
LCAlL0300H;120300
AJMP0100H;2100
LJMP0300H;D20300
SJMP—5;80FB
SJMP$十5;8003
3-3设R0=7EH,DPTR=10FEH,片内RAM中7EH、7FH单元内容为0AAH、0BBH,试分析下列每条指令、增加注释并写出其执行结果。
INC@R0;(7EH)+17EH,(7EH)=0ABH
1NCR0;R0+1R0,(R0)=7FH
1NC@R0;(7FH)+17FH,(7FH)=0BCH
1NCDPTR;DPTR+1DPTRDPTR=10FFH
3-4若A=80H,R0=17H,(17H)=34H,执行下段程序后,A=?
ANLA,#17H;A=0
ORL17H,A;A=0(17H)=34H
XRLA,@R0;A=34H
CPLA;A=0CBH
3-5说明下段程序执行过程中,SP的内容以及堆栈中内容的改变过程。
MOVSP,#20H;SP=20H
MOVA,#20H;A=20H
MOVB,#30H;B=30H
PUSHACC;SP+1SP=21H,(21H)=20H
PUSHB;SP+1SP=22H,(22H)=30H
POPACC;(22H)A,SP-1SP=21H
POPB;(21H)B,B=20H,SP-1SP=20H
3-6有程序如下:
CLRRS1;位操作RS1=0
CLRRS0;位操作RS0=0
MOVA,#38H;字节操作A=38H
MOVR0,A;字节操作R0=38H
MOV29H,R0;字节操作(29H)=38H
SETBRS0;位操作RS0=1
MOVC,RS0;位操作C=RS0=1
MOVR1,A;字节操作R1=A=38H
MOV26H,A;字节操作(26H)=A=38H
MOV28H,C;位操作(28H)=C=1
ADDCA,26H;字节操作A+(26H)+CA=71H
试问:
(1)区分哪些是位操作指令?
哪些是字节操作指令?
(2)写出程序执行后有关寄存器和RAM中有关单元的内容。
3-7已知(61H)=0F2H,(62H):
0CCH。
说明下面程序功能,写出涉及的寄存器及片内RAM单元的最后结果。
MOVA,#61H;A=61H
MOVB,#02H;B=02H
DIVAB;A/B=A(商)=30H……B(余数)=01H
ADDA,62H;A+(62H)A=0FCH(C=0)
MOV63H,A;A(63H)=0FCH
CLRA;A=0
ADDCA,B;A+B+CA=01H
MOV64H,A;A(64H)=01H
3-8说明下面程序功能,在括号中填出所缺的机器码。
002078ADRl:
MOVRO,#ADRl
0022(79)ADR2:
MOVR1,#ADR2
00247ALl:
MOVR2,#LL
0026C3CLRC
0027E6LOOP:
MOVA,@R0
002837ADDCA,@R1
0029F6MOV@R0,A
002A081NCR0
002B091NCRl
002CDA(F9)DJNZR2,LOOP
002E80(FE)SJMP$
功能:
LL个字节的加法
被加数放在ADRl为首的单元内
加数放在ADR2为首的单元内
低字节放在低地址单元
结果放在被加数单元
3-9试编程将片外数据存储器1000H单元中的数据与片内RAM中30H单元中的内容互换
程序如下:
MOV31H,30H
MOVDPTR,#1000H
MOVXA,@DPTR
MOV30H,A
MOVA,31H
MOVX@DPTR,A
SJMP$
习题四
4-1两个4位BCD码数相加,设被加数和加数分别存于片内RAM的40H、41H和45H46H单元中,和数存于50H、51H单元中(均是低位在前,高位在后),试编写程序。
根据题意,最高位将不产生进位(或不考虑)
ORG0000H
LJMPSTART
ORG0200H
START:
MOVA,40H
ADDA,45H;低位相加
DAA;BCD调整
MOV50H,A;存和低位
MOVA,41H
ADDCA,46H;高位带进位位相加
DAA;BCD调整
MOV51H,A;存和高位
SJMP$
END
4-2已知片外RAM中2100H单元中存有一有符号整数。
试编写程序,求该单元数据的绝对值。
ORG0000H
LJMPSTART
ORG0200H
START:
MOVDPTR,#2100H
MOVXA,@DPTR
JNBACC.7NN;为正数,不变
CPLA(DECA);为负数,取反加一(或减一取反)
INCA(CPLA);A中为绝对值
NN:
SJMP$
如果要将绝对值存于原单元中,则NN后的程序变为:
NN:
MOVX@DPTR,A
SJMP$
END
4-3统计片外数据存储器2100H单元开始的数据块(长度为100个字节)中绝对值为100的数的个数。
ORG0000H
LJMPSTART
ORG0200H
START:
MOVDPTR,#2100H
MOVXA,@DPTR
JNBACC.7NN;为正数,不变
CPLA(DECA);为负数,取反加一(或减一取反)
INCA(CPLA);A中为绝对值
NN:
CJNEA,#100,MM;<>100转MM
INCR0;R0存绝对值为100的个数MM:
INCDPL;调整DPTR
MOVA,DPL
CJNEA,#100,AGI;不到100个,取下一个
SJMP$
END
4-4设单片机采用6MHz晶振,计算如下一段程序的执行时间,你能说明这段程序的作用吗?
T机器=1*12/fosc=12/6MHZ=2μs
MOVR0,#20H
(1);低位地址R0
MOVR3,#05H
(1);字节数-1R3
MOVA,@R0
(1)
CPLA
(1);低位取反加一
ADDA,#01H
(1);不能用INCA(不影响CY位)
MOV@R0,A
(1);以上程序共6个机器周期
NEXT:
INCR0
(1)
MOVA,@R0
(1)
CPlA
(1)
ADDCA,#00H
(1)
MOV@R0,A
(1)
DJNZR3,NEXT
(2);循环5次,每次7个机器周期
SJMP$
(2)
END
执行时间=(6+5*7)T机器=41*2=82μs
以上程序为求一个6字节的负数(补码)的绝对值
4-5编写程序,将片外数据存储器2000H单元开始的10个有符号数求平均值。
(假定其和在-128一+127之间)。
4-6将ROM中1000H单元开始的100个单元的数据移到片外数据存储器2000H开始的连续单元。
ORG0000H
LJMPAGI
ORG0200H
MOVDPTR,#1000H
AGI:
CLRA
MOVCA,@A+DPTR
XRLDPH,#30H;调整DPTR1000H2000H
MOVX@DPTR,A;传送
XRLDPH,#30H;调整DPTR2000H1000H
INCDPTR;调整DPTR
MOVA,DPL
CJNEA,#64H,AGI;DPL<64H,取下一个数
SJMP$
END
4-7在程序存储器中,从2000H到2100H有100H个有符号数,要求按下式
3XX>0
Y=255X=0
|X|+5X<0
根据变量X的大小求出Y值并放入数据存储器从2000H开始的相应单元。
画出程序流程图并编写源程序。
ORG0000H
LJMPSTAR
ORG0200H
STAR:
MOVDPTR,#2000H
START:
MOVCA,@DPTR
JBACC.7,NEG;X<0
JZZERO;X=0
MOVB,#03H;X>0
MULAB;Y=3X
LJMPSAVE
ZERO:
MOVA,#0FFH;Y=255
LJMPSAVE
NEG:
DECA
CPLA;绝对值
ADDA,#05H;Y=X绝对值+5
SAVE:
MOVX@DPTR,A;存结果
INCDPTR;调指针
MOVA,DPH
CJNEA,#21H,START;没完继续
SJMP$
END
4-8将4-6题改为子程序结构,画出程序流程图并编写源程序。
NUMEQU#64H
ORG0000H
LJMPSTART
ORG0100H
START:
MOVDPTR,#1000H
ACALLAGI
SJMP$
ORG0200H
AGI:
MOVCA,@DPTR
XRLDPH,#30H;调整DPTR1000H2000H
MOVX@DPTR,A;传送
XRLDPH,#30H;调整DPTR2000H1000H
INCDPTR;调整DPTR
MOVA,DPL
CJNEA,NUM,AGI;DPLRET
END
4-9用位操作指令实现下面的逻辑方程。
(1)P1.2=ACC.1·P1.4·PSW.1+20H·21H
(2)PSW.1=(PSW.2+20H+P3.3)·ACC.3+P1.2·P2.1
(1)ORG0100H
MOVC,ACC.1
ANLC,P1.4
ANLC,/PSW.1
MOV22H,C;暂存结果
MOVC,20H
ANLC,21H
ORLC,22H
MOVP1.2,C;结果输出
SJMP$
(2)ORG0100H
MOVC,/PSW.2
ORLC,20H
ORLC,P3.3
ANLC,ACC.3
MOV21H,C;暂存结果
MOVC,P1.2
ANLC,P2.1
ORLC,21H
CPLC
MOVPSW.1,C
SJMP$
习题五
5-18031单片机内设有几个定时/计数器?
它们是由哪些专用计时器构成,其地址分别是多少?
8031单片机内设有2个定时/计数器T0,T1
T0由TH0和TL0组成
T1由TH1和TL1组成
TH0地址:
8CH
TL0地址:
8AH
TH1地址:
8DH
TL1地址:
8BH
5-2试说明定时器方式寄存器TMOD中GATE位的作用。
如何用GATE位测量外部脉冲的宽度?
GATE位的作用:
GATE=0时,由TRX控制TX启停,常用.
GATE=1时,只有TRX和INTX都为1,才可启动TX.
测量外部脉冲宽度方法:
使GATE=1,TRX=1,外部脉冲接于INTX引脚,当INTX由0变1时,TX开始计数(方式0或1),当INTX由1变0时,TX停止计数(设初值TC=0即THX=0,TLX=0),检测TX常数的变化量(ΔTC,即THX,TLX).
脉冲宽度=ΔTC*T机器
5-3设单片机的ΦcLK=12MHz,要求用T0定时150µs,分别计算采用定时方式0、定时方式1和定时方式2的定时初值。
ΦcLK=12MHz,T机器=1µs
方式0:
TC=213-150/1=8192-150=8042=1F6DH=1111101101101B
TH0TL0低5位
所以初值TH0=FBH,TL0=0DH
方式1:
TC=216-150/1=65536-150=65386=FF6AH
所以初值TH0=FFH,TL0=6AH
方式2:
TC=28-150/1=256-150=106=6AH
所以初值TH0=TL0=6AH
5-4单片机ΦCLK=6MHz,问定时器处于不同工作方式时,最大定时范围分别是多少?
ΦcLK=6MHz,T机器=12/6MHz=2µs,Tmin=2µs
方式0:
Tmax=213*2µs=16.384ms
方式1:
Tmax=216*2µs=131.072ms
方式2.3:
Tmax=28*2µs=0.512ms
5-5什么叫中断源?
MCS-51有哪些中断源?
各有什么特点?
中断源---中断请求的来源
MCS-51有5个中断源:
2个外部中断源INT0,INT1
3个内部中断源T0,T1,TI/RI
特点:
INT0,INT1由P3.2,P3.3端口引入,低电平或下降沿引起中断
T0,T1定时/计数器中断,由T0,T1回零溢出引起中断
TI/RI串行I/O中断,串行端口一帧字符发送/接收后引起中断
这些中断由中断允许寄存器IE(A8H)和中断优先寄存器IP(B8H)控制
复位后,IP清零,自然的中断优先顺序:
INT0T0INT1T1TI/RI
中断服务程序入口地址分别为:
0003H000BH0013H001BH0023H
5-6什么叫中断嵌套?
什么叫中断系统?
中断系统的功能是什么?
中断嵌套就是在中断响应的过程中又有更高一级的中断申请到来,则在中断响应的过程中再响应中断(中断中套中断)
中断系统:
为了实现中断功能而设置的各种硬件和软件的统称
中断系统的功能:
1.实现中断及返回
2.实现优先权排队
3.高级中断源能中断低级中断源的中断处理
5-78031的五个中断标志位代号是什么?
位地址是什么?
它们在什么情况下被置位和复位?
五个中断标志位代号是:
IE0TF0IE1TF1RI/TI
位地址是:
89H8DH8BH8FH98H/99H
有中断申请时中断标志位被置位,CPU响应中断后,一般
IE0(INT0)TF0(T0)IE1(INT1)TF1(T1)可被自动复位,但当INT0,INT1为低电平触发时,不能自动复位,此种情况应保证在中断服务程序结束之前将低电平触发信号变为高电平,否则将再次响应中断.RI/TI中断标志也不能自动复位.
5-8中断允许寄存器IE各位定义是什么?
请写出允许T1定时器溢出中断的指令?
中断允许寄存器IE各位定义:
EA
ES
ET1
EX1
ET0
EX0
全局串口T1INT1T0INT0
相应各位为”1”时,开相应中断,为”0”时,关相应中断
允许T1定时器溢出中断:
MOVIE,#88H
或:
SETBEA
SETBET1
5-9MCS-51响应中断是有条件的,请说出这些条件是什么?
中断响应的全过程如何?
响应中断条件:
无下列条件时,中断将被响应
1.CPU正在执行一个同级或高一级的中断服务程序
2.当前执行的那条指令还未执行完
3.当前执行的指令是RETI或IEIP寄存器读/写指令,执行这些指令后,至少再执行一条指令,才会响应中断。
中断响应的全过程:
中断响应后,一般自动清除中断请求标志(串口中断请求标志,要用软件清除),由硬件自动将PC内容(断点地址)压入栈中保护,然后将对应的中断矢量装入PC,使程序转向中断矢量地址单元去,执行中断服务程序,中断服务程序执行完成,断点地址出栈装入PC,从断点继续执行程序。
5-10在MCS-51中,哪些中断可以随着中断被响应而自动撤除?
那些中断需要用户来撤除?
撤除的方法是什么?
一般T0T1INT0INT1中断可以随着中断被响应而自动撤除,串行中断RI/TI不能自动撤除,需要用户来撤除,撤除的方法是在中断服务程序中清RI或TI
5-11试写出INT0为边沿触发方式的中断初始化程序。
SETBIT0;下降沿触发
SETBEA;也可MOVIE,#81H;开中断
SETBEX0;
5-12若8031单片机的ΦCLK=6MHz,请利用定时器TO定时中断的方法,使P1.0输出如下图所示的矩形脉冲
1ms2ms
T0方式1定时1msT机器=12/6MHz=2µs
TC=216-1ms/2µs=65536-500=FE0CH
ORG0000H
LJMPMAIN
ORG000BH
LJMPTOINT
MAIN:
MOVTMOD,#01H;T0方式1
MOVTH0,0FEH
MOVTL0,#0CH;定时1ms
MOVIE,#82H;开T0中断
MOVR0,#00H;计数初值
SETBTR0;启动T0
SJMP$
TOINT:
MOVTH0,#0FEH
MOVTL0,#0CH;重置初值
MOVC,P