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

📄 twi_master.c

📁 AVR单片机的T_TO_TWI通讯方式
💻 C
字号:
/*****************************************************************
一包数据得发送三个字节:从机地址,RAM地址,和数据

采用中断方式发送出去
******************************************************************/
#include <iom8v.h>
#include <macros.h>
#include "master.h"

unsigned char Twi_Data[3];
unsigned char Twi_State;
unsigned char Mem_Data, Mem_Adr, Mem_Write_Flag;


void twi_init(void)
{
 Twi_State       = TWI_NONE;
 
 TWCR= 0X00; //disable twi
 TWBR= 0x20; //set bit rate
 TWSR= 0x00; //set prescale
 TWAR= DEVICE_ADR; //set slave address
 TWCR= 0x45; //enable twi 置位TWEA,TWEN TWIE
}
#pragma interrupt_handler TWI_ISR:iv_TWI
void TWI_ISR(void)
{ 
   switch (TestAck())
    {   
	    //主控发送
		case START:                  //0x08
		    {              
              Write8Bit(TWi_Data[0]|0x00); //发送从机地址且设为写
			  Twi_State = TWI_MEM_ADR;
   			  break;
			}					 
        case MT_SLA_ACK:            //0x18
		    {
              if(Twi_State == TWI_MEM_ADR)
			    {
				  Write8Bit(TWi_Data[1]);//发送RAM地址
				  Twi_State = TWI_MEM_DATA;
                }	
   			  break;
		    }
		case MT_SLA_NOACK:          //0x20
		    {
			  Stop();
			  Twi_State = TWI_NONE;
			  break;
			}
        case MT_DATA_ACK:           //0x28
		    {
              if(Twi_State == TWI_MEM_DATA)	
                {
				  Write8Bit(TWi_Data[2]);  //发送数据
				  Twi_State = TWI_NONE;
                }	  
   			  break;
			}
		case MT_DATA_NOACK:         //0x30
		    {
			  Stop();
			  Twi_State = TWI_NONE;
			  break;
			}
		case SR_STOP_RESTART :      //0x10
		    {
              Write8Bit(TWi_Data[0]|0x01); //发送从机地址且设为读
			  TWI_STATE=TWI_STOP;						
              break;
			}
		
		
		//主控接收
		case MR_SLA_ACK:           //0x40
		    {
			  
              break; 
			}
		case MR_SLA_NOACK:         //0x48
		    {
			  
			  break;
			}
		case MR_DATA_ACK:          //0x50
		    {
			  
			  break;
			}
		case MR_DATA_NOACK:       //0x58
		    {
			  TWI_STATE=TWI_STOP;   
              Stop();
   			  break;
			}				 					 													    					
        default:
		    {
              TWI_STATE=TWI_STOP;
              Stop();//从机模式恢复TWI响应能力
            }             				      
    }
}












⌨️ 快捷键说明

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