您的位置 首页 FPGA

51学习之定时器中止

定时器中断可用两种方式处理:查询和进入中断处理。1查询voidInit_T0(void)定时器初始化{TMOD=0x01;TH0

守时器中止可用两种方法处理:查询和进入中止处理。

1.查询
void Init_T0 (void) 守时器初始化
{
TMOD = 0x01;
TH0 = (65536-65000) /256;
TL0 = (65536-65000) %6;
EA = 1;
ET0 = 1;
TR0 = 1;
}
void Main() 主函数
{ Init_T0 ();
Speak1 =1;
if(TF0==1) 查询中止标志
{
Speak1=~Speak1;
//TH0 = (65536-65000) /256;
//TL0 = (65536-65000) %6;
TF0=0;
}
}
2.进入中止处理
void Init_T0 (void) 守时器初始化
{
TMOD = 0x01;
TH0 = (65536-65000) /256;
TL0 = (65536-65000) %6;
EA = 1;
ET0 = 1;
TR0 = 1;
}
void Time0_Int() interrupt 1 中止处理函数
{
Speak1=~Speak1;
//TH0 = (65536-65000) /256;
//TL0 = (65536-65000) %6;
}
void Main() 主函数
{
Init_T0 ();
Speak1 =1;
while(1); 等候中止

}

关于查询方法,必定要手动清楚中止标志。
上面2段程序,我屏蔽了,中止时重新装计数初值的句子,程序都可正常运转,所以我以为不管关于那种处理方法,重装初值都不必要。
初始化时,可定义输出口的初始状况。而在处理中止时,必定要用取反句子。手动置0或1,程序不能正常运转。
关于方法2,开端main中没写最终的while(1),程序不正常运转。
上述守时最大为65535,约65ms.假如计时大于此,可在中止中处理。
程序如下:
int a;
void Time0_Int() interrupt 1
{
if(a++==20)
{ a=0;
Speak1=~Speak1;
}
}
呵呵,在写上面这一小段时,开端没写a=0,灯一向亮,后来参阅下,发现不清0.a一向变大,程序只能履行一次。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/fpga/261117.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部