第6章作业及答案复习课程Word格式文档下载.docx
- 文档编号:17715074
- 上传时间:2022-12-08
- 格式:DOCX
- 页数:16
- 大小:81.25KB
第6章作业及答案复习课程Word格式文档下载.docx
《第6章作业及答案复习课程Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《第6章作业及答案复习课程Word格式文档下载.docx(16页珍藏版)》请在冰豆网上搜索。
定时器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
CLRP1.0;
使P1.0输出低电平
LOOP2:
JNBTF0,LOOP2;
写高电平初值256-25
使P1.0输出高电平
SJMPLOOP1;
重复
方法2:
MOVTMOD,#03H;
T0工作于模式3
MOVTCON,#0;
清TR0,TF0
高电平初值。
P1.0口输出高电平
启动定时器T0
LOOP:
JNBTF0,LOOP;
检测T0是否溢出
清除溢出标志
关闭定时器
JNBP1.0,NEXT;
P1.0口为低电平转移,
;
高电平顺序执行
定时器T0写入低电平的定时初值
CLRP1.0;
P1.0口输出低电平
SJMPLOOP;
返回重复
NEXT:
MOVTL0,#0E7H;
定时器T0写入高电平的定时初值
SETBTR0;
SETBP1.0;
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
TR1、TF1清零
MOVTH1,#0FFH;
65536-250=(FF06H)
MOVTL1,#05H;
MOVR7,#4;
2ms是500us的4倍
P1.0置高电平
SETBP1.1;
P1.1置高电平
SETBTR1;
启动定时器T1
LOOP:
JNBTF1,LOOP;
定时器是否溢出?
CLRTF1;
定时器溢出后,清除定时器溢出标志
CPLP1.1;
取反P1.1
DJNZR7,NEXT;
4倍关系是否满足?
重写4倍关系
CPLP1.0;
取反P1.0
NEXT:
CLRTR1;
关闭定时器T1
重写定时器T1的初值
MOVTL1,#06H;
SJMPLOOP;
方法二:
MOVTMOD,#20H;
T1工作于模式2
MOVTH1,#6;
定时500us的初值(256-250)=6
MOVTL1,#6;
MOVR7,#4;
500us与2ms是4倍的关系
将P1.0置高电平
SETBP1.1;
将P1.1置高电平
定时器T1是否溢出
清溢出标志TF1
取反P1.1口
DJNZR7,LOOP;
(R7)-1→(R7),(R7)是否为0
取反P1.0口
重写R7
SJMPLOOP;
5、编写程序,其功能为:
当P1.2引脚的电平上跳时,对P1.1输入的脉冲进行记数;
当P1.2引脚的的电平下跳时,停止记数,并将结果存入R7R6中。
(P.146第17题)
MOVTMOD,#05H;
定时器T0工作于方式1,计数方式
清除TF0、TR0。
MOVTH0,#0;
定时器T0初始值清零
MOVTL0,#0;
JNBP1.2,LOOP1;
P1.2的电平是否上跳
启动定时器T0开始计数
JBP1.2,LOOP2;
P1.2的电平是否下跳
停止计数
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;
MOVTH0,#56;
(256-200)=56
MOVTL0,#56;
MOVR7,#5;
200us与1ms是5倍的关系
检测T0的溢出标志
清除T0的溢出标志
DJNZR7,LOOP;
是否到5次
重新写入计数次数
循环往复
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;
启动T1,计数开始
JNBTF1,LOOP1;
检测T1溢出标志
清除T1溢出标志
T1工作于模式1,定时方式
关闭T1
MOVTH1,#0ECH;
(65536-5000)=EC6EH
MOVTL1,#6EH;
JNBTF1,LOOP2;
SJMPSTART;
循环不止
第5章参考作业及答案
8、89C51单片机的P3.3口有1Hz的方波输入,P3.5口有频率介于1KHz—5KHz的周期信号输入,试利用定时器T1的相关功能,编程计算该周期信号的频率,并将其存于片外RAM2100H单元中。
MOVTMOD,#D0H;
T1:
方式1、计数、开关由TR1和P3.3联合控制
CLRTF1;
CLRTR1;
MOVTH1,#0;
写入计数初值
MOVTl1,#0;
LOOP1:
JNBP3.3,LOOP1;
等待P3.3为高电平
SETBTR1;
启动定时器T1
LOOP2:
JBP3.3,LOOP2;
等待计数结束
关闭定时器T1
CLRC;
清除进位标志
MOVA,TL1;
读取计数脉冲数的低8位
RLCA;
低8位×
MOVDPTR,#2100H;
片外目的数据存储器地址指针
MOVX@DPTR,A;
低8位存入要求的目标地址
INCDPTR;
目标地址+1
MOVA,TH1;
读取计数脉冲数的高8位
利用中断方式
思路:
P3.3引脚上输入1Hz的方波,即每隔1秒钟中断一次,利用中断间隔测P3.5引脚的脉冲数。
ORG0000H
SJMPMain ;
转移到主程序
ORG001BH
AJMPT1 ;
转移到真正的中断服务程序
ORG0030H
Main:
MOVTMOD,#50H ;
定时器T1:
方式1、计数、开关由软件控制
CLRTF1 ;
清除定时器溢出标志
CLRTR1 ;
MOVIE,#08H ;
允许定时器T1中断
MOVIP,#0 ;
未设置中断优先级别
MOVTH1,#0 ;
计数初值
MOVTL1,#0 ;
CLRF0 ;
清除开始计数标志
SETBEA;
开中断
SJMP$ ;
等待中断
JBF0,NEXT;
判断是否开始计数
SETBTR1 ;
启动计数器
SETBF0 ;
计数标志置1
SJMPNEXT1 ;
转移
NEXT:
关闭计数器
计数标志清0
MOVDPTR,#2100H ;
地址指针指向目标地址
读计数器的低8位
MOVX@DPTR,A ;
存计数器的低8位
MOVA,TH1 ;
读计数器的高8位
INCDPTR ;
地址指针加1
存计数器的高8位
NEXT1:
JNBP3.3,NEXT1 ;
等待P3.3引脚上出现高电平
RETI ;
中断返回
9、当系统选用6MHz晶体振荡器时,由T0工作在方式为2,利用中断响应,产生周期为2ms(脉冲宽度为1ms)的方波序列,并由P1.0输出。
(1)写出T0定时器的方式控制字,T0定时器初值计算。
(2)试编写程序完成此功能。
方波的周期为2ms,每隔1ms对P1.0取反,可完成题目要求。
系统晶体振荡器的频率为6MHz,机器周期为2us,定时器T0在方式2时,最大定时256us×
2=512us,达不到1ms的要求,故将定时器T0的初始值选为:
256-250=6(定时0.5ms),两次后取反P1.0口。
(1)T0的初始值为:
X=256-250=6
T0的控制字为:
MOVTMOD,#20HMOVTCON,#0
(2)参考程序如下:
SJMPMain
ORG000BH
AJMPT0
Main:
MOVTMOD,#20H;
定时器T1工作于方式2
CLRTR0;
CLRTF0;
清除定时器T1溢出标志
MOVIE,#02H;
MOVIP,#0;
不设置悠闲级别
MOVTH0,#6;
定时器T1初值
MOVTL0,#6;
(256-250=6)
MOVR7,#2;
定时0.5ms与1ms的2倍的关系
SETBTR0;
SJMP$
T0:
DJNZR7,NEXT;
两次是否到?
未到则中断返回,到则继续
CPLP1.0;
取反P1.0口
重置2倍的关系
RETI;
10、有一个频率为10MHz的方波信号,要求用定时器对该方波信号计数,每计满100个脉冲,将P1.1脚上的电平取反。
利用定时器T0方式2对P3.2引脚上输入的脉冲进行计数,每计数100,取反P1.0口。
定时器T0在方式2时的初始值为:
X=256-100=156(9CH)
采用对定时器T0的溢出标志TF0扫描的方式编程。
参考程序如下:
MOVTMOD,#06H;
定时器T0工作于方式2
关闭定时器T0
清除定时器T0的溢出标志
MOVTH0,#156;
计数100的初值
MOVTL0,#156;
256-100=156
JNBTF0,LOOP;
等待溢出
SJMPLOOP;
重复循环
11、(同第7题)按以下要求编写8051单片机定时器的初始化程序:
(1)T0作为定时,定时时间为10ms.
(2)T1作为计数,记满1000溢出。
(1)设晶振fosc=12MHz,则T0在方式1时的初始值为X=65536-10000=55536
10000=8192+1024+512+256+16=10011100010000
X=1101100011110000B=#D8F0H
定时器T1在方式1时的初始值为:
Y=65536-1000
1000=512+256+128+64+32+8=111111000
Y=1111111000001000B=FE08H
(2)初始化参考程序
MOVTMOD,#01010001B;
T0方式1(定时),T1方式1(计数)
MOVTCON,#0;
清TR0、TF0、TR1、TF1
MOVIE,#0AH;
允许T0、T1中断
不设置优先级
MOVTH0,#D8H;
T0的初始值
MOVTL0,#0F0H;
65536-10000=D8F0H
MOVTH1,#0FEH;
T1的初始值
MOVTL1,#08H;
65536-1000=FE08H
SETBEA;
12、要求从P1.1引脚输出1000Hz方波,晶振频率为12MHz。
试设计程序。
(1)只要使P1.1每隔500µ
s取反一次即可得到1ms方波;
。
(2)将T1设为定时方式0:
GATE=0,C/T(—)=0,M1M0=00;
T0不用可为任意,只要不使其进入方式3,一般取0即可。
故TMOD=00H。
下面计算500µ
s定时T1的初值:
机器周期:
T=1µ
s,设初值为X则:
X=8192-500=7692=1111000001100B
=1111000000110B
=F00CH
因为在作13位计数器用时,TL1高3位未用,应写0,X的低5位装入TL1的低5位,所以TL1=#0CH;
X的高8位应装入TH1,所以TH1=#F0H。
参考源程序如下:
清TF1、TR1
MOVTMOD,#0;
定时器T1工作于方式0
MOVTH1,#0F0H;
定时500us的初值
MOVTL1,#0CH;
8192-500=7692=F00CH
JNBTF1,LOOP;
等待定时500us的溢出
CPLP1.1;
取反P1.1口
重写定时500us的初值
SJMPLOOP
13、试用定时/计数器T1对外部事件计数。
要求每计数100,就将T1改成定时方式,控制P1.7输出一个脉宽为10ms的正脉冲,然后又转为计数方式,如此反复循环。
设晶振频率为12MHz。
定时器T1确定工作于方式1
计数100的初始值为:
65536-100
100=64+32+4=01100100B
65536-100=1111111110011100B=FF9CH
定时10ms的初始值为:
65536-10000
5000=4096+512+256+128+8=1001110001000
65536-5000=60536=1110110001111000B=EC78H
LOOP3:
清除定时器T1的溢出标志
MOVTMOD50H;
定时器T1工作于方式1,计数
MOVTH1,#0FFH;
MOVTL1,#9CH;
65536-100=FF9CH
JNBTF1,LOOP1;
等待计数100溢出
MOVTMOD,#10H;
定时器T1工作于方式1,定时
MOVTH1,#0ECH;
定时10ms的初值
MOVTL1,#78H;
65536-5000=EC78H
JNBTF1,LOOP2;
等待定时10ms溢出
CPLP1.7;
取反P1.7口
SJMPLOOP3;
返回循环
14、若单片机晶振为12MHz,利用定时器1方式1,产生1ms的定时,在P1.0脚产生周期为2ms方波,用查询方式工作,查询标志为TF1。
已知fosc=12MHz→1个机器周期为1us
1ms=1000us
初值=65536-1000=54536
64536转换为二进制:
1111110000011000
T0的低8位:
00011000(18H)
T0的高8位:
11110000(FCH)
则有:
(TL0)←#18H;
(TH0)←#0FCH
MOVTCON,#10H;
定时器T1工作于方式1
清除TR1、TF1
MOVTH1,#0FCH;
定时1ms的初值
MOVTL1,#18H;
65536-1000=FC18H
等待定时1ms的溢出
重写定时1ms的处值
15、系统时钟频率为6MHz,试用定时器T0作外部计数器,编程实现每计到1000个脉冲,使T1开始2ms定时,定时时间到后,T0又开始计数,这样反复循环不止。
(1)定时器T0工作于方式1,计数1000的初值为:
65536-1000
1000=512+256+128+64+32+8=0000000111111000B
65536-1000=1111110000011000B=FC18H
(2)晶振fosc=6MHz,机器周期为2us,定时器T0工作于方式1,定时1ms的初值为:
65536-500
500=256+128+64+32+16+4=0000000111110100B(取反+1可得到结果)
(65536-500)=65036=1111111000001100B
(3)参考程序如下:
MOVTMOD,#00000101B
C
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 作业 答案 复习 课程