《单片机原理及应用》作业及答案.docx
《《单片机原理及应用》作业及答案.docx》由会员分享,可在线阅读,更多相关《《单片机原理及应用》作业及答案.docx(20页珍藏版)》请在冰豆网上搜索。
《单片机原理及应用》作业及答案
1.CS-51系列单片机串行口中断标志TI和RI在执行中断程序后,能否自动清零,这样设计的意图是什么?
答:
不能,由于串行通信的收发电路使用一个中断源,因而,有利于单片机查询是接收中断还是发送中断。
同时有利于全双工通信。
2.写出8051单片机的复位及5个中断服务程序的入口地址。
答:
(1)复位入口地址:
0000H;
(2)外部中断0中断服务程序入口地址为0003H;
(3)定时器/计数器0中断服务程序入口地址为000BH;
(4)外部中断1中断服务程序入口地址为0013H;
(5)定时器/计数器1中断服务程序入口地址为001BH;
(6)串行口中断服务程序入口地址为0023H。
3.简述MCS-51单片机的工作寄存器的分布结构(包括:
几个区、如何选择、每个区几个寄存器、如何表示)?
答:
(1)四个通用寄存器区;
(2)通过PSW的RS1、RS0选择:
00--0区、01—1区、10—2区、11—3区;
(3)每个区有8个工作寄存器R0—R7;
4.MCS-51单片机的P0口作为一般的I/O口使用时应注意什么?
答:
应注意:
1由于P0口的输出级是漏极开路的开漏电路,所以作为一般的I/O口使用时需接外部上拉电阻;
2P0口的输出级的输出驱动能力,可以驱动8个LS的TTL电路,使用必须确认是否能驱动的外部电路,否则应加驱动电路;
3由于P0口为准双向口,在读引脚时,应先把口置1。
5.画出MCS-51单片机的三总线图(控制总线应包括三条)并注明几条数据线、几条地址线、各个控制线的意义。
答:
(1)
(2)8条数据线、16条地址线
(3)/RD:
对外部RAM及I/O口的读允许;
/WR:
对外部RAM及I/O口的写允许;
/PSEN:
对外部ROM的读允许;
6.MCS-51系列单片机内部有哪些主要逻辑部件组成?
(书)
答:
CPU、RAM、程序存储器、定时器、I/O接口、中断系统、串行接口等。
7.简述P3口的特殊专用功能(第2功能)。
答:
P3.0----串行通信收;P3.1-----串行通信发;P3.2-----外部中断0;P3.3-----外部中断1;P3.4-----T0的计数输入;P3.5-----T1的计数输入;P3.6-----外部数据区写有效;P3.7-----外部数据区读有效。
8.MCS-51单片机内部RAM区功能结构如何分配的?
(书)
答:
00H---1FH通用寄存器区
20H---2FH位寻址区
30H---7FH通用RAM和堆栈区
9.写出将片内RAM20H单元、片外RAM20H单元的内容读入A中的指令。
(4分)
答:
片内:
MOVA,20H
片外:
MOVDPTR,#20H
MOVXA,@DPTR
10.8052单片机的低128字节的RAM、高128字节RAM与位寻址空间、特殊功能寄存器区和外部数据区都出现地址重叠,单片机如何正确访问这些单元?
答:
内部位寻址区、内部RAM、特殊功能寄存器区与外部数据区采用不同的命令格式加以区分。
而内部RAM和特殊功能寄存器区采用不同的寻址方式:
11.8051单片机最多可能外部扩展多少字节的程序存储器?
为什么?
答:
64K,因为8051最多可以提供16条地址线。
12.8051单片机最多外部扩展多少字节的数据存储器?
程序存储器和数据存储器地址空间重叠,单片机是如何加以区分的?
答:
64K;通过指令及PSEN和WR、RD线区分的。
13.简述8051单片机EA、ALE、PSEN这三个引脚的作用。
答:
EA为内部、外部程序存储器的选择线;
ALE锁存低8位地址信号控制;PSEN访问程序存储器有效。
14.当中断允许寄存器IE的内容为97H时的含义是什么?
答:
允许总中断,允许INT0、T0、INT1、串口中断;禁止T1中断。
15.当中断优先级寄存器IP的内容为93H时的含义是什么?
答:
串行口、INT0、T0为高优先级,INT1、T1为低优先级。
16.写出8051单片机5个中断服务程序的入口地址。
答:
INT0-----0003H;T0------000BH;串行口-----0023H;INT1-----0013H;T1----001BH。
17.当串行口控制寄存器SCON的内容为F0H时的含义如何?
答:
串口工作于方式3,多机通信使能位为1,即收到RB8=1时通信中断有效,可接收数据,发射第九位TB8=0。
18.(实验题目1)单片机采用晶振6MHZ,P1口接有8个发光管,围成圆形(跑马灯)。
要求:
1发光管每次只亮一个,一次从P1.0~P1.7循环发光,切换时间为1秒(低电平亮);
2延时采用T0定时器,工作于自动装入时间常数的定时器工作方式,允许T0中断,试写出完整的可调试程序。
答:
ORG0000H
LJMPstart
ORG000BH
LJMPtimer0
ORG30H
start:
MOVTMOD,#02H;T0工作于方式2—自动重装载
MOVTL0,#06;定时器自动重装初值
MOVTH0,#06
MOVR7,#100
MOVR6,#20;R6、R7中断次数,一次中断500uS,即500*100*20=1s
MOVA,#0FEH;循环送出的控制字节
MOVP1,A;送出控制字节,P1.0灯亮
SETBTR0
SETBET0
SETBEA
wait:
SJMPwait;主程序,无限循环
timer0:
DJNZR7,EXIT
MOVR7,#100
DJNZR6,EXIT
MOVR6,#20
RLA;左循环一位
MOVP1,A
EXIT:
RETI
END
19.简述程序状态字PSW每位的作用。
(书)
答:
Cy---借、进位;AC—半借、进位;P—奇/偶位;RS1、RS2—工作寄存器区选择位;OV—溢出标志位;F0—辅助位。
20.简述单片机多机通信的原理。
答:
单片机构成的多机系统为主从式结构,系统中只有一个主机,其他为从机;此时,单片机的串口工作于方式2或者方式3,发送和接收的帧信息是11位,其中第9位用于地址或数据位的辨识,该位为1表示地址码,为零表示数据码,该位是通过TB8、RB8发送和接收的。
在主机通信时,所有的从机置SM2=1,这时主机先发送地址码,这时所有的从机将都收到,从机分别将收到的地址码与自己的地址码比较,当地址码相同时,该分机置SM2=0;其他分机不变,此后,主机与该分机建立了一对一的通信关系,此时交换的数据帧为TB8=0,而SM2=1的分机收不到数据帧,当通信完毕后,分机将SM2=1;等待主机的下一次的通信。
21.一个单片机系统,时钟频率fosc=11.059Mhz,现要求串行口通信的波特率为9600bps,采用T1作为波特率发生器,试计算出定时器T1的自动重装载值、实际波特率并验算实际波特率与理论波特率的相对误差?
答:
取:
SMOD=0;
T1自动重装载值:
演算:
误差计算:
程序段:
MOVTMOD,#20H
MOVTH1,#0FDH
MOVTL1,#0FDH
SETBTR1
22.下列指令哪些是错误的:
①MOVA,@R2②MOV45H,C③MOVR1,R7④ADDA,DPTR
答:
①③④错
23.简述DIVABJMP@A+DPTR的功能。
答:
DIVAB--------(A)/(B)=商→A,余数→B
JMP@A+DPTR---程序无条件转移到(A)+(DPTR)中去,即(A)+(DPTR)→PC
24.设T0为定时器,以方式1工作,定时时间为10ms,并且每到1次P1.1取反,T1作为计数器以方式2工作,外界发生二次事件溢出,晶振频率为12MHZ。
⑴写出对应的TMOD的内容,计算出时间常数;
⑵写出对应的程序段。
答:
初值计算:
N=65536-10000=55536=D8F0H
T1=256-2=254=0FEH
程序段:
MOVTMOD,#61H
MOVTH0,#0D8H
MOVTL0,#0F0H
MOVTH1,#0FEH
MOVTL1,#0FEH
SETBTR0
SETBTR1
CPLP1.1
25.利用单片机的P1口扩展一个4*4的键盘电路,画出原理图,并简述工作原理。
答:
若P1.0-P1.3为键盘的列线输入线,P1.4-P1.7为键盘的行输出线,接线如图所示。
当CPU输出行线全为0;若读取的列线全为高电平,表示无键按下,当不为全高时,表示有键按下。
当有键按下时,循环使一条行线输出为低电平,读取列线,当出现列线不全为零时,即将此时的列线和行线构成一个字节,表示为该键的键值,在键盘处理时,可通过延时再读取键值的办法去抖。
26.写出8052单片机内部低128字节、高128字节RAM单元和SFR区的地址空间,详细说明单片机是如何访问这些单元的?
答:
低128—0~7FH;高128---80H~FFH;SFR-----80~FFH
低128字节RAM区---采用寄存器间接寻址和直接寻址方式
特殊功能寄存器区-----直接寻址方式
高128字节RAM区---采用寄存器间接寻址方式
27.在单片机应用系统中设置看门狗的作用是什么?
答:
为了防止单片机程序跑飞或者系统死机。
28.单片机采用晶振6Mhz,用P1口控制交通信号灯(P10、P11接红灯、P12、P13接绿灯,输出高电平灭)。
要求:
红、绿灯切换时间为6秒,试写出完整的可调试的程序。
答:
ORG0000HSETBTR0
LJMPSTARTSETBET0
ORG000BHSETBEA
LJMPTIME0WAIT:
LJMPWAIT
ORG30HTIME0:
DJNZR7,EXIT
START:
MOVSP,#30HMOVR7,#100
MOVTMOD,#02HDJNZR6,EXIT
MOVTH0,#06MOVR6,#120
MOVTL0,#06MOVA,R5
MOVR7,#100CPLA
MOVR6,#120MOVP1,A
MOVR5,#05MOVR5,A
MOVA,R5EXIT:
RETI
MOVP1,AEND
29.采用单片机的P0口和P2.0~P2.3扩展4位数码管显示电路,由单片机的I/O口直接控制(可不考虑驱动电路),试画出相应的电路原理图;在内部RAM设置一个显示缓冲区,编写显示该显示缓冲区内容的显示子程序。
答:
30H,31H,32H,33H为显示缓冲区
DIS:
MOVR0,#30HINCR0
MOVR5,#0FEHDJNZR1,LOOP
MOVR1,#4MOVP2,A
LOOP:
MOVA,@R0RET
MOVDPTR,#TABDELAY:
MOVR3,#10H
MOVCA,@A+DPTRLLL1:
MOVR4,#0FFH
MOVP0,ALLL:
NOP
MOVA,R5DJNZR4,LLL
MOVP2,ADJNZR3,LLL1
LCALLDELAYRET
MOVA,R5TAB:
DB(略)
RLA
MOVR5,A
30.编程将片内30H~39H单元中的内容送到以3000H为首的存储区中。
(书)
答:
SUB:
MOVR0,#30H
MOVDPTR,#3000H
MOVR1,#10
LOOP:
MOVA,@R0
MOVX@DPTR,A
INCR0
INCDPTR
DJNZR1,LOOP
RET
31.片内RAM的60H开始连续存放100个数据,试统计正数、负数及为零的数据个数,并将结果分别存放在50H,51H,52H单元中。
(10分)
答:
START:
MOVR0,#60HCLRC
MOVR1,#100SUBBA,B
MOV50H,#00JNCLOOP3
MOV51H,#00INC51H
MOV52H,#00LJMPLOOP4
LOOP:
MOVA,@R0LOOP3:
INC50H
CJNEA,#0,LOOP1LOOP4:
INCR0
INC52HDJNZR1,LOOP
LJMPLOOP4RET
LOOP1:
MOVB,#7FHEND
XCHA,B
32.单片机设有几个通用工作寄存器区?
从实际编程方面说明设置多个通用工作寄存器区的意义如何?
如何实现当前通用工作寄存器区的切换?
答:
4个通用工作寄存器区;
主程序和不同的中断程序采用不同的工作寄存器,可实现快速的保护现场;
是通过设置程序状态字psw来实现的(D4、D3即:
RS1、RS0)。
33.机器周期是指:
完成MCS-51一个典型的指令花费的振荡周期称为一个机器周期;一个机器周期由六个状态组成,包含有12个振荡周期;
34.当外部中断采用低电平触发方式时,为了避免在中断返回后再次响应该中断,要求外部中断源在执行的中断程序返回前撤销中断请求信号(使引脚电平变高);
35.全双工串行通信方式是指:
能同时发送和接收数据;
36.程序计数器PC是用来存放下一条将要执行的指令地址,共16位。
单片机上电复位后,PC=0000H;
37.当单片机的P1口做为一般的I/O口使用时,为8位准双向口的意思是指:
当输入信号时,需先向P1口锁存器写1,以保证读引脚的正确性;
38.8051单片机外部扩展一片8K的RAM6264,画出详细的电路原理图(可不标注芯片的管脚号,但引脚功能符号应标注清楚),地址锁所存器采用74LS373,线选方式译码,并算出相应RAM的地址空间。
答:
6264的地址空间为:
0000H~01FFFH。
39.何谓堆栈?
它设置在哪个存储区?
在实际编程中,它有何应用价值?
答:
堆栈是一个后进先出的特殊的数据缓冲区,并由栈指针SP指示堆栈中的数据深度。
在MCS-51系列单片机中,堆栈设置在内部RAM数据存储区内。
在实际编程中,可用于数据的传递,数据的交换、保存CPU现场等作用。
40.编制一个计算符号函数y=SGN(x)的完整的可调试的程序。
Y=
设自变量已经存入外部数据存储区的100h单元,范围-128≤x≤127;y存入外部数据区的200h单元。
答:
ORG0000HSUL:
MOVDPTR,#200H
LJMPSTARTMOVX@DPTR,A
ORG0030HRET
START:
MOVDPTR,#100HNEG:
MOVA,#0FFH
MOVXA,@DPTR;SJMPSUL
JZSULWAIT:
LJMPWAIT
JBACC.7,NEGEND
MOVA,#01
41.已知有10个单字节的数据,依次存放在内部RAM的40H单元开始的连续单元中。
要求将这些数据求和,并将计算结果存入R2、R3中(高位存R2,低位存R3),试写出完整的可调试的程序。
答:
ORG0000HMOVR3,A
LJMPSTARTJNCLOP1
ORG0030HINCR2
START:
MOVR0,#40HLOP1:
INCR0
MOVR5,#10DJNZR5,LOOP
MOVR2,#0WAITLJMPWAIT
MOVR3,#0END
LOOP:
MOVA,R3
ADDA,@R0
42.一组数据存放在内部RAM的40H单元开始的连续单元中,该组数据是以0ffH为结束标志,试编写出计算出该组数据个数的程序。
答:
ORG30H
ABC:
MOVR2,#0FFH
MOVR0,#3FH
LOOP:
INCR0
INCR2
CJNE@R0,#0FFH,LOOP
RET
43.用一片2764和一片6264扩展8k的程序存储器(从2000H~3FFFH)和8K的数据存储器(6000H~7FFFH),不采用线译码,试完成用8051与之连接的连接图。
答:
44.当8255的控制字为DAH时,8255的A口、B口、C口工作于什么状态?
答:
A口工作于方式2,双向选通输入/输出;
B口工作于方式1,选通输入;
C口作为控制应答线。
45.已知晶振频率为11.0592MHz,要求波特率为4800bit/s,如何实现?
答:
⑴波特率的参数计算:
X=
⑵实现方式:
MOVTMOD,#20H
MOVTH1,#0FAH
MOVTL1,#0FAH
SETBTR1
46.已知30H31H和32H33H存放两个16位带符号数,比较大小后大数存放在41H42H中,试用汇编语言编成完成。
(30H、32H存放高8位)
答:
47.用8051与DAC0832完成如下波形,8051与DAC0832采用单缓冲双极性连接,口地址为6EFFH,(参考电压为+5V)画出8051与DAC0832完成上述要求的连线图,编写程序完成所要求的波形。
(晶振为6MHz)
答:
48.位地址7FH与字节地址7FH有何区别?
位地址7FH具体在片内RAM中什么位置?
(书)
答:
位地址7FH为一个可位寻址的位单元,存放一位二进制数;字节地址7FH为一个可字节寻址的字节单元,存放8位二进制数,二者访问的指令不同;
位地址7FH位于片内RAM的字节地址2FH单元的最高位。
49.若采用MCS-51的串行口扩展并行输出口,应如何实现?
答:
使串行口工作于方式0(移位寄存器方式),外部扩展传入并出移位寄存器芯片,单片机的P3.0为数据输出端,P3.1为移位脉冲输出端。
(可以用文字叙述,也可以绘图表示。
第一步3分,第二步2分。
)
50.写出实现下列要求的指令或程序片段。
(书)
⑴将内部RAM20H单元内容与累加器A内容相加,结果存放在20H单元中;
⑵将内部RAM30H单元内容与内部RAM的31H单元内容相加,结果存放到内部RAM的31H单元中;
⑶将内部RAM20H单元内容传送到外部RAM的2000H单元中;
⑷使内部RAM20H单元的D7和D3位清零,其它位保持不变;
⑸使内部RAM20H单元的D7和D3位置1,D5位清零,其它位保持不变;
⑹使内部RAM20H单元的D7和D3位置1,D5位取反,其它位保持不变;
答:
⑴ADDA,20H
MOV20H,A
⑵MOVA,30H
ADDA,31H
MOV31H,A
⑶MOVA,20H
MOVDPTR,#2000H
MOV@DPTR,A
说明:
由于20H单元是在位寻址区,所以可以使用布尔指令
⑷CLR07H;
CLR03H
⑸SETB07H
SETB03H
⑹SETB07H
SETB03H
CPL05H
51.试用下列4种方式编程将立即数EFH送入内部RAM的40H单元中。
(书)
⑴用立即寻址;
⑵用直接寻址;
⑶用寄存器寻址;
⑷用寄存器间接寻址;
答:
⑴MOV40H,#0EFH
⑵MOVA,#0EFH
MOV40H,A
或者:
MOV40H,#0EFH
⑶MOVR0,#0EFH
MOV40H,R0
⑷MOVR0,#40H
MOV@R0,#0EFH
52.简述波特率、A/D的分辨率的概念。
答:
串行通信的波特率:
每秒钟发送的二进制数的位数。
A/D转换器分辨率:
对模拟输入的分辨能力。
53.单片机与8255A的连接图如下图所示,8255A的PA口接8个发光二极管,PB口上接了二个按键开关,按键开关状态按下表控制PA口的发光二极管点亮,试编写按不同状态控制二极管点亮程序。
K1K2
实现功能
00
全灭
01
只有L1、L3、L5、L7亮
10
只有L2、L4、L6、L8亮
11
全亮
54.从20H单元开始有一无符号的数据块,其长度在20H单元。
求出数据块中的最小者,并存入21H单元。
(书)
答:
MOVA,20H;取出数据长度
JZOUT;如果数据长度=0,跳出,注意跳出后,没有修改21H单元的内容
MOVR0,A
MOVR1,#21H;指向数据块的首地址
MOVA,@R1;读取数据块首的第一数据存A,这样虽然第一个数被重复比较了,但当仅有一个数据时,不会出错
MOVR4,A;R4存放最小数据
LOOP:
MOVA,R4
SUBBA,@R1
JCNEXT;有借位,说明R4中内容小
MOVA,R4
XCHA,@R1;否则将最小换到R4中
MOVR4,A
NEXT:
INCR1
DJNZR0,LOOP
MOV21H,R4
OUT:
LJMP$
(本程序调试通过)
55.设片内RAM中以20H开始的单元,连续存放10个非压缩BCD码,试将其转换为ASCⅡ码,存放到片内以50开始的单元中。
(书)
答:
MOVR2,#10
MOVR0,#20H
MOVR1,#50H
LOOP1:
MOVA,@R0
ADDA,#30H
MOV@R1,A
INCR0
INCR1
DJNZR2,LOOP1
SJMP$
(调试通过)
56.设10次采样值依次存放在片内RAM50H~59H的连续单元中。
试编程去掉一个最大值,去掉一个最小值,求其余8个数的平均值,并将结果存放在60H中。
(书)
答:
MOVR0,#50H
MOVR1,#51H
LOOP:
MOVA,@R0
SUBBA,@R1
JCNEXT
MOVA,@R0
XCHA,@R1
MOV@R0,A
NEXT:
INCR1
CJNER1,#5AH,LOOP;内部循环,从此单元与以后的单元比较大小
INCR0
MOVA,R0
MOVR1,A
INCR1
CJNER0,#59H,LOOP;以上从小到大排序
MOVR7,#8;8个数求和
MOVB,#0;和的高8位
MOVA,#0;和的低8位
MOVR0,#51H
LOOP1:
ADDA,@R0
JNCLOOP4
INCB;和的高8位累加
LOOP4:
INCR0
DJNZR7,LOOP1;以上8个数求和,B--和高8,A-和低8
MOVR3,B;R3---和高8
MOVR4,A;R4---和低8
MOVR7,#3
LOOP2:
CLRC
MOVA,R3
RRCA
MOVR3,A;高8位
MOVA,R4
RRCA
MOVR4,A;低8位
DJNZR7,LOOP2;以上用移位法除以8
MOV60H,R4
LJMP$
(已经验证)
57.MCS-51单片机4个I/O口的作用是什么?
三总线是如何分配的?
为什么说能作为I/O口使用的一般只有P1口?
(书)
答:
①P0~P3做一般的I/O口使用,且P0,P2,P3可用于三总线,P3口的部分