久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3325|回復: 9
收起左側

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

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

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

評分

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

查看全部評分

回復

使用道具 舉報

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右移一位
回復

使用道具 舉報

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

使用道具 舉報

ID:68143 發表于 2018-5-17 08:54 | 顯示全部樓層
每次傳輸一個位,循環8次不正好一個字節嗎
回復

使用道具 舉報

ID:68143 發表于 2018-5-17 08:58 | 顯示全部樓層
TIM截圖20180517085725.png
仔細理解下這兩句
回復

使用道具 舉報

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

使用道具 舉報

ID:336678 發表于 2018-5-23 19:10 | 顯示全部樓層
是每次傳送一bit,傳8次就是一個Byte了。如果要傳輸很多Byte,就連續調用這個循環。
回復

使用道具 舉報

ID:296970 發表于 2018-5-23 20:55 | 顯示全部樓層
取最低位,傳一位移一位,八次
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美日韩成人影院 | 欧美色性| 日韩av在线一区二区三区 | 91在线免费视频 | 成人在线精品视频 | 在线观看精品 | 日韩欧美在线免费观看视频 | 观看av | 美日韩免费视频 | 午夜视频免费 | 99精品视频一区二区三区 | 91精品国产91久久久久久吃药 | 亚洲资源站 | 91在线最新 | av在线视| 亚洲成人精品 | 亚洲精品99 | 免费一级毛片 | 国产精品一区二区日韩 | 一级高清 | 国产精品天堂 | 亚洲 欧美 日韩 精品 | 精品在线一区 | 超碰激情| 亚洲 欧美 日韩在线 | 成人免费视频在线观看 | 亚洲二区视频 | 久久躁日日躁aaaaxxxx | 国产日产精品一区二区三区四区 | 欧美一级欧美一级在线播放 | 狠狠干美女 | 国产福利资源在线 | 亚洲精品一区二区三区在线观看 | 91一区二区在线观看 | 欧美影院| 成人在线观看免费视频 | 五月激情久久 | 成人在线一区二区三区 | 亚洲国产精久久久久久久 | 成人黄色a | 久久伊人精品一区二区三区 |