欧美极品高清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