⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 timer.c

📁 医疗电子,血氧浓度测量模块原程序,采用430 单片机.
💻 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 + -