求助:数字式电位器DS1267,DS1868的程序问题。
下面是我写的程序,当在MAIN程序中,分别用write_data(126,126),write_data(130,130)时,测出来的阻值是不是最大就是最小,我用的是100K,以128为分界,写到DS1267中的值大于128时,阻值是100K,写到DS1267中的值小于128时,阻值是0K,.我想这个write_data(unsigned char res0,unsigned char res1)应该没问题.不知道怎么回事.#define R_CLKBIT(4)/*时钟线引脚 */
#define R_IO BIT(5) /*数据线引脚 */
#define R_RSTBIT(3)/*复位线引脚 */
#define R_DDRDDRD /*数据线方向*/
#define R_PORT PORTD
#define R_PINPIND
void write_data(unsigned char res0,unsigned char res1)
{
unsigned char i,temp;
R_DDR|=R_IO;
R_PORT&=~R_RST;
R_PORT&=~R_CLK;
asm("nop");
asm("nop");
asm("nop");
asm("nop");
R_PORT|=R_RST; //信号低时拉高RST初始化
//写STACK 0
R_PORT |=R_IO ;
asm("nop");
asm("nop");
R_PORT |=R_CLK; //时钟上升沿写入数据
asm("nop");
R_PORT &=~R_CLK; //时钟拉低电平
//1端电位器
temp=res1;
for(i=0;i<8;i++)
{
if(temp&(1<<i))
R_PORT |=R_IO ;
else
R_PORT &=~R_IO ;
asm("nop");
asm("nop");
R_PORT |=R_CLK; //时钟上升沿写入数据
asm("nop");
R_PORT &=~R_CLK; //时钟拉低电平
}
//1端电位器
temp=res0;
for(i=0;i<8;i++)
{
if(temp&(1<<i))
R_PORT |=R_IO ;
else
R_PORT &=~R_IO ;
asm("nop");
asm("nop");
R_PORT |=R_CLK; //时钟上升沿写入数据
asm("nop");
R_PORT &=~R_CLK; //时钟拉低电平
}
R_PORT&=~R_RST; //禁止DS1267
} 终于搞定,原来它的17位寄存器是高位在前,低位在后,害我看了半天的DATASHEET。 {:titter:} 不知道楼主还在不在,我用STM32驱动DS1868就是不行
页:
[1]