⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 max518.c

📁 这是一个MAX518的驱动程序,已调试过的,欢迎大家下载
💻 C
字号:
#include <reg51.h> /*#include <reg52.h>*/
#include <absacc.h>
#include <intrins.h>

#define Wait     {_nop_();_nop_();}
#define uint unsigned int
#define uchar unsigned char

/*正弦波数组128点*/
const  char  table[ ] = {0X80,0X86,0X8D, 0X93,0X99,0X9F,0XA5,0XAB,0XB1,//9
0XB7,0XBC,0XC2,0XC7,0XCC,0XD1,0XD6,0XDA,0XDF,0XE3,0XE7,0XEA,0XEE,//13*9
0XF1,0XF4,0XF6,0XF8,0XFA,0XFC,0XFD,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFE,0XFD,0XFB,0XF9,0XF7,0XF5,0XF2,0XEF,0XEC,0XE9,0XE5,0XE1,0XDD,
0XD8,0XD4,0XCF,0XCA,0XC5,0XBF,0XBA,0XB4,0XAE,0XA8,0XA2,0X9C,0X96,
0X90,0X89,0X83,0X80,0X79,0X72,0X6C,0X66,0X60,0X5A,0X55,0X4E,0X48,
0X43,0X3D,0X38,0X33,0X2E,0X29,0X25,0X20,0X1C,0X18,0X15,0X11,0X0E,
0X0B,0X09,0X07,0X05,0X03,0X02,0X00,0X00,0X00,0X00,0X00,0X00,0X01,
0X02,0X04,0X06,0X08,0X0A,0X0D,0X10,0X13,0X16,0X1A,0X1E,0X22,0X27,
0X2B,0X30,0X35,0X3A,0X40,0X45,0X4C,0X51,0X57,0X5D,0X63,0X69,0X6F,
0X76,0X7C};


#define    Addr        0x58         /*010 11 00(A1A0) 0 器件地址*/



/* 2。    嵌入变量申明:*/
sbit Sda            =P1^1;    /*使用具体线路的Sda*/    
sbit Scl            =P1^2;    /*使用具体线路的Scl*/    

//unsigned char bdata cFlag;
//sbit    bScanErr    =cFlag^0;


/* 3。   嵌入涵数申明:*/
void IicStart(void);
void IicStop(void);
void IicInit(void);
void IicAck(void);
bit SendIic(unsigned char cData);
bit IicClock(void);
unsigned char ScanIic(void);
void OutputMax518(uchar Address, uchar channel, uchar DAdata);

void delay(unsigned short int time);


/* 4。   嵌入涵数代码段:*/

/****************************************************
Name:IicStart
Function:
Time:113us        88.5K
***************************************************/
void IicStart(void){
   Sda=Scl=1;
   Wait;
   Sda=0;
   Wait;
   Scl=0;
}
/***********************************************/
/****************************************************
Name:IicStop
Function:
Time:113us        88.5K
***************************************************/
void IicStop(){
Sda=0;
Scl=1;
Wait;
Sda=1;    
}
/***********************************************/
/****************************************************
Name:IicInit
Function:Iic Init
Time:113us        88.5K
***************************************************/
void IicInit(){
    Scl=0;
	IicStop();

}
/***********************************************/
/****************************************************
Name:SendIic
Function:Send data to Iic
Time:116us(8位数据为:112us)        88.5k
*****************************************************/
bit SendIic(unsigned char cData){
    unsigned char data i;
    for(i=0;i<8;i++){
        Sda=(bit)(cData&0x80);
        Scl=1;
        cData<<=1;
        IicClock();
        }
    Sda=1;    /*检测ACK*/
    return (~IicClock());
}
  
/*********************************************
Name:IicClock
Function:
********************************************/
bit IicClock(){
    bit sample;
    Scl=1;
    Wait;
	sample=Sda;
    Scl=0;
	Wait;
	return(sample);
}    

/*********************************************************************************************************
** 函数名称: OutputMax518(uchar Address, uchar channel, uchar DAdata)
** 功能描述: 向MAX518任一通道写入数据
** 输 入: Address  : 器件地址
**         Channel : 写入通道(DAC0,DAC1)
**         DAdata  : DA转换输出的数据        
** 输 出: 无
** 全局变量:
** 调用模块:IicStart();SendIic();IicStop(); 
**
** 修改人: 曾红兵
** 日 期: 2007年1月20日
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void OutputMax518(uchar Address, uchar channel, uchar DAdata)
{
   IicStart();
   SendIic(Address);
   SendIic(channel);
   SendIic(DAdata);
   IicStop();
}    
/*********************************************************************************************************
** 函数名称: OutputMax518D(uchar Address, DA0data, uchar DA1data)
** 功能描述: 向MAX518两通道同时写入数据
** 输 入: Address  : 器件地址
**         DA0data  :DAC0转换输出的数据 
**         DA1data  :DAC1转换输出的数据        
** 输 出: 无
** 全局变量:
** 调用模块:IicStart();SendIic();IicStop(); 
**
** 修改人: 曾红兵
** 日 期: 2007年1月20日
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void OutputMax518D(uchar Address, DA0data, uchar DA1data)
{
   IicStart();
   SendIic(Address);
   SendIic(0);
   SendIic(DA0data);
   SendIic(1);
   SendIic(DA1data);
   IicStop();
}    
/*********************************************
** 函数名称: delay(unsigned short int time)
** 功能描述: 延时
** 输 入: time  : 延时时间
********************************************/
void delay(unsigned short int time)
{
  while(time--)
  {;}
}

main()
{
IicInit();
while(1){
OutputMax518D(Addr, 0, 255);
delay(65535);
//delay(65535);

OutputMax518D(Addr, 255,0);
delay(65535);
//delay(65535);

OutputMax518D(Addr, 127,127);
delay(65535);
//delay(65535);
}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -