Nghiên cứu Khoa học
HƯỚNG DẪN LẬP TRÌNH CÁC CHỨC NĂNG NGẮT CƠ BẢN CỦA MSP430
SAU ĐẦY LÀ VÍ DỤ LẬP TRÌNH CHO CÁC NGẮT CƠ BẢN CẦN CÓ CỦA CHIP MSP430.
ỨNG DỤNG ĐỂ BẬT/TẮT XUNG TẠI CÁC CHÂN CỦA CHIP MSP430
#include "msp430.h"
void main(void)
{
BCSCTL1=CALBC1_1MHZ;
DCOCTL=CALDCO_1MHZ;
BCSCTL2|=DIVS_3;
P1DIR|=BIT0+BIT1+BIT2;
P2DIR&=~(BIT0+BIT1+BIT2+BIT3);
P2REN|=BIT0+BIT1+BIT2+BIT3;
P2IE|=BIT0+BIT1+BIT2+BIT3;
P2IES|=BIT0+BIT1+BIT2+BIT3;
CCR0=62500;
CCR1=31250;
CCTL0=CCIE;
CCTL1=CCIE;
P2IFG=0;//XOA TAT CA CAC NGAT TRUOC KHI BAT DAU CT
_BIS_SR(GIE);
while(1)
{
}
}
#pragma vector=PORT2_VECTOR
__interrupt void ngat(void)
{//AN P2.0-P2.7
if((P2IFG&BIT3)==BIT3){
TACTL|=TASSEL_2+ID_3+MC_2+TAIE;
P2IFG&=~BIT3;
}
if((P2IFG&BIT0)==BIT0)
{
CCTL0&=~CCIE;
P2IFG&=~BIT0;// XOA YEU CAU NGAT P2.0
}
if((P2IFG&BIT1)==BIT1)
{
CCTL1&=~CCIE;
P2IFG&=~BIT1;// XOA YEU CAU NGAT P2.0
}
if((P2IFG&BIT2)==BIT2)
{
TACTL&=~TAIE;
P2IFG&=~BIT2;// XOA YEU CAU NGAT P2.0
}
}
#pragma vector=TIMERA0_VECTOR
__interrupt void ngatTA0(void)
{
CCR0+=62500;
P1OUT^=BIT0;
}
#pragma vector=TIMERA1_VECTOR
__interrupt void ngatTA1(void)
{
switch(TAIV){
case 0x02:
{
CCR1+=31250;
P1OUT^=BIT1;
break;
}
case 0x04:
{
break;
}
case 0x0a:
{
P1OUT^=BIT2;
break;
}
}
}