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

📄 1r0t.c

📁 MSP430
💻 C
字号:
#include<msp430x14x.h>
//收到串口1数据把eaebec去掉再通过串口0发出去
unsigned char rx_flag0=0,rx_flag1=0;
unsigned int ecc=0;
unsigned char BUFF0[15]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
unsigned char BUFF1[15]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
void Init0(void);
void Init1(void);
void msp430_RX(void);
void msp430_RX(void)
{
 P4DIR|=0x10;//接收模式,P4.4清0,为输入
 P4DIR|=0x60;//P4.5,P4.6置1,为输出
 P4OUT|=0x20;//工作模式,P4.5输出1
 P4OUT|=0x40;//频率434
 P4OUT&=~0x10;
  //P4OUT=0x00;
}
/*端口初始化*/
void Inti_Port(void)
{
//将所有的管脚在初始化的时候设置为输入方式
P3DIR=0;
//将所有的管脚设置为一般I/0口
P3SEL=0;
return;
}

//初始化串口0
void Init_UART0(void)
{//将寄存器的内容清零
  U0CTL=0x00;
//数据位为8bit
  U0CTL+=CHAR;
//将寄存器的内容清零
  U0TCTL=0x00;
//波特率发生器选择ACLK
  U0TCTL+=0x10;//此处可以删去默认外部时钟UCLK132768
  // U1CTL&=0X0FE;
//波特率设置为4800
  U0BR0=0x03;
  U0BR1=0x00;
//调整寄存器
  U0MCTL=0x4A;
//使能UART0的TXD和RXD
ME1|=UTXE0/*+URXE0*/;
//使能UART0的RX中断
//IE1|=URXIE0;
//使能UART0的TX中断
//IE1|=UTXIE0;
//设置P3.4为UART1的TXD

P3SEL|=0x10;
//P3.4为输出管脚
P3DIR|=0x10;
return;
 }

 //初始化串口1
void Init_UART1(void)
{//将寄存器的内容清零
  U1CTL=0x00;
//数据位为8bit
  U1CTL+=CHAR;
//将寄存器的内容清零
  U1TCTL=0x00;
//波特率发生器选择ACLK
  U1TCTL+=0x10;//此处可以删去默认外部时钟UCLK132768
  // U1CTL&=0X0FE;
//波特率设置为4800
  U1BR0=0x03;
  U1BR1=0x00;
//调整寄存器
  U1MCTL=0x4A;
//使能UART1的TXD和RXD
 ME2|=URXE1;
// ME2&=~UTXE1;
//使能UART1的RX中断
IE2|=URXIE1;

//设置P3.7为UART1的RXD
P3SEL|=0x80;
//P3.6为输出管脚
P3DIR|=0x00;
return;
 }
 
interrupt [UART1RX_VECTOR] void UART1_RX_ISR(void)
{
 BUFF1[rx_flag1]=RXBUF1;
 rx_flag1++;
 if(rx_flag1==15)
 {
 IE2&=~URXIE1;
 }
}


void main(void)
{ 
 unsigned int i,j=65535,k=0;
 WDTCTL=WDTPW+WDTHOLD;//关看门狗
 P1DIR|=BIT0;
 _DINT();
 Inti_Port();
 Init_UART0();
 Init_UART1();
 msp430_RX();
 IFG2&=0xEF;/*清除接收中断标志*/
 _EINT();/*使能中断*/
while(1)
{
 IE2|=URXIE1;
 P1OUT=BIT0;
 do
 {
  j--;
  if(rx_flag1)
  {
   while(!(rx_flag1==15));
   rx_flag1=0;
   _DINT();
   j=0;
   if((BUFF1[0]==0xea)&&(BUFF1[1]==0xeb)&&(BUFF1[2]==0xec))
    {
    for(k=0;k<14;k++)
    {
     ecc=ecc^BUFF1[k];
    }
    if(ecc==BUFF1[14])
    {
    ME1|=UTXE0;
    UTCTL0&=~TXWAKE;
      for(k=3;k<14;k++)
       { 
         TXBUF0=BUFF1[k];
         while((UTCTL0&0x01)!=0x01);
         IFG1&=0xDF;//清除发送中断标志位 
       }
    }   
    ME1&=~UTXE0;   
    }
  
  _EINT();
    
  }
 }
 while (j>1);
 j=65535;
// IE2|=URXIE1;
 }
}

⌨️ 快捷键说明

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