关于模拟SPI发送数据中一个小细节

来源:互联网 发布:人工智能伏羲觉醒2 编辑:程序博客网 时间:2024/06/05 18:10

在SPI发送一个字节内容的函数中如下:

#define Max7219_DIN  PAout(6)

void Write_Max7219_byte(u8 DATA)         {    u8 i;        Max7219_CS=0;    for(i = 8;i >= 1;i--)      {            Max7219_CLK=0;/*①*/ //        Max7219_DIN=(DATA >> 7) & 0x01;/*②*/ // Max7219_DIN = DATA & 0x80;/*③*/ //       if(DATA & 0x80)Max7219_DIN = 1;         else Max7219_DIN = 0;          DATA=DATA<<1;          Max7219_CLK=1;           }                                 }


在上述有三个可以判断要发送字节的位是0或是1,在51中①②③三种写法都适用,而在stm32中只有①②可以正常适用。

通过对②写法进行深究发现,如果按照此写法是不严谨的而且是错误的,比如DATA是0x01的话,第一种和第三种最后经过依次发送后还是为0000 0001,.

但是第二中方式却不是,结果是0 0 0 0 0 0 0 128.但是51中这种写法确实可以的。什么原因现在还不清楚。望大虾赐教!

经论证:①和③的写法都是可行并且通用性较好。

不懂的问题问三遍:第二种写法在51上为什么能实现呢?51的IO口定义 #define Max7219 P1^1,不清楚是否和IO内部结构有问题?

   第二种写法在51上为什么能实现呢?51的IO口定义 #define Max7219 P1^1,不清楚是否和IO内部结构有问题?

  第二种写法在51上为什么能实现呢?51的IO口定义 #define Max7219 P1^1,不清楚是否和IO内部结构有问题?

原创粉丝点击