會員登陸
帳號:

密碼:

記住我



忘記密碼?

現在註冊!
網站導航
最新下載
訪問統計 (自2012/5/3)


正在流覽:   1 名訪客





24C02問題
高級會員
註冊日期:
2007/03/24 09:21
所屬群組:
註冊會員
文章: 74
等級: 7; EXP: 53
HP : 0 / 163
MP : 24 / 5488
離線
目前使用PIC16F877A 寫一個每按壓一次SW,藉由24C02寫入並讀出數值(由7-SEG顯示),但目前按壓無任何動作,
單純寫入24C02數值並由7-SEG讀出數值都是oK的,但是寫入後要再讀出,並由7-SEG顯示卻無法動作,繁複看了好幾次一直找不到問題點,是否有前輩可以幫忙指導一下

#include <pic.h> //覃蚚PIC16F87XA等え儂腔芛恅璃
//#include "877_I2C.H"
//#include "24C02.H"

void delay(int num);
void I2C_Init(void);
void I2C_Start(void);
void I2C_RptStart(void);
void I2C_Stop(void);
int I2C_Read(unsigned char ack);
unsigned char I2C_Write(unsigned char I2CWriteData);
void write_ext_eeprom(unsigned char address,unsigned char data);
unsigned char read_ext_eeprom(unsigned char address);


__CONFIG(HS & LVPDIS & WDTDIS);



const unsigned char LED[]=
{
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90 //0~9
};

//---------------------------------------
void main() //翋滲杅,等え儂羲儂綴憩岆植涴跺滲杅羲宎堍俴
{
unsigned char Reset_Count=0;
unsigned char EEP_Address=0x04;

TRISD=0X00; //7-SEG Output
PORTD=0Xff; //7-SEG low
TRISB1=1; //RB1 input
TRISE=0x00; //control 7-SEG
PORTE=0b11111101; //RE1 low

I2C_Init();
//Reset_Count=read_ext_eeprom(EEP_Address);
//Reset_Count++;
PORTD=LED[Reset_Count];
// write_ext_eeprom(EEP_Address,Reset_Count);
while(1)
{


if(RB1==0)
{
delay(20);
if(RB1==0)
{
Reset_Count++;
if(Reset_Count>=10)
{
Reset_Count=0;
}
write_ext_eeprom(EEP_Address,Reset_Count);

Reset_Count=read_ext_eeprom(EEP_Address);
PORTD=LED[Reset_Count];


}
}

}
}

//----------------I2C----------------------------------
void I2C_Init()
{
TRISC3=1; //SCL set input
TRISC4=1; //SCL set input

SSPCON=0x38; //設定I2C模式
SSPCON2=0x00;
SSPADD=0x09; //主頻4M ,傳輸率:100K

CKE=0;
SMP=1;
SSPIF=0;
BCLIF=0;
}

void I2C_Start()
{
SEN=1;
while(SEN);
}

void I2C_RptStart()
{
RSEN=1;
while(RSEN);
}

void I2C_Stop()
{
PEN=1;
while(PEN);
}

int I2C_Read(unsigned char ack)
{
unsigned char I2CReadData;

RCEN=1;
while(RCEN);
I2CReadData=SSPBUF;
if(ack)
{
ACKDT=0;
}
else
{
ACKDT=1;
}

ACKEN=1;
while(ACKEN);
return(I2CReadData);
}

unsigned char I2C_Write(unsigned char I2CWriteData)
{
SSPBUF=I2CWriteData;
while(RW);
return(!ACKSTAT);
}


//----------------24c02--------------------------------
void write_ext_eeprom(unsigned char address, unsigned char data)
{
I2C_Start();
I2C_Write(0b10100000); //A2~A0:000, R/W=0
I2C_Write(address);
I2C_Write(data);
I2C_Stop();
delay(150); //數值沒寫無法正常跑
}

unsigned char read_ext_eeprom(unsigned char address)
{
unsigned char data;

I2C_Start();
I2C_Write(0b10100000); //A2~A0:000, R/W=0
I2C_Write(address);
I2C_RptStart();
I2C_Write(0b10100001); //A2~A0:000, R/W=1
data=I2C_Read(0);
I2C_Stop();
return(data);
}

//----------------delay--------------------------------
void delay(int num)
{
int aa,bb;
aa=num;
while(aa)
{
bb=num;
while(bb)
{bb--;}
aa--;
}
}

4月05日 00:52:08
轉換PDF檔 列印


Re: 24C02問題
資深會員
註冊日期:
2004/08/16 13:52
來自 台灣台南
所屬群組:
註冊會員
文章: 773
等級: 25; EXP: 9
HP : 0 / 602
MP : 257 / 24819
離線
當RB1==0 20ms之後Reset_Count++,
當RB1持續==0 Reset_Count會一直++下去,
EEPROM也會一直被寫入...,

應該要改偵測到一次按鍵動作,做一次寫入和更新顯示.

4月09日 09:57:43
轉換PDF檔 列印


Re: 24C02問題
高級會員
註冊日期:
2007/03/24 09:21
所屬群組:
註冊會員
文章: 74
等級: 7; EXP: 53
HP : 0 / 163
MP : 24 / 5488
離線
我的按鍵是有壓才是0, delay(20)是防止機械彈跳使用

4月09日 23:47:28
轉換PDF檔 列印






無法在此發表文章
可以在此觀看文章
無法回覆文章
無法編輯自己的文章
無法刪除自己的文章
無法發起投票調查
無法在此投票
無法上傳附加檔案
無法不經審核直接發表文章

[進階搜尋]


搜尋
Microchip連結

網頁捷徑
2018 Winter Elite 報名
教育訓練
其它網站連結
電話: 02-25000405
產品技術問題產品技術支援專線:0800-717718 台北02-25088600 新竹03-5778366 Ext. 8600 高雄07-2137830 MicrochipDIRECT 專線: 07-2137830
Powered by XOOPS © 2001-2012 The XOOPS Project