单片机原理及应用赵晓安课后习题.docx
- 文档编号:18556098
- 上传时间:2023-08-19
- 格式:DOCX
- 页数:16
- 大小:25.97KB
单片机原理及应用赵晓安课后习题.docx
《单片机原理及应用赵晓安课后习题.docx》由会员分享,可在线阅读,更多相关《单片机原理及应用赵晓安课后习题.docx(16页珍藏版)》请在冰点文库上搜索。
单片机原理及应用赵晓安课后习题
单片机原理及应用
第二章课后题
2-38051单片机的存储器分哪几个空间?
通过什么信号来区别不同空间的寻址?
答:
有四个物理上相互独立的存储空间:
片内ROM地址为0000H-0FFFH此时/EA=1;片外ROM地址为0000H-0FFFFH此时/EA=0。
片内数据存储器地址为00H-0FFH;片外数据存储器地址为0000H-0FFFFH;区分片内片外数据存储器通过指令MOV与MOVX。
2-5在程序存储器中,0000H,0003H,000BH,0013H,001BH,0023H这六个单元有什么特定的含义?
答:
0000H复位后,PC=0000H,开始执行程序的地址
0003H外部中断0〔INT0〕入口地址
000BH定时器0中断〔TF0〕入口地址
0013H外部中断1〔INT1〕入口地址
001BH定时器1中断〔TF1〕入口地址
0023H串行口中断TI/RI入口地址
2-6内部RAM低128单元划分为哪三个主要部分?
各部分主要功能是什么?
答:
分为三部分:
工作寄存器去,位寻址区,用户RAM区〔堆栈、数据缓冲〕。
〔1〕工作寄存器区〔00H-1FH〕:
32个RAM单元共分四组,每组8个寄存单元〔R0-R7〕。
寄存器常用于存放操作数及中间结果等。
〔2〕位寻址区〔20H-2FH〕:
此部分16个单元的每一位都有一个8位表示的位地址,位寻址取得每一个单元既可作为一般RAM单元使用,进行字节操作,也可以对单元中的每一位进行位操作。
〔3〕用户RAM区:
也是数据缓冲区,一般用于存放用户数据及作堆栈区使用。
2-7MCS-51单片机EA信号有何功能?
在使用8031时EA信号引脚如何处理?
答:
EA是访问外部程序存储器的控制信号,当EA=0时,8051片内ROM不起作用,CPU只能从片外ROM取指令,地址可以从0000H开始编址,当EA=1时,PC在0000H~0FFFH范围内,CPU从片内ROM取指令;而当PC>0FFFH后,则自动转向片外ROM去取指令。
在使用8031时EA常接地,因为它无内部程序存储器。
2-10开机复位后,CPU使用哪一组工作寄存器?
他们的地址是什么?
如何改变当前工作寄存器组?
答:
使用第0组工作寄存器,它们的地址是00H-07H,想改变当前工作寄存器组可以通过对RS0,RS1进行相关复位、置位,如:
SETBRS0,CLRRS1。
2-11SP表示什么?
有几位?
作用是什么?
复位后sp的内容是什么?
答:
Sp表示堆栈指针,为8位专用寄存器,作用是为了指示栈顶地址,它的内容是堆栈栈顶的存储单元地址。
复位后sp在RAM低128位字节中开辟栈区,并初始化为07H,当实际进栈出栈时,存储数据前会自动加1,所以堆栈实在08H单元开始。
2-18试说明8051的振荡周期、机器周期、指令周期是如何分配的。
当振荡脉冲频率为6MHz时,机器周期是多少?
答:
8051单片机每条指令的执行时间〔即指令周期〕为1~4个机器周期,有单字节单周期指令、两字节单周期指令、单字节两周期指令、两字节两周期指令、三字节两周期指令以及
单字节四周期指令。
一个机器周期有6个状态:
S1~S6每个状态又包含两个振荡周期,分为两拍:
P1和P2。
因此,一个机器周期包含12个振荡周期,表示为:
S1P1、S1P2、S2P1、?
?
S6P1、S6P2。
当FOSC=6MHz时,机器周期为:
〔1/6〕×12=2〔μs〕
第三章
3-1简述MCS-51有哪几种寻址方式?
各有什么特点?
答:
MCS-51有以下七种寻址方式:
(1)直接寻址:
指令中直接给出操作数所在的单元地址或位地址;
(2)立即寻址:
在指令中紧跟在操作码之后的字节是操作数;
(3)寄存器寻址:
操作数在指令中给出的寄存器中;
(4)寄存器间接寻址:
寄存器中存放的是操作数所在的单元地址;
(5)变址寻址:
基址加变址形成的16位地址是操作数地址;
(6)相对寻址:
指令中给出相对偏移量,转移指令都为相对寻址;
(7)位寻址:
指令中给出的位地址或位寄存器中存放的是位操作数。
3-2MCS-51指令按功能分为哪几类?
每类指令的作用是什么?
答:
MCS-51指令按功能分为五类,分别为:
(1)数据传送类指令:
主要用于数据的传送、交换与堆栈操作;
(2)算术运算类指令:
主要用来完成加减乘除运算及二十进制调整;
(3)逻辑运算类指令:
主要完成与、或、异或及移位运算;
(4)位操作指令:
主要用来做与、或、清除、置位、求反等布尔运算;
(5)控制转移指令:
控制程序执行的走向,有转移、调用及返回操作。
3-3变址寻址和相对寻址中的偏移量有何异同?
答:
变址寻址:
@A+DPTR、@A+PC,其中DPTR、PC为基址寄存器,A为变址寄存器,其中A为8位无符号的二进制数,其范围为0到255;相对寻址中偏移量为8位带符号的二进制数,范围为-128-127
23-4指出以下每条指令的寻址方式,30H在不同的指令中代表什么含义?
〔1〕MOVA,#30H;寄存器寻址,立即寻址,30H为立即数
〔2〕MOV30H,@R1;直接寻址,寄存器间接寻址,30H为字节地址
〔3〕MOVC,30H;寄存器寻址,直接寻址,30H为位地址
〔4〕MOV30H,R5;直接寻址,寄存器寻址,30H为字节地址
〔5〕MOVXA,@DPTR;寄存器寻址,寄存器间接寻址
〔6〕MOVCA,@A+PC;寄存器寻址,基址加变址的寄存器间接寻址,
〔7〕JCLAB1;相对寻址
〔8〕SJMPLAB2;相对寻址
3-5写出以下指令的机器码,并指出执行以下程序段后各单元内容变为什么?
累加器A及PSW中的内容变为什么?
(1)MOVA,#2;〔A〕=02H
MOVR1,#30H;(R1)=30H
MOV@R1,A;(30H)=02H
MOV35H,R1;(35H)=30H
XCHA,R1;(A)=30H,(R1)=02H
(2)MOVA,#0F5H;〔A〕=0F5H
MOV30H,#9BH;〔30H〕=9BH
MOVR0,30H;〔R0〕=9BH
ADDA,#28H;〔A〕=1DHCy=1AC=00V=0
ADDCA,@R0;〔A〕=0B9HCy=0AC=10V=0
⑶CLRC;〔C〕=0
MOV40H,#7AH;〔40H〕=7AH
MOVA,#92H;〔A〕=92H
MOVR0,#40H;〔R0〕=40H
SUBBA,@R0;(A)=18HCY=0AC=1OV=1
⑷MOVA,#79H;〔A〕=79H
MOV30H,#89H;〔30H〕=89H
ADDA,30H;〔A〕=02HCY=1AC=1OV=0
DAA;〔A〕=68HCY=1
SWAPA;〔A〕=86HCY=1
3-6写出能完成以下数据传送的指令
1R1内容传送到R0
MOVA,R1
MOVR0,A
2内部RAM25H单元中内容送35H单元
MOV35H,25H
3内部RAM25H单元中内容送P1口
MOVP1,25H
4内部RAM40H单元中内容送外部RAM2005H单元
MOVA,40H
MOVDPTR,#2005H
MOVX@DPTR,A
5外部RAM3000H单元中内容送外部RAM25H单元
MOVDPTR,#3000H
MOVXA,@DPTR
MOV25H,A
6外部ROM1000H单元中内容送内部RAM35H单元
MOVDPTR,#1000H
CLRA
MOVCA,@A+DPTR
MOV35H,A
7外部ROM4000H单元中内容送外部RAM4000H单元
MOVDPTR,#1000H
CLRA
MOVCA,@A+DPTR
MOVX@DPTR,A
8外部RAM1000H单元中内容送SP堆栈指针
MOVDPTR,#1000H
MOVXA,@DPTR
MOVSP,A
3-8写出下段程序中每一步A、B中的结果:
MOVA,#22H;(A)=22H
MOVB,#05H;(B)=05H
MOVR0,#08H;(R0)=08H
MULAB;(B)=00H(A)=0AAH
MOVB,R0;(B)=08H
DIVAB;(A)=15H(B)=02H
3-9试写出完成如下操作的程序:
1把RAM1000H单元中的低4位变“0”,其余位不变
MOVDPTR,#1000H
MOVXA,@DPTR
ANLA,#0F0H
MOVX@DPTR,A
2使内部RAM50H单元中的低4位变“1”,其余位不变
ORL50H,#0FH
3使内部RAM50H单元中的高3位变反,其余位不变
XRL50H,#0E0H
4使内部RAM50H单元中的高4位变“1”,低4位变“0”
MOV50H,#0F0H
5使内部RAM50H单元中的所有位变反。
XRL50H,#0FFH
3-10试编写程序完成以内部RAM30H为首地址的20个数据传送,目的地址为外部RAM以3000H为首地址的区域。
ORG0000H
MOVR0,#30H
MOVDPTR,#3000H
MOVR7,#20
LOOP:
MOVA,@R0
MOVX@DPTR,A
INCR0
INCDPTR
DJNZR7,LOOP
SJMP$
END
3-11试编写条件转移程序,当寄存器R3的内容分别满足以下条件时能转移到LOOP处执行程序,条件不满足时则停机。
(1)(R3)≥15⑵〔R3〕<15⑶〔R3〕≤15⑷〔R3〕>15
(1)(R3)≥15
cjneR3,#15,NEQ
sjmpL1
NEQ:
jncL1
sjmp$
L1:
loop
⑵〔R3〕<15
cjneR3,#15,NEQ
sjmpStop
NEQ:
jcL1
Stop:
sjmp$
L1:
loop
⑶〔R3〕≤15
cjneR3,#15,NEQ
sjmpL1
NEQ:
jcL1
Stop:
sjmp$
L1:
loop
⑷〔R3〕>15
cjneR3,#15,NEQ
sjmpstop
NEQ:
jncL1
stop:
sjmp$
L1:
loop
3-12已知:
〔SP〕=53H,〔PC〕=37FEH,执行ACALL3A00H后堆栈指针SP、堆栈中内容以及程序记数器PC中的内容是什么?
答:
〔PC〕=37FEH=0011011111111110B
执行ACALL3A00H〔3A00H=0011101000000000〕
PC高5位,3A00H低11位为:
0011001000000000=3200H
执行ACALL3A00H后堆栈指针SP、堆栈中内容以及程序记数器PC中的内容分别为:
〔PC〕=3200H(SP)=55H(54H)=00H(55H)=32H
第四章
4-1从20H单元开始存放一组带符号数,其数目已存在1FH单元。
要求统计出大于0、小于0和等于0的个数并存于ONE、TWO、THREE三个单元。
编程思路:
首先判断一下1FH单元内容是否为0,如果为0,什么都不做;如果1FH单元内容不为零,初始化ONE、TWO、THREE,通过JZ判断是否为0,通过判断ACC最高位是否为1,来判断数是正是负,假设最高位符号位为1说明是负数,否则为正数。
答案不唯一,参考程序如下:
ORG0000H
ONEDATA10H;大于0的个数
TWODATA11H;小于0的个数
THREEDATA12H;等于0的个数
MAIN:
CJNE1FH,#00H,START
SJMPSTOP
START:
MOVR0,#20H
MOVR7,1FH
MOVONE,#00
MOVTWO,#00
MOVTHREE,#0
LOOP:
MOVA,@R0
JZZERO
JBACC.7,NEQ
INCONE
SJMPNEXT
NEQ:
INCTWO
SJMPNETX
ZERO:
INCTHREE
NEXT:
INCR0
DJNZR7,LOOP
STOP:
SJMP$
END
4-2设:
自变量X为一无符号数,存放在内部RAM的VAX单元,计算出的函数值Y存放在FUNC单元,请编出满足如下关系的程序。
编程思路:
答案不唯一,参考程序如下:
ORG0000H
VAXDATA30H
FUNCDATA31H
MAIN:
MOVA,VAX
CJNEA,#50,NO50
SJMPNEXT
NO50:
JNCNEXTT
CJNEA,#20,NO20
SJMPYEQU5X
NO20:
JCYEQU2X
YEQU5X:
MOVB,#05
MULAB
SJMPNEXT
YEQU2X:
RLA
NEXT:
MOVFUNC,A
STOP:
SJMP$
END
4-3外部RAM从2000H到2100H有一数据块,请编出将它们传送到外部RAM3000H到3100H区域的程序。
编程思路:
2000H到2100H共有101H即257个数,将循环次数设成0,可以进行256次循环,2100H到3100H单独做一次即可。
答案不唯一,参考程序如下:
ORG0000H
MAIN:
MOVDPTR,#2000H
MOVP2,#30H
MOVR0,#00H
MOVR7,#00H
LOOP:
MOVXA,@DPTR
MOVX@R0,A
INCR0
INCDPTR
DJNZR7,LOOP
INCP2
MOVXA,@DPTR
MOVX@R0,A
SJMP$
END
4-4在内部RAM中,有一个以BLOCK为始址的数据块,块长在LEN单元。
请用查表指令编一程序,先检查它们假设是16进制中的A~F,则把它们变为ASCII;假设不是,则把它们变为00H。
编程思路:
首先判断一下LEN单元的内容是否为0,如果块长为0,一次都不做,如果不做判断而块长为0的话,则多做256次循环。
既然用查表程序,我觉得可以把表做的巧妙一些,省的复杂的判断,提高程序的运行效率。
可以先判断一下,内容是否大于F,如果大于F也变0,所以可以把数取出来,做个与运算,与上0F0H,如果结果不为零,就说明高四位上有数,则应该变零,如果高四位上没数,只是低4位有数,则数的范围为0-F,所以做表的时候可以将0-9对应的表都设置成0,A-F对应其ASCII。
答案不唯一,参考程序如下:
ORG0000H
BLOCKDATA30H
LENDATA2FH
MOVR0,#BLOCK
MOVA,LEN
JZSTOP
START:
MOVR7,A
MOVDPTR,#TAB
LOOP:
MOVA,@R0
PUSHACC
ANLA,#0F0H
JZNEXT
MOVA,#0
SJMPNETX1
NEXT:
POPACC
NEXT1:
MOVCA,@A+DPTR
MOV@R0,A
INCR0
DJNZR7,LOOP
STOP:
SJMP$
TAB:
DB00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,’A’,’B’,’C’,’D’,’E’,’F’
END
第六章
6-1
8051单片机内部有四个8位并行I/O口,命名为P0、P1、P2、P3。
这4个并行I/O口都可以作准双向通用I/O口,即先执行一条指令MOV P1,#0FFH。
P0、P2和P3口还有复用的第二功能。
每个口都包含一个〔8位〕锁存器〔即特殊功能寄存器P0~P3〕,一个输出驱动器,和两个三态缓冲器。
P0口功能:
可作通用I/O口,是漏级开路的。
因此必须外接上拉电阻,以保证―1‖信号正常输出。
也可作为分时作为地址/数据总线使用。
P1口功能:
可作通用I/O口,也是一个―准双向‖口,作输入口时要先将输出驱动管截止。
p2口功能:
可用作通用I/O口,与P1口类似,也 可用作高8位地址总线。
P3口功能:
可用作通用I/O口,另外,还有其第二功能。
6-2
―读锁存器‖指令是P0~P3作目的操作数的指令,能实现―读—修改—写‖口锁存器的操作。
―读引脚‖指令的特点是:
P0~P3 作为源操作数出现在指令中,但在读引脚数据之前,必须对所读的口或口位的D锁存器写入―1‖。
要正确读引脚数据,必须先写一条MOV PX,#0FFH指令或能对所读的口或口位的D锁存器写入―1‖的指令,而后紧接着写指令。
6-3
在单片机实时应用系统中,定时器/计数器有定时和对外部事件计数的功能,可用于定时控制、延时、对外部事件检测和计数等场合.定时是对周期已知的脉冲信号计数。
计数是对外部发生事件进行计数,对周期未知的外来脉冲信号计数。
采用可编程的定时器/计数器 可以方便灵活地修改定时或计数的参数或方式,与CPU并行工作,大大提高了CPU的工作效 率。
6-4
MCS-51单片机内部有2个16位的可编程的定时器/计数器:
定时器/计数器0〔T/C0〕,定时器/计数器1〔T/C1〕。
定时方式下,T/C计数8051内部机器周期信号的个数 ,由计数个数可以计算出定时时间。
每个机器周期使T/C的计数器增加1,直至计满回零后自动产生溢出中断请求,表示定时时间到。
计数方式下,T/C计数来自引脚T0〔P3.4〕和T1(P3.5)的外部脉冲信号的个数。
输入脉冲由1变0的下降沿时,计数器的值增加1直到回零产生溢出中断,表示计数已达预期个数。
6-5
MCS-51单片机的定时器/计数器共有四种工作方式:
方式0、1、2、3。
方式0是高8位和低5位的一个13位计数器的运行方式。
当TL1的低5 位溢出时,向TH1进位,而TH1溢出(回零)时向TF1标志进位〔硬件置位TF1〕,并申请中断。
还可以通过查询TF1是否置位来判断TH1是否回零溢出。
方式1是一个16为定时器/计数器,结构几乎与方式0完全一样,唯一的差异是方式1中的TH1(TH0)和TL1〔TL0〕均是8位的,构成16位计数器。
方式2中,T/C被拆成一个8位的寄存器TH1〔TH0〕和一个8位计数器TL1〔TL0〕,两者构成可以自动重装载的8位T/C。
每当它计满回零时,
一方面向CPU发出溢出中断请求,
另一方面从TH1〔或TH0〕中重新获得初值并启动计数;也就是CPU 自动将TH1〔或TH0〕中存放的初值重新装回到TL1〔或TL0〕,并在此初值的基础上对TL1〔或TL0〕开始新一轮计数,周而复始,直到下停止计数或更改工作方式命令为止。
方式3下T/C0和T/C1功能就不同了。
此时,TH0和TL0按两个独立的8位计数器工作, T/C1只能按不中断的方式工作,常常利用它的定时功能作串行口波特率发生器。
T/C0方式3时,TL0占用了T/C0的C/T、GATE、TR0、TF0、T0〔P3.4〕和INT0控制引脚 。
TH0只有简单的内部定时功能,它占用了T/C1的TR1控制位和TF1中断标志位,其启动/关闭仅受TR1控制。
6-6
定时器/计数器用做定时时,定时时间与时钟的振荡频率和定时器/计数器的设定初值有关。
用做计数时,最高输入信号频率为振荡频率的1/24。
即计数周期=2机器周期。
6-7
在T/C0工作在方式3时,T/C1仍可设置为方式0~2。
由于TR1和TF1已被T/C0〔TH0〕占用,计数开关已被接通,此时仅用T/C1的C/T来切换其定时或计数工作方式就可使T/C1工作。
计数器〔8位、13位或16位〕回零溢出时,只能将输出送入串行口或用于不需要中断的场合。
一般情况下,当T/C1用作串行口波特率发生器时,T/C0才设置为工作方式3。
此时,常把T/C1设置为方式2用作波特率发生器。
6-8
T/C0的实际作用为计时,当到达106mS后中断
. 6-14
ORG 0000H
LJMP START
ORG 001BH ;TIMER1中断
LJMP TT1
ORG 1000H
START:
MOV TMOD,#20H ;8位自动重新装入
MOV TH1,06H 装入初始值
MOV TL1,06H
MOV R2,#00H 用于统计250us的个数
SETB P1.1 ;初始化P1.0 P1.1
SETB P1.0
SETB EA ;开放中断
SETB ET1
SETB TR1
SJMP $ ;主程序踏步
TT1:
CPL P1.1 ;取反P1.1产生250us方波
INC R2 ;计数值增一,统计250us的个数
CJNE R2,#4,CONT 到达1s?
CPL P1.0 ;产生2ms方波
CLR R2 ;重新统计
CONT:
RETI ;中断返回
END
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 原理 应用 赵晓安 课后 习题
![提示](https://static.bingdoc.com/images/bang_tan.gif)