【精品】第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