在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;
/*1*/ // Max7219_DIN=(DATA >> 7) & 0x01;
/*2*/ // Max7219_DIN = DATA & 0x80;
/*3*/ // if(DATA & 0x80)Max7219_DIN = 1;
else Max7219_DIN = 0;
DATA=DATA<<1;
Max7219_CLK=1;
}
}
在上述有三个判断要发送字节的位是0或是1,在51中1,2,3三种写法都适用,而在stm32中只有1,3写法可以适用。
通过对2写法进行深究发现,如果按照此写法是不严谨的而且是错误的,比如DATA是0x01的话,第一种和第三种最后经过依次发送后还是为0000 0001,.但是第二种方式却不是,结果是0 0 0 0 0 0 0 128,但是51中这种写法却可以的。什么原因现在还不清楚。望大虾赐教!
经论证:1和3的写法都是可行并且通用性较好。
不懂的问题问三遍:
第二种写法在51上为什么能实现呢?51的IO口定义 #define Max7219 P1^1,是和IO定义方式不同?
第二种写法在51上为什么能实现呢?51的IO口定义 #define Max7219 P1^1,是和IO定义方式不同?
第二种写法在51上为什么能实现呢?51的IO口定义 #define Max7219 P1^1,是和IO定义方式不同?