标题:
我想问一下这个定时器0在什么时候中断 新手求问!!!
[打印本页]
作者:
wuli555
时间:
2017-4-27 16:52
标题:
我想问一下这个定时器0在什么时候中断 新手求问!!!
void tim0_isr()interrupt 1 using 1//定时器0中断服务函数
{
irtime++;
}
void ex0_isr()interrupt 0 using 0//外部中断0服务函数
{
static unsigned char i;
static bit startflag;
if(startflag)
{
if(irtime<63&&irtime>=33)//引导码TC9012的头码
i=0;
irdata
=irtime;
irtime=0;
i++;
if(i==33)
{
irok=1;
i=0;
}
}
else{irtime=0;startflag=1;}
}
void TIM0init()//定时器0初始化
{
TMOD=0x02;//定时器0工作方式2,TH0是重装值,TL0是初值
TH0=0x00;//reload value
TL0=0x00;//initial value
ET0=1;//开总中断
TR0=1;
}
void EX0init()
{
IT0=1;//Configure interrupt 0 for falling edge on/INT0(P3.2)
EX0=1;//Enable EX0 Interrupt
EA=1;
}////////////////////////////////////////////////////////////////////////
void lrcordpro()//红外码值处理函数(关键函数)
{
unsigned char i,j,k=1;
unsigned char cord,value;
for(i=0;i<4;i++)
{/////////////////////处理4个字节
for(j=1;j<=8;j++)
{//////////////////处理1个字节8位
cord=irdata[k];
value=value>>1;
if(cord>7)value=value|0x80;//大于某值为1
k++;
}
IRcord
=value;
value=0;
}
irpro_ok=1;//处理完毕标志位置1
}
void lcd_delay(uchar ms)/*LCD1602延时*/
{
uchar j;
while(ms--)
{
for(j=0;j<250;j++)
{;}
}
}
我想问一下这个定时器0在什么时候中断,以及中断的时间并且引导码那部分能帮我解答一下吗
作者:
wuli555
时间:
2017-4-27 17:05
并且我在淘宝上看了一个单片机遥控器他给的资料只用外部中断 ,各位能帮我解释下他的原理吗
void IR_IN() interrupt 0 using 0
{
unsigned char j,k,N=0;
EX0 = 0;
delay(15);
if (IRIN==1)
{ EX0 =1;
return;
}
while (!IRIN)
{delay(1);}
for (j=0;j<4;j++)
{
for (k=0;k<8;k++)
{
while (IRIN)
while (!IRIN)
{delay(1);}
while (IRIN)
{
delay(1);
N++;
if (N>=30)
{ EX0=1;
return;}
}
IRCOM[j]=IRCOM[j] >> 1;
if (N>=8) {IRCOM[j] = IRCOM[j] | 0x80;}
N=0;
}//end for k
}//end for j
if (IRCOM[2]!=~IRCOM[3])
{ EX0=1;
return; }
IRCOM[5]=IRCOM[2] & 0x0F;
IRCOM[6]=IRCOM[2] >> 4;
if(IRCOM[5]>9)
{ IRCOM[5]=IRCOM[5]+0x37;}
else
IRCOM[5]=IRCOM[5]+0x30;
if(IRCOM[6]>9)
{ IRCOM[6]=IRCOM[6]+0x37;}
else
IRCOM[6]=IRCOM[6]+0x30;
lcd_pos(0x4b);
lcd_wdat(IRCOM[6]);
lcd_pos(0x4c);
lcd_wdat(IRCOM[5]);
beep();
EX0 = 1;
}
复制代码
作者:
你像风儿来了
时间:
2017-4-28 13:42
当我们按下遥控器的按键时,遥控器将发出如图2的一串二进制代码,我们称它为一帧数据。根据各部分的功能。可将它们分为5部分,分别为引导码、地址码、地址码、数据码、数据反码。遥控器发射代码时.均是低位在前。高位在后。由图2分析可以得到.引导码高电平为4.5ms,低电平为4.5ms。当接收到此码时.表示一帧数据的开始。(定时器部分我在程序里注释了)
void tim0_isr()interrupt 1 using 1//定时器0中断服务函数
{
irtime++; //每278us中断一次
}
void ex0_isr()interrupt 0 using 0//外部中断0服务函数
{
static unsigned char i;
static bit startflag;//如果startflag置1
if(startflag)
{
//如果时间在278*33~278*63us之间
if(irtime<63&&irtime>=33)//引导码TC9012的头码
i=0;
irdata=irtime;
irtime=0;
i++;
if(i==33)
{
irok=1;
i=0;
}
}
else{irtime=0;startflag=1;}
}
void TIM0init()//定时器0初始化
{
TMOD=0x02;//定时器0工作方式2,TH0是重装值,TL0是初值
TH0=0x00;//reload value
TL0=0x00;//initial value //大概278微秒定时
ET0=1;//开总中断
TR0=1;
}
void EX0init()
{
IT0=1;//Configure interrupt 0 for falling edge on/INT0(P3.2)
EX0=1;//Enable EX0 Interrupt
EA=1;
}////////////////////////////////////////////////////////////////////////
void lrcordpro()//红外码值处理函数(关键函数)
{
unsigned char i,j,k=1;
unsigned char cord,value;
for(i=0;i<4;i++)
{/////////////////////处理4个字节
for(j=1;j<=8;j++)
{//////////////////处理1个字节8位
cord=irdata[k];
value=value>>1;
if(cord>7)value=value|0x80;//大于某值为1
k++;
}
IRcord=value;
value=0;
}
irpro_ok=1;//处理完毕标志位置1
}
void lcd_delay(uchar ms)/*LCD1602延时*/
{
uchar j;
while(ms--)
{
for(j=0;j<250;j++)
{;}
}
}
这个详细介绍了这个过程
作者:
wal
时间:
2017-4-29 13:33
void TIM0init()//定时器0初始化
{
TMOD=0x02;//定时器0工作方式2,TH0是重装值,TL0是初值
TH0=0x00;//reload value
TL0=0x00;//initial value
ET0=1;//开总中断
TR0=1;
}
这个段代码控制定时器0中断
TMOD用来设置时钟的工作方式
TH0和TL0控制多长时间中断一次
ET0 EA TR0 用来打开中断 其中EA为总中断
要详细了解建议百度,网上中断的教程很多,初学者不建议看很长很复杂的程序
作者:
17875511173
时间:
2017-4-29 16:30
void TIM0init()//定时器0初始化
{
TMOD=0x02;//定时器0工作方式2,TH0是重装值,TL0是初值
TH0=0x00;//reload value
TL0=0x00;//initial value
ET0=1;//开总中断
TR0=1;
}
这个段代码控制定时器0中断
TMOD用来设置时钟的工作方式
TH0和TL0控制多长时间中断一次
ET0 EA TR0 用来打开中断 其中EA为总中断
作者:
zl2168
时间:
2017-4-29 21:38
定时器在溢出时中断。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1