这两天调试MCP2515碰到了如何通过MCU的单个引脚传输byte类型数据的问题,到网上检索了半天,也得不到有用的信息。只好自己调试,发现有两种比较简便的方法来实现这一功能,具体如下:
01 unsigned char sendData, recData; //sendData存放要发送的数据,recData存放接收到的数据
02 sbit SI = P1^2; //数据输出引脚
03 sbit SO = P1^3; //数据输入引脚
04
05 for (i=0; i<8; i++)
06 {
07 if(sendData & 0x80) //从字节最高位开始发送
08 SI = 1;
09 else
10 SI = 0;
11 }//通过SI引脚完成一字节数据的发送
12
13 recData = 0; //接收前recData先清0
14 for(i=0; i<8; i++)
15 {
16 recData <<= 1;
17 if(SO)
18 recData++; //从字节最低位开始接收
19 }//通过SI引脚完成一字节数据的接收
20
21 for (i=0; i<8; i++)
22 {
23 SI = sendData & 0x80; //byte类型赋值给bit类型,将byte变量中非0位赋给bit变量
24 sendData <<= 1;
25 }//通过SI引脚完成一字节数据的发送
26
27 recData = 0; //接收前recData先清0
28 for(i=0; i<8; i++)
29 {
30 recData <<= 1;
31 recData = recData | SO; //bit类型与byte类型位或运算,改变byte变量中的最低位
32 //recData = recData | (SO << 7); //报错“<< bad operand type”,可见不能改变byte变量的其他位
33 }//通过SI引脚完成一字节数据的接收