#include <reg52.h>
#include <intrins.h>
#define NOP _nop_()
#define uint unsigned int
#define uchar unsigned char
void delay_50us(uint limit)
{
uint i;
for( ; limit > 0; limit-- )
for( i = 0; i < 4; i++)
;
}
/* 定义数据,时钟线 */
sbit SYNC = P1^0;
sbit SCL = P1^1;
sbit SDA = P1^2;
void dac_start(void)
{
/* 保持至少30ns */
SYNC = 0;
NOP;NOP;
SYNC = 1;
}
void dac_stop( void )
{
NOP;NOP;
SYNC = 1;
SDA = 1;
}
void dac_write( unsigned int dat )
{
uchar dat_h, dat_l, i;
dat_h = dat / 256;
dat_l = dat % 256;
/* 发送高位数据 */
for( i = 0; i < 8; i++ ) {
SCL = 1;
dat_h = dat_h << 1;
SDA = CY;
NOP;NOP;
SCL = 0; //下降沿
NOP;NOP;
}
/* 发送低位数据 */
for( i = 0; i < 8; i++ ) {
SCL = 1;
dat_l = dat_l << 1;
SDA = CY;
NOP;NOP;
SCL = 0; //下降沿
NOP;NOP;
}
}
我是根据下面的时序图写的,可是怎么测试都不行,输出电压都木有反应
这是芯片的手册
DAC121S101CIMK.pdf
(474.96 KB)
|