No.38545 作者:zhengjl 邮件:zj_zj_zjl@hotmail.com ID:13914 登陆:3次 文章数:17篇 最后登陆IP:61.164.128.197 最后登陆:2003/9/15 18:51:44 注册:2003/7/26 21:16:31 财富:150 发帖时间:2003/7/28 15:48:08 发贴者IP:61.164.129.201 标题:zhengjl:一个24c01/02的c51语言驱动程序 摘要:No.38545一个24c01/02的c51语言驱动程序 #include <reg51.h> #include <intrins.h> #include <51port.c> #define uchar unsigned char #define uint unsigned int sbit P3_4=0xb4; sbit P3_5=0xb5; #define SDA P34 #define SCL P35 /*ganerater start status*/ void iic_start(void){ SDA=1; SCL=1; _nop_();_nop_(); SDA=0; _nop_();_nop_(); SCL=0; _nop_(); } /*ganerater stop status*/ void iic_stop(void){ SCL=0; SDA=0; _nop_();_nop_(); SCL=1; _nop_();_nop_(); SDA=1; _nop_(); } /*chack NO ACK*/ void iic_send_noack(void){ SDA=1; _nop_(); SCL=1; _nop_();_nop_(); SCL=0; _nop_(); } /*send ACK*/ void iic_send_ack(void){ SDA=0; _nop_(); SCL=1; _nop_();_nop_(); SCL=0; _nop_(); SDA=1; } /*ACK check*/ bit iic_check_ack(void){ bit flag=0; SDA=1; _nop_();_nop_(); SCL=1; _nop_();_nop_(); _nop_();_nop_(); if(SDA==0) flag=1; else flag=0; SCL=0; _nop_(); return flag; } /*byte send*/ void iic_byte_out(uchar trans){ uchar i=8,j=0; j=trans; while(i--){ SCL=0; if(((j&0x80)!=0)) SDA=1; else SDA=0; j=j < <1; SCL=1; _nop_();_nop_(); } SCL=0; _nop_(); SDA=1; } /*byte recev*/ uchar iic_byte_in(void){ uchar i=8,buff; while(i--){ SDA=1; buff=buff < <1; SCL=1; _nop_();_nop_(); if(SDA) buff++; SCL=0; _nop_();_nop_(); } return buff; } /*waiting for device write cycle*/ bit waiting_w(uchar addr){ uchar comm=0xa0,i; uchar delay_coun=100; bit flag=0; addr=(addr < <1)&0x0f; comm|=addr; for(i=0; i <delay_coun; i++){ iic_start(); iic_byte_out(comm); if(iic_check_ack()){ flag=1; break; } } iic_stop(); return flag; } /*multibytes write*/ /*The slav is device address,stor_add is EEPROM int ......
>>返回讨论的主题
|