- #include<reg52.h>
- #include<intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit CLK=P2^0;
- sbit CS=P2^1;
- sbit DI=P2^2;
- sbit DO=P2^3;
- void delay(uint z); //函数声明
- void delay(uint z)
- {
- uint i = 0;
- uint j = 0;
- for(i=0;i<z;i++)
- for(j=0;j<114;j++);
- }
- uchar read_AD()
- {
- uchar i,out1,out2;
- out1=0;
- out2=0;
- CS=0;CLK=0;DI=0;
- DI=1;_nop_(); _nop_();//开始信号
- // DO=0;
- // delay(2);//三个脉冲
- CLK=1; _nop_(); _nop_();//start位,起始位开始工作
- CLK=0;DI=1;_nop_(); _nop_();//第一个脉冲结束
- CLK=1;_nop_(); _nop_();//第二脉冲到//SGL位
- CLK=0;DI=1;_nop_(); _nop_();
-
- CLK=1;_nop_(); _nop_();//第三个脉冲//ODD位
- CLK=0;DI=0;_nop_(); _nop_();
- CLK=1;_nop_(); _nop_();//第四个脉冲到//SELECT1位
- CLK=0;DI=0;_nop_(); _nop_();
-
- CLK=1;_nop_(); _nop_();//第五个脉冲到//SELECT0位
- CLK=0;DI=0;_nop_(); _nop_();//第一个下降沿,准备数据转换
-
- DI=0;//DI变为高阻状态,输入无效
- DO=1;//DO脱离高阻态,准备输出
- _nop_(); _nop_();
- for(i=0;i<8;i++)//转换8位二进制数
- {
- CLK=1;_nop_();_nop_();
- CLK=0;_nop_();_nop_(); //下降沿开始数据转换
- out1=out1<<1|DO;
- }
- for(i=0;i<8;i++)//转换8位二进制数
- {
- out2=out2<<((uchar)(DO)<<i);
- CLK=1;_nop_();_nop_();
- CLK=0;_nop_();_nop_();//下降沿开始数据转换
- }
- CS=1;//结束一个采集周期
- return (out1==out2)?out1:0;
- }
- void main()
- {
- while(1)
- {
- P1=read_AD();
- }
- }
复制代码 |