DOCI 介面
DOCI™ 介面是一個在MOS零組件與任何微控制器之間的單線介面。DOCI™ 是Data Out Clock In (數據輸出時鐘輸入)的英文縮寫。.
此零組件和微控制器之間的串型數據傳輸是專門由DOCI 接腳執行。DOCI 接腳結合了時鐘輸入端以及限流輸出驅動器的功能。MOS零組件下拉DOCI接腳至VDD來表示成功的採樣。 當要讀取一個數據位元時,微控制器產成一個零到壹的轉換以及釋放DOCI線。依照數據位元值,MOS零組件會將DOCI接腳保持高的狀態或是由它的輸出驅動器將接腳拉低。 穩定時間是根據DOCI接腳的總容性負載, 通常是1µs。 微控制器會將數值進行採樣以及產成(驅動)一個新的零到壹的轉換。這個過程會一直重複直到所有的數據位元都已經時鐘輸出。第一個位元的讀取是最有意義的位元。在最後的位元被讀取後, 微控制器就會將DOCI設定成零以及釋放它,讓MOS零組件標記準備時鐘輸出下一個採樣。
當MOS零組件指示一個新的採樣就緒時,微控制器必須在讀取步驟開始前等待至少一個內部時鐘周期,此時鐘周期是由零組件的振盪器(1/FCLK)所產生
如果讀取過程被干擾超過tREP的時間並且DOCI是零的狀態,這個串型數據暫存器將會更新一個新的採樣。
這個DOCI接腳可以在微控制器上被用為干擾的功能,這樣表示數據已經就緒並可由零組件進行時鐘輸出。

採樣源代碼
以下的C函式是從M2012A以及一個PIC微控制器來讀取暫存數值(15位元) 。
//==========================================================
// 從M2012A的過濾器讀取
// DOCI是一個輸出入(IO)接腳
// DOCI_BID 是一個位元式樣,其功能是可以設定或清除處理器的輸出入墊的方向。
//==========================================================
unsigned int dpir_filt_rd(void)
{
unsigned char n;
// 在裝載前必須等待至少一個在感應器上的器件周期
NOP(); NOP(); NOP(); NOP(); NOP();
NOP(); NOP(); NOP(); NOP(); NOP();
pir_data=0;
for(n=0;n<15;n++) // 感應器擁有15位元的數據
{
DOCI=0; // 清除DOCI接腳
TRISB&=~DOCI_BID; // DOCI接腳輸出
NOP(); // 等待一個位元
DOCI=1 ; // 設定DOCI接腳
TRISB|=DOCI_BID; // DOCI接腳輸入
pir_data<<=1; // 製造空間給第一個位元
NOP(); NOP(); // 在採樣DOCI接腳之前必須等待
if(DOCI) // 測試DOCI接腳
pir_data++; // 設定 LSB
}
return pir_data; // pir_data 持有感應器的資料
}
這個暫存數值必須通過一個高通濾波器進行過濾,這樣才能從暫存數值來提取正確的數
據移動。 以下是一階高通濾波器的一個採樣。這個因子(k)需要被調整成正確的時間常
數。
unsigned int hp(unsigned int val)
{
static unsigned int sum; // 總數停留在函式裡面
unsigned int hp; // 結果
int k =512; // 阻尼系數
hp := val - sum/k;
sum+= hp;
return hp;
}