標(biāo)題:
單總線通訊接口的單片機(jī)源碼
[打印本頁(yè)]
作者:
tendy
時(shí)間:
2018-3-30 12:05
標(biāo)題:
單總線通訊接口的單片機(jī)源碼
/*********單總線通信脈沖時(shí)間定義**********/
#define H_LVL 5
#define L_LVL_0 5
#define L_LVL_1 10
#define S_H 10 //起始位高電平,起始位用于將期間從休眠中喚醒并做好接收數(shù)據(jù)的準(zhǔn)備,暫沒使用
#define S_L 5 //起始位低電平
#define START_T0() {TMR0=158;T0IF=0;T0IE=1;}
#define STOP_T0() {T0IE=0;}
/*
函數(shù)功能:數(shù)據(jù)位發(fā)送,數(shù)據(jù)位0或1都包括固定寬度的高電平脈沖和不同寬度的低電平
說(shuō)明:
*/
void SendBit(uchar databit)
{
timeout=H_LVL;
START_T0();
ORDER=1; //信號(hào)線高電平
while(timeout);
STOP_T0(); //禁止T0中斷
if(databit)
timeout=L_LVL_1; //數(shù)據(jù)位1
else
timeout=L_LVL_0; //數(shù)據(jù)位0
START_T0();
ORDER=0; //信號(hào)線低電平
while(timeout);
STOP_T0();
}
/*發(fā)送結(jié)束脈沖,用于標(biāo)記最后一個(gè)數(shù)據(jù)位的脈沖寬度,*/
void SendEnd()
{
timeout=5;
START_T0();
ORDER=1; //信號(hào)線高電平
while(timeout);
STOP_T0(); //禁止T0中斷
timeout=20;
START_T0();
ORDER=0;
while(timeout);
STOP_T0();
}
void SendStart()
{
timeout=S_H;
START_T0();
ORDER=1; //信號(hào)線高電平
while(timeout);
STOP_T0(); //禁止T0中斷
timeout=S_L;
START_T0();
ORDER=0;
while(timeout);
STOP_T0();
}
/*
函數(shù)功能:數(shù)據(jù)字節(jié)發(fā)送,低位在前
參數(shù)說(shuō)明:dat 要發(fā)送的數(shù)據(jù)字節(jié)
*/
void SendData(uchar dat)
{
uchar i,j;
CCP1IE=0; //關(guān)閉捕捉中斷
se_ccp1_int++;
TMR2IE=0;
// SendStart(); //起始位高電平,起始位用于將期間從休眠中喚醒并做好接收數(shù)據(jù)的準(zhǔn)備
for(i=0;i<8;i++)
{
j=(dat>>i)&0x01;
SendBit(j);
}
SendEnd();
CTR_LED=1;
delay(200);
CTR_LED=0;
se_ccp1_int--;
if(se_ccp1_int==0)
{
CCP1IF=0;
CCP1IE=1; //開捕捉中斷
}
TMR2IE=1;
}
復(fù)制代碼
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1