|
楼主 |
发表于 2011-7-10 21:19:02
|
显示全部楼层
问题基本解决。以下是相关程序。通信对象为MMA7660加速度传感器
//初始化MSSP模块
SSPSTAT=0x80; //master with standard speed.
SSPADD = 29; //12M, 100K
SSPCON = 0X28; //enable mssp, master mode
SSPCON2 = 0;
//以下为初始化MMA766O
ACKDT=0; //ACK TO SLAVE AFTER RECEIVING
SSPCON2 |= 1; //SET SEN
while (!SSPIF); //WAIT ACK FROM SLAVE
SSPIF =0; //CLEAR FLAG
SSPBUF = 0X98; //ADRRESS OF MMA7660
while (!SSPIF); //WAIT ACK FROM SLAVE
SSPIF =0; //CLEAR FLAG
SSPBUF = 0X05; // MODE OF MMA7660
while (!SSPIF); //WAIT ACK FROM SLAVE
SSPIF =0; //CLEAR FLAG
SSPBUF = 0X01; // R05 OF MMA7660
while (!SSPIF); //WAIT ACK FROM SLAVE
SSPIF =0; //CLEAR FLAG
SSPBUF = 0X01; // R06 OF MMA7660,DUMY
while (!SSPIF); //WAIT ACK FROM SLAVE
SSPIF =0; //CLEAR FLAG
SSPBUF = 0X09; // R07 OF MMA7660
while (!SSPIF); //WAIT ACK FROM SLAVE
SSPIF =0; //CLEAR FLAG
SSPBUF = 0X3F; // R08 OF MMA7660
while (!SSPIF); //WAIT ACK FROM SLAVE
SSPIF =0; //CLEAR FLAG
SSPCON2 |= 4; //SET PEN
while (!SSPIF); //WAIT NACK SENT
SSPIF =0; //CLEAR FLAG
//读一次MMA7660
ACKDT=0; //ACK TO SLAVE AFTER RECEIVING
SSPCON2 |= 1; //SET SEN
while (!SSPIF); //WAIT ACK FROM SLAVE
SSPIF =0; //CLEAR FLAG
SSPBUF = 0X98; //ADRRESS OF MMA7660,WRITE
while (!SSPIF); //WAIT ACK FROM SLAVE
SSPIF =0; //CLEAR FLAG
SSPBUF = 0X00; // XOUT OF MMA7660
while (!SSPIF); //WAIT ACK FROM SLAVE
SSPIF =0; //CLEAR FLAG
RSEN=1; //RESTART
while (!SSPIF); //WAIT ACK FROM SLAVE
SSPIF =0; //CLEAR FLAG
SSPBUF = 0X99; //ADRRESS OF MMA7660,READ
while (!SSPIF); //WAIT ACK FROM SLAVE
SSPIF =0; //CLEAR FLAG
ACKDT=0; //ACK FLAG
RCEN=1; //RECEIVING
while (RCEN); //WAIT NACK SENT
ACKEN=1; //NACK
while (ACKEN); //WAIT TO CLEAR FLAG
gotiic1=SSPBUF; //RECEIVED BYTE1
ACKDT=1; //NACK FLAG
RCEN=1;
while (RCEN); //WAIT RECEIVING
ACKEN=1;
while (ACKEN); //NON ACK
gotiic2=SSPBUF; //RECEIVED BYTE2
SSPCON2 |= 4; //SET PEN
while (!SSPIF); //WAIT PEN
SSPIF =0; //CLEAR FLAG |
|