单片机原理及应用赵晓安课后习题.docx

上传人:b****8 文档编号:23829826 上传时间:2023-05-21 格式:DOCX 页数:16 大小:25.97KB
下载 相关 举报
单片机原理及应用赵晓安课后习题.docx_第1页
第1页 / 共16页
单片机原理及应用赵晓安课后习题.docx_第2页
第2页 / 共16页
单片机原理及应用赵晓安课后习题.docx_第3页
第3页 / 共16页
单片机原理及应用赵晓安课后习题.docx_第4页
第4页 / 共16页
单片机原理及应用赵晓安课后习题.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

单片机原理及应用赵晓安课后习题.docx

《单片机原理及应用赵晓安课后习题.docx》由会员分享,可在线阅读,更多相关《单片机原理及应用赵晓安课后习题.docx(16页珍藏版)》请在冰豆网上搜索。

单片机原理及应用赵晓安课后习题.docx

单片机原理及应用赵晓安课后习题

单片机原理及应用

第二章课后题

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1