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

標題: ht66f70a單片機led燈的閃爍,求大神指教 [打印本頁]

作者: 123000.。    時間: 2019-9-20 18:22
標題: ht66f70a單片機led燈的閃爍,求大神指教
代碼如下:
#include "HT66F70A.H"
void Delay_ms(unsigned int dly)//延時dly ms的子程序
{
unsigned int i;
for(i=0;i<dly;i++)
for(i=0;i<dly;i++);

}
void main()
{
_pa=0;
_pac=0;//pa設(shè)置為輸出
_pa0=0;
while(1)
{Delay_ms(500);
Delay_ms(500);//延時500ms,即0.5s
_pa0=~_pa0;
}
}

功能是實現(xiàn)led燈的閃爍。
但是我無論怎么該延遲函數(shù)這個燈都閃的很快(亮的時間很長,暗的時間幾乎看不到),之前也用這個芯片做步進電機的實驗,步進電機也是只震動不轉(zhuǎn),而且震動的頻率也是固定的。求解。。。。

作者: Y_G_G    時間: 2019-9-20 20:44
_pa0=~_pa0;
這語句放到兩個延時的中間
而不是放到最后
作者: tyrl800    時間: 2019-9-20 21:15
延時函數(shù)錯誤,改成
void Delay_ms(unsigned int dly)//延時dly ms的子程序
{
unsigned int i,j;
for(i=0;i<dly;i++)
for(j=0;j<dly;j++);

}
作者: 123000.。    時間: 2019-9-20 21:57
Y_G_G 發(fā)表于 2019-9-20 20:44
_pa0=~_pa0;
這語句放到兩個延時的中間
而不是放到最后

一樣的結(jié)果,我有個while死循環(huán),根本不是你說的那樣
作者: lyxing    時間: 2019-9-20 22:18
樓上正解。
作者: 飛機翻筋斗    時間: 2019-9-21 08:38
合泰單片機,我記得要把看門狗關(guān)閉的啊
作者: yzwzfyz    時間: 2019-9-21 08:39
兩個:
for(i=0;i<dly;i++)
for(i=0;i<dly;i++);
將其中的一個改成 j 試試         
作者: wulin    時間: 2019-9-21 08:40
樓主的延時函數(shù)是錯誤的,Delay_ms(500);只能得到約6ms延時,肉眼哪能看得出來?
正確寫法:
void Delay_ms(unsigned int dly)//延時dly ms的子程序
{
        unsigned int i,j;
        for(i=0;i<dly;i++)
                for(j=0;j<125;j++);
}
作者: 51_hei    時間: 2019-9-21 13:26
感覺是不是電路連接上面的問題,延時函數(shù)變量命名習慣個人感覺很差,但第二個 for 循環(huán),會首先將 i 重置0,語法角度是沒錯的。不過建議該有的大括號,還有重命名弄好一點。

建議題主把電路圖也順便貼出來,一個軟硬結(jié)合的東西,只拿代碼說有可能布線的鍋,幫不得的。

按照題主的說法是暗的時間幾乎沒有,那就是有暗的時間了,那調(diào)試的時候不先試試先將開關(guān)量置1?如果結(jié)果相反的話,這個代碼加幾行相反代碼就好了。
作者: sgw182    時間: 2019-9-21 16:07
void Delay_ms(unsigned int dly)//延時dly ms的子程序 { unsigned int i,j; for(i=0;i<dly;i++) for(j=0;j<dly;j++);  }
作者: Y_G_G    時間: 2019-9-21 16:49
在燒錄界面看一下,好像是有關(guān)閉看門狗和低電壓復(fù)位的
合泰的指令和8051是不一樣的,你把語句改了之后,延時加長幾看一下

順便說一下,雖然現(xiàn)在C是主流,但合泰這種低端單片機,最好還是用匯編,幾乎所以的臺系的單片機數(shù)據(jù)手冊都會推薦用匯編的
作者: 123000.。    時間: 2019-9-21 21:34
問題已經(jīng)解決了,今天重新吧延遲函數(shù)換了下,但同樣的代碼我燒錄幾遍,有時候正常有時候有問題,估計是硬件的問題
#include <HT66F70A.H>
void delay(unsigned int);//延時dly ms的子程序
void main()
{
_pa=0;
_pac=0;//pa設(shè)置為輸出
_pa0=0;
while(1)
{delay(5000);
  _pa0=~_pa0;
delay(5000);
delay(5000);
delay(5000);//延時500ms,即0.5s

}
}
void delay(unsigned int count)
{
    volatile unsigned int i;
    for(i=0;i<count;i++)
        asm("nop");
}
注:跟這個volatile和 asm("nop")無關(guān)




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1