单片机原理及接口技术思考题与习题.docx
《单片机原理及接口技术思考题与习题.docx》由会员分享,可在线阅读,更多相关《单片机原理及接口技术思考题与习题.docx(20页珍藏版)》请在冰豆网上搜索。
单片机原理及接口技术思考题与习题
思考题与习题
1.8051单片机内包含哪些主要逻辑功能部件?
一个8位的CPU、128B/256B的片内数据存储器、4KB/8KB程序存储器、四个8位并行I/O接口、两个定时/计数器、5个中断源的中断控制系统、一个全双工UART的串行I/O口、片内振荡器和时钟产生电路。
2.8051的EA端有何用途?
当EA为低电平时,CPU只能访问外部的程序存储器。
当EA为高电平时,CPU能访问内部的程序存储器,并当PC的值超过0FFFH时,自动转向访问片外的程序存储器。
3.8051的存储器分为哪几个空间?
如何区别不同空间的寻址?
4.简述8051RAM的空间分配。
5.
6.如何简便地判断8051正在工作?
当8051上电正常工作时,ALE引脚输出fosc/6的正脉冲,可用示波器查看及判断。
7.8051如何确定和改变当前工作寄存器组?
CPU通过程序状态字PSW中RS1、RS0来确定和改变当前工作寄存器组。
8.
9.
10.
11.8051单片机由哪些信号需要芯片以第二功能的方式提供?
RXD、TXD、INT0、INT1、T0、T1、WR、RD这些信号分别由P3.0~P3.7以第二功能的方式提供。
12.
13.
14.开机复位后,CPU使用的是哪组工作寄存器?
它们的地址是什么?
CPU如何确定和改变当前工作寄存器组?
开机复位后,CPU使用0组工作寄存器。
它们的地址是00H~07H。
CPU通过程序状态字PSW中RS1、RS0来确定和改变当前工作寄存器组。
15.程序状态寄存器PSW的作用是什么?
常用标志有哪些位?
作用是什么?
PSW中存放着程序执行后的状态信息,供程序查询或判断。
常用的标志有:
进(借)位位:
C=0无进(借)位;C=1有进(借)位。
半进(借)位位:
AC=0无进(借)位;AC=1有进(借)位。
用户标志位:
由用户自己定义。
工作寄存器组选择控制位:
选择当前工作寄存器组。
溢出标志位:
判断是否溢出。
OV=0无溢出;OV=1有溢出。
奇偶标志位:
判断结果中有奇数或偶数个“1”P=0则累加器A中有偶数个1;P=1则累加器A中有奇数个1。
16.
17.
18.
19.
思考题与习题
1.
2.
3.
4.
5.要访问特殊功能寄存器和片外数据存储器,应采用哪些寻址方式。
特殊功能寄存器:
直接寻址、位寻址(部分特殊功能寄存器)
片外数据存储器:
寄存器间接寻址MOVX(@R1、@R2、@DPTR)
6.在8051片内RAM中,已知(30H)=38H,(38H)=40H,(40H)=48H,(48H)=90H。
请分析下面各是什么指令,说明源操作数的寻址方式以及按顺序执行每条指令后的结果。
指令源操作数的寻址方式执行结果
MOVA,40H直接寻址A=48H
MOVR0,A寄存器寻址R0=48H
MOVP1,#FOH立即数寻址P1=48H
MOV@R0,30H直接寻址(48H)=38H
MOVDPTR,#3848H立即数寻址DPTR=3848H
MOV40H,38H直接寻址(40H)=40H
MOVR0,30H直接寻址R0=38H
MOVP0,R0寄存器寻址P0=38H
MOV18H,#30H立即寻址(18H)=30H
MOVA,@R0寄存器间接寻址A=40H
MOVP2,P1寄存器寻址P2=48H
7.
8.指出下列指令的本质区别?
MOVA,DATA
MOVA,#DATA前一条指令源操作数的寻址方式是直接寻址,把地址为DATA的内存单元中的内容传送到累加器A中。
后一条指令源操作数的寻址方式是立即寻址,把DATA这个立即数赋给寄存器A。
MOVDATA1,DATA2
MOV74H,#78H前一条指令源操作数的寻址方式是直接寻址,把地址为DATA2的内存单元中的内容传送到地址为DATA1的内存单元中。
后一条指令源操作数的寻址方式是立即寻址,把78H这个立即数传送到内存单元74H中。
9.设R0的内容为32H,A的内容为48H,片内RAM的32H单元内容为80H,40H单元内容为08H。
请指出在执行下列程序段后上述各单元内容的变化。
MOVA,@R0A=80H;R0=32H;(32H)=80H;(40H)=08H
MOV@R0,40HA=80H;R0=32H;(32H)=08H;(40H)=08H
MOV40H,AA=80H;R0=32H;(32H)=80H;(40H)=80H
MOVR0,#35HA=80H;R0=35H;(32H)=80H;(40H)=08H
10.
11.如何访问外部RAM单元,可使用哪些寻址方式?
使用MOVX指令,可采用寄存器间接寻址方式(@R0,@R1,@DPTR)
12.
13.
14.
15.
16.设A=83H,R0=17H,(17H)=34H。
问执行以下指令后,A=?
ANLA,#17H;A=03H
ORL17H,A;A=03H,(17H)=37H
XRLA,@R0;A=34H
CPLA;A=0CBH
17.使用位操作指令实现下列逻辑操作。
要求不得改变未涉及位的内容。
⑴使ACC.0置1。
SETBACC.0
⑵清除累加器高4位。
CLRACC.7
CLRACC.6
CLRACC.5
CLRACC.4
⑶清除ACC.3,ACC.4,ACC.5,ACC.6。
CLRACC.6
CLRACC.5
CLRACC.4
CLRACC.3
18.编程实现把内部RAMR0~R7的内容传送到20H~27H单元。
MOV20H,R0
MOV21H,R1
MOV22H,R2
MOV23H,R3
MOV24H,R4
MOV25H,R5
MOV26H,R6
MOV27H,R7
19.设逻辑表达式为:
Y=A(B+C)+D(E+F),试编一程序以软件方法实现上述逻辑功能。
20.试编写程序,将内部RAM的20H,21H,22H三个连续单元的内容依次存入2FH,2EH,2DH中。
MOV2FH,20H
MOV2EH,21H
MOV2DH,22H
21.编写程序,进行两个6位数的减法:
6F5DH-13B4H,结果的高8位和低8位分别存入内部RAM的31H、30H单元中。
CLRC
MOVA,#5DH
SUBBA,#B4H
MOV30H,A
MOVA,#6FH
SUBBA,13H
MOV31H,A
22.编写程序,若累加器A的内容分别满足下列条件时,则程序转至LABEL存储单元。
设A中存放的是无符号数。
⑴A≥10⑵A>10⑶A≤10
CJNEA,#10,L1
LABEL:
…
SJMPL2
L1:
JNCLABEL
L2:
…
CJNEA,#11,L1
LABEL:
…
SJMPL2
L1:
JNCLABEL
L2:
…
CJNEA,#10,L1
LABEL:
…
SJMPL2
L1:
JCLABEL
L2:
23.
24.
25.
26.试编写程序,查找在内部RAM的20H~50H单元中是否有0AAH这一数据。
若有则将51H单元置为01H;若未找到,则将51H置为0。
MOVR0,#31H
MOVR1,#20H
MOV51H,#00H
L1:
CJNE@R1,#0AAH,L2
MOV51H,#01H
SJMPL3
L2:
INCR1
DJNZR0,L1
L3:
…
27.试编写程序,查找在内部RAM的20H~50H单元中有多少个00H这一数据,并将查找结果存入51H单元。
MOVR0,#31H
MOVR1,#20H
MOVR2,#00H
L1:
CJNE@R1,#00H,L2
INCR2
L2:
INCR1
DJNZR0,L1
L3:
MOV51H,R2
28.外部数据RAM中有一个数据块,存有若干个字符、数字,首地址为SOURCE。
要求将该数据块传送到内部RAM以DIST开始的区域,直到遇到字符“$”时结束(“$”也要传送,它的ASCII码为24H)。
MOVDPTR,#SOURCE
MOVR1,#DIST
L1:
MOVXA,@DPTR
INCDPTR
MOV@R1,A
INCR1
CJNEA,#24H,L1
…
29.已知R3,R4中存放一个16位的二进制数,高位在R3中,低位在R4中。
试编一程序将其求补,结果存回原处。
方法一方法二
CLRCCLRC
MOVA,#00HMOVA,R3
SUBBA,R4CPLA
MOVR4,AMOVR3,A
MOVA,#00HMOVA,R4
SUBBA,R3CPLA
MOVR3,AADDA,1
MOVR4,A
MOVA,R3
ADDCA,#00H
MOVR3,A
30.已知30H,31H中存放一个16位的二进制数,高位在前,低位在后。
试编一程序将其乘2,结果存回原处。
方法一方法二
MOVA,31HCLRC
ADDA,31HMOVA,31H
MOV31H,ARLA
MOVA,30HMOV31H,A
ADDCA,30HMOVA,30H
MOVR3,ARLCA
MOV30H,A
31.
32.编写一个程序,把片外RAM从2000H开始存放的8个数传送到片内30H开始的单元中。
MOVDPTR,#2000H
MOVR0,#30H
MOVR1,#08H
L1:
MOVA,@DPTR
MOV@R0,A
INCDPTR
INCR0
DJNZR1,L1
33.
34.
35.设(R0)=7EH,(DPTR)=10FEH,片内RAM中7E单元的内容为0FFH,7FH单元的内容为38H。
试为下列程序的每条指令注释其执行结果。
INC@R0(7EH)=00H
INCR0R0=7FH
INC@R0(7FH)=39H
INCDPTR(DPTR)=10FFH
INCDPTR(DPTR)=1100H
INCDPTR(DPTR)=1101H
36.下列程序段经汇编后,从1000H开始的各有关存储单元的内容将是什么?
ORG1000H1000H“S”
1001H“T”
1002H“A”
1003H“R”
1004H“T”
1005H12H
1006H34H
1007H30H
1008H00H
1009H00H
100AH70H
TAB1:
EQU1234H
TAB2:
EQU3000H
DB“START
DWTAB1,TAB2,70H
37.
38.
39.试编写程序,判断30H单元中的数据是奇数还是偶数,是奇数则把31H单元置1,是偶数则把31置0。
要求不破坏30H单元的内容。
方法一
MOVA,30H
MOV31H,#00H
ORLA,#01H
JZL1
MOV31H,#01H
L1:
…
方法二
MOVA,30H
ORLA,#01H
JZL1
MOV31H,#01H
SJMPL2
L1:
MOV31H,#00H
L2:
…
40.试编写程序,使31H单元中二进制数的最高位(符号位)置1。
MOVA,30H
ORLA,#80H
MOV30H,A
41.试编写程序,把31H单元中二进制数的最高位(符号位)求反。
MOVA,30H
XRLA,#80H
MOV30H,A
思考题与习题
1.什么是中断和中断系统?
其主要功能是什么?
2.试编写一段对中断系统初始化的程序,使之允许INT0、INT1、TO、串行口中断,且使T0中断为高优先级中断。
字节操作方式位操作方式
MOVIP,#00000101B
MOVIE,#10010111B
SETBES
SETBEX1
SETBEX0
SETBET0
SETBPX1
SETBPX0
SETBEA
3.在单片机中,中断能实现哪些功能?
答:
I/O设备请求服务;硬件故障;实时时钟;为调试程序而设置的中断源。
4.8051共有哪些中断源?
对其中断请求如何进行控制?
5.什么是中断优先级?
中断优先级处理的原则是什么?
答:
中断优先级是CPU相应中断的顺序。
其处理原则是:
高优先级组的中断优先响应低优先组的中断。
同组(级)按外部中断0、定时器0、外中断1、定时器1、串行口的顺序响应。
6.说明外部中断请求的查询和响应过程。
7.8051在什么条件下可响应中断?
答:
CPU开中断(EA=1);
中断源发中断请求信号且其中断允许位为1;无同级中断或更高级中断正在被服务;
当前的指令周期已经结束(若是当前指令为RETI或访问IE、IP的指令,则应等CPU再执行完一条指令)。
8.简述8051单片机的中断响应过程。
9.在8051内存中,应如何安排程序区?
答:
8051复位后PC=0000H,而0003H~002BH为各中断源的入口地址,故程序段一般从0030H(以后)的地址开始存放。
因此编程时应在0000H出写一跳转指令转至0030H(或相应的开始地址)。
10.试述中断的作用及中断的全过程。
11.当正在执行某一中断源的中断服务程序时,如果有新的中断请求出现,试问在什么情况下可响应新的中断请求?
在什么情况下不能响应新的中断请求?
12.8051单片机外部中断源有几种触发中断请求的方法?
如何实现中断请求?
13.8051单片机有5个中断源,但只能设置两个中断优先级,因此,在中断优先级安排上受到一定的限制。
试问以下几种中断优先级顺序的安排(级别由高到低)是否可能?
若可能,则应如何设置中断源的中断级别?
否则,请简述不可能的理由。
⑴定时器0、定时器1、外中断0、外中断1、串行口。
答:
可以。
MOVIP,#00001010B。
⑵串行口、外中断0、定时器0、外中断1、定时器1。
答:
可以。
MOVIP,#00010000B。
⑶外中断0、定时器1、外中断1、定时器0、串行口。
答:
不可能。
因为把外中断0、定时器1设定为高优先级时,在低优先级中定时器0的优先级高于外中断1。
⑷外中断0、外中断1、串行口、定时器0、定时器1。
答:
可以。
MOVIP,#00010101B。
⑸串行口、定时器0、外中断0、外中断1、定时器1。
答:
不可能。
因为若把串行口及定时器0设定为高优先级中断,在同级中断优先级中串行口为最低。
而单独把串行口设定为高优先级中断时,低优先级组中的最高优先级应为外中断0。
⑹外中断0、外中断1、定时器0、串行口、定时器1。
答:
不可能。
⑺外中断0、定时器1、定时器0、外中断1、串行口。
答:
不可能。
14.以中断方法设计单片机秒、分脉冲发生器。
假定P1.0每秒钟产生一个机器周期的正脉冲,P1.1每分钟产生一个机器周期的正脉冲。
思考题与习题
1.定时器模式2有什么特点?
使用于什么应用场合?
答:
定时器模式2具有自动重装载的8位定时器/计数器。
一般使用于串行口波特率发生器。
2.单片机用内部定时方法产生频率为100KHZ等宽矩形波,假定单片机的晶振频率为12MHZ。
请编程实现。
3.8051定时器有哪几种工作模式?
有何区别?
4.8051单片机内部设有几个定时器/计数器?
它们是由哪些特殊功能寄存器组成?
5.定时器/计数器用作定时器时,其定时时间与哪些因素有关?
作为计数器时,对外界计数频率有何限制?
答:
用作定时器时定时时间与振荡器的频率、计数器的初值有关。
用作计数器时计数频率为振荡频率/24。
6.简述定时器四种工作模式的特点。
如何选择和设定?
7.
8.
9.
10.
11.8051定时器作定时和计数时,其计数脉冲分别由谁提供?
定时:
单片机的主频经12分频提供。
计数:
Ti引脚提供。
12.8051定时器门控信号GATE设置为1时,定时器如何启动?
答:
8051定时器门控信号GATE设置为1时,定时器将由INTi引脚启动。
13.已知8051单片机的fosc=6MHZ,请利用T0和P1.0输出矩形波。
矩形波高电平宽度50μs,低电平宽度300μs。
定时时间为50μs,则时间常数=28-(50*10-6*6*106/12)=28-25=231=0E7H
ORG0000H
RESET:
AJMPMAIN;跳过中断服务程序区
ORG000BH
AJMPITOP
主程序
ORG0100H
MAIN:
MOVSP,#60H;设置堆栈指针
PTOMD:
MOVTMOD,#02H;设置T0模式2
MOVTH0,#0E7H;送初值
MOVTL0,#0E7H
MOVR0,#00H;设置计数器
SETBTR0;启动定时
SETBET0;T0开中断
SETBEA;CPU开中断
HERE:
SJMPHERE;等待时间到,转入中断服务程序(模拟主程序的运行)
中断服务程序
ORG0120H
ITOP:
CJNER0,#00H,L1;若R0不等于0转L1输出低电平
SETBP1.0;R0=0输出高电平
SJMPL2
L1:
CLRP1.0;R0≠0输出低电平
L2:
INCR0;R0加1
CJNER0,#07H,L3;判断是否已输出6个50μs的低电平
MOVR0,#00H;是则重置R0=0
L3:
SETET0;T0开中断
RETI
14.已知8051单片机的fosc=12MHz,用T1定时。
试编程由P1.0和P1.1引脚分别输出周期为2ms和500μs的方波。
定时时间为250μs,则时间常数=28-(250*10-6*6*106/12)=28-125=131=83H
ORG0000H
RESET:
AJMPMAIN;跳过中断服务程序区
ORG001BH
AJMPITOP
主程序
ORG0100H
MAIN:
MOVSP,#60H;设置堆栈指针
PTOMD:
MOVTMOD,#20H;设置T1模式2
MOVTH0,#83H;送初值
MOVTL0,#083H
MOVR0,#00H;设置计数器
SETBTR1;启动定时
SETBET1;T0开中断
SETBEA;CPU开中断
HERE:
SJMPHERE;等待时间到,转入中断服务程序(模拟主程序的运行)
中断服务程序
ORG0120H
ITOP:
CPLP1.0;每间隔250使P1.0反相输出
MOVA,R0
JNBACC.3,L1;若ACC.3不等于1转L1输出低电平
SETBP1.1;ACC.3等于1输出高电平
SJMPL2
L1:
CLRP1.1;ACC.3不等于1输出低电平
L2:
INCR0;R0加1
L3:
SETET0;T0开中断
RETI
15.
16.
17.
18.
思考题与习题
1.简述单片机系统扩展的基本原则和实现方法。
2.什么是RAM?
有什么特点?
3.以8031为主机的系统,拟采用2片2764EPROM芯片扩展16KB程序存储器。
请设计出硬件结构图。
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.下图是四片8K8位存储器芯片的连接图。
请确定每片存储器芯片的地址范围。
答:
显示子程序
DISP:
SETB0D4H
;改变当前工作寄存器组
MOVR1,#7EH
;设置显示缓冲区首址
MOVR2,#20H
;设置最左边的显示位
MOVR3,#00H
;延时时间
DISP1:
MOVDPTR,#0FF21H
;字位口
MOVA,R2
MOVX@DPTR,A
;设置字位口显示位
MOVDPTR,#DATACO
MOVA,@R1
MOVCA,@A+DPTR
;取显示代码
MOVDPTR,#0FF22H
MOVX@DPTR,A
;显示字型
DISP2:
DJNZR3,DISP2
;延时
DECR1
;显示缓冲区指针减1
CLRC
MOVA,R2
RRCA
;右移显示位1位
MOVR2,A
JNZDISP1
MOVA,#0FFH
;关显示
MOVDPTR,#0FF22H
MOVX@DPTR,A
CLR0D4H
;恢复原来的工作寄存器组
RET
DATAC0:
DB0C0H,0F9H,0A4H,0B0H,99H,92H
DB82H,0F8H,80H,90H,88H,83H,0C6H
DB0A1H,86H,8EH,0FFH,0CH,89H,0DEH