欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
單片機SPI主機向從機發(fā)送數(shù)據(jù)的問題
[打印本頁]
作者:
ADMIN_ALLENY
時間:
2020-8-13 09:48
標(biāo)題:
單片機SPI主機向從機發(fā)送數(shù)據(jù)的問題
void ma_write(uchar addr,uchar dat)
{
uchar cycle1;
uint value=0;
value = (( 0x80 | addr ) << 8 ) | dat ;//寫命令 + 地址 + 數(shù)據(jù)
ma_cs = 0;
for( cycle1=0 ; cycle1<16 ; cycle1++ )
{
ma_sclk = 0; delay1(1);
ma_mosi = value&0x8000; delay1(1);
ma_sclk = 1; delay1(1);
value <<= 1;
}
ma_cs = 1;
delay1(25);
}
我用是的STC15W4K56S4的單片機,從機中寫寄存器操作是一個16位的二進制數(shù) ,包括3位命令+5位地址+8位數(shù)據(jù)。我把單片機的P1^3口定義為ma_mosi,在上面語句
中(ma_mosi = value&0x8000;)這一句表達合不合理?因為MOSI腳是一位一位的發(fā)送數(shù)據(jù),這一語句發(fā)送的直接是一個16位數(shù)了,這樣是不是不合適的?
本人水平偏低,目前是在學(xué)習(xí)中,可能這個問題有些愚笨,盡管如此,還是希望大神不吝賜教,越簡單易懂越好,謝謝。
作者:
心有浮生
時間:
2020-8-13 13:27
你這ma_mosi = value&0x8000;加個判斷,if(ma_mosi = value&0x8000;)就發(fā)1,else就發(fā)0,這樣就可以確保每次只發(fā)最高位了,然后發(fā)完改變value的值,發(fā)送下一位。
void ma_write(uchar addr,uchar dat)
{
uchar cycle1;
uint value=0;
value = (( 0x80 | addr ) << 8 ) | dat ;//寫命令 + 地址 + 數(shù)據(jù)
ma_cs = 0;
for( cycle1=0 ; cycle1<16 ; cycle1++ )
{
ma_sclk = 0; delay1(1);
if(value&0x8000)
ma_mosi=1;
else
ma_mosi=0;
delay1(1);
ma_sclk = 1; delay1(1);
value <<= 1;
}
ma_cs = 1;
delay1(25);
}
作者:
13487086265
時間:
2020-8-13 13:32
51內(nèi)核是8位的!只能8位8位的發(fā)!
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1