我用的是STC12系列的单片机。但是没有使用其内部的SPI接口,采用I/O口模拟的方式。我买的MCP41010是SOP8封装的。为什么一直写不进数据。
程序如下:
sbit mcp_CS=P1^0;//片选
sbit mcp_SCLK=P1^1;//串行时钟
sbit mcp_SI=P1^2;//串行数据输入
/**************************************************************************
* 功 能: 数字电位器程序
**************************************************************************/
void Delay10us() //@11.0592MHz
{
unsigned char i;
_nop_();
_nop_();
_nop_();
i = 24;
while (--i);
}
void MCP410_SendData(unsigned char x)
{
unsigned char i,command=0x11;
mcp_CS=0; //选中芯片,使能SPI
for(i=0;i<8;i++)//传送1个字节8位命令&1个8字节数据
{
mcp_SCLK=0;
if(command&0x80)//将dat中最低位数据发送到MOSI端口
{
mcp_SI=1;
Delay10us();
}
else
{
mcp_SI=0;
Delay10us();
}
mcp_SCLK=1;
Delay10us();
command<<=1; //dat数据左移1位
}
for(i=0;i<8;i++)//传送1个字节8位命令&1个8字节数据
{
mcp_SCLK=0;
if(x&0x80)//将dat中最低位数据发送到MOSI端口
{
mcp_SI=1;
Delay10us();
}
else
{
mcp_SI=0;
Delay10us();
}
mcp_SCLK=1;
Delay10us();
x<<=1; //dat数据左移1位
}
Delay10us();
mcp_CS=1;
}
//数字电位器程序结束
请各位大神指点一下,不胜感激。
|