3. #define uchar unsigned char 4. #define uint unsigned char 5. uchar shou; 6.
7. sbit mi=P1^0; //从机接收主机发送接口 8. sbit mo=P1^1; //从机发送主机接收接口 9. sbit sclk=P1^2; //主从机时钟同步时钟信号 10. sbit ss=P1^3; //从机选择控制位 11. 12. 13.
14. /**********简单的延时函数***************/ 15. void delay(uchar z) 16. {
17. uchar a; 18. for(;z>0;z--)
19. for(a=5;a>0;a--); 20. 21. } 22.
23. /**********从机接收数据并发送数据函数************/ 24. void shoufa(uchar date) 25. { 26.
27. uchar a,b;
28. while(ss==0) //检测是否有数据的传输 29. {
30. /*确认主机要发送数据后进行接收****/ 31. while(sclk==1); //检测同步时钟信号 32. //确定时钟信号置低 33. for(a=0;a<8;a++) 34. {
35. while(sclk==0) //时钟置低,准备发数据 36. { 37.
38. delay(0); //等待数据的稳定 39. b=mi; 40. P2=b; 41. if(b==1)
42. shou|=0x01;
43. while(sclk==0); //数据接收完成一位之后等待发送数据 44. }
45. 46. if(a<7) 47. {
48. shou<=1; 49. } 50.
51. while(sclk==1) 52. { 53. date<=1;
54. mo=CY; //输出数据的高位 55. while(sclk==1); 56. } 57. } 58. } 59. }
60. /***********主程序**************/ 61. void main() 62. { 63.
. P1=0xff; 65. while(1) 66. {
67. shoufa(0xff); 68. P3=shou; 69. } 70. 71. }