void Init_Sys(void)
{
unsigned int i;
BCSCTL1&=~XT2OFF; //打开XT2振荡器
do
{
IFG1 &= ~OFIFG; // 清除振荡器失效标志
for (i = 0xFF; i > 0; i--); // 延时,等待XT2起振
}
while ((IFG1 & OFIFG) != 0); // 判断XT2是否起振
BCSCTL2 =SELM_2+SELS; //选择MCLK、SMCLK为XT2
//以下对各种模块、中断、外围设备等进行初始化
}
void Init_irt(void)
{
P1DIR &=~BIT1; //设置P1.1为输入
P1SEL |= BIT1; //设置P1.1为CCI0A输入
TACTL=TASSEL_2+MC_2+ID_3;//aclk=32768Hz、连续计数模式、8分频
CCTL0=CM_2+SCS+CCIS_0+CAP+CCIE;
//下降沿捕获、同步捕获、选择输入为CCI0A、捕获模式、开捕获中断
}
void IR_data_pros (void)
{
uchar i,j,count=1,value; // count=1 、作用是清除引导码
for(i=0;i<4;i++)
{
for(j=0;j<8;j++)
{
value>>=1;
if(ir_data[count]>1700) //判断捕获时间是否大于1.7MS
我想请问一下各位大神,这个1700是怎么依据得到? value|=0x80; //若 >1.7MS,则为1、若 <1.7MS,则为0
count++;
}
ir_code
=value; //存放用户码和数据码
}
dataok=1; //数据处理标志置位
}
void deal_irt(void)
{
if(irok) //数据接收是否完毕?
{
irok=0; //是、清标志位
IR_data_pros(); //红外数据处理函
}
if(dataok) //数据处理是否完毕?
{
dataok=0; //是、清标志位
}
}
#pragma vector=TIMERA0_VECTOR
__interrupt void timera (void)
{
static uchar index;
if(diff_cap>7000) index=1; //检测引导码 各位大神 我想问一下7000怎么来的 new_cap=TACCR0;
diff_cap=new_cap - old_cap;
ir_data[index++]=diff_cap; //存捕获的差异值,既是数据
if(index==33) //数据接收完毕
{
index=0;
irok=1; //数据接收标志置位
}
old_cap=new_cap;
}
我的MCLK用的是8M ,TACTL用的是32768,8分频捕获
此帖出自
小平头技术问答
一周热门 更多>