一個51單片機驅動的12位精度A/DMCP3204,網上資料比較少,自己編寫的源碼,Proteus中有原理圖,能正確仿真出雙路采集信號。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
QQ截圖20190615230140.png (28.26 KB, 下載次數: 94)
下載附件
2019-6-15 23:02 上傳
單片機源程序如下:
- #include<myc51.h>
- #include<1602.h>
- sbit clk = P1^4; // clock signel
- sbit dout = P1^5; // data get out
- sbit din = P1^6 ; // data put in
- sbit cs = P1^7; // cs selt
- void delay50ms(uint t)
- {
- uint j;
- for(t;t>0;t--)
- for(j=6245;j>0;j--);
- }
- sint getdata(uchar ch) //ch=0xe0 選擇通道CH0; ch=0xe8 選擇通道CH1;ch=0xf0 選擇通道CH2;ch=0xf8 選擇通道CH3;
- {
- sint hd=0x00,ld=0x00,dat=0x00,t;
-
- //uchar ch=0xF8; //1 11 0 ;0 000
- cs=1;
- cs=0;
-
- clk=1;
- for(t=0;t<6;t++)
- {
- clk=0;//delay1us;
- if((0x80&ch)==0x80)
- din=1;//dIN=1
- else
- din=0;//dIN=0
-
- ch<<=1;
- clk=1;//delay1us;
- }
- for(t=0;t<13;t++)
- {
- clk=0;
- hd<<=1;
- clk=1;
- delay1us;delay1us;delay1us;
- hd|=dout;
- delay1us;delay1us;delay1us;
- }
- cs=1;
- return hd;
- }
- void main()
- {
- sint data_wendu,data_yanwu;
- float outdat_wendu,outdat_yanwu;
-
-
- start1602();
- delay50ms(10);
-
- goto_xy(0,0);
- printf("w:");
- goto_xy(0,1);
- printf("Y:");
- delay50ms(10);
- while(1)
- {
- // delay50ms(10);
- // delay50ms(10);
-
- data_wendu=getdata(0xe0); //ch=0xe0 選擇通道CH0; ch=0xe8 選擇通道CH1;ch=0xf0 選擇通道CH2;ch=0xf8 選擇通道CH3;
- outdat_wendu=((float)data_wendu/4095)*5;
-
- delay50ms(1);
-
- data_yanwu=getdata(0xe8);
- outdat_yanwu=((float)data_yanwu/4095)*5;
- delay50ms(1);
- goto_xy(4,0);
- printd(data_wendu);
- goto_xy(10,0);
- printdf(outdat_wendu);
- goto_xy(4,1);
- printd(data_yanwu);
- goto_xy(10,1);
- printdf(outdat_yanwu);
- }
- }
復制代碼
所有資料51hei提供下載:
MCP3204.rar
(71.58 KB, 下載次數: 173)
2019-6-15 23:03 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|