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

📄 main._c

📁 atmega16 iic(twi)主从机通信 测试通过
💻 _C
字号:
#include"iom16v.h"
#include <iom16v.h>
#include<macros.h>
#include"UART.h"
#include"DELAY.h"

#define  uchar  unsigned char
#define  STATUS  (TWSR&0xf8)
#define  SLA_W    0x32
#define  SLA_R    0x33
#define  SLAVER_ADDRESS     0x32
#define  START              0x08
#define  RE_START           0x10
#define  MT_SLA_WRITE_ACK   0x18
#define  MT_SLA_READ_ACK    0x40 
#define  MT_DATA_ACK        0x28
#define  MT_READ_ACK        0x58  
    
void Start(void)
{
 TWCR=(1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
 while(!(TWCR&(1<<TWINT)));
}
void Stop(void)
{
 TWCR=(1<<TWINT)|(1<<TWSTO)|(1<<TWEN);
}
void Load(uchar i)
{
 TWDR=i;
 TWCR=(1<<TWINT)|(1<<TWEN);
 while(!(TWCR&(1<<TWINT))); 

}

void Get(unsigned char *d)
{
 TWCR=(1<<TWINT)|(1<<TWEN);
 while(!(TWCR&(1<<TWINT)));
 *d= TWDR;
}
void ERROR(uchar state)
{Stop();
}

/*写一个字节data,成功则返回1,否则
  返回0*/
uchar SendByte(uchar data)
{
   //启动I2C
   Start();
  if(STATUS!=START) //{ERROR(STATUS);return 0;}
                      puts("Start ERRor");
   //发送从机地址(写),等待回应, 错误检测
   Load(0);
   if(STATUS!=MT_SLA_WRITE_ACK) //{ERROR(STATUS);return 0;}
                      puts("SLA_W RROR");
   /*
   //发送EEPROM地址,等待回应,错误检测
   Load(addr);
   if(STATUS!=MT_DATA_ACK) {ERROR(STATUS);return 0;}
   */
   //发送数据,等待回应,错误检测
   Load(data);
   if(STATUS!=MT_DATA_ACK) //{ERROR(STATUS);return 0;}
                         puts("Date Error");
   Stop();
   return 1;//发送成功,返回1;
   
}

void Init_Io(void)
{
 DDRC&=~((1<<PC0)&(1<<PC1)&(1<<PC2));  
 PORTC|= (1<<PC0)|(1<<PC1)|(1<<PC2);
 TWCR=(1<<TWEA)|(1<<TWEN); //主机模式,使能TWI
 TWBR=32;//波特率 100K   8M晶振
}
void main()
{
  uchar temp;
  Init_Io();
  uart_init();
//  puts("串口工作");
  while(1)
  for(temp=0;temp<10;temp++)
  {
    SendByte(temp+0x30);  
	Delay_nms(10);
   }
  
}

⌨️ 快捷键说明

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