AT24C02读写和显示.docVIP

  • 6
  • 0
  • 约4.91万字
  • 约 9页
  • 2017-08-22 发布于河南
  • 举报
AT24C02读写和显示

#include reg51.h #include intrins.h //包含有函数_nop_()的头文件 #define uchar unsigned char #define uint unsigned int #define out P2 //发送缓冲区的首地址 sbit scl=P1^1; sbit sda=P1^0; sbit key1=P3^2; sbit key2=P3^3; uchar data mem[4]_at_ 0x55; //发送缓冲区的首地址 uchar mem[4]={0x41,0x42,0x43,0xaa}; //欲发送的数据数组 uchar data rec_mem[4] _at_ 0x60 ; //接收缓冲区的首地址 void start(void); //起始信号函数 void stop(void); //终止信号函数 void sack(void); //发送应答信号函数 bit rack(void); //接收应答信号函数 void ackn(void); //发送无应答信号函数 void send_byte(uchar); //发送一个字节函数 uchar rec_byte(void); //接收一个字节函数 void write(void); //写一组数据函数 void read(void); //读一组数据函数 void delay4us(void); //延时4μs void main(void) //主函数 { EA=1;EX0=1;EX1=1; //总中断开,外中断0与外中断0允许中断 while(1); } void ext0()interrupt 0 //外中断0中断函数 { write(); //调用写数据函数 } void ext1()interrupt 2 //外中断1中断函数 { read(); //调用读数据函数 } void read(void) //读数据函数 { uchar i; bit f; start(); //起始函数 send_byte(0xa0); //发从机的地址 f=rack(); //接收应答 if(!f) { start(); //起始信号 send_byte(0xa0); f=rack(); send_byte(0x00); //设置要读取从器件的片内地址 f=rack(); if(!f) { start(); send_byte(0xa1); f=rack(); if(!f) { for(i=0;i3;i++) { rec_mem[i]=rec_byte(); sack(); } rec_mem[3]=rec_byte();ackn(); } } } stop();out=rec_mem[3];while(!key2); } void write(void) //写数据函数 { uchar i; bit f; start(); send_byte(0xa0); f=rack(); if(!f){ send_byte(0x00); f=rack(); if(!f){ for(i=0;i4;i++) { send_byte(mem[i]); f=rack(); if(f)break; } } } stop();out=0xc3;while(!key1); } void start(void) //起始信号 { scl=1; sda=1; delay4us(); sda=0; delay4us(); scl=0; } void stop(void) //终止信号 { scl=0; sda=0; delay4us(); scl=1; delay4us(); sda=1; delay5us(); sda=0; } bit rack(void) //接收一个应答位 { bit flag; scl=1; delay4us(); flag=sda; scl=0; return(flag); } void sack(void) //发送接收应答位 { sda=0; delay4us(); scl=1; delay4us(); scl=0; delay4us(); sda=1; delay4us(); } void ackn(void) //发送非接收应答位 { sda=1; delay4us(); scl=1;

文档评论(0)

1亿VIP精品文档

相关文档