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

📄 main.c

📁 msp430f14x系列单片机控制红外无线器件通讯
💻 C
字号:


#include "IrDA.h"
//#include "string.h"
//#include "stdio.h"

//#define unsigned char   unsigned char
//#define unsigned int   unsigned int

#define REDLIGHTON  (P1OUT |= BIT0)
#define REDLIGHTOFF (P1OUT &=~ BIT0)
#define REDLIGHTTAG (P1OUT ^= BIT0)

#define Time38kHz 1

unsigned int I=0;
unsigned int NUM_ZERO;
unsigned int NUM_ONE;

unsigned char rBUF[256];


void Init_sys(void)
{
  WDTCTL = WDTPW+WDTHOLD;   //close the watchdog
  _DINT();
  
  /*define the port direction*/
  P1DIR &= 0xF0;      //p10-p13=0 input mode
  P2DIR &= 0xF8;      //P20-P23=0 input mode
  
  /*p23=SCL,p24=SDA*/
  
  P2DIR |= BIT5;      //P25 output mode
  P3DIR = 0xFF;       //P30-P35 PWM OUTPUT; p36=red,p37=green
  
  /*define the interrupt triggle edge*/
  P1IES |= BIT0;      //this interrupt is used for start&stop,negative edge cause an interrupt
  
  P1IES |= BIT1;      //It's for HALL_A,negative edge cause an interrupt
  P1IES |= BIT2;      //It's for HALL_B,negative edge cause an interrupt
  P1IES |= BIT3;      //It's for HALL_B,negative edge cause an interrupt
  
  P2IES |= BIT0;     //It's for CPU_SPEED detection。negative edge cause an interrupt
  P2IES |= BIT1;     //It's for CPU_CUT detection。negative edge cause an interrupt
  P2IES |= BIT2;     //It's for PWM_IN detection。negative edge cause an interrupt,but it's negative logic
  
  P1IFG = 0;
  P2IFG = 0;
  
  REDLIGHTOFF;
  
/*************************************************/
P1DIR &= 0X7F;  //input mode
P1IES &= 0X7F;  //positive edge triggle an interruption

/*************************************************/

}

void TimerA_Init(void)
{ 
 
  TACCTL0 = CCIE;                       // CCR0 interrupt enabled
  TACCR0 = Time38kHz;
  P1DIR |= 0x01;                        // P1.0 output
  //TBCTL |= MC1;                         // Start Timer_B in continuous mode
  TACTL |= MC1; 
  
  CCTL0 = CCIE;                         // CCR0 interrupt enabled
  CCR0 = Time38kHz;
  P1DIR |= 0x01;                        // P1.0 output
  TACTL |= MC1;                         // Start Timer_A in continuous mode
  _EINT();                              // Enable interrupts
  
  _EINT();                              // Enable interrupts
} 

main(void)
{
    unsigned char ret=0;
    unsigned int i=0;
    
    Init_sys();
    TimerA_Init();
    P1IE |= BIT7;
    REDLIGHTON;
 
  while(1);//for (;;)                              
/*  {
    _BIS_SR(CPUOFF);                    // CPU off
    _NOP();                             // Required only for C-spy
  }
*/
}
// P17 interrupt service routine
interrupt[PORT1_VECTOR] void P17_CD (void)
{
  if((P1IFG&BIT7)==BIT7)
  {
    
    //TACTL &= ~MC1;
    NUM_ONE += 1;
/*    if((NUM_ZERO<0X80)&&(NUM_ZERO>0))
    {
      rBUF[I++]=NUM_ZERO&0xff;
      NUM_ZERO=0;
    }
    TACCR0 = Time38kHz;                      // Add Offset to CCR0
    TACTL |= MC1;                         // Start Timer_B in continuous mode
*/  }
  P1IFG = 0;
}
// Timer A0 interrupt service routine
interrupt[TIMERA0_VECTOR] void Timer_A (void)
{
  P1OUT ^= 0x01;                        // Toggle P1.0
  CCR0 += Time38kHz;                        // Add Offset to CCR0
}


// Timer B0 interrupt service routine
interrupt[TIMERB0_VECTOR] void Timer_B (void)
{
  P1OUT ^= 0x01;                        // Toggle P1.0
  TACCR0 += Time38kHz;                  // Add Offset to CCR0
  if((NUM_ONE<0X80)&&(NUM_ONE>0))
    {
      rBUF[I++]=NUM_ONE&0XFF+0X80;
      NUM_ONE=0;
    }
}

⌨️ 快捷键说明

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