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

📄 interrupt.#1

📁 本程序运行于C8051F330
💻 #1
字号:
#include "C8051F330.H"
#include "IR_Rx_Tx.h"
  
extern unsigned char DataAvailByte;
extern int IR_Key;
extern char IRsampData[40];
extern char SampNo;
extern char SampNoData;
extern BOOL bAddrRecv;
extern unsigned char* pSMB_DATA_OUT; 
extern unsigned char SMB_DATA_LEN;

unsigned char i_Tx;

//-----------------------------------------------------------------------------
// SMBus Interrupt
//-----------------------------------------------------------------------------
void Interrupt_SMBus(void) interrupt 7
{
   switch (SMB0CN & 0xF0)                    // Status vector
   {
      //static char i;
	  static unsigned char AddrTemp;

      // Detect a START condition and a slave address.
      case SMBus_DetectSTA:
	     STA = 0;
		 ACK = 0;
		 AddrTemp = 0;
		 AddrTemp = SMB0DAT;
		 if((SMB0DAT&0xFE)==0xE0)
		 {
		    ACK = 1;
			SMB0DAT = 0x55;
		 }
         if((SMB0DAT&0xFE)==0xE2)              // The address received is correct
		 {
			ACK = 1;
			SMB0DAT = DataAvailByte;           // transmitt DataAvailByte
         }
		 if((SMB0DAT&0xFE)==0xE4)
		 {
		    ACK = 1;
			i_Tx = 0;
			SMB0DAT = *pSMB_DATA_OUT;
			pSMB_DATA_OUT++;
			i_Tx++;
		 }

         break;
       
	  
	  // A slave byte was received
	  case SMBus_RxData:


 		 break;
			   
	  
	  // A slave byte was transmitted and Validate the ACK  
      case SMBus_TxData:
	     if(ACK)
		 {
		    if(AddrTemp==SMBus_FlagAddress)
			   ;

		    else if(AddrTemp==SMBus_DataAddress)
			{
			   if(i_Tx<SMB_DATA_LEN)
			   {
			      SMB0DAT = *pSMB_DATA_OUT;
		      	  pSMB_DATA_OUT++;
			      i_Tx++;
			   }
			   if(i_Tx==SMB_DATA_LEN)
			   {
			      DataAvailByte = FALSE;
				  pSMB_DATA_OUT = IRsampData;
			      i_Tx = 0;
			   }
			}
		 }
		 else
		 {
			if(i_Tx==SMB_DATA_LEN)
			{
			   DataAvailByte = FALSE;
			}
			pSMB_DATA_OUT = IRsampData;
			i_Tx = 0;
		 }
		 
		 break;

      
      // Detect a STOP condition ---- No action need to do
	  case SMBus_TxSTO:
	     DataAvailByte = FALSE;
		 break;

	  case SMBus_RxSTO:

         STO = 0;                            // STO must be cleared by software when
                                             // a STOP is detected as a slave

		 break;

      default:
         SMB0CN &= ~0x40;                       // Reset communication
         SMB0CN |= 0x40;
		 ACK = 0;
		 STA = 0;
		 STO = 1;
	     break;

   }

   SI = 0;
}





⌨️ 快捷键说明

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