MCP41010数字电位器SPI控制成功
最近一直在弄SPI,于是买了一个MCP41010数字电位器控制其电阻值大小。直接测量抽头两端的电阻值尽然只有8.4K,MCP41010明明是
10K但是测试的时候竟然只有8.4K,误差真的是大得惊人呀!
看着坛子里面没哟相关的程序,就把小弟贴出来供大家参考和讨论。
#include "msp430x16x.h"
#defineuchar unsigned char
#define uint unsignedint
void Init_CLK(void)
{
unsigned int iq0;
BCSCTL1&=~0X00; //打开XT2振荡器
do
{
IFG1 &= ~OFIFG; // 清除振荡器失效标志
for (iq0 = 0xFF; iq0 > 0; iq0--); // 延时,等待XT2起振
}
while ((IFG1 & OFIFG) != 0); // 判断XT2是否起振
BCSCTL2 =SELM_2+SELS; //选择MCLK、SMCLK为XT2
}
void Delay_Ms(uint count)
{
uint i,j;
for(i = 0;i<count;i++)
{
for(j=0;j<120;j++)
{
;
}
}
}
void SpiWrite(uint data)
{
data=data|0x1100;
CLR_SPI_CS;
for(uchar i=0;i<16;i++)
{
CLR_SPI_SCK;
Delay_Ms(1);
if(data&0x8000)
SET_SPI_SI;
else
CLR_SPI_SI;
data<<=1;
SET_SPI_SCK;
Delay_Ms(1);
}
SET_SPI_SCK;
SET_SPI_CS;
}
void Init_point()
{
P6DIR=0xff;
P6SEL=0;
}
void main( void )
{
uchar m=0;
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
P1DIR=0;
P1SEL=0;
Init_CLK();
Init_point();
while(1)
{
SpiWrite(m);
if(!(P1IN&BIT0))
{
Delay_Ms(10);
if(!(P1IN&BIT0))
m++;
while(!(P1IN&BIT0));
}
}
}
顶顶呀! 多谢,正好用上 发来贺电。 有人验证过没? mark学习下 你用万用表直接测量,可以测到电阻吗? 有51单片机的吗?
顶。刚好在用。 谢谢分享
谢谢分享
页:
[1]