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

📄 duijj.c~rf2d2a22.tmp

📁 单边带调幅对讲机程序 msp430单片机控制 实现无线数据传输
💻 TMP
📖 第 1 页 / 共 2 页
字号:
            P3OUT |= 0x30;             //MSM7512转换到发送模式 
            Tx_Mode();
            delay(100);               //延时
            nTX_Len=PackData(UART_TX_BUF,Tshow_Puf,count);//封装要发送的数据  
            String_printf(UART_TX_BUF);  //通过串口发送数据
            for(i=0;i<=nTX_Len;i++)       //清空缓存
            { Tshow_Puf[i]='\0'; 
            UART_TX_BUF[i]='\0';}  
             nTX_Flag=0;                  //清除发送标志
            //DisNum=0;
            count=0;                       //发送计数清零
            delay(10);
            P3OUT |= 0x30;                 //MSM7512转换到接收模式
            Rx_Mode();
            j=0x01;}
              
           if(j==0x01){j=0x00; break;}
    
           if ( nRX_Flag==1 )           //接收标志位为一,收到数据
           {       
             NOKIA5110_clear();         //清屏
             count=0;
             NOKIA5110_w_char_string(0,0,"=chat=");//显示
             NOKIA5110_w_char_string(42,0,"Read: ");
             NOKIA5110_w_char_string(0,1,UART_RX_BUF);
             for(i=Buf_Dp-1;i!=0;i--)         //清空接收缓存
             { UART_RX_BUF[i]='\0'; }
             RX1_Len_temp=0;       //接收计数清零
             nRX_Flag=0;            //清接收标志         
             Write_Flag=1;          //写信息
           }    
          if( Rece_Flag==1&count!=0)  //回复信息,清屏。输入新信息
              {Rece_Flag=0;count=0;
               NOKIA5110_clear();
               NOKIA5110_w_char_string(0,0,"=chat=");
               if(Write_Flag!=0) 
                NOKIA5110_w_char_string(42,0,"write: ");}
          if((Write_Flag==0)&(Rece_Flag==0))   //退出发送接收模式,回到主页面
            {   NOKIA5110_clear();
                 x=0;y=0; break;
            }
        }  
        TBCCTL0=CCIE;         //使能定时器中断
      } 
  else  { P2IE &=~BIT1;}     //关闭键盘
  }
}
#pragma vector=PORT2_VECTOR
__interrupt void  PORT2_ISR(void)
{
    if(P2IFG & BIT1)            //如果是clock的中断
    {
        P2IFG &=~ BIT1;         //清除中断标志      
        if(bitcount == 11)      //接收第1位
        {
            if(SIDval)          //如果不是起始位
               return;
            else  
                bitcount--;
        } 
        else if(bitcount == 2)    //接收奇偶校验位
        {   
            if(SIDval)          //如果校验位等于1
                pebit = 1;
            else
                pebit = 0;
            bitcount--;
        }
        else if(bitcount == 1)    //接收停止位
        {
            if(SIDval)          //若停止位正确
            {
                bitcount = 11;    //复位位计数变量
                 IntNum = 0; //当中断11次后表示一帧数据收完,清变量准备下一次接收
		       BF = 1; //标识有字符输入完了
		      _DINT(); //关中断等显示完后再开中断 (注:如这里不用BF和关中断直接调Decode()则所Decode中所调用的所有函数要声明为再入函数)
                 Decode(recdata) ;   //解码获得此键值的ASCII值并保存
                //    LPM3_EXIT;           //退出低功耗模式
                recdata = 0;          //清除接收数据
                _EINT () ; //开中断
            }
            else                //如果出错
            {
                bitcount = 11;
                recdata = 0;    
            }
        }
        else                    //接收8个数据位
        {
            recdata >>= 1;
            if(SIDval)  recdata |= 0x80;
            bitcount--;
        }
    }
}
 #pragma vector=PORT1_VECTOR
__interrupt void  PORT1_ISR(void)
{
   if(P1IFG & BIT3)
   { delay(100);         //去抖
     P1IFG &=~ BIT3;
     Write_Flag=0x01;
   }
   if(P1IFG & BIT2)
   { delay(100);         //去抖
     P1IFG &=~ BIT2;
     Write_Flag=0x00;
     Rece_Flag=0;
     nRX_Flag=0x00;
   }
}

#pragma vector=USCIAB1RX_VECTOR
__interrupt void USCI1RX_ISR(void)
{  
     _DINT();
    if(RX_Flag==1)                        //接收标志位是否为一,是将数据载入缓存
  {
       UART_RX_BUF[RX1_Len_temp] = UCA1RXBUF;
       if( RX1_Len_temp<100) RX1_Len_temp++;
       else  RX1_Len_temp=0;
       if(UART_RX_BUF[RX1_Len_temp-1]=='%')      //收到结束标志,接收完成。
      { 
        UART_RX_BUF[RX1_Len_temp-1]=32;
        UART_RX_BUF[RX1_Len_temp]='*';
        UART_RX_BUF[RX1_Len_temp+1]='*';
        UART_RX_BUF[RX1_Len_temp+2]='E';
        UART_RX_BUF[RX1_Len_temp+3]='N';
        UART_RX_BUF[RX1_Len_temp+4]='D';
        UART_RX_BUF[RX1_Len_temp+5]='*';
        UART_RX_BUF[RX1_Len_temp+6]='*';
        RX_Flag =0;                         //清除接收标志
        nRX_Flag =1;                        //接收完成标志
        Rece_Flag=1;
      }
  }
  else                                    //等待引导码
  { if(Resv[0] ==0x55)
     { Resv[1] = UCA1RXBUF;
        if(Resv[1] ==0xaa)
        {   RX_Flag=1; }
          Resv[0] = '\0';  
          Resv[1] = '\0';
     }
    else  Resv[0] = UCA1RXBUF;
  }
  _EINT();
}

#pragma vector=TIMERB0_VECTOR
__interrupt void Timer_B0(void)
{ int results[2];
  ADC12CTL0 &= ~ENC;
  
  results[0] =ADC12MEM0;
  results[1] =ADC12MEM1;
  
  if((results[0]<=2600)&(results[0]>1700)){signal=3;}
  else if((results[0]<1700)&(results[0]>1000)){signal=2;}
  else  {signal=0;}
   
  Tlotal_m(signal);
  ADC12CTL0 |= ENC+ADC12SC;
}

void Get_time(unsigned char *ReadingData)
 {
   char i,k;
   DS1302_GetData(ReadingData);
   NYR[2]=(char)(((ReadingData[0]>>4)&0x0f)+48);//年
   NYR[3]=(char)((ReadingData[0]&0x0f)+48);  
   NYR[5]=(char)(((ReadingData[2]>>4)&0x0f)+48);//月
   NYR[6]=(char)((ReadingData[2]&0x0f)+48);   
   NYR[8]=(char)(((ReadingData[3]>>4)&0x0f)+48);//日
   NYR[9]=(char)((ReadingData[3]&0x0f)+48); 
   
   switch(ReadingData[1])
   {
   case  0x01:{k=0;break;}
   case  0x02:{k=1;break;}
   case  0x03:{k=2;break;}
   case  0x04:{k=3;break;}
   case  0x05:{k=4;break;}
   case  0x06:{k=5;break;}
   case  0x07:{k=6;break;}
   default:        break;
   }  
   for(i=0;i<4;i++)
   {  Xinq[i]=TAB_f_Week[k][i];}
   
   O_Tm =(char)((ReadingData[4]>>4)&0x08);
   A_PM =(char)((ReadingData[4]>>4)&0x02);//时
   
   if(O_Tm==0x08)
   {SF[0]=(char)((ReadingData[4]>>4)&0x01);}//时
   else 
   {SF[0]=(char)((ReadingData[4]>>4)&0x03);  }
   SF[1]=(char)(ReadingData[4]&0x0f);  
   SF[3]=(char)((ReadingData[5]>>4)&0x0f);//分
   SF[4]=(char)(ReadingData[5]&0x0f);  
}

void Tlotal_m(char k)
    {  char i;
    NOKIA5110_clear();
    NOKIA5110_draw_bmp(0,0,TX,8,8);
    for(i=0;i<=k;i++)
    NOKIA5110_w_Symbol(i);
    Get_time(ReadingData);
    NOKIA5110_w_char_string(35,0,"38/27MHz");
    NOKIA5110_w_char_string(0,1,"SSB interphone");
      for(i=0;i<5;i++)
    { Write_shuzi((i+2)*8,2,b[SF[i]]);}
    
    if(O_Tm==0x08)
    { if(A_PM==0x02) Write_hanzi(64,2,PM);
      else           Write_hanzi(64,2,AM);}
    
    NOKIA5110_w_char_string(0,4,NYR);
    NOKIA5110_w_char_string(10*6,4,Xinq);
    NOKIA5110_w_char_string(0,5,"Message");
    NOKIA5110_w_char_string(10*6,5,"Back");
    }

⌨️ 快捷键说明

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