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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2896|回復: 20
收起左側

我這個單片機流水燈左移再右移為什么只有一次,不是有while循環嗎?

  [復制鏈接]
ID:1038507 發表于 2022-7-6 07:18 | 顯示全部樓層 |閱讀模式
51hei圖片20220706071728.png
回復

使用道具 舉報

ID:190577 發表于 2022-7-6 09:08 | 顯示全部樓層
unsigned char cnt=0,應該在放在while(1) 循環上面
回復

使用道具 舉報

ID:824490 發表于 2022-7-6 09:12 | 顯示全部樓層
因為你移出去的數據,再也回不來了。你用環移指令試試?
回復

使用道具 舉報

ID:275826 發表于 2022-7-6 09:14 | 顯示全部樓層
把unsigned char cnt=0;改成char cnt=0;
回復

使用道具 舉報

ID:1006814 發表于 2022-7-6 09:48 | 顯示全部樓層
cnt是unsigned char,永遠大于-1,所以一直在for語句循環了。
回復

使用道具 舉報

ID:1038531 發表于 2022-7-6 10:28 | 顯示全部樓層
你的aa每次左移一位,左移完8次之后沒有歸 1,所以只能循環一次
回復

使用道具 舉報

ID:94031 發表于 2022-7-6 11:28 | 顯示全部樓層
for(cnt=7;cnt>-1;cnt--)改為for(cnt=7;cnt>0;cnt--),unsigned char cnc 不可能是負數。
回復

使用道具 舉報

ID:8222 發表于 2022-7-6 13:58 | 顯示全部樓層
xuyaqi 發表于 2022-7-6 11:28
for(cnt=7;cnt>-1;cnt--)改為for(cnt=7;cnt>0;cnt--),unsigned char cnc 不可能是負數。

正解!
回復

使用道具 舉報

ID:8222 發表于 2022-7-6 13:59 | 顯示全部樓層
hb_lhw 發表于 2022-7-6 09:48
cnt是unsigned char,永遠大于-1,所以一直在for語句循環了。

我,很贊同。
回復

使用道具 舉報

ID:509408 發表于 2022-7-6 15:23 | 顯示全部樓層
for循環中 -1溢出unsigned char 的范圍 當cnt=0 時滿足>-1 的條件 此時再減一次就變成255,emmm  后面的自然會出錯。
回復

使用道具 舉報

ID:1033105 發表于 2022-7-6 16:02 | 顯示全部樓層
問問樓主,這個程序修改后能循環了嗎?我也是剛學,有好多的東西都一知半解的,不是很明白。
回復

使用道具 舉報

ID:195496 發表于 2022-7-6 16:28 | 顯示全部樓層
你的第二個for循環變量類型不對,定義unsigned char是無符號數,不能設定比較負數
回復

使用道具 舉報

ID:195496 發表于 2022-7-6 16:28 | 顯示全部樓層
for(cnt=8;cnt>0;cnt--)
回復

使用道具 舉報

ID:195496 發表于 2022-7-6 16:35 | 顯示全部樓層
你的第二個循環cnt永遠減不到-1,一直減,還是0,無法正常結束循環
回復

使用道具 舉報

ID:509408 發表于 2022-7-7 15:21 | 顯示全部樓層
tzs233 發表于 2022-7-6 15:23
for循環中 -1溢出unsigned char 的范圍 當cnt=0 時滿足>-1 的條件 此時再減一次就變成255,emmm  后面的自 ...

1  再補充一點補碼的知識,負數在計算機中會用補碼來表示  負整數的補碼計算是將其原碼除符號位外的所有位
    取反后加1,比如-1的補碼為其絕對值1(0000 0001)->所有位取反(1111 11110) -> 加1(1111 1111)即255
2、接上一點,此時cnt=255 又滿足了for循環中cnt>-1判定條件,因此它就會一一直循環下去無法退出。
3、然后循環體內(7-cnt) 也會產生負數,這樣和你想要的結果會完全不同。如在cnt=255時 7-  cnt=-248  補碼
     為0x08,即實際向右循環移動了8位之后變成0x80,外面又取反了一次變成 0x7f。   即P2 = 0x7f
4. 最后出現問題不要慌哈 可以借助編譯器仿真調試設置斷點、變量調試查看。都是這么過來的。
回復

使用道具 舉報

ID:264021 發表于 2022-7-8 18:23 | 顯示全部樓層
把unsigned int i=0;放到while(1)里面就可以循環左右移動了
回復

使用道具 舉報

ID:883242 發表于 2022-7-9 01:28 | 顯示全部樓層
沒人注意到第8行是語法錯誤嗎?

在C89標準里面,任何變量的定義必須放在可執行語句之前,也就是第8行應該放在第6行前面。

只有C99標準才會支持第8行的寫法,但是編譯器都是默認不支持C99,要打開相關的編譯開關。

第一行說明樓主用的是C51而不是支持C99標準的MDK,C51至今依然不支持C99標準,所以樓主的代碼根本不可能通過編譯。
回復

使用道具 舉報

ID:385830 發表于 2022-7-9 04:05 | 顯示全部樓層
這是一個【數據類型】的問題!參見下面7樓的解答吧。
回復

使用道具 舉報

ID:1038923 發表于 2022-7-9 11:22 | 顯示全部樓層
定義的數據類型就不對,Unsigned int, 不可能出現-1. 程序的循環設計需要重新修改一下
回復

使用道具 舉報

ID:1033105 發表于 2022-7-9 11:37 | 顯示全部樓層
Hephaestus 發表于 2022-7-9 01:28
沒人注意到第8行是語法錯誤嗎?

在C89標準里面,任何變量的定義必須放在可執行語句之前,也就是第8行應 ...

第8行放在第6行之前我試過了,就是將unsigned int i=0;放在while(1)之前,編譯不通過,我用的是stc8g1ko8a,P3口有4個I/O,我的(抄樓主的)程序如下
#include <STC8G.H>
//#define char
//#define unsigned int
void main()
{
         P3M0=0x00;
   P3M1=0x00;
         P5M0=0X00;
   P5M1=0X00;
         
         while(1)
         {
       unsigned int i=0;
                   char led4=0;
                                for(led4=0;led4<4;led4++)
                                {
                                        P3=~(0x01<<led4);
                                        for(i=0;i<40000;i++);
                                }
                    for(led4=4;led4>0;led4--)
                                {
                                        P3=~(0x08>>(4-led4));
                                        for(i=0;i<40000;i++);
                                }
                }
}
回復

使用道具 舉報

ID:1038929 發表于 2022-7-9 11:59 | 顯示全部樓層
cnt是無符號整形,第二個for循環cnt>-1的判斷不對,當cnt為0后,再次執行--,cnt變為255
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 在线视频一区二区三区 | 嫩草网| 黄色av网站在线观看 | 女人精96xxx免费网站p | 日韩一二区 | 国产精品99久久久久久宅男 | 在线观看视频福利 | 成人一区二区在线 | 国内精品成人 | 国内精品一区二区 | 午夜专区 | 五月婷婷丁香婷婷 | 拍真实国产伦偷精品 | 中文字幕人成人 | 亚洲午夜精品 | 亚洲综合在线播放 | 日韩欧美在线观看视频 | 青娱乐av | 国产农村妇女毛片精品久久麻豆 | 精品国产欧美一区二区三区成人 | 精品一区二区三区91 | 久久爆操 | 激情视频中文字幕 | 亚洲午夜精品 | 精品国产欧美 | 亚洲精品成人 | 免费性视频 | 亚洲精品2 | 国产精品国产三级国产aⅴ中文 | 欧美久久影院 | 欧美一级二级三级视频 | 成人午夜在线观看 | 午夜精品网站 | 日韩精品一区二区三区中文在线 | 国产日韩欧美在线观看 | 国产精品中文字幕在线播放 | 99久久久国产精品免费消防器 | 亚洲成人一区 | 中文字幕亚洲一区 | 精品视频在线一区 | 91视频91|