|
最近一直在弄SPI,于是买了一个MCP41010数字电位器控制
其电阻值大小。直接测量抽头两端的电阻值尽然只有8.4K,MCP41010明明是
10K但是测试的时候竟然只有8.4K,误差真的是大得惊人呀!
看着坛子里面没哟相关的程序,就把小弟贴出来供大家参考和讨论。
#include "msp430x16x.h"
#define uchar unsigned char
#define uint unsigned int
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));
}
}
}
|
阿莫论坛20周年了!感谢大家的支持与爱护!!
你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。
|