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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

關于單片機傳送最高位date&0x80問題

  [復制鏈接]
跳轉到指定樓層
樓主
ID:282021 發表于 2020-3-4 17:53 來自觸屏版 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
請問各位大神,為何我畫出來的這一段寫法為這種,我知道date&0x80后判斷最高位狀態,但是發送是不是發送的最低位嗎?那怎么實現把最高位先發送出去了,望各位發生解答。

IMG_20200304_174953.jpg (1.24 MB, 下載次數: 76)

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

使用道具 舉報

沙發
ID:496117 發表于 2020-3-4 18:46 | 只看該作者
最高位一般是指符號位,所以不用發
回復

使用道具 舉報

板凳
ID:687694 發表于 2020-3-4 18:49 | 只看該作者
看來樓主需要多看看C語言,
0x80的二進制展開是1000 0000,即最高位是1,當與一個數據(二進制8字節)做位與運算時,D0-D6都為0,D7如果數據為1,則結果是0x80,如果D7為0,則結果為0x00,這樣就可以得到最高位的值了。
回復

使用道具 舉報

地板
ID:419968 發表于 2020-3-4 20:03 | 只看該作者
MAX7219_pinDIN = DATA&0X80;
應該是發送的0  因為MAX7219_pinDIN  只能是0 或 1  DATA&0x80 可能是 0 或 0x80

可以這樣試試
for(i=0x80;i!= 0x01; i>>=1)
{
    if(i&DATA)
      {

         MAX7219_pinDIN = 1;
      }
    else  MAX7219_pinDIN =0;
}
或者

or(i=0;i<8;i++)
{
   
    if(0x01&(DATA>>(7-i)))
      {

         MAX7219_pinDIN = 1;
      }
    else  MAX7219_pinDIN =0;
回復

使用道具 舉報

5#
ID:94031 發表于 2020-3-4 20:31 | 只看該作者
要仔細看MAX7219數據手冊,不是一兩句話可以給你說清楚。
回復

使用道具 舉報

6#
ID:433166 發表于 2020-3-4 20:57 | 只看該作者
您好,您所遇到的困惑我當年也遇到過,同感!
其實是這樣的:
              1.這段代碼寫的不太標準,標準寫法是:  Max7219_pinDIN=(bit)DATA&0x80; 這里 “(bit)”是關鍵。
                2, 您有一個數據類型轉換慣性誤區,認為16位無符號UINT變量,在向8位無符號UCHAR類型變量賦值時,只能保留16位中的低8位;  由此您也得出  8位無符號變量在向1位bit類型變量傳送時只能保留最低位!
         但這是有個例外的: 8位uchar  轉變成 bit  類型時      保留的是  :      最高位   !!!   
      ————————知道這個規則后,例程中這段代碼就可輕易理解了,這種類型代碼您以后會經常遇到。
回復

使用道具 舉報

7#
ID:282021 發表于 2020-3-5 09:30 來自觸屏版 | 只看該作者
liu888888 發表于 2020-3-4 20:57
您好,您所遇到的困惑我當年也遇到過,同感!
其實是這樣的:
              1.這段代碼寫的不太標準,標 ...

感謝你,哎困惑了好久。
回復

使用道具 舉報

8#
ID:433166 發表于 2020-3-5 14:14 | 只看該作者
緊急更正一下:昨晚回復較倉促外加基礎不牢,文中有錯誤之處:
              標準寫法是:  Max7219_pinDIN=(bit)(DATA&0x80);
                掉了括號,否則編譯能通過,但實際運行錯誤。
回復

使用道具 舉報

9#
ID:679425 發表于 2020-3-5 16:14 | 只看該作者
仔細看MAX7219數據手冊
回復

使用道具 舉報

10#
ID:433166 發表于 2020-3-5 21:08 | 只看該作者
asp65 發表于 2020-3-5 09:30
感謝你,哎困惑了好久。

下午我繼續學習了一下數值轉換同時更正一下上文表述錯誤:  8位uchar變量  轉變成 bit  類型時  判斷的是 uchar變量是 0和非0兩種狀態,對應的bit變量值就是 0和1 兩種狀態值。
      
       代碼(DATA&0x80) 運算的結果是將DATA 中低7位清零,那么此時判斷 運算后 DATA 值是否是非零態只剩下最高位 bit7的值 是否是1。
      若此時bit7 位值 是1:則運算后是:  0x80 ,非零值,bit類型轉換后   為 1 。
       若此時bit7 位值 是0:則運算后是:  0x00 ,是0,   bit類型轉換后    為 0  。  
   這樣   這句 “ MAX7219_pinDIN = DATA&0X80;  ” 指令代碼就實現了 把DATA 最高位 賦值給了MAX7219_pinDIN 引腳。
       這樣解釋其實還有缺陷,因為實際運算中參與清零運算的是DATA的一份拷貝值,DATA并未被真正清零,這牽扯到51匯編語言學習。            初期學習C記住這句代碼形式和功用 就可以了。我也是今天下午才理解透徹。
             ----------有誤之處,歡迎大俠拍磚。
      
回復

使用道具 舉報

11#
ID:372775 發表于 2021-3-29 23:01 | 只看該作者
試了一下4樓的代碼,發現并不行,然后自己琢磨寫了一下
這是我自己寫的代碼
k=DATA&0x80;
j=k>>7;
if(j==1)
        GPIO_SetBits(GPIOC,GPIO_Pin_3);
else
        GPIO_ResetBits(GPIOC,GPIO_Pin_3);
這樣應該好理解了,在原來代碼的基礎上讓他賦值等于一個常量,然后把它右移7位,這就是他的最高位
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一区亚洲| 在线观看深夜视频 | 成人在线看片 | www免费视频 | 亚洲精品日韩精品 | 午夜在线视频一区二区三区 | 久久久成人免费一区二区 | 久久久久se | 欧美极品少妇xxxxⅹ免费视频 | gav成人免费播放视频 | 中文字幕av在线 | 国产精品夜色一区二区三区 | 精品欧美一区二区中文字幕视频 | 日韩欧美在线观看视频 | 日本精品国产 | 国产精品一区二区在线播放 | 色婷婷一区| 午夜av在线 | 午夜在线 | 高清欧美性猛交 | 九九热这里 | 国产精品毛片久久久久久久 | 亚洲精品久久 | 一区二区影院 | 99re视频在线免费观看 | 久草色播| 亚州激情| 午夜精品久久久久久久久久久久久 | 国产男人的天堂 | 一级电影免费看 | 超碰在线久| 在线免费观看欧美 | 久久九七 | 欧美1区 | 神马久久久久久久久久 | 欧美综合一区二区三区 | 在线国产一区二区 | 欧美不卡网站 | 超碰在线观看97 | 国产综合欧美 | 久久国产精品久久久久久久久久 |