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

📄 main.c

📁 5个430系列微控制器源代码
💻 C
字号:
#include "msp430x13x.h"
// #include "f123flash.h"
#define FLASH_ADDRESS 0x01000
#define uchar unsigned char

uchar txbuf,i=0,flag=0;
uchar sum=0,led=0;
uchar databuf[3],buffer[20];
char *pcflash;
int *pflash;

void init_uart();
void delay(unsigned int);
void communicate();
void protocol();

void main(void)
{

pflash=(int *)FLASH_ADDRESS;
pcflash=(char *)FLASH_ADDRESS;
_DINT();
//WDTCTL=WDTPW+WDTHOLD;
IE1&=~OFIE;                      //禁止振荡器失效中断
BCSCTL1|=XTS;                  //选择LFTX1振荡器 
BCSCTL2|=SELM1+SELM0;          //用LFTX1CLK作为MCLK的时钟源
do{
IFG1&=~OFIFG;
delay(255);                    //等待晶振转换完成
}
while((IFG1&OFIFG)!=0);
IFG1&=~OFIFG;

WDTCTL=WDT_MRST_32;
init_uart();

TACTL=TASSEL1+TACLR+ID_3;         // TA定时
CCTL0=CCIE;
CCR0=60000;

TACTL|=MC0;
//TACTL&=~MC0;
_EINT();
while(1)
{WDTCTL=WDT_MRST_32;
if(flag==1)
//communicate();
{
flag=0;
protocol();
//P2OUT^=BIT0;

//Flash_clr(pflash);
//Flash_wb(pcflash,buffer[1]);Flash_wb(pcflash+1,buffer[2]);

}
else
{
// _NOP();
P2OUT=led;}
}
}


void init_uart()
{
UCTL0&=~SWRST;             //SWRST复位,USART允许

UCTL0|=CHAR;                //8 位数据位,1位停止位,无校验

UBR00=0XC0;
UBR10=0X00;                //使用 波特率为19200 BPS
UMCTL0=0X00;               //位调整

UTCTL0|=SSEL0;

ME1|=UTXE0+URXE0;                 //发送及接收模块允许

P3SEL=0X30;
P3DIR=0X10;
IE1|=URXIE0;               //接收中断允许 
P1DIR=0X00;
P2DIR=0X01;
P2OUT&=~BIT0;

//P3OUT=0XFF;
}

void delay(unsigned int v)   //延时程序
{while(v!=0){v--;WDTCTL=WDT_MRST_32;}
}

#pragma vector=UART0RX_VECTOR
__interrupt void uart0rx(void)
{
LPM3_EXIT;
if(flag==0)
{
buffer[i]=RXBUF0;

//i++;
while((IFG1&UTXIFG0)==0);
TXBUF0=RXBUF0;
if(buffer[0]==0x7e)
{
 i++;}
else i=0;

if(i==5)
{
sum=buffer[1]+buffer[2];
while((IFG1&UTXIFG0)==0);
TXBUF0=sum;
if(buffer[4]==0x7e&&sum==buffer[3]){flag=1;i=0;}

else
{flag=0;i=0;sum=0;}
}
else {flag=0;}
}

}

void communicate()
{
uchar j,bytes;
_DINT();
P3DIR=0XDF;
P1DIR=BIT4;
P3OUT&=~BIT2;        // intterupt
delay(10);
P3OUT|=BIT2;

for(bytes=0;bytes<3;bytes++)
{txbuf=buffer[bytes+1];
for(j=0;j<8;j++)
{//P1OUT&=~BIT4;        //clk=0
delay(10);
//P3OUT&=~BIT6;

if(txbuf&0x80)
{
P3OUT|=BIT6;         //dat=1
}
else{ P3OUT&=~BIT6;}  //dat=0
P1OUT&=~BIT4;        //clk=0
delay(10);
P1OUT|=BIT4;          //clk=1

txbuf=txbuf<<1;
}
}
flag=0;
//P3OUT|=BIT6;
P3DIR=0X10;
P1DIR=0X00;
_EINT();
}


void protocol()
{uchar j;
if(buffer[1]==0&&buffer[2]==0)
{P2OUT&=~BIT0;
_BIS_SR(LPM3_bits);}
else if(buffer[1]==0x80)
{
for(j=0;j<2;j++)
{txbuf=*(pcflash+j);
while((IFG1&UTXIFG0)==0);
TXBUF0=txbuf;
}
}
else if(buffer[1]==0x88){;}
// {Flash_clr(pflash);
// Flash_wb(pcflash,buffer[1]);Flash_wb(pcflash+1,buffer[2]);}
else{P2OUT^=BIT0;}
}

#pragma vector=TIMERA0_VECTOR             //定时器中断
__interrupt void Timer_A(void) 
{
//P6OUT^=BIT1;
led^=BIT0;

}

⌨️ 快捷键说明

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