欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3809|回復: 9
打印 上一主題 下一主題
收起左側

關于單片機中的一點C語言的問題

[復制鏈接]
跳轉到指定樓層
樓主
ID:329253 發表于 2018-5-16 21:17 來自觸屏版 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
10黑幣
這是ds1302中寫字節的一部分,我想問問這部分里邊的這個for循環,里邊的那個dat一次不是只能傳輸一個位嗎?最終是怎么傳出來一個字節的呢?每次循環不應該都重新來了嗎?所以就不懂了,麻煩看見的幫我解答解答,萬分感激

Screenshot_2018-05-16-21-07-21-52.png (139.08 KB, 下載次數: 64)

Screenshot_2018-05-16-21-07-21-52.png

評分

參與人數 1黑幣 +10 收起 理由
cciejs12345 + 10 贊一個!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:329253 發表于 2018-5-17 00:33 | 只看該作者
        圖片里的東西在這里
for (i=0; i<8; i++)
        {
                dat = addr & 0x01;                 // SPI是從低位開始傳輸的
                DSIO = dat;                                 // 把要發送的bit數據丟到IO引腳上去準備好
                SCLK = 1;                                 // 制造上升沿,讓DS1302把IO上的值讀走
                delay();                                // 讀走之后,一個小周期就完了
                SCLK = 0;                                // 把SCLK拉低,是為了給下一個小周期做準備
                delay();
                addr >>= 1;                                   // 把addr右移一位
        }
        // 第3部分: 寫入第2字節,value
        for (i=0; i<8; i++)
        {
                dat = value & 0x01;                 // SPI是從低位開始傳輸的
                DSIO = dat;                                 // 把要發送的bit數據丟到IO引腳上去準備好
                SCLK = 1;                                 // 制造上升沿,讓DS1302把IO上的值讀走
                delay();                                // 讀走之后,一個小周期就完了
                SCLK = 0;                                // 把SCLK拉低,是為了給下一個小周期做準備
                delay();
                value = value >> 1;                   // 把addr右移一位
        }
回復

使用道具 舉報

板凳
ID:164602 發表于 2018-5-17 07:23 | 只看該作者
134849694164151 發表于 2018-5-17 00:33
圖片里的東西在這里
for (i=0; i>= 1;                                   // 把addr右移一位
        }

從你給的程序上看,dat是8位,不是一位。
主要是你想不通:為什么一個8位數據去給一個一位賦值?!
其實很簡單:DSIO是一位,當DSIO=dat時,自動取低位。
你自己可以做實驗的:對一個unsigned char 型變量,賦值0x1234,你會發現,最后得到的自動就是0x34,高位自動去掉了。
回復

使用道具 舉報

地板
ID:213173 發表于 2018-5-17 07:44 | 只看該作者
134849694164151 發表于 2018-5-17 00:33
圖片里的東西在這里
for (i=0; i>= 1;                                   // 把addr右移一位
        }

就像8個人排隊跳水,一次只跳下一個,后面的人依次向前移動一位,直至跳完。addr >>= 1; // 把addr右移一位
回復

使用道具 舉報

5#
ID:305599 發表于 2018-5-17 08:50 | 只看該作者
一個字節是8位。for循環里面循環8次,每一次循環把dat里面的數據給DSIO寄存器,然后dat獲得value右移一位后的數據,8次共傳輸一個字節。for循環8次后,進入下一個函數。
回復

使用道具 舉報

6#
ID:68143 發表于 2018-5-17 08:54 | 只看該作者
每次傳輸一個位,循環8次不正好一個字節嗎
回復

使用道具 舉報

7#
ID:68143 發表于 2018-5-17 08:58 | 只看該作者

仔細理解下這兩句
回復

使用道具 舉報

8#
ID:295783 發表于 2018-5-23 10:13 | 只看該作者
從你給的程序上第一句看,dat是8位,不是一位。
從最低位開始傳
DSIO是一位,當DSIO=dat時,自動取低位。
所以你就可以看到八位數啦
希望對你能有幫助
回復

使用道具 舉報

9#
ID:336678 發表于 2018-5-23 19:10 | 只看該作者
是每次傳送一bit,傳8次就是一個Byte了。如果要傳輸很多Byte,就連續調用這個循環。
回復

使用道具 舉報

10#
ID:296970 發表于 2018-5-23 20:55 | 只看該作者
取最低位,傳一位移一位,八次
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表