文档库 最新最全的文档下载
当前位置:文档库 › 《单片机原理与应用》习题答案和拓展资料

《单片机原理与应用》习题答案和拓展资料

第一章习题答案

1.什么叫单片机?它有哪些主要特点?

单片机是将中央处理器(CPU)、随机存储器(RAM)、只读存储器(ROM)、中断系统、定时/计数器、I/O口等主要计算机部件集成在一片集成电路芯片上的单片微型计算机(Single Chip Microcomputer)的简称。具有体积小、功耗低、价格便宜、控制功能强等特点。

2.请简述单片机的技术发展历史,单片机的主要技术发展方向是什么?

单片机技术发展经历了单芯片微机形成阶段、性能完善提高阶段和微控制器化阶段三个主要阶段。目前单片机主要技术发展方向是:大容量高性能化、小容量低价格化、外围电路内装化、多品种化以及I/O 接口功能的增强、功耗降低等。

4.单片机主要用在哪些方面?

由于单片机体积小、功耗低、价格便宜,广泛应用于仪器仪表、家用电器、医用设备、航空航天专用设备的智能化管理及过程控制等领域;又由于单片机具有较强的实时数据处理能力和控制功能,可以使系统保持在最佳工作状态,提高系统的工作效率和产品质量,所以在工业控测控、航空航天、尖端武器等各种实时控制系统中,都作为控制器件使用。

第二章习题参考答案

1.单片机系统复位后,PC值为(0000H )。

2.MCS-51单片机中,一个机器周期=( 6 ) 状态周期=(12 )振荡周期。当主频为12MHz时,一个机器周期为(1μs )

3.PSW中RS1 RS0=01时,寄存器R2的地址为(10H)PSW中RS1 RS0=10时,寄存器R2的地址为(12H)

4.MCS-51单片机的EA=0,程序存储器访问的是(片外ROM )

5.MCS-51单片机上有( 4 )个独立的存储空间。

6.MCS-51系列单片机在片内集成了哪些主要逻辑功能部件?

答:有微处理器CPU、程序存储器、数据存储器、定时/计数器、中断源、并行I/O端口等功能部件组成。

7.程序计数器(PC)作为不可寻址寄存器,它有哪些特点?数据地址指针DPTR有哪些特点?

答:PC是一个16位的特殊功能寄存器,又称程序指针,它具有自动加1的功能,始终指向下一条指令的首地址,以保证程序按顺序执行;DPTR是一个16位的专用地址指针寄存器。作间址寄存器使用,用来存储外接64KB的数据存储器和I/O端口,DPTR也可以拆成两个独立8位的寄存器,即DPH(高8位字节)和DPL(低8位字节),分别占据83H和82H 两个地址。

8.MCS-51单片机片内256B的数据存储器可分为几个区?分别作什么用?

答:00H~1FH共32个单元通常作为工作寄存器区,20H~2FH可用位寻址区,可直接进行位操作,30H~7FH共80个单元为用户RAM区,作堆栈或数据缓冲器用,80H~FFH为特殊功能寄存器区。

9.开机复位后,CPU使用的是哪组工作寄存器?它们的地址是什么?CPU如何确定和改变当前工作寄存器组?

答:开机复位后,由于PSW复位值是00H,CPU使用的是0区的工作寄存器R0~R7,它们的地址是00~07H,可以通过改变PSW的RS1 RS0 两个位的值确定和改变当前工作寄存器组。

10.堆栈有哪些功能?堆栈指针(SP)的作用是什么?在程序设计时,为什么还要对SP重新赋值

答:堆栈是一个特殊的存储区,用来暂存数据和地址。堆栈指针SP是用来管理堆栈的它指示出堆栈顶部在片内RAM中的位置。系统复位后,SP初始化为07H,使得堆栈实际上从08H单元开始。由于08H~1FH 单元分属于工作寄存器1~3区,20H~2FH为位寻址区,若程序中要用到这些区,应把SP值改为30H或更大的值。

11.MCS-51的SFR占用了什么空间?其寻址方式如何?

答:MCS-51的SFR占用了片内数据存储器的空间,地址范围为80H~FFH。其寻址方式为直接寻址。

12.程序状态寄存器PSW的作用是什么?有哪些常用状态位,它们的作用各是什么?

答:PSW是一个8位的特殊功能寄存器。用于存放程序运行中的各种状态信息。常用状态位及其作用:

(1) 进位标志位Cy。在进行加或减运算时,如果操作结果最高位有进位或借位,Cy由硬件置“1”,否则清“0”。

(2) 辅助进位标志位Ac。在进行加或减运算时,如果低四位数向高位有进位或借位,

硬件会自动将Ac置“l”,否则清“0”。

(3) 工作寄存器区指针RSl RS0。用于选择CPU当前工作寄存器的工作区。可由用户用软件来改变RSl RS0的组合,以切换当前选用的寄存器的工作区。

(4) 溢出标志位OV。当进行算术运算时,如果产生溢出,则由硬件将OV位置“l”,否则清“0”。

(5) 奇偶标志位P。该位始终跟踪累加器A中含“1”个数的奇偶性。如果A中有奇数个“1”,则P置“l”,否则置“0”。

13.MCS-51单片机复位条件是什么?常用复位电路有哪些?

答:复位条件是在单片机的RST引脚输入持续至少两个机器周期高电平。MCS-51单片机通常采用上电复位和上电+按钮电平复位两种方式。

【2.1任务拓展】:

了解发光二极管的工作条件,限流电阻的计算方法。

发光二极管为正向导通反向截止,其工作电压一般红、绿色:1.8-2.4V

蓝/白:3.0-3.8V。MCS-51的输出电压为3.7V左右,输出最大电流约为20mA,接近LED 的工作限流,因此需要通过限流电阻保护LED不受突然的电流增强所导致的损坏。限流电阻的计算公式为:

(电源电压-导通压降)/导通电流

这里,“导通压降”即LED工作电压,“导通电流”根据用户需求而定,如电源电压为5V,导通压降为2V,电路所需工作电流为15mA通过计算得限流电阻为200Ω,根据电阻的常用型号,可选取最接近该值的220Ω。

【2.2任务拓展】:

了解Proteus使用,将任务2.2在Proteus 中仿真实现。

里输入源程序,编译调试,生成.HEX文件后

,加载到单片机中。按仿真按钮进行仿真,拨动开关至左

端4脚,会观察到LED 1点亮;拨动开关至右端1脚,会

观察到LED 2闪烁,LED 1熄灭。

第三章习题参考答案

1.选择题:

(1)可以实现片外数据存储器访问的指令是(A )。

A.MOVX B. MOV C. NOP D. DIV

(2)下列指令中,可以实现将累加器A的第0位置1(其它位不变)的指令是( B )。

A.MOV A,#01H B. SETB ACC.0 C. ANL A,#0FFH D. SETB ACC

(3)MOVX A @DPTR 指令中,源操作数的寻址方式是(B )

A.寄存器寻址 B. 寄存器间接寻址 C.直接寻址 D. 立即寻址(4)LCALL指令操作码地址是2000H,执行完子程序返回指令后,PC=(D )。

A.2000H B. 2001H C.2002H D. 2003H

(5)对程序存储器的读操作,只能使用( B )

A.MOVX B. MOVC C. PUSH D. MOV

(6)执行下面指令后,30H内容是(C )

MOV R1,#30H

MOV40H,#0E0H

MOV@R1, 40H

A.40H B. 30H C. 0E0H D. FFH

(7)下列指令格式正确的是( D )。

A.DEL:XCHA,30H B. MOV:INC A

C. 2AB:MOV A,#20H

D. ABC:MOV 23H,A

(8)当执行指令(A )后,累加器A的内容为00H。

A.ANL A,#00H B. ORL A,#00H

C. XRL A,#00H

D.以上都不对

2.比较下面各组指令,并在指令后添加注释

(1) MOV A ,20H ;20H内容送累加器A

MOV C ,20H ;位地址20H内容送位累加器C

(2) MOV A ,20H ;20H内容送累加器A

MOV R1 ,#20H ;20H送累加器A

MOV A , @R1 ;20H指向地址的内容累加器A

(3)CJNE A ,@R1,L1 ;比较A和R1指向地址的内容,若相等程序顺序运行,不相

等则转L1处

DJNZ R2 ,L1 ;R2内容减1,不等于0转L1处,等于0则顺序运行3.判断下列指令是否正确,并改正错误

(1). SUBB 30H,#12H

该指令错误,带进位减法指令目的操作数必须是A,要将立即数12H和30H内容相加,可改为:MOV A , 30H

SUBB A,#12H

(2). MOV A ,2000H

该指令错误,MOV为内部数据传送指令,范围只是在内部数据存储器和累加器传送,地址不超过FFH。要将外部2000H送累加器可改为

MOV DPTR ,2000H

MOVX A,@ DPTR

(3). ADD R0,0A3H

该指令错误,要将A3H内容和R0内容相加,

可改为:MOV A , R0

ADD A,0A3H

(4). CJNE 20H,#20H,L1

该指令错误,CJNE第一操作数可以是A、寄存器Rn或@Ri

可改为:MOV R1,20H

CJNE R1,#20H,L1

(5). RLC A

该指令正确

4.设R0的内容为32H,A的内容为48H,而片内RAM 32H单元的内容为80H,40H 单元的内容为08H。请指出在执行下列程序段后,上述各单元的内容变化。

MOV A,@R0 ;R0指向地址32H内容送A,即(A)=80H MOV @R0,40H ;32H←(40H),即(32H)=(40H)=08H

MOV 40H,A ;40H←(A),即(40H)=(A)=80H

MOV R0,#35H ;R0←35H,,(R0)=35H

5.根据要求要求写出相应的指令。

1).将R0的内容送R1

MOV A,R0

MOV R1,A

2)将30H内容送20H。

MOV 20H,30H

3)将立即数30H送R0H

MOV R0,#30H

5)将R0的内容送以R1中内容为地址的存储单元。

MOV A,R0

MOV @R1,A

6)将内部RAM30H内容送外部20H单元。

MOV A,30

MOV R1,#20H

MOVX @R1,A

7)将外部RAM3000H内容送内部30H单元。

MOV DPTR,#3000H

MOVX A, @DPTR

MOV 30H,A

8)将ROM2000H内容送R1。

MOV DPTR,#3000H

MOVC A, @A+DPTR

MOV R1,A

9)将ROM2000H内容送内部30H单元。

MOV DPTR,#2000H

MOVC A, @A+DPTR

MOV 20H,A

10)将ROM2000H内容送外部20H单元。

MOV DPTR,#2000H

MOVC A, @A+DPTR

MOV R1,#20H

MOVX @R1,A

6.编程将片外数据存储器地址为40H~60H区域的数据块,全部搬移到片内RAM的同地址区域,并将原数据区全部填为FFH。

MOV R0, #40H

MOV R1, #33

LOOP:MOVX A,@ R0

MOV @ R0, A

MOV A,#0FFH

MOVX @ R0, A

INC R0

DJNZ R1,LOOP

RET

7.编程找出片外2000H~200FH数据区中的最小值,结果存放于R2中。

MOV DPTR,#2000H

MOV R7, #0FH

MOVX A,@DPTR

MOV B,A

LOOP:INC DPTR

MOVX A,@DPTR

CJNE A,B,LOOP1

LOOP1:JNC LOOP2

MOV B,A

LOOP2:DJNZ R7,LOOP

MOV R7,B

RET

【3.1任务拓展】

1.目的操作数的寻址方式

对于两个操作数的指令,源操作数有寻址方式,目的操作数也有寻址方式。如:

“MOV @R0,30H”,对于源操作数属于直接寻址,而对于目的操作数属于寄存器间接寻址。若不特殊声明,一般都指源操作数的寻址方式。

2.分析不同寻址方式适用的存储空间

寻址方式寻址空间(操作数存放空间)

立即寻址程序存储器

直接寻址片内RAM低128字节、SFR

寄存器寻址工作寄存器R0~R7,A,B,DPTR

寄存器间接寻址片内RAM:@R0,@R1,SP

片外RAM:@R0 ,@R1,@DPTR

变址寻址程序存储器:@A+PC,@A+DPTR

相对寻址程序存储器256字节范围内:PC+偏移量

位寻址片内RAM的位寻址区(20H~2FH字节地址)

某些可位寻址的SFR

【3.2任务拓展】

编程实现两个16位无符号数5678H-1234H的减法运算,结果保存在31H 和30H单元。

解:减数和被减数都是16位二进制数,计算时要先进行低8位的减法,然后在进行高8位的减法,低8位的减法不需要考虑进位,所以要在减法指令之前将借位标志位清零。

程序如下:

ORG 0040H

CLR C

MOV A, #78H

SUBB A, #34H

MOV 30H, A

MOV A, #56H

SUBB A, #12H

MOV 31H, A

END

【3.3任务拓展】

若(A)=10001011B,直接执行指令“RL A ”能实现2倍操作吗?如果不行“RLC A ”呢?对CY应该进行怎样的初始化?

答:(A)=10001011B(139D),直接执行指令“RL A ”后,(A)=00010111B(23D),显然结果错误,用指令

CLR C

RLC A

结果:(CY)=1,(A)=00010110B(16H),116H(278D)才是正确结果。

采用循环移位实现累加器A中无符号数乘2时,A中数据为[00H ,7FH]时,直接采用“RL A ”即可,若超过7FH,则应使用“RLC A ”指令,使用该指令前CY应该初始化为0。

【3.5任务拓展】

ORG指令作用?

图3-16循环闪烁灯电路图

ORG指令为程序段说明伪指令

其含义是向汇编程序说明程序段的起始地址,也称起始伪指令。

程序中去掉RL A指令,会出现什么情况?

上述任务重若去掉RL A指令,运行程序会发现只有发光二极管D1一直闪烁,其余均不亮。

第四章习题参考答案

1.是在外部RAM中的xdata区定义了无符号字符型的字变量OUTX2,它的地址是(1002H)。

2.(1)编程容易;(2)容易实现复杂的数值计算;(3)容易阅读、调试、维护程序;(4)容易实现模块化开发;(5)程序可移植性好。

3.bit,data,idata,pdata,code,xdata,sbit,sfr,sfr16

4.bit和sbit都是C51扩展的变量类型。

bit是位变量,编译器在编译过程中分配地址。除非指定,否则这个地址是随机分配的。这个地址是整个可寻址空间,也就是内部RAM、外扩RAM和ROM。

sbit是对应可位寻址空间的一个位,包括可位寻址区:20H~2FH和特殊功能寄存器区。一旦用了形如sbi xxx = REGE^6的定义,这个sbit量就确定地址了。

bit和sbit的最大区别在于,bit是定义一个变量;sbit经常用在寄存器中的,方便对寄存器的某位进行操作。

5.(1)使用C51运行库中的预定义宏;(2)通过指针访问;(3)使用C51扩展关键字_at_。

6.(1)中断函数不能进行参数传递,如果中断函数中包含任何参数声明都将导致编译出错。

(2)中断函数没有返回值,如果企图定义一个返回值将得不到正确的结果,建议在定义中断函数时将其定义为void类型,以明确说明没有返回值。

(3)在任何情况下都不能直接调用中断函数,否则会产生编译错误。因为中断函数的返回是由8051单片机的RETI指令完成的,RETI指令影响8051单片机的硬件中断系统。如果在没有实际中断情况下直接调用中断函数,RETI指令的操作结果会产生一个致命的错误。

(4)如果在中断函数中调用了其它函数,则被调用函数所使用的寄存器必须与中断函数相同。否则会产生不正确的结果。

(5)C51编译器对中断函数编译时会自动在程序开始和结束处加上相应的内容,具体如下:在程序开始处对ACC、B、DPH、DPL和PSW入栈,结束时出栈。中断函数未加using m修饰符的,开始时还要将R0~R1入栈,结束时出栈。如中断函数加using m修饰符,则在开始将PSW入栈后还要修改PSW中的工作寄存器组选择位。

(6)C51编译器从绝对地址8n+3处产生一个中断向量,其中n为中断号,也即interrupt 后面的数字。该向量包含一个到中断函数入口地址的绝对跳转。

(7)中断函数最好写在文件的尾部,并且禁止使用extern存储类型说明。防止其它程序调用。

7.有small,compact和large三种存储器模式。Small存储器模式参数及局部变量放入可直接寻址的内部存储器(最大128B,默认存储器类型为data)

compact存储器模式参数及局部变量放入分页外部数据存储器(最大256B,默认存储器类型为pdata)

large存储器模式参数及局部变量直接放入外部数据存储器(最大64KB,默认存储器类型为xdata)

8. #include

main( )

{

int i;

unsigned char xdata *p=0x2000; /* 指针指向2000H单元*/

for(i=0;i<256;i++) /*清零2000H-20FFH单元*/

{*p=0; p++;}

}

9.(1)unsigned char code dis_code[10]={0x3f,0x06,0x5b,0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};

(2)unsigned char data TL0_L _at_ 0x30;

unsigned char data TH0_H _at_ 0x31;

(3)unsigned char idata data_buf[20];

(4)unsigned char xdata data_array[100];

(5)unsigned char bdata status;

sbit flag_lamp1=status^0;

sbit flag_lamp2=status^1;

sbit flag_machine1=status^2;

sbit flag_machine2=status^3;

sbit flag_port1=status^4;

sbit flag_port2=status^5;

sbit flag_calcu1=status^6;

sbit flag_calcu2=status^7;

【任务拓展1】

以上实现了简单的流水灯,是一个比较简单的例子,大家根据自己的兴趣可以修改此例,实现更为复杂或自己喜欢的流水灯效果,比如:

奇数序号灯亮,偶数序号灯灭,然后奇数序号灯灭,偶数序号灯亮,依次循环。

电路图不变,实现程序如下(只给出了主程序,其它与本章任务实施的程序相同):

void main(void)

{

while(1)

{

P1=0x55;

delay();

P1=0xaa;

delay();

}

}

【任务拓展2】

0号、7号灯亮一会儿,然后灭;1号、6号灯亮一会儿,然后灭;2号、5号灯亮一会儿,然后灭;3号、4号灯亮一会儿,然后灭,依次循环。

电路图不变,实现程序如下(只给出了主程序,其它与本章任务实施的程序相同):

void main(void)

{

while(1)

{

P1=0x7e;

delay();

P1=0xbc;

delay();

P1=0xc;

delay();

P1=0xe7;

delay();

}

}

第五章习题参考答案

1. MCS-51单片机有5个中断源,2 个中断优先级。优先级由软件填写特殊功能寄存器IP 加以选择。

2.外部中断请求标志位是IE0和IE1。

3. 8051 单片机响应中断后,产生长调用指令LCALL,执行该指令的过程包括:首先把当前PC的内容压入堆栈,对断点保护,然后把长调用指令的16位地址送PC,使程序转向执行中断入口地址区。

4.8051单片机的IP寄存器功能是设置中断优先级

5.用指令完成下列要求。

⑴.INT1、T0开中断,其余禁止中断;

MOV IE, #86H

⑵.全部开中断

MOV IE, #FFH

⑶.INT0、T0开中断,其余保持不变;

SETB EA

SETB EX0

SETB ET0

⑷.INT1、串行口为高优先级,其余为低优先级;

MOV IP, #85H

5.子程序和中断程序有何异同,为什么子程序返回指令RET和中断返回指令RETI不能相互替代?

答:中断类似于子程序设计中的调用子程序,但它们有着本质的区别。调用子程序是程序员事先安排好的,而中断是由一些特殊事件触发的,是随机的。RET功能是恢复堆栈中PC的值,从调用指令的下一条指令开始运行程序,不影响标志位。RETI除了具有RET指令功能外,还清除内部相应的中断状态触发器,因此中断服务程序必须以RETI为指令结束。CPU 执行RETI指令后至少再执行一条指令,才能响应新的中断请求,因此不能互换。

1.外部中断有几种中断触发方式?对跳变触发和电平触发信号有什么要求?如何设置?

答:外部中断有低电平触发和边沿触发两种触发方式。

低电平触发时,施加在相应引脚上的低电平在中断返回前必须撤消,否则将再次申请中断造成出错。即施加在i

INT引脚上的低电平持续时间应大于一个机器周期,且小于中断服务程序的执行时间。在边沿触发方式中,为了保证CPU在两个机器周期内能够检测到由高至低跳变的电平,输入的高电平和低电平的持续时间至少要保持12个振荡周期(即一个机器周期的时间)。

通过TCON寄存器的IT1和IT0来设置。ITi设置为“0”时,相应的外部中断为低电平触发方式;设置为“1”时,相应的外部中断为边沿触发方式,

7.为何要在程序的首地址安排一条跳转到主程序的指令?在响应中断的过程中为什么要保护现场?应如何保护?

答:因为程序的首地址与外中断0的入口地址之间只相差3各单元,放不下完整的主程序,一般将主程序放到0030H以后的单元,故要安排一条跳转到主程序的指令。

主程序中通常用到PSW、工作寄存器和特殊功能寄存器等。如果在中断服务程序中要用这些寄存器,会造成这些现场寄存器中数据的混乱,在中断服务前应将它们的内容保护起来称保护现场。通常利用堆栈操作来保护现场。

8. 利用INT0做一个计数器。当INT0有脉冲时,A的内容加1。并且当A的内容大于或等于100时将P1.0置位。

ORG 0000H

LJMP MIN0

ORG 0003H

LJMP INTB0

ORG 0030H

MIN0: MOV SP,#30H ;主程序

SETB IT0

SETB EX0

SETB EA

MOV A,#00

MIN1: NOP

LJMP MIN1

ORG 0100H

INTB0: PUSH PSW ;INT0的中断服务程序

ADD A,#01

CJNE A,#100,INTB1

LJMP INTB2

INTB1:JC INTB3

INTB2:SETB P1.0

INTB3:POP PSW

RETI

END

【5.1任务拓展】

了解中断响应后,中断请求标志位如何撤除?

当中断有效,CPU 响应中断请求后,在中断返回前,应该及时返回撤除上一个中断请求,否则会引起另一次中断。

中断请求的产生是由硬件自动完成的,但是不同中断源的中断请求标志的撤除却并不同。

(1). 外部中断请求的撤除

对于下降沿触发的外部中断,CPU 响应中断后,由硬件自动清除有关的请求标志位。 对于电平激活的外部中断,撤除方法较复杂。因为在电平触发方式下,CPU 响应中断时,不会自动清除IE0或IE1标志,所以在响应中断后应立即撤除0INT 和1INT 引脚上的低电平,由于CPU 不能控制0INT 和1INT 引脚上外接的信号,所以必须用软硬结合的方法处理。图5-5电路是一个可行方案。

外部中断请求信号接在D 触发器的CP 端,当外部中断请求信号正脉冲出现在CP 端时,由于D 端接低电平,所以D 触发器输出的输出低电平,申请中断。当CPU 响应中断时,执行两条指令:

SETB P1.0 CLR P1.0

在P1.0输出一个负脉冲,D 触发器被置1.Q 输出为1,撤销了中断请求信号。

图5-5 电平方式外中断请求的撤除电路

(2)定时/计数器溢出标志的撤除

对定时/计数器溢出中断,CPU 响应中断后,由硬件自动清除了有关的中断请求标志位TF0或TF1。即中断请求是自动撤除的,无需采取其他措施。

(3) 串行口收发结束中断标志的撤除

对串行口中断,CPU 响应中断后,标志位TI 和RI 不能自动撤除,需要用软件来清楚相应标志。

请求信号

第六章习题答案

1.当定时器T0工作在方式3时,要占用定时器T1的TF1和TR1两个控制位。

2.在定时器工作在方式1下,计数器的计数器的宽度为16 位,若f osc=12MHz,最大定时时间为1μs,若f osc=6MHz,则最大定时时间为2μs。

3.定时时间与定时器的工作方式、计数初值及晶振频率有关。

4.MCS-51的定时器/计数器作计数器使用时,计数脉冲由外部信号通过引脚P3.4和P3.5提供。

5.MCS-51的定时器/计数器T0门控信号GATE设置为1时,只有INT0引脚为高电平且由软件使TR0置1时,才能启动定时器工作。

6.MCS-51系列单片机内部设有几个定时器/计数器?它们是由哪些专用寄存器组成?有哪几种工作方式?简述各种工作方式的功能特点。

MCS-51单片机内部设有两个16位定时器/计数器T0和T1。分别有的8位计数器TH0、TL0和TH1、TL1组成,各有4种工作方式。

方式0是一个13位的定时器/计数器。只用了16位寄存器中的高8位(THi)和低5位(TLi的D4~D0位),TLi的高3位未用。

方式1为16位定时器/计数器方式,由THi的8位和TLi的8位构成16位加1计数器, ,当16位计数满溢出时,溢出标志位TFi置“1”。

方式2为8位自动重装计数器。仅TLi作为计数器,而THi的值在计数中不变。TLi溢出时,THi中的值自动装入TLi中。

方式3只适用定时器/计数器T0。T0在该方式下被拆成两个独立的8位计数器TH0和TL0,TL0可作8位的定时器或计数器用,而TH0借用T1的控制位和溢出标志位TR1和TF1,只可用作简单的定时器使用。该方式下T1可用作串行口波特率发生器。

7.MCS-51系列单片机定时器/计数器作定时器或计数器使用时,其计数脉冲分别由谁提供?

作定时器使用时,其实质是在单片机内部对机器周期进行计数,计数脉冲输入信号由内部时钟提供,每一个机器周期计数器自动加1。

作计数器使用时,其实质是对外部事件进行计数,计数脉冲来自相应的外部输入引脚T1或T0,当外部输入脉冲信号由1至0的跳变时,计数器自动加1。

8.采用程序查询方式,由T1产生一个50Hz的方波,从P1.1输出,f osc=12MHz。

解:方波周期T=1/50=0.02s=20ms,用T1定时10ms,计数初值为:

216-10×10-3×12×106/12=65536-10000=55536=D8F0H

源程序如下:

ORG 0000H

LJMP T1BUS

ORG 0030H

T1BUS: MOV TMOD,#10H ;T1方式1,定时模式

SETB TRl ;启动T1

LOOP:MOV TH1,#0D8H ;送T1计数初值

MOV TL1,#0F0H

LOOP1: JNB TF1,LOOP1 ;T1没有溢出等待

CLR TF1 ;产生溢出清标志位

CPL P1.1 ;P1.1取反输出

SJMP LOOP ;循环

END

【任务拓展】

门控位的应用。当GA TE=0时,定时器/计数器的启停只跟TRi位有关TRi置“1”时,定时器/计数器开始工作;TRi为“0”时,定时器/计数器停止工作;当GATE=1时,定时器/计数器的启动要由外部中断引脚和TRi位共同控制。只有当外部中断引脚INT0或1

INT为高时,TR0或TR1置“1”才能启动对应的定时器工作。

利用T0门控位测INT0引脚上出现的正脉冲宽度,并将所测得的高8位值存入片内71H 单元,低8位值存入片内70H单元。已知f osc=12MHz。

解:设外部脉冲由INT0(P3.2)输入,T0工作于定时模式,选择方式1(16位计数器),GA TE设为1。测试时,应在INT0为低电平时,设置TR0为1,一旦INT0变为高电平,就启动计数;INT0再次变为低电平时,停止计数。此计数值对应被测正脉冲的宽度。

程序段如下(用查询方式):

MOV TMOD,#09H ;T0定时模式,方式1,GATE=1

MOV TL0, #00H ;T0从0000H开始计数

MOV TH0,#0OH

MOV R0, #70H

LOOP:JB P3.2,LOOP ;等待P3.2变低

CLR EA

CLR ET0

SETB TR0 ;P3.2变低,准备启动T0

LOOP1:JNB P3.2,LOOP1 ;等待P3.2变高,启动计数

LOOP2:JB P3.2,LOOP2 ;等待P3.2再次变低,当P3.2为高电平时,定时器T0

;在硬件作用下自动计时

CLR TR0 ;P3.2变低后,停止计数

MOV @R0,TL0 ;存入计数值

INC R0

MOV @R0,TH0

这种方案的最大被测脉冲宽度为65535μs (f osc=12MHz),由于靠软件启动和停止计数器,测量的数值有一定的误差,其误差与采用的指令有关。上述程序被测的脉冲宽度t为:t=12×N/fosc =Nμs

式中N为定时器中的计数值,等于71H 70H单元中的数值。

第七章习题答案

1.选择题

(1)MCS-5l系列单片机的串行口是(B )。

A. 单工

B.全双工

C.半双工

D.并行口

(2)表示串行数据传输速率的指标是( D )。

A. USART

B.UART

C.字符帧

D.波特率

(3)串行口的控制寄存器是(C )。

A. PCON

B.SMOD

C.SCON

D.SBUF

(4)当设置串行口工作于方式2时,采用( A )指令。

A.MOV SCON,#80H

B. MOV SCON,#10H

C. MOV PCON,#80H

D. MOV PCON,#10H

(5)当串行口工作于方式0时,其波特率( C )。

A.取决于定时器1的溢出率

B. 取决于PCON的SMOD

C. 取决于时钟频率

D. 取决于PCON的SMOD和定时器1的溢出率

(6)当串行口工作于方式1时,其波特率( D )。

A.取决于定时器1的溢出率

B. 取决于PCON的SMOD

C. 取决于时钟频率

D. 取决于PCON的SMOD和定时器1的溢出率

(7)串行口的发送数据和接收数据端为(A )。

A.TXD和RXD

B.TI和RI

C.TB8和RB8

D.REN

(8)串行口是单片机的(A )。

A. 内部资源

B.外部资源

C.输入设备

D.输出设备

简答题

2.何谓波特率、溢出率?如何计算和设置MCS-51系列单片机串行通信的波特率?

波特率是串行数据传输中,串行口每秒钟发送(或接收)的二进制位数称为波特率,单位是b/s(位/秒)。溢出率是指定时器T1作为波特率发生器使用时的溢出频率,其大小为溢出周期之倒数

在方式0时,每个机器周期发送或接收一位数据,因此波特率固定为振荡频率的l/12,且不受SMOD位的控制。

,当SMOD设方式2的波特率要受PCON中SMOD位的控制,波特率=)

f SMOD

64

/(

2/

OSC

置为“0”时,波特率等于osc

f/64,若SMOD设置为“1”时,则波特率等于osc f/32。

方式1或方式3时,其波特率由定时器/计数器T1的溢出率与SMOD位共同控制。其波特率可表示为:波特率=T1的溢出率/(32/SMOD

2)

3.为什么T1用作串行口波特率发生器时,常选用操作方式2?

定时器T1工作于方式2是8位的自动重装方式,这样就避免了由于软件装载引起的误差,故通常将T1设置为方式2,作为波特率发生器。

4.串行口控制寄存器SCON中TB8、RB8起什么作用?在什么方式下使用?

TB8和RB8:方式2和方式3时发送和接受的第9位数据。在双机通信中可以作为奇偶校验位,在多机通信中,可作为地址和数据的区别

【7.1任务拓展】

并口转换串口:

在单片机的串行口外接一个并入串出移位寄存器74LS165,实现并口到串口的转换,外部8位并行数据通过移位寄存器74LS165进入单片机的串行口,再送往P0点亮LED指示灯。硬件电路如图:

程序清单:

ORG 0000H

LJMP START

ORG 0020H

START:CLR P1.0

SETB P1.0;发送移位脉冲

MOV SCON,#10H ;设串行口方式0,开放接收允许

RQ1:JNB RI,RQ1 ;等待接收完一帧数据

CLR RI ;清RI中断标志

MOV A,SBUF ;读SBUF

MOV P0,A ;接收数据送P0

LCALL DELAY

SJMP START

ORG 1000H

DELAY:MOV R7,#10 ;延时程序

DL1: MOV R6,#200

DL2: MOV R5, #250

DL3: DJNZ R5, DL3

DJNZ R6,DL2

DJNZ R7,DL1

RET

END

相关文档
相关文档 最新文档