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

📄 yt_temep.lst

📁 完成数据的采集
💻 LST
📖 第 1 页 / 共 2 页
字号:
    334          		if(Get_bit(IO_I2CD->IDR,I2CD)==0)nn&=0XFE; 
    335            	else														 nn|=1;
    336            	if(j!=7)
    337            	nn<<=1;
    338            	Clr_bit(IO_I2CC->ODR,I2CC);//SCL_C;
    339            	delay(20);
    340          	}
    341          	GPIO_InOut(IO_I2CD,GPIO_Pin_I2CD,1,GPIO_Mode_Out_PP);//SDA_OUT;
    342          	return(nn);
    343          }
    344          
    345          
    346          /*向虚拟I2C总线上发送n个字节的数据*///WRNBYT(0XA0,0,&FM[0],16);
    347          Int8U WRNBYT(Int8U i2c,Int8U i2cadd,Int8U *pos,Int8U number)
    348          {
    349          	Int8U slaw,k,F0,ct_i2c;
    350          	
    351          	k=i2c,ct_i2c=0;
    352          	do
    353          	{
    354          		sta();
    355          		WRBYT(k);
    356          		F0=cack(); 
    357          		ct_i2c++;      
    358          	}while(F0==1&&ct_i2c<5);
    359          	if(ct_i2c>=5)return 1;
    360          		
    361          	slaw=i2cadd,ct_i2c=0;
    362          	do
    363          	{
    364          		WRBYT(slaw);
    365          		F0=cack( );
    366          		ct_i2c++;
    367          	}while(F0==1&&ct_i2c<5);
    368            if(ct_i2c>=5)return 1; 
    369            	
    370          	for(k=0;k<number;k++)
    371          	{
    372          		WRBYT(*pos);
    373          		F0=cack( );
    374          		++pos;
    375          	}
    376          	stop();
    377          	return 0;
    378          }
    379          /*从虚拟I2C总线上读取n个字节的数据*/
    380          void RDNBYT(Int8U slar,Int8U subaddr,Int8U *qq,Int8U number)
    381          {
    382           Int8U rl,F0,ct_i2c;
    383           
    384           rl=slar,ct_i2c=0;
    385           do{
    386           sta();
    387           WRBYT(rl);
    388           F0=cack();
    389           ct_i2c++;
    390           }while(F0==1&&ct_i2c<5);
    391           
    392           if(slar==0xa0)
    393           {	
    394           	do
    395           	{  
    396           		WRBYT(subaddr);
    397           		F0=cack();
    398           		ct_i2c++;
    399           	}while(F0==1&&ct_i2c<5);
    400           }
    401          	if(slar==0x64)slar=4;
    402          	else          slar=0xa1;
    403          	if(slar==0xa1)sta();	
    404          	do
    405          	{
    406           		WRBYT(slar);
    407           		F0==cack();
    408           		ct_i2c++;
    409          	}while(F0==1&&ct_i2c<10);
    410          
    411          for(rl=0;rl<number-1;rl++)
    412          { 
    413           *qq=RDBYT();
    414           ++qq;
    415           mack();
    416          }
    417           *qq=RDBYT();
    418          	mnack();
    419          	stop();
    420          }
    421          
    422          
    423          
    424          
    425          ////////////////////////////////////////////////////////
    426          void	ReadYear(Int8U *year_buf)
    427          {
    428          #if STM_I2C
    429          	ReadI2C(0X64,0,year_buf,16) ;
    430          #else
    431          	RDNBYT(0x64,0,year_buf,16);
    432          #endif
    433          }
    434          
    435          
    436          
    437          
    438          void	WriteYear(Int8U *year_buf) 
    439          {
    440          #if	STM_I2C
    441          	WriteI2C(0X64,0,year_buf,16);
    442          #else	
    443          	WRNBYT(0X64,0,year_buf,16);
    444          #endif
    445          }
    446          
    447          Int16U	InitYear(Int8U	*year_buf)
    448          {
    449          	Int8U a;
    450          	
    451          #if STM_I2C
    452          	ReadI2C(0X64,0,year_buf,16) ;
    453          #else
    454          	RDNBYT(0x64,0,year_buf,16); 
    455          #endif	
    456          	a=0x20;
    457          #if	STM_I2C
    458            WriteI2C(0x64,0XE0,&a,1);
    459          #else	
    460          	WRNBYT(0x64,0XE0,&a,1);
    461          #endif 	
    462          delay_nop(1000);
    463          	return 0;
    464          }
    465          
    466           
    467          
    468          Int16U	ReadFM24C04(_yt *DATA)
    469          {
    470            Int16U a,b,c,m;
    471            Int8U  FM[22];
    472          	for(m=0;m<3;m++)
    473          	{
    474          		//WriteFM24C04(C_FM24C04,&_YT) ;    
    475          #if  STM_I2C
    476          		ReadI2C(0XA0,0,&FM[0],22);
    477          #else		
    478          		RDNBYT(0xA0,0,&FM[0],22);
    479          #endif		
    480          		for(a=0,b=0;a<20;a++)b+=FM[a];
    481          		c=FM[20]<<8,c+=FM[21];
    482          		
    483          		if(b==c)
    484          		{
    485          			DATA->Sensor[0].Type=FM[0];
    486          			DATA->Sensor[1].Type=FM[1];
    487          			DATA->Sensor[2].Type=FM[2];
    488          			DATA->Sensor[3].Type=FM[3];
    489          			DATA->_TemOver=FM[4];
    490          			DATA->_TemFast=FM[5];
    491          			DATA->_TemTime=FM[6];
    492          			DATA->_TemRoom=FM[7];
    493                DATA->_TemFault=FM[8];
    494          			DATA->_Channal=FM[9]*0X100;
    495          			DATA->_Channal+=FM[10];
    496          			DATA->_Yorder=FM[11];
    497          			DATA->_Address=FM[12];
    498          			DATA->_Facility=FM[13];
    499                DATA->_Rate=FM[14];
    500          			return  FALSE;
    501          		}
    502          		else
    503          		{
    504          			WRNBYT(0XA0,0,&FM_TAB[0],22);
    505          			delay_nop(1000);
    506          		}
    507          		
    508          	}
    509          	return 		TRUE;
    510          }
    511          
    512          
    513          
    514          
    515          Int16U	WriteFM24C04(Int16U Flag,_yt*DATA)
    516          {
    517          	Int8U  I2CDATA[22];
    518          	Int16U a;
    519          	Int32U b;
    520          	if(Flag!=C_FM24C04)return 0;
    521          
    522          		I2CDATA[0]=DATA->Sensor[0].Type;
    523          		I2CDATA[1]=DATA->Sensor[1].Type;
    524          		I2CDATA[2]=DATA->Sensor[2].Type;
    525          		I2CDATA[3]=DATA->Sensor[3].Type;
    526          		I2CDATA[4]=(Int8U)DATA->_TemOver&0XFF;
    527          		I2CDATA[5]=(Int8U)DATA->_TemFast&0xff;
    528          		I2CDATA[6]=(Int8U)DATA->_TemTime&0XFF;
    529          		I2CDATA[7]=(Int8U)DATA->_TemRoom&0xff;		
    530          		I2CDATA[8]=(Int8U)DATA->_TemFault&0xff;
    531          		
    532          		I2CDATA[9]=DATA->_Channal/0X100;
    533          		I2CDATA[10]=(Int8U)DATA->_Channal&0XFF;
    534          		I2CDATA[11]=(Int8U)DATA->_Yorder&0xff;
    535          		I2CDATA[12]=(Int8U)DATA->_Address&0xff;
    536          		I2CDATA[13]=(Int8U)DATA->_Facility&0xff;
    537          		I2CDATA[14]=(Int8U)DATA->_Rate&0xff;
    538          		
    539          		for(a=0,b=0;a<20;a++)b+=(Int32U)I2CDATA[a];
    540          		b&=0xffff;
    541          		I2CDATA[20]=(Int8U)(b>>8),I2CDATA[21]=(Int8U)(b&0XFF);
    542          #if	STM_I2C	 
    543          		WriteI2C(0XA0,0,I2CDATA,22);
    544          #else		
    545          		WRNBYT(0xA0,0,&I2CDATA[0],22);
    546          #endif		
    547          		return 0;
    548          		
    549          }
    550           
    551           
    552           
    553           
    554           
    555          #if      0  
    556          void	WriteI2C(Int16U ComponentAddress,Int8U	SubAddress,Int8U	*FM,Int8U	I2Clen)
    557          {
    558          	Int8U		len;
    559            I2C_GenerateSTART(I2C1, ENABLE); /* Send START condition */
    560            while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));//while((((u32)(I2C1->SR2) << 16) | (u32)(I2C1->SR1) & 0x00FFFFBF) != I2C_EVENT_MASTER_MODE_SELECT); 
    561            I2C_Send7bitAddress(I2C1, ComponentAddress, I2C_Direction_Transmitter);//发送方向 
    562            while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));/* EV6 */  /* Test on EV6 and clear it */   
    563            I2C_SendData(I2C1, SubAddress); /* Send the RTC Internal address 0 */    
    564            while(! I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));/* EV8 *//* Test on EV8 and clear it */
    565          
    566            for(len=0;len<I2Clen;++len)
    567            {  	
    568            	I2C_SendData(I2C1, *FM);  
    569            	while(! I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
    570          	}
    571            I2C_GenerateSTOP(I2C1, ENABLE);
    572          }
    573          
    574           void	ReadI2C(Int16U ComponentAddress,Int16U	SubAddress,Int8U	*FM,Int8U	I2Clen)
    575          {
    576          	Int8U		len;
    577          
    578            I2C_AcknowledgeConfig(I2C1,ENABLE); /* Enable I2C1 acknowledgement if it is already disabled by other function */  
    579            I2C_GenerateSTART(I2C1, ENABLE);
    580            while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));  /* EV5 */
    581            I2C_Send7bitAddress(I2C1,ComponentAddress,I2C_Direction_Transmitter);  
    582            asm("nop");
    583            while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)); /* EV6 */ /* Test on I2C1 EV6 and clear it */
    584            asm("nop");
    585            
    586            if(ComponentAddress==0xa0)
    587            	{
    588            		I2C_SendData(I2C1,SubAddress);
    589            		while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
    590            		I2C_GenerateSTART(I2C1, ENABLE);
    591            		while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));
    592            		I2C_Send7bitAddress(I2C1,ComponentAddress+1,I2C_Direction_Receiver);  
    593            		while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));
    594                          while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED)); 
    595            	}
    596            
    597            for(len=0;len<I2Clen;++len)//++FM)
    598            {
    599            	/* EV7 */*FM=
    600              I2C_ReceiveData(I2C1);
    601              I2C_AcknowledgeConfig(I2C1, ENABLE);
    602              while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED));  
    603            }
    604          
    605              I2C_AcknowledgeConfig(I2C1, DISABLE);
    606              I2C_GenerateSTOP(I2C1, ENABLE);
    607              
    608          }   
    609          #endif  
    610          
    611          
    612          
    613          
    614          
    615          	
    616          	
    617          

   Maximum stack usage in bytes:

     Function      .cstack
     --------      -------
     GPIO_InOut        24
     InitYear          16
     RDBYT             16
     RDNBYT            32
     ReadFM24C04       48
     ReadYear           8
     Read_SHT          32
     SHTA_ack          16
     START_SHT          8
     Test_error         0
     WRBYT             16
     WRNBYT            40
     WriteFM24C04      48
     WriteYear          8
     Write_SHT         24
     account_RH         0
     account_Temp       0
     cack               8
     crc8               8
     mack               8
     mnack              8
     read_SHT_data      8
     sta                8
     stop               8
     swapcrc            8


   Section sizes:

     Function/Label Bytes
     -------------- -----
     FM_TAB           24
     GPIO_InOut       36
     START_SHT       196
     SHTA_ack        128
     Write_SHT       160
     Read_SHT        454
     crc8             48
     swapcrc          56
     account_Temp     40
     account_RH       68
     Test_error       34
     read_SHT_data   252
     Timecounter       1
     sta              76
     stop             76
     mack             72
     mnack            72
     cack            112
     WRBYT           104
     RDBYT           136
     WRNBYT          152
     RDNBYT          208
     ReadYear         18
     WriteYear        18
     InitYear         48
     ReadFM24C04     252
     WriteFM24C04    182

 
     1 byte  in section .bss
    24 bytes in section .data
 2 998 bytes in section .text
 
 2 998 bytes of CODE memory
    25 bytes of DATA memory

Errors: none
Warnings: none

⌨️ 快捷键说明

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