📄 timer.c
字号:
#include "global.h"
//intTimerB0.c
uchar red_vector1;
ulong sumcount;
uint count=0;
uchar uart_flg=0;
long Q1[]={280,320,150,180,140,280,
150,600,100,230,100,280,
320,150,180,140,280,150,600};
/***************说明*********************************
p2^0==Q0;p2^1==Q1;p2^2==Q2;p2^3==Q3;p2^4==Q4;p2^5==Q5;
p2^6==Q6;p2^7==Q7;p3^0==Q8;p3^1==Q9;p3^2==Q10;
P2^0==P5^0;
P2^1==P5^1;
P2^4==P5^2;
***************************************************/
interrupt[TIMERB0_VECTOR] void Timer_B0(void)
{
TBCCR0=Q1[red_vector1];
red_vector1+=1;
switch (red_vector1)
{
case 1:
P5DIR&=~BIT4; //=====
P5DIR|=BIT4; //=====
P5DIR&=~BIT4; //=====
P2OUT&=~BIT0; //Q0
//P5OUT|=BIT0;
//P5OUT|=BIT2;
P2OUT&=~BIT4; //Q4
P2OUT|=BIT5; //Q5
P2OUT|=BIT6; //Q6
//P5OUT&=~BIT1;
P2OUT|=BIT1; //P2.1=1,Q1
break;
case 2:
P2OUT^=BIT5; //p2.5=1 red
break;
case 3:
//P5OUT^=BIT1;
P2OUT^=BIT1; //P2.1=0
break;
case 4:
//P5OUT^=BIT1;
P2OUT^=BIT1; //P2.1=1
//P5OUT^=BIT2;
P2OUT^=BIT4; //p2.4=1
break;
case 5:
ADC12CTL0|=0X01;
ADC12CTL0&=~0x01;
while((ADC12CTL1&0X01)==1);
red[count]=ADC12MEM0;
P5OUT^=BIT7;
P5OUT^=BIT7;
break;
case 6:
P2OUT^=BIT5; //p2.5=0 red
break;
case 7:
//P5OUT^=BIT1;
P2OUT^=BIT1; //P2.1=0
//P5OUT^=BIT2;
P2OUT^=BIT4; //p2.4=0
break;
case 8:
//P5OUT^=BIT1;
P2OUT^=BIT1; //P2.1=1
break;
case 9:
//P5OUT^=BIT1;
P2OUT^=BIT1; //P2.1=0
break;
case 10:
P2OUT^=BIT0; //p2.0=1
//P5OUT^=BIT0;
opr8402(data_8402[2]); //红外光亮度控制
opr8402(data_8402[3]); //红外光增益控制
break;
case 11:
P2OUT^=BIT0; //p2.0=0
//P5OUT^=BIT0;
break;
case 12:
//P5OUT^=BIT1;
P2OUT^=BIT1; //P2.1=1
break;
case 13:
P2OUT^=BIT6; //p2.6=1 infrared
break;
case 14:
//P5OUT^=BIT1;
P2OUT^=BIT1; //P2.1=0
break;
case 15:
//P5OUT^=BIT1;
P2OUT^=BIT1; //P2.1=1
//P5OUT^=BIT2;
P2OUT^=BIT4; //p2.4=1
break;
case 16:
ADC12CTL0|=0X01;
ADC12CTL0&=~0x01;
while((ADC12CTL1&0X01)==1);
ired[count]=ADC12MEM0;
P5OUT^=BIT7;
P5OUT^=BIT7;
break;
case 17:
P2OUT^=BIT6; //p2.6=0 infrared
break;
case 18:
//P5OUT^=BIT1;
P2OUT^=BIT1; //P2.1=0
//P5OUT^=BIT2;
P2OUT^=BIT4; //p2.4=0
break;
case 19:
// P5OUT^=BIT1;
P2OUT^=BIT1; //P2.1=1
break;
case 20:
//P5OUT^=BIT1;
P2OUT^=BIT1; //P2.1=0
P2OUT|=BIT0;
// P5OUT&=~BIT0;
count++;
sumcount++; //流水计数器+1
if(count==16)
{
count=0;
}
TBCCTL0&=~CCIE; //不允许B定时器中断
// uart_flg++;
//if(uart_flg==2)
// {
// IFG1 |=UTXIFG0;
// uart_flg=0;
// }
flag=1;
break;
}
}
interrupt[TIMERA0_VECTOR] void Timer_A(void)
{
TBCTL|=TBCLR; //清除定时器B的TBR寄存器、计数方向等内容
opr8402(data_8402[0]); //红光亮度控制
opr8402(data_8402[1]); //红光增益控制
TBCCR0=50; //设置25微秒间隔
TBCCTL0=CCIE; //允许B定时器中断
red_vector1=0; //红/红外光间隔向量清零
}
void timerA(void)
{
CCR0=16666-1; //120Hz, 2M/120
CCR2=16666-4200; //占空比 (16666-4200)/16666
CCR1=4200; //2.4ms脉冲,占空比4200/16666
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -