设计要求:一个芯片循环发送0到255的数据,另一个芯片当有按键的时候,接收三个数据。
遇到的问题:接收到的数据应该是连续的,现在是有时三个数据连续,有时侯不连续。找不到问题!!!
//按键之后,开始发送数据
interrupt (PORT1_VECTOR) Port1 (void)
{
Bitcnt =0xA;
CCR0 =TAR;
CCR0 +=Bitime;
data=0;
Txdata =data;
Txdata |=0x100;
Txdata =Txdata <<1;
data++;
CCTL0 |=OUTMOD0 + CCIE;
P1IFG &=~BIT7;
}
//TA0IV发送中断
interrupt (TIMERA0_VECTOR)Timer_A0(void)
{
CCR0 +=Bitime;
if (bitcnt ==0)
{
Bitcnt =0xa;
Txdata =data;
Txdata |=0x100;
Txdata =Txdata <<1;
data++;
if(data ==0x100)
data=0x00;
}
else
{
if (Txdata &0x01)
CCTL0 &=~OUTMOD_TOGGLE;
else
CCTL0 |=OUTMOD_TOGGLE;
Txdata =Txdata >>1;
Bitcnt --;
}
}
//接收中断
interrupt (TIMERA0_VECTOR)Timer_A0(void)
{
CCR0 +=Bitime;
if(CCTL0&CAP)
{
CCTL0& =CAP;
CCTL0 +=Bitime_5;
}
else
{
RXData =RXData >>1;
if (CCTL0&SCCI)
RXData |=0x10;
Bitcnt --;
if (Bitcnt ==0)
{
Bitcnt =0x08;
CCTL0 |=CAP;
Data [num++] =RXData ;
if (num==3)
{
num=0;
CCTL0 & =~CCIE;
}
}
}
} |
设计要求:一个芯片循环发送0到255的数据,另一个芯片当有按键的时候,接收三个数据。
遇到的问题:接收到的数据应该是连续的,现在是有时三个数据连续,有时侯不连续。找不到问题!!!
//按键之后,开始发送数据
interrupt (PORT1_VECTOR) Port1 (void)
{
Bitcnt =0xA;
CCR0 =TAR;
CCR0 +=Bitime;
data=0;
Txdata =data;
Txdata |=0x100;
Txdata =Txdata <<1;
data++;
CCTL0 |=OUTMOD0 + CCIE;
P1IFG &=~BIT7;
}
//TA0IV发送中断
interrupt (TIMERA0_VECTOR)Timer_A0(void)
{
CCR0 +=Bitime;
if (bitcnt ==0)
{
Bitcnt =0xa;
Txdata =data;
Txdata |=0x100;
Txdata =Txdata <<1;
data++;
if(data ==0x100)
data=0x00;
}
else
{
if (Txdata &0x01)
CCTL0 &=~OUTMOD_TOGGLE;
else
CCTL0 |=OUTMOD_TOGGLE;
Txdata =Txdata >>1;
Bitcnt --;
}
}
//接收中断
interrupt (TIMERA0_VECTOR)Timer_A0(void)
{
CCR0 +=Bitime;
if(CCTL0&CAP)
{
CCTL0& =CAP;
CCTL0 +=Bitime_5;
}
else
{
RXData =RXData >>1;
if (CCTL0&SCCI)
RXData |=0x10;
Bitcnt --;
if (Bitcnt ==0)
{
Bitcnt =0x08;
CCTL0 |=CAP;
Data [num++] =RXData ;
if (num==3)
{
num=0;
CCTL0 & =~CCIE;
}
}
}
} | 设计要求:一个430芯片循环发送0到255的数据,另一个430芯片在有按键按下的时候,接收三个数据。9600波特率
遇到的问题:理论上接收到的数据应该是连续的,现在是接收到的三个数据有时候连续,有时候不连续,连续的次数居多。找不到问题!!!
/*********P1.7按键中断 按键之后开始发送数据*********/
interrupt (PORT1_VECTOR) Port1 (void)
{
Bitcnt =0xa;//位计数
CCR0 =TAR;//捕获定时器 的值
CCR0 +=Bitime;// 中断间隔
data=0;//数据赋初值
Txdata =data;
Txdata |=0x100;// 增加停止位
Txdata =Txdata <<1;//增加起始位
data++;
CCTL0 |=OUTMOD0 + CCIE;//输出模式0 开中断
P1IFG &=~BIT7;
}
/**********TA0IV发送中断**********/
interrupt (TIMERA0_VECTOR)Timer_A0(void)
{
CCR0 +=Bitime;//发送一位的时间间隔
if (Bitcnt ==0)
{
if(data ==0x100)//发送的数据为255 重新从0赋值
data =0x00;
Bitcnt =0xa;//位计数
Txdata =data;
Txdata |=0x100;
Txdata =Txdata <<1;
data++;
}
else
{
if (Txdata &0x01)
CCTL0 &=~OUTMOD_TOGGLE;//输出1
else
CCTL0 |=OUTMOD_TOGGLE;//输出0
Txdata =Txdata >>1;// 次低位变成最低位
Bitcnt --;//位计数减1
}
}
/**********接收中断***********/
interrupt (TIMERA0_VECTOR)Timer_A0(void)
{
CCR0 +=Bitime;//接收一位时间间隔
if(CCTL0&CAP)//捕获到起始位
{
CCTL0 & =~CAP; //由 捕获模式改为比较模式 接收数据
CCTL0 +=Bitime_5;
}
else
{
RXData =RXData >>1;//接收到的数据 右移一位
if (CCTL0&SCCI)// 接收为1
RXData |=0x10;
Bitcnt --;//位计数减1
if (Bitcnt ==0)//一个字节接收完成
{
Bitcnt =0x08;//位计数重新赋值
CCTL0 |=CAP;//改为捕获模式
Data [num++] =RXData ;//保存接收到的数据
if (num==3)//接收到三个字节数据
{
num=0;
CCTL0 & =~CCIE;
}
}
}
} |