- #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();
- }
- }
復制代碼 |