【精品】第6章作业及答案

  • 格式:doc
  • 大小:121.50 KB
  • 文档页数:14

资料内容仅供您学习参考,如有不当之处,请联系改正或者删除

1 / 14 第6章作业

1、说明定时器T0的四种工作方式。(P.145第6题)

M1M0 工作模式 功能说明

00 0 13位的定时/计数模式,TL0的高3位没用。

01 1 16位的定时/计数模式

10 2 8位、初始值自动加载的定时/计数模式。

11 3 将T0分成两个相互独立的、8位的定时/计数模式.

2、假设单片机晶振fosc=6MHz,若要求定时分别为0。1ms,1ms,10ms,定时器T0工作在方式0、方式1、方式2时,其初值应为多少?

晶振fosc=6MHz,则机器周期为2us

定时0。1ms时的初始值:

50=110010B

模式0:(213—50)=(8192-50)=8142=1111111001110B

TH0=#FEH0;TL0=#0EH

模式1:(216—50)=(65536-50)=65486=1111111111001110B

TH0=#0FFH;TL0=#0CEH

模式2:(28—50)=(256—50)=206=11001110B 资料内容仅供您学习参考,如有不当之处,请联系改正或者删除

2 / 14 TH0=#0CEH;TL0=#0CEH

定时1ms时的初始值:

500=111110100B

模式0:(213—500)=(8192-500)=7692=1111000001100B

TH0=#0F0H;TL0=#0CH

模式1:(216—500)=(65536-500)=65036=1111111000001100B

TH0=#0FEH;TL0=#0CH

定时10ms时的初始值:

5000=10B

模式1:(216-5000)=(65536—5000)=60536=11100B

TH0=#0ECH;TL0=#78H

3、假设单片机晶振fosc=6MHz,请利用T0和P1。0输出矩形波,矩形波的高电平宽50us,低电平宽300us。(P。145第13)资料内容仅供您学习参考,如有不当之处,请联系改正或者删除

2 / 14

晶振fosc=6MHz→机器周期为2us

定时器T0使之工作于模式3

定时50us的初值为:256-25=231(E7H)

定时300US的初值为:256—150=106(6AH)

方法1:

MOVTMOD,#00000011B;T0工作于模式3

MOVTCON,#0;清TR0,TF0

MOVTL0,#0E7H;高电平初值。256—25

SETBP1.0;P1.0口输出高电平

SETBTR0;启动定时器T0

LOOP1:JNBTF0,LOOP1;检测T0是否溢出

CLRTF0;清除溢出标志

CLRTR0;关闭定时器

MOVTL0,#6AH;写低电平初值256-150

SETBTR0;启动定时器T0

CLRP1。0;使P1.0输出低电平

LOOP2:JNBTF0,LOOP2;检测T0是否溢出

CLRTF0;清除溢出标志

CLRTR0;关闭定时器

MOVTL0,#0E7H;写高电平初值256-25

SETBTR0;启动定时器T0

SETBP1.0;使P1。0输出高电平

SJMPLOOP1;重复

方法2:

MOVTMOD,#03H;T0工作于模式3

MOVTCON,#0;清TR0,TF0

MOVTL0,#0E7H;高电平初值。256-25

SETBP1.0;P1.0口输出高电平

SETBTR0;启动定时器T0

LOOP:JNBTF0,LOOP;检测T0是否溢出

CLRTF0;清除溢出标志

CLRTR0;关闭定时器

JNBP1。0,NEXT;P1.0口为低电平转移,

;高电平顺序执行

MOVTL0,#6AH;定时器T0写入低电平的定时初值资料内容仅供您学习参考,如有不当之处,请联系改正或者删除

3 / 14 SETBTR0;启动定时器T0

CLRP1.0;P1。0口输出低电平

SJMPLOOP;返回重复

NEXT:MOVTL0,#0E7H;定时器T0写入高电平的定时初值

SETBTR0;启动定时器T0

SETBP1。0;P1.0口输出高电平

SJMPLOOP;返回重复

4、假设单片机晶振fosc=12MHz,用T1定时,试编程由P1.0和P1。1引脚分别输出周期为2ms和500us的方波。(P。145第14题)

晶振fosc=6MHz→机器周期为1us

定时器T0使之工作于模式1

定时250us的初值为:65536—250=65286=1111111100000110B

=FF06H

方法一:

MOVTMOD,#10H;T1工作于模式1

MOVTCON,#0;TR1、TF1清零

MOVTH1,#0FFH;65536—250=(FF06H)

MOVTL1,#05H;

MOVR7,#4;2ms是500us的4倍

SETBP1。0;P1。0置高电平

SETBP1。1;P1。1置高电平

SETBTR1;启动定时器T1

LOOP:JNBTF1,LOOP;定时器是否溢出?

CLRTF1;定时器溢出后,清除定时器溢出标志

CPLP1.1;取反P1。1

DJNZR7,NEXT;4倍关系是否满足?

MOVR7,#4;重写4倍关系

CPLP1。0;取反P1.0

NEXT:CLRTR1;关闭定时器T1资料内容仅供您学习参考,如有不当之处,请联系改正或者删除

4 / 14 MOVTH1,#0FFH;重写定时器T1的初值

MOVTL1,#06H;

SETBTR1;启动定时器T1

SJMPLOOP;返回重复

方法二:

MOVTMOD,#20H;T1工作于模式2

MOVTCON,#0;TR1、TF1清零

MOVTH1,#6;定时500us的初值(256-250)=6

MOVTL1,#6;

MOVR7,#4;500us与2ms是4倍的关系

SETBP1.0;将P1.0置高电平

SETBP1。1;将P1。1置高电平

SETBTR1;启动定时器T1

LOOP:JNBTF1,LOOP;定时器T1是否溢出

CLRTF1;清溢出标志TF1

CPLP1.1;取反P1。1口

DJNZR7,LOOP;(R7)—1→(R7),(R7)是否为0

CPLP1.0;取反P1。0口

MOVR7,#4;重写R7

SJMPLOOP;返回重复

5、编写程序,其功能为:当P1。2引脚的电平上跳时,对P1.1输入的脉冲进行记数;当P1。2引脚的的电平下跳时,停止记数,并将结果存入R7R6中。(P.146第17题)

MOVTMOD,#05H;定时器T0工作于方式1,计数方式

MOVTCON,#0;清除TF0、TR0。

MOVTH0,#0;定时器T0初始值清零 MOVTL0,#0;资料内容仅供您学习参考,如有不当之处,请联系改正或者删除

5 / 14 LOOP1:JNBP1.2,LOOP1;P1.2的电平是否上跳

SETBTR0;启动定时器T0开始计数

LOOP2:JBP1。2,LOOP2;P1。2的电平是否下跳

CLRTR0;停止计数

MOVA,TL0;将计数结果写入R7、R6,

MOVR6,A;R6写入低8位

MOVA,TH0;

MOVR7,A;R7写入高8位

6、设fosc=12MHz,编写程序,其功能为:对T0进行初始化,使之工作于模式2,产生200us的定时,并用查询T0溢出标志TF0的方法,控制P1.0引脚输出周期为2ms的方波。(P。146第18题)

MOVTMOD,#02H;T0工作于模式2,定时方式

MOVTCON,#0;清除TF0、TR0。

MOVTH0,#56;(256-200)=56

MOVTL0,#56;

MOVR7,#5;200us与1ms是5倍的关系

SETBTR0;启动定时器T0

SETBP1.0;将P1。0置高电平

LOOP:JNBTF0,LOOP;检测T0的溢出标志

CLRTF0;清除T0的溢出标志

DJNZR7,LOOP;是否到5次

MOVR7,#5;重新写入计数次数

CPLP1.0;取反P1。0口

SJMPLOOP;循环往复

7、fosc=6MHz,用模式1编程实现:以定时器T1进行外部事件计数,每计数1000个脉冲后,定时器T1转为定时工作方式,定时10ms后又转为计数方式,如此循环不止。(P.145第8题)

MOVTCON,#0;清TF1、TR1

START:MOVTMOD,#50H;T1工作于模式1,计数方式

MOVTH1,#0FCH;(65536-1000)=FC18H

MOVTL1,#18H;

SETBTR1;启动T1,计数开始

LOOP1:JNBTF1,LOOP1;检测T1溢出标志

CLRTF1;清除T1溢出标志

MOVTMOD,#10H;T1工作于模式1,定时方式

CLRTR1;关闭T1

MOVTH1,#0ECH;(65536-5000)=EC6EH

MOVTL1,#6EH;

SETBTR1;启动定时器T1