ATMEGA16读写iic24c02C语言程序测试通过
- 格式:docx
- 大小:20.37 KB
- 文档页数:13
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) {