原创 DA转换芯片MAX518的完整程序

2009-4-12 19:06 6058 4 4 分类: MCU/ 嵌入式

MAX518特点;
单+5V电源,8位转换精度,I2C接口,可选单通道输出或双通道同时输出

/**********************************
晶振:11.0592M
模拟I2C总线操作max518
2007/12/01
编写:fjh
/**********************************/
#include <iom128v.h>
#include <macros.h>
#define uchar unsigned char 
#define uint  unsigned int 

#define SCL_H  PORTD|=(1<<6)
#define SCL_L  PORTD&=~(1<<6)

#define SDA_H  PORTD|=(1<<7)
#define SDA_L  PORTD&=~(1<<7)

/******************应用程序********************/
void delay(uchar us);
void Start(void);
void Stop(void);
void SendByte(uchar Dat);
/**********************************************/
void port_init(void)
{
 PORTA = 0xff;
 DDRA  = 0xff;
 
 PORTB = 0xff;
 DDRB  = 0xff;
 
 PORTC = 0xff; 
 DDRC  = 0xff;
 
 PORTD = 0x00;
 DDRD  = 0xff;
 
 PORTE = 0xff;
 DDRE  = 0xff;
 
 PORTF = 0xff;
 DDRF  = 0xff;
 
 PORTG = 0x00;
 DDRG  = 0x00;
}

void delay(uchar us)
{
   while(us--);
}
/************************START***************************/
void Start(void)
{
  //SDA_H;
  delay(5);
  SCL_H;
  delay(5);
  SDA_L;
  delay(5);
  SCL_L;
  delay(5);


void Stop(void)
{
  //SDA_L;
  delay(5);
  SCL_H;
  delay(5);
  SDA_H;
  delay(5);
  SCL_L;
  delay(5);  
}
/********************************************************/
/***********向I2C总线发送一个字节+接收一个ACK************/
void SendByte(uchar Dat)
{
  uchar i=0;
  uchar T_Data=0;
  
  DDRD|=(1<<1);//输出
  SCL_L; 
  delay(10);
  T_Data=Dat;
  for(i=0;i<8;i++)
    {           
  
          if(T_Data&0x80)
            SDA_H;
          else 
            SDA_L;
          delay(5);
      SCL_L;
          delay(5);
          SCL_H;
          delay(5);
          T_Data=T_Data<<1;
          SCL_L;
          delay(5);
   }
  SDA_H;//释放总线 
  delay(5); 
  SCL_L;     /*********************/
  delay(5);//接收一个ACK,不做处理
  SCL_H;     /*********************/
  delay(5);

  SCL_L;
}
/******************转换函数***********************/
void DAC_T(uchar command,uchar T_data)
{
  Start();
  SendByte(0x58);//addr
  delay(5);
  SendByte(command);//command  0x00:通道1 0x01:通道2
  delay(5);
  SendByte(T_data);//data
  Stop();
}
/***************************************************/
void delay1ms(uint ms)
{
        uint i; 
        for (; ms>0; ms--)
                for (i=1500; i>0;i--)
                                        ;                                                 
}
/*******************MAIN函数*************************/
void main()
{  
  port_init();

  SCL_L;
  Stop();

  while(1)
    {
       DAC_T(0x01,0x40);
           delay1ms(1000);
    }  
}


线路图:


407e7c0b-6511-41d3-aa8f-fa332ad75d5e.gif


 

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
4
关闭 站长推荐上一条 /3 下一条