1. //首先定义好I/O口
2. sbit SDO=P1^0;
3. sbit SDI=P1^1;
4. sbit SCK=P1^ 2;
5. sbit SCS=P1^3;
6. sbit ACC_7= ACC^7;
7. unsigned int SpiRead(unsigned char add)
8. {
9. unsigned char i;
10. unsigned int datal6;
11. add&=0x3f;/*6位地址*/
12. add |=0x80;/*读操作码l0*/
13. SDO=1;/*发送1为起始位*/
14. SCK=0;
15. SCK=1;
16. for(i=0;<8;i++)/*发送操作码和地址*/
17. {
18. if(add&0x80==1)
19. SDO=1;
20. else
21. SDO=0;
22. SCK=0;/*从设备上升沿接收数据*/
23. SCK=1;
24. add<<= 1;
25. }
26. SCK=1;/*从设备时钟线下降沿后发送数据,空读1位数据*/
27. SCK=0;
28. datal6<<= 1;/*读16位数据*/
29. for(i=0;<16;i++)
30. {
31. SCK= 1;
32. _nop_();
33. if(SDI==1)
34. datal6|=0x01;
35. SCK =0;
36. datal6< < =1;
37. }
38. return datal6;
39. }
-END-