| 
 
| 本帖最后由 zhaohualiang 于 2012-8-13 16:59 编辑 
 想用51单片机控制DAC输出模拟电压,单片机选用stc11f32xe,dac选用max517,运行程序后没有电压输出,一直是0V。VEF电压为2.5v.
 
 
 下面是测试程序:
 /*****************************************************************************************/
 //DAC:MAX517   起始条件子函数
 /*****************************************************************************************/
 void DAC_Start(void)
 {
 SDA=1;
 nop();
 SCL=1;
 nop();
 SDA=0;
 nop();
 }
 /*****************************************************************************************/
 //DAC:MAX517   停止条件子函数
 /*****************************************************************************************/
 void DAC_Stop(void)
 {
 SDA=0;
 nop();
 SCL=1;
 nop();
 SDA=1;
 nop();
 }
 /*****************************************************************************************/
 //DAC:MAX517    应答子函数
 /*****************************************************************************************/
 void DAC_Ack(void)
 {
 SDA=0;
 nop();
 SCL=1;
 nop();
 SCL=0;
 }
 /*****************************************************************************************/
 //DAC:MAX517   发送数据子程序,Data为要发送的数据
 /*****************************************************************************************/
 void DAC_Send(uchar Data)
 {
 uchar BitCounter=8;//位控制
 uchar temp;//中间变量控制
 do
 {
 temp=Data;
 SCL=0;
 nop();
 if((temp&0x80)==0x80)//如果最高位是1
 SDA=1;
 else
 SDA=0;
 SCL=1;
 temp=Data<<1;//左移
 Data=temp;
 BitCounter--;
 }
 while(BitCounter);
 SCL=0;
 }
 /*****************************************************************************************/
 //DAC:MAX517   读一个字节的数据,并返回该字节值
 /*****************************************************************************************/
 uchar DAC_Read(void)
 {
 uchar temp=0;
 uchar temp1=0;
 uchar BitCounter=1;
 SDA=1;
 do
 {
 SCL=0;
 nop();
 SCL=1;
 nop();
 if(SDA)
 temp=temp|0x01;
 else
 temp=temp&0xfe;
 if(BitCounter-1)
 {
 temp1=temp<<1;
 temp=temp1;
 }
 BitCounter--;
 }
 while(BitCounter);
 return(temp);
 }
 void main(void)
 {
 DAC_Start();
 DAC_Send(0x5a);
 DAC_Ack();
 while(DAC_Read()!=0);
 DAC_Send(0x00);
 DAC_Ack();
 while(DAC_Read()!=0);
 DAC_Send(0xff);
 DAC_Stop();
 while(1);
 }
 | 
 
×本帖子中包含更多资源您需要 登录 才可以下载或查看,没有账号?注册 
  |