定时计时器定时计时器
实验五 定时/计时器 一、 实验目的
1、 学习8051内部定时/计数器的工作原理及编程方法;
2、 掌握定时/计数器外扩中断的方法。
二、 实验内容
1、 将定时器T0设置为定时方式,由P1.0输出高低电平之比为1:1的500HZ方波。
PROTEUS原理图截图:
程序流程图 :
开始 中断入口
允许定时中断 恢复中断初值
定时中断赋初值
启动中断 A取反
A,0 中断返回
P1,A
汇编源程序:
ORG 0000H
AJMP START
ORG 000BH
AJMP T0I...
定时计时器
实验五 定时/计时器 一、 实验目的
1、 学习8051内部定时/计数器的工作原理及编程方法;
2、 掌握定时/计数器外扩中断的方法。
二、 实验
1、 将定时器T0设置为定时方式,由P1.0输出高低电平之比为1:1的500HZ方波。
PROTEUS原理图截图:
程序流程图 :
开始 中断入口
允许定时中断 恢复中断初值
定时中断赋初值
启动中断 A取反
A,0 中断返回
P1,A
汇编源程序:
ORG 0000H
AJMP START
ORG 000BH
AJMP T0INT
ORG 0030H
;每次定时1ms
;每启动中断一次,电平就改变 START:
MOV SP,#60H
MOV TMOD,#01H
MOV TL0,#18H
MOV TH0,#0FCH ;1ms SETB ET0
SETB EA
SETB TR0 ;T0 自启动
MOV A,#0H
MOV P1,A
LOOP:
MOV P1,A
AJMP LOOP
T0INT:
MOV TH0,#0FCH ;定时器重新赋值
MOV TL0,#18H
CPL A ;取反改电平 RETI
END
C语言源程序:
#include
#define TIMEINT 0x01
#define TIMEH 0xfc
#define TIMEL 0x18
extern unsigned char t_count;
void timer0(void) interrupt 1 using 1
{
TH0=TIMEH;
TL0=TIMEL;
t_count++; //次数加1
}
main()
{
t_count=0;
TMOD=TIMEINT; //开启中断
TH0=TIMEH;
TL0=TIMEL;
ET0=1;
EA=1;
TR0=1; //自启动
while(1)
{ if(t_count%2==0) //利用定时次数改变P1的值
P1=0; //奇数低电平
else
P1=1; //偶数高电平
}
}
心得及调试结果,
1, 若示波器无象,旋转水平、垂直旋钮,调辉度、聚焦 2, 观察高低电平是否1:1,周期是否为2ms.频率的计算要看选择的
TOMS模式【详见附录】
2、 将定时器T0设置成对外脉冲计数方式,T0引脚每来一次外部脉冲,计数加1,计
数的结果以二进制格式显示在8个发光二极管上。
PROTEUS原理图截图:
程序流程图 :
开始
中断入口
允许计数中断
设置中断初值0
启动中断 中断返回
A,FFH
P1,A
A,TL0
A取反
P1,A
汇编源程序:
ORG 0000H
AJMP START
ORG 000BH
AJMP T0INT
ORG 0030H
;来一次脉冲计数一次
START:
MOV SP,#60H
MOV TMOD,#05H ;改方式
MOV TL0,#0H
MOV TH0,#0H
SETB TR0
MOV A,#0FFH ;赋初值,灯全灭
MOV P1,A
LOOP:
MOV A,TL0
CPL A ;取反,显示计数值
MOV P1,A
AJMP LOOP
T0INT:
RETI
END
C语言源程序:
#include
#define TIMEINT 0x05 //选择计数器
#define TIMEH 0x00
#define TIMEL 0x01
//有个问,汇编时TL0赋值0就可以,C语言中TL0要赋值01出来效果才跟
汇编一致
//0无原反补码,-1为FF
extern unsigned char t_count;
void timer0(void) interrupt 1 using 1 {
//只要有脉冲就自动计数 }
main()
{
TMOD=TIMEINT;
TH0=TIMEH;
TL0=TIMEL;
ET0=1;
EA=1;
TR0=1;
P1=0xff; //赋初值,灯全灭
while(1)
{
P1=-TL0; //TL0赋给P1,并把P1取反
}
}
心得及调试结果,
1, 检查脉冲有无输出,用拨动脉冲,
2, 看发光二极管显示是否与脉冲数同步
3, 出错要检查TMOD以及中断相关值,再检查逻辑 4, 发光二极管显示脉冲数
3、 使用T0、T1两个定时器分别控制从P1.0输出波形的高、低电平的宽度。
PROTEUS原理图截图:
程序流程图 :
开始 中断0入口 中断1入口
设置定时中断0、1 关闭中断0 关闭中断1
中断0、1赋不同初值
启动定时中断0 恢复中断0初值 恢复中断1初值
A,0 A,1 A,0
P1,A
启动中断1 启动中断0
P1,A
中断返回 中断返回
汇编源程序:
ORG 0000H
AJMP START
ORG 000BH ;中断入口地址 AJMP T0INT
ORG 001BH
AJMP T1INT
ORG 0030H
;定时器T0开时,定时器T1要关掉,两者之间只能开一个
;两者的定时状况都在方式1
START:
MOV SP,#60H
MOV TMOD,#11H ;开定时器T0、T1 MOV TL0,#30H
MOV TH0,#0F8H ;T0 ,2ms SETB ET0
SETB EA
SETB TR0 ;T0自启动
MOV TL1,#18H
MOV TH1,#0FCH ;T1 ,1ms SETB ET1
SETB EA
MOV A,#0H
MOV P1,A ;赋初值
LOOP:
MOV P1,A
AJMP LOOP
T0INT:
CLR TR0 ;关自身中断T0 MOV TH0,#0F8H
MOV TL0,#30H
MOV A,#01H ;P1赋值改变电平 SETB TR1 ;开中断T1 RETI
T1INT:
CLR TR1 ;关自中断
MOV TH1,#0FCH
MOV TL1,#18H
MOV A,#0H ;改电平 SETB TR0 ;开另一个中断 RETI
END
C语言源程序:
#include
#define TIMEINT 0x11 //选择T0、T1定时器
void timer0(void) interrupt 1 using 1 {
TR0=0; //关中断T0
P1=0; //低电平
TH0=0xfc;
TL0=0x18; //时间1ms
TR1=1; //开中断T1 }
void timer1(void) interrupt 3 using 1 {
TR1=0; //关自身中断
P1=1; //高电平
TH1=0xf8;
TL1=0x30; //时间2ms
TR0=1; //开另一个中断 }
main()
{
TMOD=TIMEINT; //开启中断
TH0=0xfc;
TL0=0x18;
TH1=0xf8;
TL1=0x30;
ET0=1;
ET1=1;
EA=1;
TR0=1; //T0自启动
while(1)
{
;
}
}
心得及调试结果,
1, 要点TMOD要开对 、2,两个中断不能同时开,一个开另一个要闭
2, 高低电平宽度之比为2:1
附录:
一、定时/计数器的结构
定时/计数器的实质是加1计数器(16位),由高8位和低8位两个寄存器组成。TMOD是定时/计数器的工作方式寄存器,确定工作方式和功能;TCON是控制寄存器,控制T0、T1的启动和停止及设置溢出标志。
TMOD用于设置其工作方式;TCON用于控制其启动和中断申请。
一、工作方式寄存器TMOD
工作方式寄存器TMOD用于设置定时/计数器的工作方式,低四位用于T0,高四位用于T1。其格式如下:
GATE:门控位。GATE,0时,只要用软件使TCON中的TR0或TR1为1,就可以启动定时/计数器工作;GATA,1时,要用软件使TR0或TR1为1,同时外部中断引脚或也为高电平时,才能启动定时/计数器工作。即此时定时器的启动多了一条件。
C/T:定时/计数模式选择位。 ,0为定时模式; =1为计数模式。 M1M0:工作方式设置位。定时/计数器有四种工作方式,由M1M0进行设置。
TCON的低4位用于控制外部中断,已在前面介绍。TCON的高4位用于控制定时/计数器的启动和中断申请。其格式如下:
, TF1(TCON.7):T1溢出中断请求标志位。T1计数溢出时由硬件自动置TF1为1。CPU
响应中断后TF1由硬件自动清0。T1工作时,CPU可随时查询TF1的状态。所以,
TF1可用作查询测试的标志。TF1也可以用软件置1或清0,同硬件置1或清0的效
果一样。
, TR1(TCON.6):T1运行控制位。TR1置1时,T1开始工作;TR1置0时,T1停止
工作。TR1由软件置1或清0。所以,用软件可控制定时/计数器的启动与停止。
, TF0(TCON.5):T0溢出中断请求标志位,其功能与TF1类同。
, TR0(TCON.4):T0运行控制位,其功能与TR1类同。
定时/计数器应用举例
初始化程序应完成如下工作:
, 对TMOD赋值,以确定T0和T1的工作方式。
, 计算初值,并将其写入TH0、TL0或TH1、TL1。
, 中断方式时,则对IE赋值,开放中断。
, 使TR0或TR1置位,启动定时/计数器定时或计数。
二、中断请求标志
, 1、TCON的中断标志
,
, IT0(TCON.0),外部中断0触发方式控制位。
, 当IT0=0时,为电平触发方式。
, 当IT0=1时,为边沿触发方式(下降沿有效)。
, IE0(TCON.1),外部中断0中断请求标志位。
, IT1(TCON.2),外部中断1触发方式控制位。
, IE1(TCON.3),外部中断1中断请求标志位。
, TF0(TCON.5),定时/计数器T0溢出中断请求标志位。
, TF1(TCON.7),定时/计数器T1溢出中断请求标志位。
一、中断允许控制
CPU对中断系统所有中断以及某个中断源的开放和屏蔽是由中断允许寄存器IE控
制的。
, EX0(IE.0),外部中断0允许位;
, ET0(IE.1),定时/计数器T0中断允许位;
, EX1(IE.2),外部中断0允许位;
, ET1(IE.3),定时/计数器T1中断允许位;
, ES(IE.4),串行口中断允许位;
, EA (IE.7), CPU中断允许(总允许)位。 中断响应条件和时间
中断响应条件
, 中断源有中断请求;
, 此中断源的中断允许位为1;
, CPU开中断(即EA=1)。
以上三条同时满足时,CPU才有可能响应中断。
本文档为【定时计时器】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。