久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
關(guān)于24c256的一些問題
[打印本頁]
作者:
zxc2216843
時間:
2018-6-28 09:29
標題:
關(guān)于24c256的一些問題
最近在調(diào)試24c256,出了點問題老是找不出毛病,就是對24C256寫數(shù)據(jù)的時候,前面有可能用得好好的,后面就突然數(shù)據(jù)開始錯位了
正常讀出來的數(shù)據(jù)應該是這樣的:1803041000030028130161
但是出現(xiàn)問題后讀出來的數(shù)據(jù)都是:
0627110546002812016100
0627110712000004000000
0627150724000004000000
(我是每次寫入16字節(jié)的數(shù)據(jù),前11個字節(jié)是有效,后5個是補零)
我每次只寫16個字節(jié)的數(shù)據(jù),寫入的間隔時間也不短,出問題是應該是地址錯位了。
但是程序里面是沒有問題的。所以想請問大神們,有什么原因可能導致我出現(xiàn)這個問題,謝謝
下面我貼下我的程序,請幫忙看下
這是main里使用的:
IIC_Transmit(0xA0,Wddr, &Savedata[0], 16);//往24C256寫入數(shù)據(jù)
Delayms(400);
下面是24c256的子程序:
**************************************************************************************************************************/
/*
********************************************************
函數(shù)名稱:void AT24C256_Init(void)
函數(shù)功能:初始化IO口
********************************************************
*/
void AT24C256_Init(void)
{
DDRE |= 0xC0;
PORTE |= 0xC0;
}
/*
********************************************************
函數(shù)名稱:static void IIC_delay(void)
函數(shù)功能:延時
********************************************************
*/
static void IIC_delay(void)
{
asm("nop");
}
/*
********************************************************
函數(shù)名稱:static void IIC_delay(void)
函數(shù)功能:主機發(fā)送開始信號
********************************************************
*/
static void IIC_Start(void)
{
MODE_OUT;
SDA_H;
asm("nop");
SCL_H;
asm("nop");
asm("nop");
asm("nop");
SDA_L;
asm("nop");
asm("nop");
asm("nop");
asm("nop");
SCL_L;
asm("nop");
asm("nop");
}
/*
********************************************************
函數(shù)名稱:static void IIC_Stop(void)
函數(shù)功能:主機發(fā)送結(jié)束信號
********************************************************
*/
static void IIC_Stop(void)
{
MODE_OUT;
SCL_L;
asm("nop");
asm("nop");
SDA_L;
asm("nop");
asm("nop");
SCL_H;
asm("nop");
asm("nop");
asm("nop");
asm("nop");
SDA_H;
asm("nop");
asm("nop");
asm("nop");
asm("nop");
}
/*
********************************************************
函數(shù)名稱: static unsigned char IIC_ACK_Check(void)
函數(shù)功能: 主機成功發(fā)送一個字節(jié)數(shù)據(jù)后,AT24C256會發(fā)送一
應答信號。
返回值 : 1 沒有應答信號,即從機沒有成功接收到數(shù)據(jù)
0 有應答信號,即從機已接收到了數(shù)據(jù)
********************************************************
*/
static unsigned char IIC_ACK_Check(void)
{
unsigned char Bitmun;
MODE_IN;
SCL_L;
asm("nop");
asm("nop");
SDA_H;
asm("nop");
asm("nop");
SCL_H;
asm("nop");
asm("nop");
asm("nop");
asm("nop");
Bitmun = PINE;
SCL_L;
asm("nop");
asm("nop");
Bitmun =(Bitmun >> 7)&0x01;
return Bitmun;
}
/*
********************************************************
函數(shù)名稱: static void IIC_NO_ACK(void)
函數(shù)功能: 主機發(fā)送一個字節(jié)數(shù)據(jù)后,
不會檢測從機的應答信號
********************************************************
*/
static void IIC_NO_ACK(void)
{
MODE_OUT;
SCL_L;
asm("nop");
asm("nop");
SDA_H;
asm("nop");
asm("nop");
SCL_H;
asm("nop");
asm("nop");
asm("nop");
asm("nop");
SCL_L;
asm("nop");
asm("nop");
}
/*
********************************************************
函數(shù)名稱: static void IIC_ACK_Creat(void)
函數(shù)功能: 主機向從機請求一個字節(jié)數(shù)據(jù)后,
發(fā)送應答信號,告訴從機繼續(xù)發(fā)送數(shù)據(jù)。(連讀讀模式)
********************************************************
*/
static void IIC_ACK_Creat(void)
{
MODE_OUT;
SCL_L;
asm("nop");
asm("nop");
SDA_L;
asm("nop");
asm("nop");
SCL_H;
asm("nop");
asm("nop");
asm("nop");
asm("nop");
SCL_L;
asm("nop");
asm("nop");
}
/*
********************************************************
函數(shù)名稱: static void IIC_Send8Bit(unsigned char SendByte)
函數(shù)功能: 主機發(fā)送一個字節(jié)數(shù)據(jù)
********************************************************
*/
static void IIC_Send8Bit(unsigned char SendByte)
{
char counter;
MODE_OUT;
SDA_L;
asm("nop");
asm("nop");
asm("nop");
for (counter = 8; counter >0; counter--)
{
SCL_L;
asm("nop");
asm("nop");
if (SendByte & 0x80)
{
SDA_H;
asm("nop");
}
else
{
SDA_L;
asm("nop");
asm("nop");
}
SCL_H;
asm("nop");
SendByte = SendByte << 1;
}
SCL_L;
asm("nop");
asm("nop");
}
/*
********************************************************
函數(shù)名稱: static unsigned char IIC_Receive8Bit(void)
函數(shù)功能: 主機接收一個字節(jié)數(shù)據(jù)
********************************************************
*/
static unsigned char IIC_Receive8Bit(void)
{
char counter;
unsigned char ReceiveByte=0;
unsigned char IOstatus=0;
MODE_IN;
SCL_L;
asm("nop");
asm("nop");
SDA_H;
asm("nop");
asm("nop");
for (counter = 8; counter > 0; counter--)
{
SCL_L;
asm("nop");
asm("nop");
SCL_H;
asm("nop");
asm("nop");
IOstatus = PINE;
ReceiveByte = ReceiveByte<<1;
ReceiveByte |= (IOstatus >>7)& 0x01;
}
SCL_L;
return ReceiveByte;
}
/*
********************************************************
函數(shù)名稱: char IIC_Transmit(unsigned char lcv_device,unsigned int liv_addr,unsigned char *lcv_pdata, char counter)
函數(shù)功能: 主機往指定地址發(fā)送數(shù)據(jù)
unsigned char lcv_device 從機地址
unsigned int liv_addr 從機內(nèi)部存儲地址
unsigned char *lcv_pdata 發(fā)送數(shù)據(jù)緩存區(qū)
char counter 發(fā)送多少個數(shù)據(jù)
返回值 : 1 寫入數(shù)據(jù)失敗
0 寫入成功
注: AT24C256在連續(xù)讀寫過程中,會自動增加地址,但是不會自動跳轉(zhuǎn)到下一頁,
所以要注意連續(xù)讀寫過程中不要超過頁的存儲空間,避免最先存儲的數(shù)據(jù)被覆蓋從而導致
數(shù)據(jù)丟失。
********************************************************
*/
char IIC_Transmit(unsigned char lcv_device,unsigned int liv_addr,unsigned char *lcv_pdata, char counter)
{
IIC_Start();
/* 發(fā)送從機地址 */
IIC_Send8Bit(lcv_device);
if ( IIC_ACK_Check() ) //調(diào)用函數(shù)char IIC_ACK_Check(void),沒有從機回應則結(jié)束本次發(fā)送。
{
IIC_Stop();
return FAIL;
}
/* 發(fā)送內(nèi)存地址*/
IIC_Send8Bit((unsigned char)(liv_addr >> 8) & 0x0FF); //高八位
if ( IIC_ACK_Check()) //調(diào)用函數(shù)char IIC_ACK_Check(void),沒有從機回應則結(jié)束本次發(fā)送。
{
IIC_Stop();
return FAIL;
}
IIC_Send8Bit((unsigned char)((liv_addr)&0x0FF)); //低八位
if ( IIC_ACK_Check()) //調(diào)用函數(shù)char IIC_ACK_Check(void),沒有從機回應則結(jié)束本次發(fā)送。
{
IIC_Stop();
return FAIL;
}
/* 發(fā)送數(shù)據(jù) */
for(;counter > 0;counter-- )
{
IIC_Send8Bit(*lcv_pdata);
if ( IIC_ACK_Check()) //調(diào)用函數(shù)char IIC_ACK_Check(void),沒有從機回應則結(jié)束本次發(fā)送。
{
IIC_Stop();
return FAIL;
}
lcv_pdata++;
}
IIC_Stop();
return SUCCEED;
}
/*
********************************************************
函數(shù)名稱 : char IIC_Receive(unsigned char lcv_device, unsigned int liv_addr, unsigned char *lcv_pdata, char counter)
函數(shù)功能 : 主機接收數(shù)據(jù)
unsigned char lcv_device 從機地址
unsigned int liv_addr 從機內(nèi)部存儲地址
unsigned char *lcv_pdata 發(fā)送數(shù)據(jù)緩存區(qū)
char counter 發(fā)送多少個數(shù)據(jù)
返回值 : 1 讀數(shù)據(jù)失敗
0 讀成功
注: AT24C256在連續(xù)讀寫過程中,會自動增加地址,但是不會自動跳轉(zhuǎn)到下一頁,
所以要注意連續(xù)讀寫過程中不要超過頁的存儲空間,避免最先存儲的數(shù)據(jù)被覆蓋從而導致
數(shù)據(jù)丟失。
讀模式: 需要先配置為寫模式,然后才能改為讀模式
********************************************************
*/
char IIC_Receive(unsigned char lcv_device, unsigned int liv_addr, unsigned char *lcv_pdata, char counter)
{
/* 先將從機配置為寫模式 */
IIC_Start();
/* 發(fā)送從機地址 */
IIC_Send8Bit(lcv_device);
if ( IIC_ACK_Check())//調(diào)用函數(shù)char IIC_ACK_Check(void),沒有從機回應則結(jié)束本次發(fā)送。
{
IIC_Stop();
return FAIL;
}
/* 發(fā)送內(nèi)存地址 */
IIC_Send8Bit((unsigned char)((liv_addr >> 8)&0x0FF));
if ( IIC_ACK_Check()) //調(diào)用函數(shù)char IIC_ACK_Check(void),沒有從機回應則結(jié)束本次發(fā)送。
{
IIC_Stop();
return FAIL;
}
IIC_Send8Bit((unsigned char)((liv_addr)&0x0FF));
if ( IIC_ACK_Check()) //調(diào)用函數(shù)char IIC_ACK_Check(void),沒有從機回應則結(jié)束本次發(fā)送。
{
IIC_Stop();
return FAIL;
}
/* 然后將從機配置為寫模式 */
IIC_Start();
/* 發(fā)送從機地址 */
IIC_Send8Bit(lcv_device+1);
if ( IIC_ACK_Check()) ////調(diào)用函數(shù)char IIC_ACK_Check(void),沒有從機回應則結(jié)束本次發(fā)送。
{
IIC_Stop();
return FAIL;
}
for( ; counter > 0; )
{
*lcv_pdata = IIC_Receive8Bit();
counter--;
if ( counter >0)
{
IIC_ACK_Creat();
lcv_pdata++ ;
}
}
IIC_NO_ACK();
IIC_Stop();
return SUCCEED;
}
作者:
zxc2216843
時間:
2018-6-29 09:15
能不能有大佬幫幫忙
作者:
xhaity
時間:
2018-10-27 13:29
return SUCCEED;之前加個5ms的延時;另外,24lc256 連續(xù)只能寫1頁,不能跨頁寫,比如:地址0-15為一頁,地址16-31為一頁;地址只能是0開始;或者地址16開始連續(xù)寫16字節(jié);不能是地址1-15,17-31開始連續(xù)寫16個字節(jié)的;
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
久草视频在线播放
|
午夜欧美一区二区三区在线播放
|
精品久久久久久亚洲精品
|
免费欧美
|
91精品国产欧美一区二区成人
|
久草视频观看
|
免费国产视频
|
玖草资源
|
久久亚洲欧美日韩精品专区
|
色婷婷精品国产一区二区三区
|
毛片网站在线观看
|
日韩欧美中文字幕在线观看
|
国内精品视频在线观看
|
免费毛片www com cn
|
99久久久国产精品
|
欧美一级精品片在线看
|
日本免费一区二区三区
|
国产精品欧美精品日韩精品
|
国产一区二区在线视频
|
91九色视频在线
|
国产成人短视频在线观看
|
精品国产18久久久久久二百
|
天天操网
|
日韩欧美国产精品综合嫩v 一区中文字幕
|
欧美日韩国产三级
|
欧美午夜影院
|
一区影院
|
午夜免费视频
|
h片在线免费观看
|
蜜臀久久
|
欧美精品一区在线发布
|
色在线免费
|
欧美国产日韩一区二区三区
|
国户精品久久久久久久久久久不卡
|
天天操网
|
欧美一区二区大片
|
久久亚洲欧美日韩精品专区
|
伊人焦久影院
|
狠狠干影院
|
五月天天丁香婷婷在线中
|
日韩精品一区二区三区
|