📄 twi_nbyte.c
字号:
/*
8m
*/
#include <iom16v.h>
#include <macros.h>
unsigned char a[16],b[16];
void a_init(void)
{
unsigned char i;
for(i=0;i<16;i++)
a[i]=i+1;
}
void delay_1ms(void)
{ unsigned int i;
for(i=1142;i>0;i--)
;
}
/*****nms延时程序*****/
void delay_nms(unsigned int n)
{
unsigned int i;
for(i=n;i>0;i--)
delay_1ms();
}
void port_init(void)
{
DDRA=0X00;
PORTA=0XFF;
DDRB=0Xff;
PORTB=0XFF;
DDRD=0XFF;
PORTD=0XFF;
DDRC=0XFF;
PORTC=0XFF;
}
void usart_init(void)
{
UCSRB=0X00;
UCSRA=0X20;
UCSRC=0X86;
UBRR=0X33;//FOSC=8M
UCSRB=0X98;
}
void usart_txc(unsigned char td)
{
CLI();
while(!(UCSRA&(1<<UDRE)))
;
UDR=td;
}
void twi_init(void)
{
TWCR=0X00;
TWBR=0X0F;
TWSR=0X03;
TWCR=(TWEN<<1);
}
void start(void)
{
TWCR=(1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
while(!(TWCR&(1<<TWINT)))
;
}
void send_data(unsigned char data)
{
TWDR=data;
TWCR=(1<<TWINT)|(1<<TWEN);
while(!(TWCR&(1<<TWINT)))
;
}
void stop(void)
{
TWCR=(1<<TWINT)|(1<<TWSTO)|(1<<TWEN);
}
unsigned char at24c02_write(unsigned char add,unsigned char * d,unsigned char n)
{
unsigned char i;
for(i=0;i<n;i++)
{ start();//发送开始
if((TWSR&0XF8)!=0x08)
return 1;
send_data(0xa0);//发送地址
if((TWSR&0XF8)!=0x18)
return 1;
send_data(add++);
if((TWSR&0XF8)!=0x28)
return 1;
send_data(*(d));
if((TWSR&0XF8)!=0x28)
return 1;
stop();
delay_nms(3);
usart_txc(*(d));
d++;
}
return 0;
}
unsigned char at24c02_read(unsigned char add,unsigned char *add1,unsigned char n)
{
unsigned char i;
for(i=0;i<n;i++)
{
start();
if((TWSR&0XF8)!=0x08)
return 1;
send_data(0xa0);
if((TWSR&0XF8)!=0x18)
return 1;
send_data(add);
if((TWSR&0XF8)!=0x28)
return 1;
start();
if((TWSR&0XF8)!=0x10)
return 1;
send_data(0xa1);
if((TWSR&0XF8)!=0x40)
return 1;
TWCR=(1<<TWINT)|(1<<TWEN);
while(!(TWCR&(1<<TWINT)));
if((TWSR&0xf8)!=0x58)
return 1;
add1[i]=TWDR;
delay_nms(1);
usart_txc(add1[i]);
stop();
add++;
delay_nms(1);
}
return 0;
}
void main(void)
{
unsigned char add=0,i;
port_init();
twi_init();
usart_init();
a_init();
at24c02_write(add,a,16);
add=0x00;
at24c02_read(add,b,16);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -