abcfanyuan 发表于 2012-7-24 09:25:50

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));
      }
}
}

abcfanyuan 发表于 2012-7-26 15:00:40

顶顶呀!

gsygyxhbgsygyxh 发表于 2013-5-23 16:00:44

多谢,正好用上

oiuwer 发表于 2013-5-23 18:19:05

发来贺电。

hustsolo 发表于 2014-10-16 10:48:42

有人验证过没?

jwxcelebrate 发表于 2014-10-23 10:18:49

mark学习下

影子流 发表于 2015-10-4 21:28:37

你用万用表直接测量,可以测到电阻吗?

影子流 发表于 2015-10-4 21:33:32

有51单片机的吗?

HJMB 发表于 2017-5-31 10:07:35

顶。刚好在用。

zhcj66 发表于 2019-8-31 16:46:00

谢谢分享

ypc168k 发表于 2020-2-12 17:33:21


谢谢分享
页: [1]
查看完整版本: MCP41010数字电位器SPI控制成功