一、实验内容
利用定时器 T1 工作方式 1 定时 1 秒,让接在 P1.0 的发光二极管实现 1 秒 亮灭交替。同时利用定时器 T0 工作方式 2 定时 0.5 秒,让接在 P1.7 的发光二极管实现 0.5 秒亮灭交替。
二、实验目的
1.通过定时器中断方式实现定时功能
2.通过定时器中断方式实现计时功能
三、实验原理
首先,我们需要了解定时/计数器工作方式控制寄存器 TMOD
D6/D2:定时/计数方式选择位
D6/D2=0:设置为定时方式,对内部的机器周期进行计数。
D6/D2=1:设置为计数方式,通过 T0(或 T1)的引脚对外部脉冲信号进行计数。
在TMOD寄存器中,GATE是门控位,C/T是定时/计数模式选择位,M1M0是工作方式设置位。
例如,如果我们想设置定时器0为方式1,我们可以这样设置:TMOD = 0x01;在这个例中,0x01即"0000 0001",表示定时器T0被设置为方式1。前面四位是T1的,这里未使用,如果要使用,其原理一样,对其赋予对应的数值即可。
四、实验代码详解
我们了解了寄存器,那么回到我们的实验,我们利用定时器 T1 工作方式 1,同时利用定时器 T0 工作方式 2 ,那么TMOD|=0x12;同时,需要配置其他的控制位
TMOD|=0x12; //工作方式控制寄存器
TH1=15536/256; //
TL1=15536%256;
TH0=251;
TL0=251;
EA=1;
ET0=1;
TR0=1; // 定时/计数器的运行控制位
ET1=1;
TR1=1;
接下来,我们再看定时器如果书写代码,并让其达到对应的定时时间
void time1(void) interrupt 3 //定时器T1 (方式1)
{
TH1=15536/256; //65536-15536=50000;
TL1=15536%256;
if(++con0==20)
{
con0=0;
LED1=~LED1;
}
}
void time2(void) interrupt 1 //定时器T0 (方式2)
{
if(++con1==2000) //256-6=250
{
con1=0;
LED2=~LED2 ;
}
}
配置好定时器,书写两个定时器的定时中断服务函数后,就完成了本次实验。
五、资料连接