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