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

📄 msp430sgtznew.c

📁 tiMSP430F147体能监测设备源码
💻 C
📖 第 1 页 / 共 5 页
字号:
	         P4OUT&=~BIT3;                                        // P4.3=0关闭电源
	         delay(255);                                         //延时一会
	         delay(255);                                         //延时一会
	         delay(255);                                         //延时一会
	         delay(255);                                         //延时一会                                         
	         P4OUT|=BIT3;                                         // P4.3=1打开电源
	         delay(255);                                         //延时一会
	         delay(255);                                         //延时一会
	         delay(255);                                         //延时一会
	         delay(255);                                         //延时一会
	         csszjc(rfbaud);                                     //设置RSBAUD;
	         delay(255);                                         //延时一会
	         delay(255);                                         //延时一会
	         delay(255);                                         //延时一会
	         delay(255);                                         //延时一会
	         P4OUT&=~BIT3;                                        // P4.3=0关闭电源
	         delay(255);                                         //延时一会
	         delay(255);                                         //延时一会
	         delay(255);                                         //延时一会
	         delay(255);                                         //延时一会
	         P4OUT|=BIT3;                                         // P4.3=1打开电源
	         delay(255);                                         //延时一会
	         delay(255);                                         //延时一会
	         delay(255);                                         //延时一会
	         delay(255);                                         //延时一会
	         csszjc(ch);                                         //
	         while ((IFG2 & UTXIFG1) == 0);                      //USART1 TX buffer ready?
	         TXBUF1=0x31;                                        //将信道1发送出去
	         while ((IFG2 & UTXIFG1) == 0);                      //USART1 TX buffer ready?                                               
	         TXBUF1=0x0d; 	
                 while ((IFG2 & UTXIFG1) == 0);                      //USART1 TX buffer ready?                                               
	         TXBUF1=0x0a;                                        //发送确认键
	         delay(255);                                         //延时一会
	         delay(255);                                         //延时一会
	         ME2|=URXE1;                                         //允许接收
	         temp=0x00;      
	         wr1byte(0x0000,temp);                                
	         wr1byte(0x0001,temp);                               //在0地址写入0,表示现有0组数据
	         temp=0x56;
	         wr1byte(0x0002,temp);                               //表示已经初始化
	         temp=0x01;
	         wr1byte(0x0003,temp);                               //表示第一信道
	         temp=0x00;
	         wr1byte(0x0004,temp);                               //初始化设备的地址为零
	         temp=0xc5;                                          //表示此项目为仰卧起座
                 wr1byte(0x0005,temp);
                 P1OUT|=BIT0;                                        //P1.0置位 
                 P4OUT&=~BIT3;                                       // P4.3=0关闭电源                                  
                 delay(255);
	         delay(255);
	         delay(255);	
	         delay(255);
	         ////////////////////////////////////////////////////////////////////
	         ME2 |= UTXE1 + URXE1;                                // Enable USART1 TXD/RXD
	         _DINT();                                             //
	         P1OUT&=~BIT0;                                        //P1.0置位
	         P4OUT|=BIT3;                                         // P4.3=1打开电源
	         delay(255);
	         delay(255);
	         delay(255);	
	         delay(255);
	         //delay(255);                                         //延时一会
	         //delay(255);                                         //延时一会
	         readuart1();
	         delay(255);
	         delay(255);
	         readuart2();
	         delay(255);
	         delay(255);
	         readuart3();
	         delay(255);
	         delay(255);
	         delay(255);	
	         delay(255); 
	         ////////////////////////////////////////////////////////////////////////
	         P1OUT|=BIT0;                                        //P1.0置位 
                 P4OUT&=~BIT3;                                        // P4.3=0关闭电源
                 delay(255);
	         delay(255);
	         delay(255);	
	         delay(255); 
	         P1OUT|=BIT0;                                        //P1.0置位 
	         P4OUT|=BIT3;                                        // P4.3=1打开电源
	         delay(255);
	         delay(255);
	         delay(255);	
	         delay(255); 
	         UBR01 = 0xA0;                                       // 3.58Mhz/9600 - 372
                 UBR11 = 0x01;                                       // 4Mhz/9600 - 416.6666666667
                 UMCTL1 = 0x6B;                                      //将UART1恢复到9600波特
	             
          }
}
void trytry(void)
{
	while(1)
	{
	}
}
/*************远程升级和连续读24C64数据处理数据及写设备地址,无线信道********/
void ycsjre64(void)
{
	uchar   temp;
	uchar   temp1;
	uchar   temp2;
	if((FLAG3&BIT0)!=0)                                          //如果存储器为写地址
	{
		delay(255);                                          //等待往上位机发送完毕
		disp_lcd(0x0d,0x0d,0x0d,0x01,0);	             //显示---1表示正在进行写地址操作
		delay(255);
		delay(255);
		delay(255);                                          //为了使显示清楚
		_DINT();                                             //禁止中断
		wr1byte(0x0004,deviceadr);
		delay(50);               
                temp=re1byte(0x0004);
                if(temp!=deviceadr)                                  //再读一边如果不成功在写一次
                wr1byte(0x0004,deviceadr);
                delay(50);
                _EINT();
                //FLAG3&=~BIT0;                                        //清楚存储器写标志
         }
         if((FLAG3&BIT1)!=0)
         {	
         	delay(255);
         	disp_lcd(0x0d,0x0d,0x0d,0x02,0);	             //显示---2表示正在进行写无线模块的信道
         	delay(255);
		delay(255);
	 reloop:
		delay(255);                                          //为了使显示清楚	
                for(i=0;i<33;i++)
		r232buf[i]=0;                                        //将r232buf清零
		UBR01 =0x82;                                         // 4MHZ/2400 - 1666.666666667   
                UBR11 =0x06;                                         //调整寄存器
                UMCTL1=0x6B;
                ME2 |=URXE1+UTXE1;                                   // Enable USART1 TXD/RXD                                                               //禁止中断
                P4OUT&=~BIT3;                                        // P4.3=0关闭电源
	        P1OUT&=~BIT0;                                        // P1.0=0复位
	        delay(255);
	        delay(255);
	        delay(255);	
	        delay(255);
	        delay(255);
	        //IE2|=URXIE1;                                        // 允许接收中断
	        _DINT();                                              //暂时关闭中断
	        //P4OUT|=BIT3;                                        // P4.3=1打开电源
	        readuart();                                           //读取串口数据
	        FLAG4&=~BIT2;                                         // 先清接收"FRIENDCOM....."正确位
	        for(i=0;i<20;i++)
	        {
	        	delay(255);                                   // 延时
	        	if(r232buf[0]>=32)                            // 如果接收的数据大于等于32
	        	{
	        	   for(r232buf[0]=1;r232buf[0]<32;r232buf[0]++)
	        	   {
	        	   	if((r232buf[r232buf[0]+0]==0x0d)&&(r232buf[r232buf[0]+1]==0x0a))
	        	   	if((r232buf[r232buf[0]+2]==0x46)&&(r232buf[r232buf[0]+3]==0x52))
	        	        if((r232buf[r232buf[0]+4]==0x49)&&(r232buf[r232buf[0]+5]==0x45))
	        	        {
	        	        	FLAG4|=BIT2;                 // 接收"FRIENDCOM....."正确置位
	        	        	goto exitxh;                 // 跳出循环
	        	         }
	        	    }
	        	        	
	        	        	
	        	
	                }
	         }
	  exitxh:
	         //ME2&=~URXE1;
	         tempmem= RXBUF1;                                    //先暂时关闭串口接收
	         if((FLAG4&BIT2)!=0)                                 //如果接收到正确"FRIENDCOM....."
	         {
	         	delay(255);                                  //延时一会
	         	csszjc(ch);                                  //
	         	while ((IFG2 & UTXIFG1) == 0);               //USART1 TX buffer ready?
	         	TXBUF1=(devicexd&0x0f)+0x30;                 //将信道发送出去
	         	while ((IFG2 & UTXIFG1) == 0);               //USART1 TX buffer ready?                                               
	         	TXBUF1=0x0d; 	
                        while ((IFG2 & UTXIFG1) == 0);               //USART1 TX buffer ready?                                               
	         	TXBUF1=0x0a;                                 //发送确认键
	         }
	         else   goto reloop;                                 //如果没有正确接收"FRIENDCOM.....",则重新开始
                 delay(255);
                 ME2|=URXE1;                                         //重新允许接收
                 P1OUT|=BIT0;                                        //P1.0置位 
                 P4OUT&=~BIT3;                                        // P4.3=0关闭电源
                 delay(255);
	         delay(255); 
	         P1OUT|=BIT0;                                        //P1.0置位 
	         P4OUT|=BIT3;                                        // P4.3=1打开电源
	         delay(255);
	         delay(255); 
	         UBR01 = 0xA0;                                       // 3.58Mhz/9600 - 372
                 UBR11 = 0x01;                                       // 4Mhz/9600 - 416.6666666667
                 UMCTL1 = 0x6B;                                      //将UART1恢复到9600波特
                 _DINT();                                             //禁止中断
                 wr1byte(0X0003,devicexd);                           //将信道的值写入存储器
                 temp=re1byte(0x03);
                 if(temp!=devicexd)                                  //再读一边如果不成功在写一次
                 wr1byte(0x0003,devicexd);
                 _EINT();                                            //打开中断
                 //FLAG3&=~BIT1;                                       //清除上位机写信道标志位
         }
         if((FLAG3&BIT2)!=0)
         {	
         	//delay(255);
         	disp_lcd(0x0d,0x0d,0x0d,0x03,0);	             //显示---3表示清除存储器的全部数据
         	//delay(255);
		//delay(255);    
                _DINT();
                temp1=0x00;                
                wr1byte(0X0000,temp1);                               //将信道的值写入存储器
                delay(50);
                temp=re1byte(0x0000);
                 if(temp!=0x00)                                      //再读一边如果不成功在写一次
                 wr1byte(0x0000,temp1);
                 delay(50);
                 temp1=0x00;
                 wr1byte(0X0001,temp1);                               //将信道的值写入存储器
                 temp=re1byte(0x0001);
                 if(temp!=0x00)                                      //再读一边如果不成功在写一次
                 wr1byte(0x0001,temp1);                              
                 at64count=0;
                 _EINT(); 
                 delay(50);
                 //FLAG3&=~BIT2;                                       //清除清存储器标志位
                 FLAG2&=~BIT0;                                       //清有数据标志////////////////////
           }
           if((FLAG3&BIT3)!=0)                                       //如果要进行远程升级
           
           {
           	delay(255);
         	disp_lcd(0x0d,0x0d,0x0d,0x04,0);	             //显示---4表示清除存储器的全部数据
         	delay(255);
		delay(255); 
           	ycsj();                                              //进行远程升级
           }
           if((FLAG3&BIT4)!=0)                                       //如果要连续传输数据
           {
           	delay(255);
         	disp_lcd(0x0d,0x0d,0x0d,0x05,0);	             //显示---5表示向上位机发送存储器的全部数据
         	delay(255);
		delay(255);
		while(1)
		{
		}
	     }
	     if((FLAG3&0x07)!=0) checkcard();                         //检查卡
	     FLAG3&=0Xf8;
}                                              
/*******************参数设置检查***********************/
/*******************不用打开中断***********************/
void csszjc(const uchar * data)                                               //进行参数设置
{      
        //const uchar * datapoint;
        //datapoint=data;
	while((*data)!='\0')
	{
		while ((IFG2 & UTXIFG1) == 0);                               //USART1 TX buffer ready?
	        TXBUF1=(*data);                                              //发送出去             
	        data++;                                                 //指针增加
	        delay(20);                                         
	 }
}
	

//0D 0A 46 52 49 45 4E 44 43 4F 4D 20 54 45 4C 45 43 4F 4D 20 43 4F 2E 2C 4C 54 44 2E 0D 0A 46 43 32 30 31 2F 53 20 56 34 2E 30 0D 0A 
//00 0D 0A 46 52 49 45 4E 44 43 4F 4D 20 54 45 4C 45 43 4F 4D 20 43 4F 2E 2C 4C 54 44 2E 0D 0A 46 43 32 30 31 2F 53 20 56 34 2E 30 0D 0A FE
      	    	              	

/***************时间TIMERB中断******************/ 
#pragma vector=TIMERB1_VECTOR
__interrupt void TIMERBHandler( void )
{
        TBCTL&=0XFFFE;
	TBR=0XFC17;                    //1MS定时
	//TBCCR0=0XFC17;
	TBCCR0=0XFC17;
	if(zwtqqjsq<100)
	zwtqqjsq++;
	if(startjsq<16)
	startjsq++;	               //加到5MS到时
	if((P2IN&BIT1)!=0) exitjsq=0;
        else 
        {       
        	if(exitjsq<10000)
        	exitjsq++;
        }
}
/*********************IO口中断**********************/
#pragma vector=PORT2_VECTOR
__interrupt void PORT2Handler( void )          //
{ 
	P2IFG&=~BIT6;
	//EX0 = 0;                             //
       	 P2IE&=~BIT6;                          //清BIT6,禁止中断 
         if(subf==0xb0)
	{
	    tljish++;
	    //TR1 = 1;
	    //EX0 = 1;
	    P2IE|=BIT6;                         //清BIT6,禁止中断
	    //PX0 = 1;
	    //IT0 = 1;
	}
	else	
	{
		tljish--;
	        if (tljish <0)
		{
		     //EX0 = 0;
		     P2IE&=~BIT6;               //清BIT6,禁止中断
		     //TR1 = 1;
		     //PX0 = 1;
		     //IT0 = 1;
		     subf = 0xb0;
		   }
	      else
	       {
	   		//TR1 = 1;
	                //EX0 = 1;
	                P2IE|=BIT6;
	                //PX0 = 1;
	                //IT0 = 1;
	        }
	 } 
}
/********************通讯中断(接收)**************************/
/********************接收标志位在FLAG1的低四位***************/
#pragma vector=USART1RX_VECTOR
__interrupt void USART1RXTXHandler( void )
{
       tempmem= RXBUF1;                                       //读取临时存储器
       //if((tempmem==0xaa)&&(startjsq>4))
       //if(tempmem==0xaa)
       if((tempmem==0xaa)&&(startjsq>8))
       {
             FLAG1|=BIT0;                                     //建立起始标志
       	     startjsq=0;                                      //重新赋0
       	     r232buf[0]=0;                                    //接收到第一个字节
       	     FLAG3=0X00;
       	     FLAG4=0X00;
       	}
       	else
       	{   
       	    startjsq=0;                                       //接收到一个字节startjsq清零 
       	    if((FLAG1&BIT0)!=0)                               //如果找到起始位则处理,没有找到起始位就不做处理
       	    {
       	         r232buf[0]++;                                //
       	         if(r232buf[0]==0X01)
       	         {
       	              		                                           
       	            r232buf[1]=tempmem;                        //将接受的数据放到缓存区里
       	                 	            
       	         }
       	         if(r232buf[0]==0X02)
       	         {
       	            r232buf[2]=tempmem;                        //将接受的数据放到缓存区里
       	            //tempmem1=tempmem;                        //后面要接受的数据长度(高位)
       	         }
       	         if(r232buf[0]==0X03)
       	         {
       	            r232buf[3]=tempmem;                        //将接受的数据放到缓存区里
       	            tempmem1=tempmem;                          //后面要接受的数据长度(低位)
       	         }
       	         if(r232buf[0]>0x03)
       	         {
       	            r232buf[r232buf[0]]=tempmem;               //保存接收到的数据
       	            tempmem1--;
       	            if(tempmem1==0)                            //表示接收数据完毕
       	            {   
       	            	if(tempmem==0xbc)
       	                FLAG3|=BIT0;
       	            	if((r232buf[4]==xmdmbuf)&&((FLAG3&BIT0)!=0)) goto skip;
       	            	if((r232buf[4]!=xmdmbuf)||(r232buf[5]!=deviceadr))//如果接收的不是本机的项目代码或者地址
       	            	{                                                 //则清标志状态位,结束退出
       	            		r232buf[0]=0;                  
       	                        //FLAG3=0X00;                               //
       	                        //FLAG4=0X00;
       	            		FLAG1&=~BIT0;                             //清找到起始位标志
       	            		goto end;
       	            	}
       	         skip:
       	            	tempmem3=3+r232buf[3];                 //在中断中接收的数据长度占一个字节

⌨️ 快捷键说明

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