压缩包中包括多个驱动程序的原代码

源代码在线查看: 24c01的iic 读写的c51程序.txt

软件大小: 124 K
上传用户: stzwsy
关键词: 驱动程序 代码
下载地址: 免注册下载 普通下载 VIP

相关代码

				24C01的IIC 读写的c51程序 
				发表时间:2005-12-13 8:40:53   浏览人数:19 
				/*------------------------------------------------------------------------------
				为了安全起见,程序中很多NOP是冗余的,希望读者能进一步精简,但必须经过验证。
				        Atmel 24C01 比较特殊,为简约型.
				        51晶振为11.0592MHz
				〖参考〗http://www.c51bbs.com
				〖版本〗V1.00A Build 0918
				-----------------------------------------------------------------------------*/
				
				
				#include "reg51.h"
				#include "intrins.h"
				
				sbit SCL= P1^5;
				sbit SDA= P1^4;
				
				
				
				delay()
				{
				unsigned int i=1200;
				while(i--);
				}
				/*----------------------------------------------------------------------------
				调用方式:write_8bit(unsigned char ch)  ﹫2001/03/23
				函数说明:内函数,私有,用户不直接调用。
				-------------------------------------------------------------------------------
				*/
				void  write_8bit(unsigned char ch)
				{
				    unsigned char i=8;
				    SCL=0;
				    _nop_();_nop_();_nop_();_nop_();_nop_();
				    while (i--)
				    {
				        SDA=(bit)(ch&0x80);
				        _nop_();_nop_();_nop_();_nop_();_nop_();
				        ch				        SCL=1;
				        _nop_();_nop_();_nop_();_nop_();_nop_();
				        SCL=0;
				        _nop_();_nop_();_nop_();_nop_();_nop_();
				    }
				    _nop_();_nop_();_nop_();_nop_();_nop_();
				    _nop_();_nop_();_nop_();_nop_();_nop_();
				}
				
				/*------------------------------------------------------------------------------
				调用方式:void ACK(void)  ﹫2001/03/23
				函数说明:内函数,私有,用户不直接调用。
				-------------------------------------------------------------------------------
				*/
				void ACK(void)
				{
				   unsigned char time_1;
				    SDA=1;
				    SCL=0;
				    _nop_();_nop_();_nop_();_nop_();_nop_();
				    SCL=1;
				    time_1=5;
				    while(SDA) {if (!time_1) break;} //ACK
				    SCL=0;
				    _nop_();_nop_();_nop_();_nop_();_nop_();
				}
				
				
				unsigned char ReadIIC_24C01(unsigned char address)
				{
				      unsigned char ddata=0;
				      unsigned char i=8;
				
				    SCL=1;
				    _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();   //Tsu:STA
				    SDA=0;
				    _nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); //Thd:STA
				    SCL=0;             //START
				
				    write_8bit( (address				    ACK();
				
				    while (i--)
				    {
				        SDA=1;
				        ddata				        SCL=0;_nop_();_nop_();_nop_();_nop_();_nop_();SCL=1;
				        if (SDA) ddata|=0x01;
				    }
				
				    SCL=0;_nop_();SCL=1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
				    SDA=0;_nop_();SCL=1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
				        SDA=1;   //STOP
				    delay();
				    return ddata;
				
				}
				
				
				void WriteIIC_24C01(unsigned char address,unsigned char ddata)
				{
				
				    SCL=1;
				    _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();   //Tsu:STA
				    SDA=0;
				    _nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); //Thd:STA
				    SCL=0;             //START
				
				    write_8bit( (address				24C256,page不起作用
				    ACK();
				    write_8bit(ddata);      //发送数据
				    ACK();
				    SDA=0;
				        _nop_();SCL=1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
				        SDA=1;   //STOP
				        delay();
				}
				
				 
				 
							

相关资源