文档详情

基于proteus的c51单片机的DA数模转换双通道例程.doc

发布:2017-02-04约5.32千字共9页下载文档
文本预览下载声明
基于proteus的c51单片机adc0832D/A数模转换双通道例程 #include reg51.h #include intrins.h #define uint unsigned int #define uchar unsigned char #define delay4us(){_nop_();_nop_();_nop_();_nop_();} sbit ADCS =P3^0; //ADC0832 chip seclect sbit ADDI =P3^2; //ADC0832 data in sbit ADDO =P3^2; //ADC0832 data out sbit ADCLK =P3^1; //ADC0832 clock signal void delay(); //延时函数 sbit RS=P1^0; sbit RW=P1^1; sbit E=P1^2; //一位整数,两位小数的数字电压显示缓冲 void DelayMS(uint ms) { uchar t; while(ms--) for(t=0;t120;t++); } //-------------------------------------------------- //定义四线制接口 //------------------------------------------------- sbit clk=P1^3; sbit cs=P1^4; //片选 sbit din=P1^5; //数据入口 sbit k1=P2^0; sbit k2=P2^1; //sbit dout = P3^5; //数据出口 //--------------------------------------------------- //主函数 uchar readad[2]; void DA_Conver(uint DA_Value); void DAC(); //AD转换 void Adc0832( uchar channel); //****************************// /************ 读ADC0832函数 ************/ //采集并返回 void Adc0832( uchar channel) { uchar i=0; uchar j; uint dat=0; uchar ndat=0; if(channel==0)channel=2; if(channel==1)channel=3; ADDI=1; _nop_(); _nop_(); ADCS=0;//拉低CS端 _nop_(); _nop_(); ADCLK=1;//拉高CLK端 _nop_(); _nop_(); ADCLK=0;//拉低CLK端,形成下降沿1 _nop_(); _nop_(); ADCLK=1;//拉高CLK端 ADDI=channel0x1; _nop_(); _nop_(); ADCLK=0;//拉低CLK端,形成下降沿2 _nop_(); _nop_(); ADCLK=1;//拉高CLK端 ADDI=(channel1)0x1; _nop_(); _nop_(); ADCLK=0;//拉低CLK端,形成下降沿3 ADDI=1;//控制命令结束 _nop_(); _nop_(); dat=0; for(i=0;i8;i++) { dat|=ADDO;//收数据 ADCLK=1; _nop_(); _nop_(); ADCLK=0;//形成一次时钟脉冲 _nop_(); _nop_(); dat=1; if(i==7)dat|=ADDO; } for(i=0;i8;i++) { j=0; j=j|ADDO;//收数据 ADCLK=1; _nop_(); _nop_(); ADCLK=0;//形成一次时钟脉冲 _nop_(); _nop_(); j=j7; ndat=ndat|j; if(i7)ndat=1; } ADCS=1;//拉高CS端 ADCLK=0;//拉低CLK端
显示全部
相似文档