ATMEGA16读写iic24c02C语言程序测试通过

  • 格式:docx
  • 大小:20.37 KB
  • 文档页数:13

下载文档原格式

  / 13
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

ATMEGA16读写iic(24c02) C语言程序测

试通过

#include ;

#include "I2C.h"

#include "1602.h"

#include "delay.h"

/*通过AVR往IIC写数据,并通过串口把数据读出显示出来*/

//=============================================== ================

void uart_init(void)

//UART初始化

{ DDRD = 0x02;

PORTD = 0x00;

UCSRA = 0x02; /*无倍速*/

UCSRB = 0x18; /*允许接收和发送*/

UCSRC = 0x06; /*8位数据,1位停止位,无校验*/

UBRRH = 0x00;

UBRRL = 12; /*9600*/

}

//=============================================== ================

void USART_TXD(float data) //发送采用查询方式{

while( !(UCSRA & BIT(UDRE)) );

UDR=data;

while( !(UCSRA & BIT(TXC )) );

UCSRA|=BIT(TXC);

}

void main(void)

{

unsigned char i;

//LCD_init();

uart_init();//TART初始化

SEI(); //全局中断使能

while(1)

{/*

I2C_Write('n',0x00);

I2C_Write('c',0x01);

I2C_Write('e',0x02);

I2C_Write('p',0x03);

I2C_Write('u',0x04);

*/

i=I2C_Read(0x00);

//LCD_write_char(0,0,i); USART_TXD(i);

i=I2C_Read(0x01);

//LCD_write_data(i);

USART_TXD(i);

i=I2C_Read(0x02);

//LCD_write_data(i);

USART_TXD(i);

i=I2C_Read(0x03);

//LCD_write_data(i);

USART_TXD(i);

i=I2C_Read(0x04); //LCD_write_data(i);

USART_TXD(i);

}

}

/*上面上主函数部分*/

#include ;

#include "delay.h" //I2C 状态定义

//MT 主方式传输 MR 主方式接受#define START

0x08

#define RE_START

0x10

#define MT_SLA_ACK

0x18

#define MT_SLA_NOACK 0x20

#define MT_DATA_ACK

0x28

#define MT_DATA_NOACK 0x30 #define MR_SLA_ACK

0x40

#define MR_SLA_NOACK 0x48

#define MR_DATA_ACK

0x50

#define MR_DATA_NOACK 0x58

#define RD_DEVICE_ADDR 0xA1

//前4位器件固定,后三位看连线,最后1位是读写指令位

#define WD_DEVICE_ADDR 0xA0

//常用TWI操作(主模式写和读)

#define Start()

(TWCR=(1<

//启动I2C

#define Stop()

(TWCR=(1<

//停止I2C

#define Wait()

{while(!(TWCR&(1<

//等待中断发生

#define TestAck()

(TWSR&0xf8)

//观察返回状态

#define SetAck

(TWCR|=(1<

//做出ACK应答

#define SetNoAck

(TWCR&=~(1<

//做出Not Ack应答

#define Twi()

(TWCR=(1<

//启动I2C

#define Write8Bit(x)

{TWDR=(x);TWCR=(1<

//写数据到TWDR

unsigned char I2C_Write(unsigned char

Wdata,unsigned char RegAddress);

unsigned char I2C_Read(unsigned RegAddress);

/********************************************* I2C总线写一个字节

返回0:写成功

返回1:写失败

**********************************************/ unsigned char I2C_Write(unsigned char

Wdata,unsigned char RegAddress)

{