91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

資源簡介

本人親自寫的I2C讀寫24C256和24C02程序,程序直接可以,根據硬件修改下即可。

資源截圖

代碼片段和文件信息

#include?//包含文件
#include?
#include?
#include
#include“i2c.h“
#define?Byte?unsigned?char//宏定義
#define?uint?unsigned?int
#define?uchar?unsigned?char
#define?device_16bit_Waddress?0xa0//器件寫數據地址24c256
#define?device_16bit_Raddress?0xa1//器件讀數據地址24c256
#define?device_8bit_Waddress?0xa2???????//定義PCF8563的寫數據地址
#define?device_8bit_Raddress?0xa3???????//定義PCF8563的讀數據地址
sbit?SCL=?P3^5;
sbit?SDA?=P3^4;
/*sbit?SCL=?P1^5;
sbit?SDA?=P1^6;*/
/*延時子程序大概10ms左右*/
void?delay()
{
????uint?ij;
????for(i=0;i<10;i++)
????{
????????for(j=0;j<1000;j++)
????????{
????????????;
????????}
????}
}

/*開始I2C數據發送或接收*/
void?Start_I2C()//在時鐘線為高,數據線從高電平跳到低電平時,開始傳送
{?
???SDA=1;???????????//數據先
???_nop_();?????????//延時一段時間
???_nop_();
???SCL=1;???????????//時鐘線為高等數據線下降才開始
???_nop_();
???_nop_();
???_nop_();
???_nop_();
???SDA=0;???????????//數據線下降拉啟動了
???_nop_();
???_nop_();
???_nop_();
???_nop_();
???_nop_();
???SCL=0;???????????
}

/*結束數據傳送*/
void?Stop_I2C()
{??
???SDA=0;????????????//時鐘線為高時數據線上升沿為結束信號
???_nop_();
???_nop_();???
???SCL=1;
???_nop_();
???_nop_();
???_nop_();
???_nop_();
???SDA=1;
???_nop_();
???_nop_();
???_nop_();
???_nop_();
???SCL=0;
}

/*發送字節子程序入口參數為要發送的數據無返回變量分8位進行發送*/
void?Sent_Byte(Byte?Data)??????
{
????Byte?BitCount;???????????????????????//定義發送的位數
????for(BitCount=0;BitCount<8;BitCount++)
???????{
?????????_nop_();
?????????_nop_();
?????????if((Data<???????????else?SDA=0;
???????????_nop_();
???_nop_();
???????????SCL=1;??????????????//置位SCL通知從器件開始接收數據SCL上升沿發數據
???????????_nop_();????????????//SCL為1數據線電平不能變
???????????_nop_();
???????????_nop_();
???????????_nop_();
???????????SCL=0;???????????//鉗住總線,等下次接收
?}
???
}

/*應答子程序無入口參數返回值是應答位*/
bit?Ack_Check()??
{
????SDA=1;??????//先置時鐘線為高第九位數據過來會強行把數據線拉低
????_nop_();
????_nop_();
????SCL=1;
????_nop_();
????_nop_();
????_nop_();
????_nop_();
????F0=SDA;????//將數據線上的該位保存到F0中
????SCL=0;
????if(F0==1)?
return?1;//沒有應答返回1否則返回0
????else?return?0;
}

/*接收字節子函數,先接收高位再接收低位無入口參數,返回值是一個無符號型的一個8位的數*/
Byte?Rec_Byte()
{
??Byte?BitCount?RecData=0;
?????????????????????????????????
??for(BitCount=0;BitCount<8;BitCount++)
??{
?????SDA=1;???????????????????????????????//數據線先給1的話如果從器件發0給主器件
????_nop_();??????????????????????????????//SDA會拉低那主器件接收到的為0否則不拉低接收到的為1
????_nop_();??????????????????????????????//這相當釋放數據總線一樣
?????SCL=1;????????????????????????????????
?????_nop_();
?????_nop_();
?????_nop_();
?????_nop_();
?????_nop_();
?????F0=SDA;??????????//用F0來保存當前數據線上的值?????????????????????
?????SCL=0;
?????
?????if(F0)?
?????{
??????RecData=RecData<<1;
??????RecData=RecData|0x01;
?????}
??
?????else?RecData=RecData<<1;
??}
??return(RecData);
}

/*發送數據子函數,入口參數是16位的器件地址和要發送的數據,無返回值*/
Sent_Data16(uint?addressByte?Data)
{
????bit?ack_temp;????//響應寄存位
uchar?addr_Haddr_L;
addr_H=(uchar)(addre

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----

?????文件???????5471??2009-09-07?09:13??I2C讀寫24c02和24c56\DebugRel\i2c

?????文件???????3074??2009-09-07?09:13??I2C讀寫24c02和24c56\DebugRel\i2c.hex

?????文件?????????81??2009-09-07?09:13??I2C讀寫24c02和24c56\DebugRel\i2c.lnp

?????文件??????22862??2009-09-07?09:13??I2C讀寫24c02和24c56\DebugRel\i2c.M51

?????文件???????5967??2009-09-07?09:13??I2C讀寫24c02和24c56\DebugRel\i2c.obj

?????文件???????2432??2009-09-07?09:13??I2C讀寫24c02和24c56\DebugRel\Serial.obj

?????文件???????7750??2009-09-07?09:13??I2C讀寫24c02和24c56\i2c.c

?????文件????????373??2009-09-04?11:22??I2C讀寫24c02和24c56\i2c.h

?????文件????????821??2009-09-07?09:23??I2C讀寫24c02和24c56\i2c.muo

?????文件???????2428??2009-09-07?09:23??I2C讀寫24c02和24c56\i2c.xmp

?????文件???????2096??2009-09-04?11:27??I2C讀寫24c02和24c56\Serial.c

?????文件????????136??2009-09-04?11:06??I2C讀寫24c02和24c56\Serial.h

?????目錄??????????0??2009-09-07?09:13??I2C讀寫24c02和24c56\DebugRel

?????目錄??????????0??2009-09-04?11:14??I2C讀寫24c02和24c56

-----------?---------??----------?-----??----

????????????????53491????????????????????14


評論

共有 條評論