📄 main.c
字号:
#include <msp430x14x.h>
//**********************************************************************
#define HONGWAI_BIT BIT1//红外接收头接于P2.0
#define HONGWAI_DIR_IN P1DIR&=~HONGWAI_BIT//设置p2.0为输入
#define HONGWAI_IES_ON P1IES|=HONGWAI_BIT//p1.0设置为下降沿中断 红外引脚定义
#define HONGWAI_IE_ON P1IE|=HONGWAI_BIT//允许p2.0中断
#define HONGWAI_IE_OFF P1IE&=~HONGWAI_BIT//禁止p2.0中断
#define HONGWAI_IFG P1IFG//p2.0中断标志
#define HONGWAI_IN (P1IN & BIT1) //P2.0输入
//**********************************************************************
//2.5微秒延时程序
void delay_us(unsigned int i)//delay 2.5us at 8M
{
unsigned int ii;
for(ii =i;ii > 0;ii--)
{
_NOP();_NOP();_NOP();_NOP();
_NOP();_NOP();_NOP();_NOP();
_NOP();_NOP();_NOP();_NOP();
_NOP();_NOP();_NOP();_NOP();
}
}
void int_clk()
{
unsigned char i;//定义局部变量i
BCSCTL1&=~XT2OFF;//打开高频晶体震荡器
BCSCTL2|=SELM1+SELS;//MCLK和SMCLK的时钟源都选择XT2CLK,即都是8MHZ
do//(至少执行一次DO循环)
{
IFG1&=~OFIFG;//清除晶体震荡出错标志位
for(i=0;i<100;i++)
_NOP();//简单的延时等待
}while((IFG1&OFIFG));//判断晶体震荡是否出错,如果还是出错,则继续执行DO循环
IFG1&=~OFIFG;
}
//IO口初始化子程序
void int_io()
{
//P5DIR|=0XFF;//set P5 is out 设置控制数码管数据口的IO口为输出模式
//P6DIR|=BIT0+BIT4+BIT5+BIT6;
//P3DIR|=BIT0;//P3.0控制74HC573的OE,把这个口设置为输出
//P3OUT&=~BIT0;//使能74573,使得74573的输出随输入变化
P2SEL&=~HONGWAI_BIT;
HONGWAI_DIR_IN;//设置接红外引脚的IO为输入
HONGWAI_IE_ON;//允许红外引脚中断
HONGWAI_IES_ON;//设置红外引脚IO为下降沿中断
}
#pragma vector=PORT1_VECTOR
__interrupt void PORT1_ISR(void)
{
if((HONGWAI_IFG & HONGWAI_BIT)==HONGWAI_BIT)
{
HONGWAI_IFG&=~HONGWAI_BIT;//P1IFG &= ~BIT0;
HONGWAI_IE_OFF;//禁止P1.0中断
HONGWAI_IE_ON;//允许p1.0 中断
}
}
int main(void)
{
unsigned int i;
unsigned char c;
WDTCTL = WDTPW + WDTHOLD;
P1DIR|=BIT0;
int_io();
int_timer();
_EINT();//开中断
for( ; ;)
{
P1OUT^=BIT0;
for(i=0;i<50000;i++);
c++;
if(c>=5)
{
c=0;
LPM3;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -