/******************************************* 程序功能:將采集的模擬量數(shù)據(jù)轉(zhuǎn)換為數(shù)字量數(shù) 據(jù), 并在P2口的流水燈上體現(xiàn)出來。 涉及芯片:TLC549 ********************************************/ #include<reg52.h> #define uint unsigned int #define uchar unsigned char sbit clock=P3^3;//時鐘線 sbit dout=P3^4;//數(shù)據(jù)輸出端 sbit cs=P3^5;//片選(低電平有效) void delay(uint t) { while(t--); } uchar read_549()//數(shù)據(jù)得采集 { uint i; uchar k=0x00;//定義一個變量k,將在dout上采集的到的數(shù)據(jù)裝進K dout=1;//該地方置不置高電平都可以,應為單片機的I/O口默認值為高點平 for(i=0;i<8;i++) { if(dout) { k++; } k=k<<1; clock=1;//高電平期間采集dout線上的數(shù)據(jù) clock=0; delay(10); } return k;//返回值 } uchar shuchu_549()//數(shù)據(jù)得讀取 { uchar date; cs=0;//片選低電平時數(shù)據(jù)有效 date=read_549();//將read_549()函數(shù)中采集到的數(shù)據(jù)付給變量date cs=1;//片選拉高,表示數(shù)據(jù)讀取完畢 delay(50); return date;//返回值 } void main() { while(1) { P2=shuchu_549(); } } /********************************************** 詳細分析TLC549芯片時序圖: 1、串行數(shù)據(jù)A7位先輸出(即最高位)A0位最后 輸出。 2、在每一次I/O clock的高電平期間DATA OUT線 就產(chǎn)生有效輸出,每出現(xiàn)一次I/O clock信號 并對8個字節(jié)數(shù)據(jù)輸出。一個周期出現(xiàn)8次 I/O clock信號并對8個字節(jié)輸出。 3、在CS變?yōu)榈碗娖胶,最高位自動置于DATA OUT 總線上。其余7位(A6~A0)在7個I/O clock下 降沿由時鐘同步輸出。B7~B0以同樣的方式跟在 其后。 4、在片選CS變?yōu)榈碗娖胶?.4微秒I/O clock才允 許跳變。 5、在片選CS變?yōu)榈碗娖胶蟮綌?shù)據(jù)線DATA OUT線上 輸出數(shù)據(jù)的時間間隔為1.2微秒; 6、只要I/O CLOCK變高就可以讀取DATA OUT線上的 數(shù)據(jù)。 **********************************************/