|
eeprom程序(寫0xaa到eeprom在讀出來給流水燈)為什么不論寫啥 只有一個(gè)燈亮 而且是在程序燒進(jìn)去很長時(shí)間
#include <reg52.h> #include <intrins.h> #define uchar unsigned char #define uint unsigned int #define nop() _nop_() sbit sclk=P2^0; sbit sda=P2^1; char temp; void delay(); void delay1(uint z); void init(); void start(); void stop(); void respond(); void write_byte(uchar byte); uchar read_byte(); void write_eeprom(uchar add,uchar date); uchar read_eeprom(uchar add);
void main() { init(); write_eeprom(1,0xaa); delay1(100); temp=read_eeprom(1); P0=temp; while(1); } void delay() { nop(); nop(); nop(); nop(); nop(); } void delay1(uint z) { uint x,y; for(x=z;x>0;x--) for(y=123;y>0;y--); } void init() { sclk=1; delay(); sda=1; delay(); } void start() { sda=1; delay(); sclk=1; delay(); sda=0; delay(); } void stop() { sda=0; delay(); sclk=1; delay(); sda=1; delay(); } void respond() { uchar i; sclk=1; delay(); while((sda==1)&&(i<250))i++; sclk=0; delay(); } void write_byte(uchar byte) { uint i; uchar temp; temp=byte; for(i=0;i<8;i--) { temp=temp<<1; sclk=0; delay(); sda=CY; delay(); sclk=1; delay(); } sclk=0; delay(); sda=1; delay(); } uchar read_byte() { uint i; uchar temp; temp=0; sclk=0; delay(); sda=1; delay(); for(i=0;i<8;i--) { sclk=1; if(sda==1) temp=temp|0x01; temp=temp<<1; sclk=0; delay(); } return temp; } void write_eeprom(uchar add,uchar date) { start(); write_byte(0xa0); respond(); write_byte(add); respond(); write_byte(date); respond(); stop(); } uchar read_eeprom(uchar add) { uchar date; start(); write_byte(0xa0); respond(); write_byte(add); respond(); start(); write_byte(0xa1); respond(); date=read_byte(); stop(); return date; } | |
|