📄 main.c
字号:
//====数据接受判断基础===
#include"msp430x14x.h"
#include"CRC_CHECK.C"
#include"common.h"
//===捕获比较值===
#define check_data 400 //判断阈值,
#define min_data 300 //最小计数
#define max_data 600 //最大计数
uchar count=0;
uchar temp_data=0;
uint data_new =0,data_old=0;//捕获到的前后两次的值
uint data_diff=0; //两次数据差值
uchar flag=0;//捕获有效标志
uchar over_flag=0;//捕获结束标志
void main(void)
{
WDTCTL = WDTPW + WDTHOLD;
DCOCTL = DCO1 + DCO2;
P5SEL = 0x70;
P5DIR = 0x70;
P1SEL = 0x02;
P1DIR = 0x01;
P1OUT = 0x01;
//======定时器相关设置======
TACCTL0 &=~(CCIS1+CCIS0); // 捕获源为P1.1,即CCI0A(也是CCI0B)
TACCTL0 |=CM_2 + SCS + CAP; //下降沿捕获,同步捕获,工作在捕获模式
TACCTL0 |=CCIE; //允许捕获比较模块提出中断请求
TACTL|=TASSEL_2; //选择时钟SMCLK
TACTL|=TACLR; //定时器清零
//定时器开始计数(连续计数模式0~0xFFFF)
TACTL|=MC_2;
_EINT();
while(1)
{
if(over_flag==1)
{
over_flag=0;
if(buffer_array[size-1]==crc8(buffer_array,size-1))
{
//==有效,显示===
P1OUT ^= 0x01;//===测试==
}
}
}
}
//―――――定时器TA的CCR0的中断:用于检测脉冲上升与下降沿――――
#pragma vector=TIMERA0_VECTOR
__interrupt void TimerB0(void)
{
uchar temp =0;//中间变量值
//P1OUT ^= 0x01;//===测试==
if(TACCTL0&CM1) //捕获到下降沿
{
if(flag==1) //捕获有效
{
data_new = TACCR0;
data_diff = data_new - data_old; //计算差值
data_old=0;
data_new=0;
TACCTL0=(TACCTL0&(~CM1))|CM0; //改为上升沿捕获:CM1置零,CM0置一
TACTL|=TACLR;
//对接受的差值进行判断
if((data_diff>=min_data)||(data_diff<=max_data))
{
if(data_diff>=check_data)
temp = 1;
else
temp = 0;
data_diff=0;
temp_data = temp_data<<1;
temp_data = temp_data + temp;
temp=0;
count++;
switch(count)//===对计数进行统计判断
{
case 8 :
buffer_array[0]=temp_data;//存储数据值
temp_data=0;
break;
case 16 :
count=0;
over_flag=1;//捕获完成
buffer_array[size-1]=temp_data;//存储CRC值
TACCTL0=(TACCTL0&(~CM0))|CM1; //改为下降沿捕获:CM0置零,CM1置一
temp_data=0;
flag=0; //捕获有效,清零
break;
default :
break;
}
}
}
else
{
delay_us(600);//==延时,判断数据是否有效
if((P1IN&BIT1)==0)
{
TACTL|=TACLR;
flag=1; //捕获有效
TACCTL0=(TACCTL0&(~CM1))|CM0; //改为上升沿捕获:CM1置零,CM0置一
}
}
}
else
if(TACCTL0&CM0) //捕获到上升沿
{
data_old=TACCR0; //记录上升沿时捕获的数据
TACCTL0=(TACCTL0&(~CM0))|CM1; //改为下降沿捕获:CM0置零,CM1置一
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -