找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

帖子
查看: 7028|回復(fù): 79
打印 上一主題 下一主題
收起左側(cè)

單片機C語言程序奇怪的問題,我沒有考慮到什么?

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:776619 發(fā)表于 2022-6-2 20:55 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
       原理:開機時讀入1302時間,記住分鐘初值,同時打開繼電器,接通wifi電源。在while(1)循環(huán)內(nèi)不斷的看1302的分鐘
值,如果大于5分鐘就關(guān)wifi。現(xiàn)在出現(xiàn)的問題是開機差不多不滿1分鐘就關(guān)機了。if內(nèi)的條件
((gds1302_time[1]/16*10+gds1302_time[1]%16-5)>(offpower)),如果把大于號改==就可以實現(xiàn)5分鐘關(guān)wifi。


       現(xiàn)在想請問一下高手為什么我在條件里用>號不可以呢?==就可以?

單片機源程序如下:

...............;
unsigned char gds1302_time[7];                               //1302時鐘數(shù)組
............;
unsigned char offpower;                                         //開機時分鐘值
sbit  wifi_power=P1^5;                                         //繼電器
..........;
main()
{
.........;
.........;
ds1302_read_time();                                                       //讀入1302時間值,放數(shù)組gds1302_time里,[1]里的是分鐘。
offpower=gds1302_time[1]/16*10+gds1302_time[1]%16; //分鐘轉(zhuǎn)為數(shù)值,此變量為開機分鐘初始值
if (offpower>49) offpower=0;                                         //將與下面的量比定時最大十分鐘

wifi_power=0;                                                                //打開繼電器,wifi通電。
...................;
...................;
while (1)
    {
      ..........;
      .........;
     ds1302_read_time();                                                                    //動態(tài)讀入時間值
     if ((gds1302_time[1]/16*10+gds1302_time[1]%16-5)>(offpower))  //轉(zhuǎn)化為現(xiàn)時分鐘后與開機時分鐘比較(現(xiàn)定時5                                                                                                      //分鐘)
                {                                                                                    //大于5分鐘后關(guān)wifi電源
                 wifi_power=1;
                 offpower=0xff;                                                              //同時比較初值設(shè)為255,因為1302時鐘原理,它永
                                                                                                    //遠不會大于59,以后只要不關(guān)機再開,永遠不合if
                                                                                                    //條件。
                }         
     ..................;
     .................;
     }

}



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

使用道具 舉報

沙發(fā)
ID:776619 發(fā)表于 2022-6-2 21:57 | 只看該作者
     想了一下,初值取模有點問題如果是定時10分鐘,應(yīng)當(dāng)是offpower>49時,offpwoer應(yīng)當(dāng)是offpwoer+10-60。當(dāng)然我在上面列出的程序是定時5分鐘,則為offpower>55時,offpwoer應(yīng)當(dāng)是offpwoer+5-60。
     現(xiàn)在不說模的問題,是在時間為20幾分鐘時開機它不按我的定時分鐘關(guān)電,而是差不多1分鐘就關(guān)電了,改>于號為==就可以。
回復(fù)

使用道具 舉報

板凳
ID:883242 發(fā)表于 2022-6-2 22:07 | 只看該作者
如果沒有仿真器,那么用串口把(gds1302_time[1]/16*10+gds1302_time[1]%16-5)和(offpower)兩個值打印出來看看。
回復(fù)

使用道具 舉報

地板
ID:230742 發(fā)表于 2022-6-2 22:24 | 只看該作者
如果只是5分鐘后關(guān)閉什么東西,不用1302也行。直接用定時器計時簡單一點。
回復(fù)

使用道具 舉報

5#
ID:776619 發(fā)表于 2022-6-2 22:25 | 只看該作者
Hephaestus 發(fā)表于 2022-6-2 22:07
如果沒有仿真器,那么用串口把(gds1302_time[1]/16*10+gds1302_time[1]%16-5)和(offpower)兩個值打印出來看 ...

好主意,在滿足條件語句里打印。但現(xiàn)在我想問的是為什么>不行,==就可以,是不是單片機把條件當(dāng)作賦值語句什么的了,比如我在這里改>號為單=號,大多數(shù)情況它的條件不為零,它會同樣是一執(zhí)行到就關(guān)電。
回復(fù)

使用道具 舉報

6#
ID:776619 發(fā)表于 2022-6-2 22:32 | 只看該作者
啤酒瓶子老大 發(fā)表于 2022-6-2 22:24
如果只是5分鐘后關(guān)閉什么東西,不用1302也行。直接用定時器計時簡單一點。

不想浪費定時器資源。我這個是1302時鐘程序,wifi每天對時,當(dāng)然對時完成wifi會關(guān)電�,F(xiàn)在是在wifi連不上網(wǎng)的時候就不對時了,一定時間關(guān)wifi,節(jié)能。
回復(fù)

使用道具 舉報

7#
ID:776619 發(fā)表于 2022-6-2 22:36 | 只看該作者
Hephaestus 發(fā)表于 2022-6-2 22:07
如果沒有仿真器,那么用串口把(gds1302_time[1]/16*10+gds1302_time[1]%16-5)和(offpower)兩個值打印出來看 ...

其實打印出來也沒有用,開機到條件滿足就一兩分鐘,打印出來的數(shù)據(jù)對分析作用不太大。無非是我的初值加1兩分鐘。
回復(fù)

使用道具 舉報

8#
ID:645485 發(fā)表于 2022-6-2 22:45 | 只看該作者
本帖最后由 tongguan123 于 2022-6-2 23:14 編輯
Hephaestus 發(fā)表于 2022-6-2 22:07
如果沒有仿真器,那么用串口把(gds1302_time[1]/16*10+gds1302_time[1]%16-5)和(offpower)兩個值打印出來看 ...

首先說明一下,我也是一名初學(xué)者啊。
你所說的通過串口把這兩個值打印出來,是不是在編程序時候,分別將這兩個公式計算的值賦值給兩個變量,然后通過串口發(fā)送出來???
回復(fù)

使用道具 舉報

9#
ID:161164 發(fā)表于 2022-6-2 23:07 | 只看該作者
要不改成這樣試試
  1. while (1)
  2.     {
  3.       ..........;
  4.       .........;
  5.      ds1302_read_time();                                                                    //動態(tài)讀入時間值
  6.          CurrentTime = gds1302_time[1]/16*10+gds1302_time[1]%16;//<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  7.      if (CurrentTime - offpower >= 5)  //轉(zhuǎn)化為現(xiàn)時分鐘后與開機時分鐘比較(現(xiàn)定時5                                                                                                      //分鐘)
  8.                 {                                                                                    //大于5分鐘后關(guān)wifi電源
  9.                  wifi_power=1;
  10.                  offpower=0xff;                                                              //同時比較初值設(shè)為255,因為1302時鐘原理,它永
  11.                                                                                                     //遠不會大于59,以后只要不關(guān)機再開,永遠不合if
  12.                                                                                                     //條件。
  13.                 }         
  14.      ..................;
  15.      .................;
  16.      }
復(fù)制代碼




回復(fù)

使用道具 舉報

10#
ID:776619 發(fā)表于 2022-6-2 23:09 | 只看該作者
tongguan123 發(fā)表于 2022-6-2 22:45
首先說明一下,我也是一名初學(xué)者啊。
你所說的通過串口把這兩個值打印出來,是不是在編程序時候, ...

條件滿足時在進入里面的語句加才有效,要不循環(huán)內(nèi)我的時間值在不斷的讀不斷的變。
回復(fù)

使用道具 舉報

11#
ID:645485 發(fā)表于 2022-6-2 23:13 | 只看該作者
作為一名菜鳥,只能這樣分析了,看圖說話!





所以-------------------------------------

回復(fù)

使用道具 舉報

12#
ID:645485 發(fā)表于 2022-6-2 23:17 | 只看該作者
wolfinn 發(fā)表于 2022-6-2 21:57
想了一下,初值取模有點問題如果是定時10分鐘,應(yīng)當(dāng)是offpower>49時,offpwoer應(yīng)當(dāng)是offpwoer+10-60。 ...
所以你那個取模應(yīng)該是沒問題的。
回復(fù)

使用道具 舉報

13#
ID:776619 發(fā)表于 2022-6-2 23:18 | 只看該作者
lkc8210 發(fā)表于 2022-6-2 23:07
要不改成這樣試試

謝謝你,我估計你這想法也是可以的,因為我用==也是可以通過的。

其實寫這程序出來只是提供一個思路,怎樣運行一段時間關(guān)一個東西,我這里利用上了1302時鐘的分鐘功能,當(dāng)然用定時器0也是可以的。
程序用于GPS、Wifi雙模塊每天定時對1302對時,關(guān)電再也可以對時一次。

我想了解的是邏輯語句的>號和==為什么會有這效果,是不是==號有強制數(shù)據(jù)轉(zhuǎn)換功能。而>號就沒有。而表達式的左邊是不是為INT整形了,而右邊是字符形,不轉(zhuǎn)換類型的話是不是INT整形永遠大于任何一個字符形。
回復(fù)

使用道具 舉報

14#
ID:645485 發(fā)表于 2022-6-2 23:21 | 只看該作者
wolfinn 發(fā)表于 2022-6-2 23:09
條件滿足時在進入里面的語句加才有效,要不循環(huán)內(nèi)我的時間值在不斷的讀不斷的變。
ok,了解!Thanks, my brother!
回復(fù)

使用道具 舉報

15#
ID:776619 發(fā)表于 2022-6-2 23:22 | 只看該作者
tongguan123 發(fā)表于 2022-6-2 23:17
所以你那個取模應(yīng)該是沒問題的。

程序里沒有寫-60,當(dāng)然這里不是討論這個模的問題,最多是在變模處會有1~10分鐘的不規(guī)則定時。
回復(fù)

使用道具 舉報

16#
ID:776619 發(fā)表于 2022-6-2 23:27 | 只看該作者
tongguan123 發(fā)表于 2022-6-2 23:13
作為一名菜鳥,只能這樣分析了,看圖說話!

你錯了,如你所說,1302取出的數(shù)是0x24,而不是24,所以如果要數(shù)碼管顯示的話得2后直接查2的段碼顯示就行,余4也同樣查4的段碼。如在LED等顯示要加0x30或48,或‘ ’空格。2要加,4也要加。
回復(fù)

使用道具 舉報

17#
ID:645485 發(fā)表于 2022-6-2 23:31 | 只看該作者
wolfinn 發(fā)表于 2022-6-2 23:22
程序里沒有寫-60,當(dāng)然這里不是討論這個模的問題,最多是在變模處會有1~10分鐘的不規(guī)則定時。
因為你設(shè)置的時間剛好是五分鐘就要執(zhí)行關(guān)閉WIFI電源,所以按照你那個if里面取模公式,必須要等于==offpower,才滿足條件,即條件為真,才執(zhí)行里面的語句!
回復(fù)

使用道具 舉報

18#
ID:645485 發(fā)表于 2022-6-2 23:39 | 只看該作者
所以這條語句應(yīng)該不會執(zhí)行吧?   if (offpower>49) offpower=0;      //將與下面的量比定時最大十分鐘
回復(fù)

使用道具 舉報

19#
ID:776619 發(fā)表于 2022-6-2 23:48 | 只看該作者
tongguan123 發(fā)表于 2022-6-2 23:31
因為你設(shè)置的時間剛好是五分鐘就要執(zhí)行關(guān)閉WIFI電源,所以按照你那個if里面取模公式,必須要等于==offpowe ...

你沒有明白,我不是要求必須要==才關(guān)電,而是>于也可以,只要關(guān)了就行。
比如我取初值時為58,程序里認為大于49了,初值為0.然后過三分鐘,時間為01,大于00了,關(guān)電,達不到10分鐘的定時要求。加上模就不同了,58+10-60=08分鐘,到09才關(guān)電.

同樣5分鐘的定時模也一樣。我取初值時為58,程序里認為大于55了,初值為0.然后過三分鐘,時間為01,大于00了,關(guān)電,達不到5分鐘的定時要求。加上模就不同了,58+5-60=03分鐘,到04才關(guān)電.
回復(fù)

使用道具 舉報

20#
ID:883242 發(fā)表于 2022-6-2 23:50 | 只看該作者
tongguan123 發(fā)表于 2022-6-2 23:39
所以這條語句應(yīng)該不會執(zhí)行吧?   if (offpower>49) offpower=0;      //將與下面的量比定時最大十分鐘

你明顯不對,如果是59分,那么是0x59/16*10
回復(fù)

使用道具 舉報

21#
ID:776619 發(fā)表于 2022-6-2 23:50 | 只看該作者
tongguan123 發(fā)表于 2022-6-2 23:39
所以這條語句應(yīng)該不會執(zhí)行吧?   if (offpower>49) offpower=0;      //將與下面的量比定時最大十分鐘

時間分鐘是59,但是1302讀出的是0x59,而不是值是59,值是5*16+9=89
回復(fù)

使用道具 舉報

22#
ID:883242 發(fā)表于 2022-6-2 23:52 | 只看該作者
tongguan123 發(fā)表于 2022-6-2 22:45
本帖最后由 tongguan123 于 2022-6-2 23:14 編輯

首先說明一下,我也是一名初學(xué)者啊。

對��!這樣才能知道這兩個值到底是什么,而不是樓主夢想中的值。
回復(fù)

使用道具 舉報

23#
ID:645485 發(fā)表于 2022-6-3 00:02 | 只看該作者
wolfinn 發(fā)表于 2022-6-2 23:50
時間分鐘是59,但是1302讀出的是0x59,而不是值是59,值是5*16+9=89

OK!
回復(fù)

使用道具 舉報

24#
ID:776619 發(fā)表于 2022-6-3 00:05 | 只看該作者
tongguan123 發(fā)表于 2022-6-2 23:39
所以這條語句應(yīng)該不會執(zhí)行吧?   if (offpower>49) offpower=0;      //將與下面的量比定時最大十分鐘

你別跟我糾結(jié)模的問題啦,在40以下不跟模運算有關(guān)的用 >都出現(xiàn)點問題,模我改了以后沒問題的了。還有你對1302取出的數(shù)不了解,它用的是BCD碼表示一位數(shù)值,是多少分鐘就是0x多少,小時、年、月、日、秒都一樣。BCD是用四位二進制表示一位數(shù)字,我們就理解直讀就行。比如0x59,就是0101 1001,為什么這么表示而不用89(10進制)。用BCD碼以后顯示運算方便啊。好象書上寫過最快的是移位和位運算吧,如果右移四,      
0000 0101 5這個數(shù)不是出來了?再位運算與0F,0000 1001不是出來了。當(dāng)然我在程序里用什么除16乘10再加16的余數(shù)也是一樣的。
回復(fù)

使用道具 舉報

25#
ID:776619 發(fā)表于 2022-6-3 00:07 | 只看該作者
只是討論,討論才讓人明白,并不是顯示我多懂,是想讓我懂的東西別人也懂了。
回復(fù)

使用道具 舉報

26#
ID:645485 發(fā)表于 2022-6-3 00:12 | 只看該作者
wolfinn 發(fā)表于 2022-6-3 00:05
你別跟我糾結(jié)模的問題啦,在40以下不跟模運算有關(guān)的用 >都出現(xiàn)點問題,模我改了以后沒問題的了。還有你對 ...

好吧!
回復(fù)

使用道具 舉報

27#
ID:776619 發(fā)表于 2022-6-3 00:13 | 只看該作者

好吧,再說回轉(zhuǎn)問題,是不是拿89當(dāng)59運算呢。不是的,還是得算回59,就是89/16,再89%16,當(dāng)然可以寫0x59/16+0x59%16直觀點,砍一個位的數(shù)就行。
回復(fù)

使用道具 舉報

28#
ID:776619 發(fā)表于 2022-6-3 00:28 | 只看該作者

再說一個,比如我們要LED十六進制顯示出一個數(shù),我們知道它的值是0x6B(107十進制),先原樣字符0x,再經(jīng)過運算得6(0x36,即6+0x30),再輸出B(是不是0x3B?不是的,0~9要字符顯示是加0x30,余數(shù)大于10以上的A~F要加0x37才正常顯示。如要顯示0x6b,這樣B小寫,同樣余數(shù)大于10以上的a~f也不能加0x37了,要加什么,我還沒算,自己查ASCII表也可以算出來。
回復(fù)

使用道具 舉報

29#
ID:624769 發(fā)表于 2022-6-3 00:34 | 只看該作者
我不知道為什么你要用這么復(fù)雜的算法……
不知道乘除法非常費資源的么? 而且跨60的時候,還要策略去補償,
只是要計算多少分鐘,這樣不是最穩(wěn)妥?

void main()
{
offpower = 100;

while(1)
{
........................
     if(offpower)       //非0才進入
     {
           if(temp != gds1302_time[1])
           {
                    temp = gds1302_time[1];
                    if(++offpower  > 105)
                    {
                              wifi_power=1;
                              offpower = 0;  
                     }
            }
}
}

回復(fù)

使用道具 舉報

30#
ID:776619 發(fā)表于 2022-6-3 00:37 | 只看該作者
wolfinn 發(fā)表于 2022-6-3 00:28
再說一個,比如我們要LED十六進制顯示出一個數(shù),我們知道它的值是0x6B(107十進制),先原樣字符0x,再經(jīng) ...

小寫表示a~f要加0x57。
回復(fù)

使用道具 舉報

31#
ID:776619 發(fā)表于 2022-6-3 00:50 | 只看該作者
188610329 發(fā)表于 2022-6-3 00:34
我不知道為什么你要用這么復(fù)雜的算法……
不知道乘除法非常費資源的么? 而且跨60的時候,還要策略去補償 ...

多謝指導(dǎo),你的才真的高。學(xué)習(xí)。
總會有問題的,你怎不查下為什么我會出這種小問題?是數(shù)據(jù)左右不同?
另外單片機用數(shù)組多了會有數(shù)據(jù)重疊現(xiàn)象,當(dāng)然對結(jié)果沒有大影響,就是會影響LED顯示,有什么解決方法?
回復(fù)

使用道具 舉報

32#
ID:624769 發(fā)表于 2022-6-3 13:12 | 只看該作者
wolfinn 發(fā)表于 2022-6-3 00:50
多謝指導(dǎo),你的才真的高。學(xué)習(xí)。
總會有問題的,你怎不查下為什么我會出這種小問題?是數(shù)據(jù)左右不同?
...

查問題, 是需要標(biāo)本的……, 樓上好多層都讓你回傳數(shù)據(jù),你覺得沒有意義。那么很多東西是沒有辦法分析的……

給你前面那個代碼,說實話,其實我是打算在你不愿意采集標(biāo)本的前提下,通過我比較確認的代碼變相的采集標(biāo)本。

非要拿你的代碼來說的話……,至少我看下來,除了:
if (offpower>49) offpower=0;                                         //將與下面的量比定時最大十分鐘
這個帶來很多問題之外,
理論上,如果你在 20分左右的時候,開機,應(yīng)該是可以5分鐘關(guān)機的。

非要我給你一個方案的話,我以為:

ds1302_read_time();                                                                    //動態(tài)讀入時間值
if((gds1302_time[1] < 0x60) && ((gds1302_time[1] & 0x0f)< 0x0A))     //這里增加一個判斷{
     if ((gds1302_time[1]/16*10+gds1302_time[1]%16-5)>(offpower))  //轉(zhuǎn)化為現(xiàn)時分鐘后與開機時分鐘比較(現(xiàn)定時5                                                                                                      //分鐘)
                {                                                                                    //大于5分鐘后關(guān)wifi電源
                 wifi_power=1;
                 offpower=0xff;                                                              //同時比較初值設(shè)為255,因為1302時鐘原理,它永
                                                                                                    //遠不會大于59,以后只要不關(guān)機再開,永遠不合if
                                                                                                    //條件。
                }

}

應(yīng)該可以解決你的問題。
至于原因,我相信,當(dāng)你這么寫確實解決問題了之后,你就明白為什么了。
回復(fù)

使用道具 舉報

33#
ID:776619 發(fā)表于 2022-6-3 20:26 | 只看該作者
188610329 發(fā)表于 2022-6-3 13:12
查問題, 是需要標(biāo)本的……, 樓上好多層都讓你回傳數(shù)據(jù),你覺得沒有意義。那么很多東西是沒有辦法分析的 ...

唉,轉(zhuǎn)模處不討論,這東西經(jīng)過我進行轉(zhuǎn)模處理后是沒有問題的了。我是想讓高手你以你的經(jīng)驗看看條件中同樣是關(guān)系表達式,為什么用>號不行,==號反倒可以,同時我也試過了>=也同樣不行的哈。如果是純粹地為了讓程序運行得了,通得過。用==就是了,或者用你那高效率的奇妙寫法就行�?赡苓€是數(shù)據(jù)轉(zhuǎn)換的問題,因為我是直接表達式,如果放一有類型變量后再比較可能會好。
回復(fù)

使用道具 舉報

34#
ID:624769 發(fā)表于 2022-6-3 23:28 | 只看該作者
wolfinn 發(fā)表于 2022-6-3 20:26
唉,轉(zhuǎn)模處不討論,這東西經(jīng)過我進行轉(zhuǎn)模處理后是沒有問題的了。我是想讓高手你以你的經(jīng)驗看看條件中同樣 ...

所以,我就是問, 按我上面寫的加一個判斷, 大于是不是可以了? 這個也很難回答么?
回復(fù)

使用道具 舉報

35#
ID:776619 發(fā)表于 2022-6-4 11:30 | 只看該作者
188610329 發(fā)表于 2022-6-3 23:28
所以,我就是問, 按我上面寫的加一個判斷, 大于是不是可以了? 這個也很難回答么?

我歷來都是說不觸發(fā)模的情況下20多分鐘也不行,所以你說的有關(guān)加個檢查模的那條命令這沒有必要試。另外我不想用串口輸出兩個值是因為輸出要做格式化處理,我隱隱感覺這可能是左邊的公式?jīng)]有數(shù)據(jù)類型,可能是系統(tǒng)做轉(zhuǎn)化的問題,而我用輸出同樣是找不到答案的。用頭腦可以運行出時間沒有超過兩分鐘。另外我有點不好意思,好象我在逼著你回答一樣。我后來也把左邊自己加上(int)和 (unsigned char)自己強廹讓它數(shù)據(jù)轉(zhuǎn)化,也不行。
        以后我少點發(fā)這種請教的問題了,其實我目的也不在請教,只是想說明自己遇到過這種情況,如有高手點一下最好,如果同樣是菜鳥回復(fù)就算不解決不了問題,我在回應(yīng)中舒緩下神經(jīng),說不定一閃光自己能解決了。
回復(fù)

使用道具 舉報

36#
ID:624769 發(fā)表于 2022-6-4 12:26 | 只看該作者
wolfinn 發(fā)表于 2022-6-4 11:30
我歷來都是說不觸發(fā)模的情況下20多分鐘也不行,所以你說的有關(guān)加個檢查模的那條命令這沒有必要試。另外我 ...

行吧,如無意外,最后一次對此問題展開討論。
在所有的判定當(dāng)中, == 是最為嚴格的, 當(dāng)測試 == 能正常動作時,不管你換成大于和小于理論上都是能正常動作的。所以,加任何強轉(zhuǎn)什么的都是毫無必要的。這是無用功�。。∧阋詾槟阕隽撕芏�,其實,等于什么都沒做。
那么,== 能夠正確的判定, 為什么換了 > 就出問題了呢? 問題肯定不在判定的公式上,而是天平兩邊的東西和你預(yù)料的不同,在極為嚴格的 == 下,被貍貓換太子的數(shù)據(jù),不會讓==準(zhǔn)許進入if分支,但是,如果不嚴格 > 就會允許進入到 if 分支。
不知基于什么原因,但凡對你的數(shù)據(jù)源有一點懷疑,就好像刺痛你的神經(jīng)源一樣。但是,事實上,如果上面的描述你沒有刻意隱藏一些其他信息的話,基本可以確定,就是你數(shù)據(jù)源有亂入數(shù)據(jù)。不過,既然你也說了,你不打算知道問題的真相,那么,就當(dāng)我瞎起勁就是了。
反正,你解決問題也好,了解真相也好,對于我是沒有辦法好處的。
回復(fù)

使用道具 舉報

37#
ID:776619 發(fā)表于 2022-6-4 13:29 | 只看該作者
188610329 發(fā)表于 2022-6-4 12:26
行吧,如無意外,最后一次對此問題展開討論。
在所有的判定當(dāng)中, == 是最為嚴格的, 當(dāng)測試 == 能正常 ...

好吧,謝謝你,左邊是一個現(xiàn)算值,右邊一個算好的變量值,數(shù)據(jù)亂入?不想吵了,謝謝你,浪費了你的時間。
回復(fù)

使用道具 舉報

38#
ID:99525 發(fā)表于 2022-6-4 14:27 | 只看該作者
比較前,把等號左邊的值送串口看一眼很難嗎?爭來爭去,沒有數(shù)據(jù)徒傷和氣,有什么意義?
回復(fù)

使用道具 舉報

39#
ID:121859 發(fā)表于 2022-6-4 14:38 | 只看該作者
關(guān)鍵的問題是當(dāng),分值大于49時,被賦予了值為0,當(dāng)然就會出問題了。所以要分別處理大于49和小于49的情況。
回復(fù)

使用道具 舉報

40#
ID:776619 發(fā)表于 2022-6-4 15:31 | 只看該作者
沒必要送串口了,打印出來也分析不出什么引起的。單片機很忠實的。條件運算的結(jié)果肯定是為真(1),轉(zhuǎn)換后的數(shù)我認為就是數(shù)據(jù)自動轉(zhuǎn)換的問題了,經(jīng)換換后的數(shù)肯定是大于初值的,至于==的情況只有一個滿足,所以用==可以獲得我要的定時結(jié)果。我在網(wǎng)上搜了一下,左右數(shù)據(jù)類型不同的情況比較確實會自動轉(zhuǎn)換。按說法應(yīng)該是負數(shù)轉(zhuǎn)換才會出錯,也就是在后面讀的分鐘在00~定時值時,左邊是負值,轉(zhuǎn)換后永遠大于初值。至于不為負轉(zhuǎn)換后也這樣我就不明白了。
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表