数字电位器X9111读写程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
// 写一个字节
void WR_Byte(unsigned char dat)
{
unsigned char i;
for(i=0; i<8; i++)
{
SCK = 0;
_nop_();
_nop_();
_nop_();
_nop_();
if(dat & 0x80)
MOSI = 1;
else
MOSI = 0;
_nop_();
_nop_();
_nop_();
_nop_();
SCK = 1; // 时钟上升沿写入数据
_nop_();
_nop_();
_nop_();
_nop_();
dat <<= 1;
}
}
// 读一个字节
unsigned char RD_Byte(void)
{
unsigned char i;
unsigned char dat;
dat = 0;
MISO = 1;
_nop_();
_nop_();
_nop_();
_nop_();
for(i=0; i<8; i++)
{
SCK = 1;
_nop_();
_nop_();
_nop_();
_nop_();
dat <<= 1;
SCK = 0;
_nop_();
_nop_();
_nop_();
_nop_();
if(MISO)
dat++; // 即当SO等于1时dat就加1
}
return dat;
}
// 输入10位数至寄存器中
void WriteData1(unsigned int dat)
{
X9111_CS1 = 0;
_nop_();
_nop_();
_nop_();
_nop_();
WR_Byte(0x52);
WR_Byte(0xA0);
WR_Byte(dat/256);
WR_Byte(dat%256);
SCK = 0; // 恢复为0准备下次的写数据
MOSI = 0;
_nop_();
_nop_();
_nop_();
_nop_();
X9111_CS1 = 1;
}
// 输出寄存器中的10位数
unsigned int ReadData1(void)
{
unsigned char dat0, dat1;
unsigned int idat;
X9111_CS1 = 0;
_nop_();
_nop_();
_nop_();
_nop_();
WR_Byte(0x53);
WR_Byte(0x80);
dat1 = RD_Byte();
dat0 = RD_Byte();
idat = dat1*256 + dat0;
SCK = 0;
_nop_();
_nop_();
_nop_();
_nop_();
X9111_CS1 = 1;
_nop_();
_nop_();
_nop_();
_nop_();
return idat;
}