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

📄 telcontrol.c

📁 一个实际应用的化工厂防爆电话控制器全部资料
💻 C
字号:
#include  "msp430x11x1.h"

unsigned char count;      // 0.1秒定时中断中,计数中断的次数
unsigned char ok;         // 0.1秒定时中断中,检查忙音波形是否正确,正确加一
unsigned char sys_state;  // 系统状态,0->挂机态   1->通话态

void delay(unsigned int t);        /* 延时 */
void tel_on(void);      // 接通电话
void tel_off(void);     // 挂断电话

#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{ 
  count++;
  if((count==1)||(count==2)||(count==3))
  {
    if((P2IN&BIT0)==0X00) ok++;
  }
  if((count==4)||(count==5))
  {
    if((P2IN&BIT0)!=0X00) ok++;
  }
  if(count==6)
  {
    if((P2IN&BIT0)!=0X00) ok++;
    if(ok==6)  // 检测正确
    {
      tel_off();
    }
    else
    {
      ok=0;
      count=0;
      TAR=0;
    }
  }
}

#pragma vector=PORT2_VECTOR
__interrupt void p2_in (void)
{
    if(P2IFG&BIT0)      // 忙音下降沿 
    { 
      ok=0;
      count=0;
      TAR=0;
      TACTL |= MC0; // Start Timer_a in 增计数模式
      P2IFG &=~BIT0;
    }
    if(P2IFG&BIT1)      // 振铃  
    { 
      tel_on();
      delay(1000);
      P2IFG =0x00;
    }
    if(P2IFG&BIT2)      // 按钮  
    { 
      if(sys_state==0)  // 挂机态
      {
        tel_on();
      }
      else
      {
        tel_off();
      }
      delay(5000);
      P2IFG =0x00;
    }
}

void main(void)
{
  WDTCTL = WDTPW+WDTHOLD;

  P1DIR=0Xff;
  P2DIR=0XF8; // 1111,1000
  P2IE =0X07; // 0000,0111
  P2IES=0Xff; // 下降延中断

// 初始化 Timer A 
  TACTL = TASSEL0 + TACLR;              // ACLK, 清除 TAR
  CCR0 = 3276;                          // 每秒10次
  CCTL0 = CCIE;                         // CCR0 允许中断

  tel_off();  // 挂机
  P2IFG=0X00;
  _EINT();
  while(1)
  {
    ;
  }
}
void tel_on(void) // 接通电话 P1.0
{
  sys_state=1;
  P1OUT|=BIT0;
  P2IE|=BIT0;   // 忙音
  P2IE&=~BIT1;  // 振铃
//  TACTL |= MC0; // Start Timer_a in 增计数模式
  delay(10);
  P2IFG=0X00;
}

void tel_off(void) // 挂断电话
{
  sys_state=0;
  P1OUT&=~BIT0;
  P2IE&=~BIT0;    // 忙音
  P2IE|=BIT1;     // 振铃
  TACTL &= ~MC0;  // Stop Timer_a
  delay(10000);
  P2IFG=0X00;
}
void delay(unsigned int t)        /* 延时 */
{
        unsigned int i;
        unsigned char j;
	for(i=0;i<t;i++)
		for(j=0;j<10;j++);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -