本帖最后由 cheney03 于 2020-12-18 08:53 编辑
如题:我的数字电位器是AD5162,写寄存器为9位。现有AD5160程序,寄存器是8位的。怎么修改现有程序,让SPI写9位的寄存器?
通道选择A0=1,或者A0=0
AD5160程序如下:
5160.H*/
typedef unsigned char uchar;
typedef unsigned int uint;
//sbit CPCS= P1^3; //(U108)
//sbit SDI = P1^1;
//sbit SCK = P1^0;
sbit CPCS = P3^0; //数字电位器AD5160的片选CS,低电平有效 (U111)
sbit SDI = P0^3; //数字电位器AD5160的数据SDI
sbit SCK = P0^2; //数字电位器AD5160的时钟SCLK
void AD5160_init() //AD5160初始化
{
CPCS = 1;
SCK = 0;
SDI = 1;
}
void AD5160_Seting(uchar dat)
{
uchar i, rdac=0;
CPCS = 1;
rdac = dat; //RDAC为写入AD5160 内部8位radc寄存器数据
SCK = 0;
_nop_();
_nop_();
_nop_();
_nop_();
SCK = 1; //SCK在CS拉低前触发一个时钟
_nop_();
_nop_();
SCK = 0;
_nop_();
CPCS = 0; //拉低CS启动数据写入
for(i=0;i<8;i++)
{ SDI =(rdac&0x80);
rdac<<=1; //高位MSB在先
_nop_();
SCK = 1;
_nop_();
SCK = 0;
}
CPCS = 1;
_nop_(); //片选拉高后SCK送一个结束时钟,这点很重要
SCK = 1;
_nop_();
_nop_();
SCK = 0;
_nop_();
}
|