📄 main.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 + -