?? smbus_s_r.c
字號:
///////////從機(jī)接收調(diào)試程序////////////////
////////Smbus_S_R.c/////////////////////////////////
#include "smbus.h"
xdata uchar aa[7];//用于存放接收數(shù)據(jù)
void config(){
//看門狗禁止
WDTCN = 0x07;
WDTCN = 0xDE;
WDTCN = 0xAD;
SFRPAGE = 0x0F;
//交叉開關(guān)配置,SMBUS配置到P0.0和P0.1上
XBR0 = 0x01;
XBR1 = 0x00;
XBR2 = 0x40;
XBR3 = 0x01;
//管腳輸出配置,P0口為開漏輸出,其中P0.6接上拉電阻,P0為數(shù)字輸入口
SFRPAGE = 0x0F;
P0MDOUT = 0x00;
P1MDIN = 0xFF;
//晶振配置,采用內(nèi)部晶振8分頻
SFRPAGE = 0x0F;
CLKSEL = 0x00;
OSCXCN = 0x00;
OSCICN = 0x84;
}
void main(){
uchar t=0;
char i;
config();
smbus_cfg(0x44,0xf1,0x6f);
/*
smbus使能,AA=1,SCL高電平和低電平超時禁止
smbus時鐘頻率為100khz,若是從機(jī),此配置不影響總線時鐘,總線時鐘由主機(jī)決定
從機(jī)地址為0x6e/2,即為55(十進(jìn)制),廣播地址使能
*/
EA=1;//打開全局中斷
k=0;
//smbusMasterStart();//將發(fā)送起始位代碼屏蔽,則該節(jié)點(diǎn)處于從機(jī)狀態(tài)
while(1){
if(t!=k){
t=k;
/*
當(dāng)一次中斷處理完畢,k自增一次,從而t!=k
讀者可在此設(shè)中斷,查看SI為0時SMB0STA的值,并比較與SI為1時的區(qū)別
*/
}
}
}
void int0() interrupt 0{
}
void int1() interrupt 1{
}
void int2() interrupt 2{
}
void int3() interrupt 3{
}
void int4() interrupt 4{
}
void int5() interrupt 5{
}
void int6() interrupt 6{
}
void smbusInt() interrupt 7{//從機(jī)smbus接收中斷,此中斷只考慮關(guān)鍵狀態(tài)處理,以便調(diào)試
SFRPAGE=0x00;//此句可省略,在此設(shè)斷點(diǎn)觀察寄存器變化
if(SMB0STA==0x60){//從機(jī)地址被尋址,ACK應(yīng)答發(fā)送
k=0;
}
if(SMB0STA==0x80){//從機(jī)數(shù)據(jù)成功接收,ACK應(yīng)答發(fā)送
aa[k]=SMB0DAT;
}
k++;
SI=0;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -