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

📄 msp430ldty.c

📁 tiMSP430F147体能监测设备源码
💻 C
📖 第 1 页 / 共 5 页
字号:
 uchar re1byte(uint addr)
 {
	uchar buf;
	_DINT();
	startb64();
	byte_tx(0xa0);judg_ack();	
        buf=(uchar)(addr/0x100);
	byte_tx(buf);judg_ack();
	buf=(uchar)(addr%0x100);
	byte_tx(buf);judg_ack();
	startb64();
	byte_tx(0xa1);judg_ack();
        buf=byte_rx();
        nop();
        nop();
        nop();
        nop();
        P4OUT|=SDA64;    //sda=1;
        nop();
        nop();
        nop();
        nop();
        P4OUT|=SCL64;   //scl=1;
        nop();
        nop();
        nop();
        nop();
        P4OUT&=~SCL64;   //scl=0;
        nop();
        nop();
        nop();
        nop();
        stopb64();
	_EINT();
	return(buf);
}
void readicid(void)                                           /*************读取卡号****************/
{
	a=0x55;                                               //卡号存在0X55单元开始处
	for(i=0;i<8;i++)
	{
	    icidbuf[i] = IC_read(a);
	    a++;
	 }
} 
/******************串行通信处理程序***************************/
void  r232cl(void)
{
       ///
       ///
       ///进行预处理
       if((FLAG1&BIT1)!=0)           //如果接收数据完毕则进行相应的处理
       {
       	   if((FLAG1&BIT2)!=0)
       	   {
       	       if((FLAG2&BIT0)!=0)  //正在测试过程中
       	       {
       	       	
       	       }
       	       else
       	       {
       	       }
       	   
       	   
       	   	                    //上位机进行读操作命令的处理
       	    }
       	    if((FLAG1&BIT3)!=0)
       	    {
       	    	///                  //下位机进行写操作命令的处理
       	    }
        }
}
/***************读取串口的数据,通过查询方式********/
/***************数据放到r232buf里******************/
/***************需要关闭中断***********************/
void readuart(void)
{
	uchar temp;
	P4OUT|=BIT3;                                  // P4.3=1打开电源
	r232buf[0]=0;                                 //首先附于初值
	for(r232buf[0]=0;r232buf[0]<39;r232buf[0]++)
	{ 
	        while((IFG2&URXIFG1)==0);              //如果没有接收到数据时,等待  
	        temp=r232buf[0]+1;                       
	        r232buf[temp]=RXBUF1;                  //读取接收缓存区的数据
	}
	delay(255);
	delay(255);                              
	r232buf[40]=RXBUF1;                           //为了将接收缓冲区清空,清除接收标志位                                  
}

void readuart1(void)
{
	//uchar temp;
	//P4OUT|=BIT3;                                // P4.3=1打开电源
	while ((IFG2 & UTXIFG1) == 0);                //USART1 TX buffer ready?
	TXBUF1=0x43;                                  //将信道1发送出去
	while ((IFG2 & UTXIFG1) == 0);                //USART1 TX buffer ready?
	TXBUF1=0x48;                                  //将信道1发送出去
	while ((IFG2 & UTXIFG1) == 0);                //USART1 TX buffer ready?                                               
	TXBUF1=0x0d; 	
        while ((IFG2 & UTXIFG1) == 0);                //USART1 TX buffer ready?                                               
	TXBUF1=0x0a;                                  //发送确认键
	for(r232buf[0]=0;r232buf[0]<5;r232buf[0]++)
	{ 
	        while((IFG2&URXIFG1)==0);              //如果没有接收到数据时,等待                       
	        r232buf[r232buf[0]+1]=RXBUF1;                  //读取接收缓存区的数据
	}
	delay(255);
	delay(255);                              
	r232buf[40]=RXBUF1;                           //为了将接收缓冲区清空,清除接收标志位                                  
}
void readuart2(void)
{
	//uchar temp;
	//P4OUT|=BIT3;                                // P4.3=1打开电源
	while ((IFG2 & UTXIFG1) == 0);                //USART1 TX buffer ready?
	TXBUF1=0x52;                                  //将信道1发送出去
	while ((IFG2 & UTXIFG1) == 0);                //USART1 TX buffer ready?
	TXBUF1=0x53;                                  //将信道1发送出去
	while ((IFG2 & UTXIFG1) == 0);                //USART1 TX buffer ready?                                               
	TXBUF1=0x0d; 	
        while ((IFG2 & UTXIFG1) == 0);                //USART1 TX buffer ready?                                               
	TXBUF1=0x0a;                                  //发送确认键
	for(r232buf[0]=0;r232buf[0]<5;r232buf[0]++)
	{ 
	        while((IFG2&URXIFG1)==0);              //如果没有接收到数据时,等待                       
	        r232buf[r232buf[0]+1]=RXBUF1;                  //读取接收缓存区的数据
	}
	delay(255);
	delay(255);                              
	r232buf[40]=RXBUF1;                           //为了将接收缓冲区清空,清除接收标志位                                  
}
void readuart3(void)
{
	//uchar temp;
	//P4OUT|=BIT3;                                // P4.3=1打开电源
	while ((IFG2 & UTXIFG1) == 0);                //USART1 TX buffer ready?
	TXBUF1=0x52;                                  //将信道1发送出去
	while ((IFG2 & UTXIFG1) == 0);                //USART1 TX buffer ready?
	TXBUF1=0x46;                                  //将信道1发送出去
	while ((IFG2 & UTXIFG1) == 0);                //USART1 TX buffer ready?                                               
	TXBUF1=0x0d; 	
        while ((IFG2 & UTXIFG1) == 0);                //USART1 TX buffer ready?                                               
	TXBUF1=0x0a;                                  //发送确认键
	for(r232buf[0]=0;r232buf[0]<5;r232buf[0]++)
	{ 
	        while((IFG2&URXIFG1)==0);              //如果没有接收到数据时,等待                       
	        r232buf[r232buf[0]+1]=RXBUF1;                  //读取接收缓存区的数据
	}
	delay(255);
	delay(255);                              
	r232buf[40]=RXBUF1;                           //为了将接收缓冲区清空,清除接收标志位                                  
}
/*****************无线模块初始化*****************/
/***初始化无线模块串口波特率空中波特率***********/
/***使信道和24c64中数据标识一致******************/
void wxmkcsh(void)
{
        uchar temp;
        delay(255);
        //$$$$$P4OUT|=BIT3;                                             // P4.3=1打开电源
        temp=re1byte(0x0002);
	if(temp!=0x55)                                            //如果没有进行过初始化则需进行初始化工作
	{
	  reloop:	
		//for(i=0;i<33;i++)
		//r232buf[i]=0;                                        //将r232buf清零
		//$$$$$UBR01 =0x82;                                         // 4MHZ/2400 - 1666.666666667   
                //$$$$$UBR11 =0x06;                                         //调整寄存器
                //$$$$$UMCTL1=0x6B;
                ME2 |= UTXE1 + URXE1;                                // Enable USART1 TXD/RXD                                       
                //IE2 |= UTXIE1 + URXIE1;                                                  
	        //$$$$$P4OUT&=~BIT3;                                        // P4.3=0关闭电源
	        P1OUT&=~BIT0;                                        // P1.0=0复位
	        //$$$$$delay(255);
	        //$$$$$delay(255);
	        //$$$$$delay(255);	
	        //$$$$$delay(255);
	        //IE2=URXIE1;                                        // 允许接收中断
	        _DINT();                                             //打开中断                                           
	        delay(255);
	        //$$$$$delay(255);  
	        //P4OUT|=BIT3;                                         // P4.3=1打开电源
	        //$$$$$readuart();
	        //$$$$$delay(255);
	        //$$$$$delay(255);	
	        //$$$$$delay(255);
	        //$$$$$delay(255);
	        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]]==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 exitxhb;                //跳出循环
	        	         //$$$$$}
	        	    //$$$$$}
	        	        	
	        	        	
	        	
	                //$$$$$}
	          //$$$$$}
	         //$$$$$exitxhb:
	         ME2&=~URXE1;
	         temp= RXBUF1;                                       //先暂时关闭串口接收
	         devicexd=0x30;                                      //发送信道1
	         //$$$$$if((FLAG4&BIT2)!=0)                                 //如果接收到正确"FRIENDCOM....."
	         //$$$$${
	         	//$$$$$delay(255);                                  //延时一会
	         //$$$$$}
	         //$$$$$else   goto reloop;                                 //如果没有正确接收"FRIENDCOM.....",则重新开始
	         //$$$$$csszjc(rsbaud);                                     //设置RFBAUD
	         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(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=0x30;                                        //将信道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); 
	         delay(50);                              
	         wr1byte(0x0001,temp);                               //在0地址写入0,表示现有0组数据
	         delay(50);
	         temp=0x55;
	         wr1byte(0x0002,temp);                               //表示已经初始化
	         delay(50);
	         temp=0x00;
	         wr1byte(0x0003,temp);                               //表示第一信道
	         delay(50);
	         temp=0x00;
	         wr1byte(0x0004,temp);                               //初始化设备的地址为零
	         delay(50);
	         temp=0xc5;                                          //表示此项目为仰卧起座
                 wr1byte(0x0005,temp);
                 delay(50);
                 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....."
	         //$$$$${
	    

⌨️ 快捷键说明

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