void spiinit() { PIR1 = 0; SSPCON = 0x20; //工作在主控下,无效为低电平 00100000 SSPSTAT = 0x00; //00000000
TRISC3 = 0; TRISC4 = 1; //sdo输出,sck输出,SDI输入,rc6.rc7输出 TRISC5 = 0; TRISC6 = 0; TRISC7 = 0 ; TRISA5 = 0; }
这里要往mcp41010数字电位器写数,mcp41010支持0.0 和1.1俩个模式,下面是数据发送函数之前cs已经拉低,在下面俩个函数后拉高,这里出现了一个奇怪问题,SSPBUF = 0x11,这里的赋值不起作用,在watch中观察始终为0x00,软件调试就没有这个问题.不知道那位老师能解答一下为什么?
void spisetcom() { SSPBUF = 0x11; //mcp41010命令
do { ; } while(SSPIF==0); //等待发送完毕
SSPIF=0;
} void spisetdata() { SSPBUF = data; data++; do { ; } while(SSPIF==0); //等待发送完毕
SSPIF=0; } 用示波器SCK,sdo引脚上有输出 但是数字电位器没有改变 |