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

📄 iic.lst

📁 myson的MTV332的DEMO程序 主要功能有菜单的设计和无线遥控以及视频参数的调节
💻 LST
📖 第 1 页 / 共 5 页
字号:
 127          void IIC_Write(BYTE id,BYTE addr,BYTE *databuf,WORD number)
 128          {
 129   1      	int i;
 130   1      	BYTE count = 0;
 131   1      
 132   1      do
 133   1      {
 134   2      	count++;
 135   2      	
 136   2      // Stop
 137   2      	byMTV_IIC_CTR = 0x00;
 138   2      	byMTV_IIC_CTR = 0x02;
 139   2      Short_Delay(20);
 140   2      
 141   2      	byMTV_IIC_INTFLG = 0x00;	
 142   2      
 143   2      // Slave ID	
 144   2      	byMTV_IIC_MBUF = id; 
 145   2      
 146   2      // Start
 147   2      	byMTV_IIC_CTR = 0x00;
 148   2      	byMTV_IIC_CTR = 0x01;
 149   2      
 150   2      	Wait_IIC_Ack();
 151   2      
 152   2      if (bNoAck)
 153   2      	continue;
 154   2      
 155   2      // Address
 156   2      	byMTV_IIC_MBUF = addr;
 157   2      
 158   2      	Wait_IIC_Ack();
 159   2      
 160   2      if (bNoAck)
 161   2      	continue;
 162   2      
 163   2      // data
 164   2      	for(i = 0; i < number; i++)
 165   2      	{
 166   3      		byMTV_IIC_MBUF = databuf[i];
 167   3      		
 168   3      		Wait_IIC_Ack();
 169   3      		if(bNoAck)
 170   3      			break;
C51 COMPILER V6.10  IIC                                                                    12/02/2004 10:58:52 PAGE 18  

 171   3      	}
 172   2      
 173   2      if (bNoAck)
 174   2      	continue;
 175   2      
 176   2      // Stop
 177   2      	byMTV_IIC_CTR = 0x00;
 178   2      	byMTV_IIC_CTR = 0x02; 
 179   2      }
 180   1      //while(bNoAck);
 181   1      while(bNoAck && count < IICRetry);
 182   1      
 183   1      }
 184          
 185          //--------------------------------------------------------
 186          //	IIC Read address
 187          //--------------------------------------------------------
 188          void IIC_Read(BYTE id,BYTE addr,BYTE *databuf,WORD number)
 189          {
 190   1      	int i;
 191   1      	BYTE count = 0;
 192   1      
 193   1      do
 194   1      {
 195   2      	count++;
 196   2      	
 197   2      // Stop
 198   2      	byMTV_IIC_CTR = 0x00;
 199   2      	byMTV_IIC_CTR = 0x02; 
 200   2      Short_Delay(20);
 201   2      
 202   2      	byMTV_IIC_INTFLG = 0x00;	
 203   2      
 204   2      // Slave ID	
 205   2      	byMTV_IIC_MBUF = id; 
 206   2      
 207   2      // Start
 208   2      	byMTV_IIC_CTR = 0x00;
 209   2      	byMTV_IIC_CTR = 0x01;
 210   2      	
 211   2      	Wait_IIC_Ack();
 212   2      
 213   2      if (bNoAck)
 214   2      	continue;
 215   2      
 216   2      // Address
 217   2      	byMTV_IIC_MBUF = addr;
 218   2      
 219   2      	Wait_IIC_Ack();
 220   2      
 221   2      if (bNoAck)
 222   2      	continue;
 223   2      
 224   2      // Stop		
 225   2      	byMTV_IIC_CTR = 0;
 226   2      	byMTV_IIC_CTR = 0x2;
 227   2      Short_Delay(20);
 228   2      
 229   2      // Slave ID 
 230   2      	byMTV_IIC_MBUF = id | 0x01;
 231   2      
 232   2      // Start
C51 COMPILER V6.10  IIC                                                                    12/02/2004 10:58:52 PAGE 19  

 233   2      	byMTV_IIC_CTR = 0x0;
 234   2      	byMTV_IIC_CTR = 0x1;
 235   2      	
 236   2      	Wait_IIC_Ack();
 237   2      
 238   2      if (bNoAck)
 239   2      	continue;
 240   2      
 241   2      // useless data
 242   2      	databuf[0] = byMTV_IIC_MBUF;	
 243   2      
 244   2      // data
 245   2      	for(i = 0; i < number-1; i++)
 246   2      	{
 247   3      		Wait_IIC_Ack();
 248   3      		if(bNoAck)
 249   3      			break;
 250   3      		 databuf[i] = byMTV_IIC_MBUF; 
 251   3      	}
 252   2      
 253   2      if(bNoAck)
 254   2      	continue;
 255   2      		
 256   2      	byMTV_IIC_CTR = 0x05;
 257   2      
 258   2      	Wait_IIC_Ack();
 259   2      
 260   2      if (bNoAck)
 261   2      	continue;
 262   2      
 263   2      	databuf[i] = byMTV_IIC_MBUF; 
 264   2      
 265   2      // Stop
 266   2      	byMTV_IIC_CTR = 0x00;
 267   2      	byMTV_IIC_CTR = 0x02; 
 268   2      }
 269   1      while(bNoAck && count < IICRetry);
 270   1      
 271   1      }
 272          #endif
 273          
 274          
 275          #ifdef IIC_SW_2526
              //--------------------------------------------------------
              void IIC_Start(void)
              {
              	ResSDA;
              	ResSCL;
              }
              
              void IIC_Stop(void)
              {
              	SetSDA;
              	ResSDA;
              	SetSCL;
              	while(!GetSCL);
              	SetSDA;
              }
              
              void Initial_I2C(void)
              {
              	EEP_Wait = 0;
C51 COMPILER V6.10  IIC                                                                    12/02/2004 10:58:52 PAGE 20  

              
              	IIC_Stop();
              }
              
              void IIC_Send1Byte(BYTE senddata)
              {
              	BYTE i;
              
              	for(i = 0; i < 8; i++)
              	{
              		if(senddata & 0x80)
              			SetSDA;
              		else
              			ResSDA;
              		
              		senddata <<=1;		
              
              		SetSCL;
                            while(!GetSCL);
              		ResSCL;	  
              	}
              	
              	ResSCL;
              	SetSDA;
              	SetSCL;
                     while(!GetSCL);
              
              	if (GetSDA)
              		bNoAck = 1;
              	else
              		bNoAck = 0;
              	ResSCL;
              
              }
              
              BYTE IIC_Read1Byte(BIT noack)
              {
              	BYTE i,readdata=0;
              
              	for(i = 0; i < 8; i++)
              	{
              		readdata <<= 1;
              
              		SetSDA;
              		SetSCL;
              		while(!GetSCL);
              		
              		if(GetSDA)
              			readdata |= 0x01;
              		ResSCL;
              	}
              
              	
              	if(noack)
              		SetSDA;
              	else
              		ResSDA;
              
              	SetSCL;
                    while(!GetSCL);
              	ResSCL;
              
C51 COMPILER V6.10  IIC                                                                    12/02/2004 10:58:52 PAGE 21  

              	return readdata;
              
              }
              
              //--------------------------------------------------------
              //	IIC write address
              //--------------------------------------------------------
              void IICSW_Write(BYTE id,BYTE addr,BYTE *databuf,WORD number)
              {
              	int i;
              	BYTE count = 0;
              	
              do
              {
              	count++;
              	
              // Stop
              	IIC_Stop();
              Short_Delay(20);
              
              // Start
              	IIC_Start();
              
              // Slave ID	
              	IIC_Send1Byte(id); 
              
              if (bNoAck)
              	continue;
              
              // Address
              	IIC_Send1Byte(addr);
              
              if (bNoAck)
              	continue;
              
              // data
              	for(i = 0; i < number; i++)
              	{
              		IIC_Send1Byte(databuf[i]);
              		if(bNoAck)
              			break;
              	}
              
              if (bNoAck)
              	continue;
              
              // Stop
              	IIC_Stop();
              }
              while(bNoAck && count < 10);
              
              }
              
              //--------------------------------------------------------
              //	IIC Read address
              //--------------------------------------------------------
              void IICSW_Read(BYTE id,BYTE addr,BYTE *databuf,WORD number)
              {
              	int i;
              	BYTE count = 0;
              	
              do
C51 COMPILER V6.10  IIC                                                                    12/02/2004 10:58:52 PAGE 22  

              {
              	count++;
              	
              // Stop
              	IIC_Stop();
              Short_Delay(20);
              
              // Start
              	IIC_Start();
              
              // Slave ID	
              	IIC_Send1Byte(id); 
              
              if (bNoAck)
              	continue;
              
              // Address
              	IIC_Send1Byte(addr);
              
              if (bNoAck)
              	continue;
              
              //	IIC_Stop();
              //       Short_Delay(20);
                 SetSDA;
                 SetSCL;
                 while(!GetSCL);
              //   IIC_Start();
              // Start
              	IIC_Start();
              
              // Slave ID 
              	IIC_Send1Byte(id | 0x01);
              
              if (bNoAck)
              	continue;
              
              // data
              	for(i = 0; i < number-1; i++)
              	{
              		databuf[i] = IIC_Read1Byte(0);
              	}
              
              	databuf[i] = IIC_Read1Byte(1);
              
              // Stop

⌨️ 快捷键说明

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