/******************************************* 程序功能:将采集的模拟量数据转换为数字量数 据, 并在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线上的 数据。 **********************************************/