• slider image 442
  • slider image 483
  • slider image 484
  • slider image 485
  • slider image 486
  • slider image 487
  • slider image 488
  • slider image 491
:::

論壇索引


Board index » All Posts (edut)




Re: I2C問題
#1
新會員
新會員


再請問

由master寫入資料slave時,slave接收到資料或是位址時的ack是由PIC硬體自動產生還是需要在slave設定才會產生ack呢?

發表於: 2007/2/27 15:44
頂部


I2C問題
#2
新會員
新會員


我使用16f877A與876A做I2C通訊

877A為master,876A為slave

maste呼叫slave時,slave的中斷有反應,不過ack總是1,請問是哪邊出了問題

使用20MHZ震盪器
=========以下為CODE==================
MASTER

void interrupt intrpt(void)
{
if(TMR0IF==1) //1 ms
{
TMR0IF=0;
TMR0=217;
t_count++;
if(t_count%100==0)iic_flag=1;
if(t_count%500==0) //0.5sec
{
RD0=1;
}
if(t_count>=1000) //1 sec
{
RD0=0;
t_count=0;
}
}
}
//----------------------------------------------------------
void main(void)
{
unsigned char sum=0,i=0,*temp1;
PORTB=0x00;
TRISD=0x00;
TRISB=0x00;
Initial_timer0();
Initial_I2C();
PEIE=1; //周邊中斷致能位元
GIE=1; //全域中斷致能位元 on
while(1)
{
if(iic_flag)
{
int i=0;
iic_flag=0;
I2C_start();
for(i=0;i<=3;i++)
{
if(I2C_address(0x10,0)==0)
{
if(I2C_write(I2C_BUFFER[0]))break;
if(I2C_write(I2C_BUFFER[1]))break;
break;
}
}
I2C_stop();
iic_flag=0;
}
}
}
//----------------------------------------------------------
void Initial_I2C(void)
{
TRISC3=1;
TRISC4=1;
SSPSTAT=0x80;
SSPCON=0x38;
SSPCON2=0x00;
SSPADD=49; //100khz
SSPIE=0;
}
//----------------------------------------------------
bit I2C_write(unsigned char data)
{
SSPBUF=data;
while(STAT_BF||STAT_RW);
I2C_wait();
return ACKSTAT;
}
//----------------------------------------------------
bit I2C_address(unsigned char address,char io)
{
switch (io)
{
case 1:
address=(address&0xfe)+1;
break;
case 0:
address=address&0xfe;
break;
}
SSPBUF=address;
while(STAT_BF || STAT_RW);
I2C_wait();
return ACKSTAT;
}
//-------------------------------------------------------
void I2C_stop(void)
{
PEN=1;
I2C_wait();
}
//--------------------------------------------------------
void I2C_start(void)
{
SEN=1;
I2C_wait();
}
//-----------------------------------------------------
void I2C_wait(void)
{
while(!SSPIF);
SSPIF=0;
}

====================================
SLAVE
void interrupt intrpt(void)
{
if(SSPIF==1)
{
SSPIF=0;
iic_flag=1;
}
}
//-------------------------------------------------------------------------
void main(void)
{
TRISC0=0;
Initial_I2C();
PEIE=1; //周邊中斷致能位元
GIE=1; //全域中斷致能位元 on
while(1)
{
if(iic_flag)
{
unsigned char cmd=0;
iic_flag=0;
cmd=SSPSTAT&0x2d;
switch (cmd)
{
case 0x0c: //資料讀取
iic_count=0;
iic_dataR(iic_count);
iic_count++;
break;
case 0x2c:
iic_dataR(iic_count);
iic_count++;
break;
case 0x09: //資料寫入
iic_count=0;
break;
case 0x29:
iic_dataW(iic_count);
iic_count++;
break;
}

}

}
}
//---------------------------------------------------------------------------
void Initial_I2C(void)
{
TRISC3=1;
TRISC4=1;
SSPSTAT=0x80;
SSPCON=0x36;
SSPCON2=0x00;
SSPADD=0x20;
SSPIF=0;
SSPIE=1;
SSPEN=1;
}
//---------------------------------------------------------------------------
void iic_dataR(unsigned char data_count)
{
CKP=0;
SSPBUF=I2C_BUFFER[data_count];
while(!STAT_BF);
CKP=1;
}
//----------------------------------------------------------------------
void iic_dataW(unsigned char data_count)
{
CKP=1;
I2C_BUFFER[data_count]=SSPBUF;
}

發表於: 2007/2/26 0:15
頂部


Re: 16F88無法燒錄
#3
新會員
新會員


感謝版主幫忙

那目前的情況以LEAPER48是無法解決 MCLR Disable的問題囉?


發表於: 2006/12/19 13:30
頂部


16F88無法燒錄
#4
新會員
新會員


請問16F88再燒錄時會有設定造成無法重複燒錄嗎?

我使用LEAPER48燒錄器
編譯器為HI-tech C

以下為功能設定
__CONFIG(INTIO&WDTDIS&MCLRDIS&LVPDIS&BORDIS&UNPROTECT);
__CONFIG(FCMDIS&IESODIS);


是否有設定是會造成無法重複燒錄或是燒錄失敗呢?

發表於: 2006/12/18 22:36
頂部






:::

Microchip連結

https://www.facebook.com/microchiptechnologytaiwan/
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=13
https://mu.microchip.com/page/tmu
http://elearning.microchip.com.tw/modules/tad_link/index.php?cate_sn=1
https://page.microchip.com/APAC-PrefCenters-TW.html
http://www.microchip.com/
http://www.microchip.com/treelink
http://www.microchipdirect.com/
http://www.microchip.com.cn/newcommunity/index.php?m=Video&a=index&id=103
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=2
http://www.microchip.com.tw/Data_CD/eLearning/index.html
http://www.microchip.com.tw/RTC/RTC_DVD/
https://www.microchip.com/development-tools/
https://www.youtube.com/user/MicrochipTechnology
[ more... ]

教育訓練中心

!開發工具購買
辦法說明 [業界客戶] [教育單位]
----------------------------------
!校園樣品申請
辦法說明 [教師資格] [學生資格]
----------------------------------