找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 6884|回復(fù): 34
打印 上一主題 下一主題
收起左側(cè)

請(qǐng)大家看看我這個(gè)C程序有什么錯(cuò)誤。是用來(lái)控制舵機(jī)的,但現(xiàn)在舵機(jī)不動(dòng)。

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:85201 發(fā)表于 2015-7-15 22:43 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
#include<reg52.h>
#define uint unsigned int
sbit pwm=P2^0;//定義P2.0口為PWM輸出口
uint num,end,jd;//定義高電平、總時(shí)間、角度標(biāo)識(shí)
void main()//主程序
{
        TMOD=17;//設(shè)置定時(shí)器T0、T1工作在方式一
        TH0=(65535-92)/256;//T0定時(shí)為0.1MS
        TL0=(65535-92)%256;
        TH1=(65535-18349)/256;//T1定時(shí)為20MS
        TL1=(65535-18349)%256;
        EA=1;
        ET0=1;
        ET1=1;
        TR0=1;
        TR1=1;
        jd=10;
        num=0;
          if(end>3000)//如果T1定時(shí)器中斷次數(shù)達(dá)到3000次,也就是1分鐘,程序?qū)⑼V惯\(yùn)行
            {
                   EA=0;
                   while(1);
            }
}
void time1()interrupt 1
{
TH0=(65535-92)/256;
TL0=(65535-92)%256;
        num++;//T0每中斷一次,高電平標(biāo)識(shí)加1,當(dāng)大于角度標(biāo)識(shí)時(shí),PWM置于低電平,同時(shí)關(guān)掉T0中斷
          if(num>jd)
          {
                  pwm=0;
                  num=0;
                  TR0=0;
          }
}
void time3()interrupt 3
{
        TH1=(65535-18349)/256;
        TL1=(65535-18349)%256;
        jd++;
        end++;
        TR0=1;
        pwm=1;//T1每中斷一次,將PWM重新置為高電平
          if(jd>22)//當(dāng)角度標(biāo)識(shí)大于22時(shí),也就是高電平時(shí)間大于2.2MS時(shí),將角度標(biāo)識(shí)重新置為10,也就是1MS
                {
                        jd=10;
                }
}

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

使用道具 舉報(bào)

沙發(fā)
ID:77578 發(fā)表于 2015-7-16 00:35 來(lái)自手機(jī) | 只看該作者
你的大循環(huán)呢?沒(méi)有大循環(huán),這程序不是一直在初始化嘛?而且就是個(gè)舵機(jī)程序,怎么寫(xiě)的那么復(fù)雜啊,我是沒(méi)看懂怎么個(gè)意思,

評(píng)分

參與人數(shù) 1黑幣 +35 收起 理由
admin + 35 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

板凳
ID:85201 發(fā)表于 2015-7-16 14:25 | 只看該作者
moyuqilin 發(fā)表于 2015-7-16 00:35
你的大循環(huán)呢?沒(méi)有大循環(huán),這程序不是一直在初始化嘛?而且就是個(gè)舵機(jī)程序,怎么寫(xiě)的那么復(fù)雜啊,我是沒(méi)看 ...

一語(yǔ)驚醒夢(mèng)中人啊,的確是把大循環(huán)忘了。非常感謝。我回家改正一下試試。我這個(gè)程序是想實(shí)現(xiàn)舵機(jī)左右擺動(dòng),持續(xù)一分鐘后程序停止。

評(píng)分

參與人數(shù) 1黑幣 +35 收起 理由
admin + 35 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

地板
ID:77578 發(fā)表于 2015-7-17 00:33 來(lái)自手機(jī) | 只看該作者
slh0721 發(fā)表于 2015-7-16 14:25
一語(yǔ)驚醒夢(mèng)中人啊,的確是把大循環(huán)忘了。非常感謝。我回家改正一下試試。我這個(gè)程序是想實(shí)現(xiàn)舵機(jī)左右擺動(dòng) ...

一個(gè)定時(shí)器不行嘛。用兩個(gè)有點(diǎn)浪費(fèi)了吧

評(píng)分

參與人數(shù) 1黑幣 +35 收起 理由
admin + 35 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

5#
ID:85201 發(fā)表于 2015-7-17 00:45 | 只看該作者
moyuqilin 發(fā)表于 2015-7-17 00:33
一個(gè)定時(shí)器不行嘛。用兩個(gè)有點(diǎn)浪費(fèi)了吧

反正資源夠用,也是想用兩個(gè)試試。還有一個(gè)問(wèn)題,我加了大循環(huán)后,還是不行,我真搞不懂是哪的問(wèn)題了。給你再貼一下程序,麻煩幫忙看一下:
#include<reg52.h>
#define uint unsigned int
sbit pwm=P2^0;
uint num,end,jd;  //定義高電平時(shí)間標(biāo)識(shí)、程序運(yùn)行時(shí)間和角度標(biāo)識(shí)
void main()  //主函數(shù)
{
        TMOD=17;  //定時(shí)器0和1工作在方式1
        TH0=(65535-459)/256;  //定時(shí)器1定時(shí)時(shí)間為0.5ms,11.0592晶振
        TL0=(65535-459)%256;
        TH1=(65535-18349)/256;  //定時(shí)器2定時(shí)時(shí)間為20ms,11.0592晶振
        TL1=(65535-18349)%256;
        EA=1;  //打開(kāi)中斷總開(kāi)關(guān)
        ET0=1;  //打開(kāi)TO定時(shí)開(kāi)關(guān)
        ET1=1;  //打開(kāi)T1定時(shí)開(kāi)關(guān)
        TR0=1;  //T0定時(shí)器開(kāi)始
        TR1=1;  //T1定時(shí)器開(kāi)始
        jd=1;  //為角度標(biāo)識(shí)賦一個(gè)初值
        num=0;  //為高電平標(biāo)識(shí)賦一個(gè)初值
        while(1)  //大循環(huán)等待
        {
          if(end==3000)  //如果時(shí)間到達(dá)一分鐘,則程序停止
            {
                   EA=0;
                   while(1);
            }
  }
}       
void time1()interrupt 1   //T0中斷程序
{
TH0=(65535-459)/256;  //重新賦值
TL0=(65535-459)%256;
        num++;  //每中斷一次,NUM加1,大于角度標(biāo)識(shí)后將輸出設(shè)為低電平,NUM數(shù)值清零,同時(shí)關(guān)閉此中斷
          if(num>jd)
          {
                  pwm=0;
                  num=(num+1);
                  TR0=0;
          }
}
void time3()interrupt 3   //T1中斷程序
{
        TH1=(65535-18349)/256;  //重新賦值
        TL1=(65535-18349)%256;
        jd=(jd+1);
        end=(end+1);
        TR0=1;  //重新打開(kāi)T0中斷
        pwm=1;  //每次T1中斷后,IO口電平重新設(shè)為高電平
          if(jd>4)  //每當(dāng)角度標(biāo)識(shí)大于4,也就是高電平時(shí)間大于2MS時(shí),重新設(shè)置為0.5MS
                {
                        jd=1;
                }
}

評(píng)分

參與人數(shù) 1黑幣 +35 收起 理由
admin + 35 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

6#
ID:85201 發(fā)表于 2015-7-17 00:47 | 只看該作者
moyuqilin 發(fā)表于 2015-7-17 00:33
一個(gè)定時(shí)器不行嘛。用兩個(gè)有點(diǎn)浪費(fèi)了吧

原以為是T0定時(shí)太短,造成中斷沖突,所以把T0的中斷時(shí)間改長(zhǎng)了,還是不行。
回復(fù)

使用道具 舉報(bào)

7#
ID:85201 發(fā)表于 2015-7-17 00:50 | 只看該作者
moyuqilin 發(fā)表于 2015-7-17 00:33
一個(gè)定時(shí)器不行嘛。用兩個(gè)有點(diǎn)浪費(fèi)了吧

還有,舵機(jī)用的是銀燕的ES08A,難道這個(gè)舵機(jī)的周期不是20MS或者高電平周期不是0.5--2.5MS?真有點(diǎn)搞不懂了。
回復(fù)

使用道具 舉報(bào)

8#
ID:80992 發(fā)表于 2015-7-17 14:24 | 只看該作者
左右擺要不了這么復(fù)雜吧

評(píng)分

參與人數(shù) 1黑幣 +35 收起 理由
admin + 35 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

9#
ID:85201 發(fā)表于 2015-7-17 15:55 | 只看該作者
xtitxjg 發(fā)表于 2015-7-17 14:24
左右擺要不了這么復(fù)雜吧

請(qǐng)問(wèn)您有什么更簡(jiǎn)單的辦法?還望賜教啊。
回復(fù)

使用道具 舉報(bào)

10#
ID:80992 發(fā)表于 2015-7-18 16:10 | 只看該作者
slh0721 發(fā)表于 2015-7-17 15:55
請(qǐng)問(wèn)您有什么更簡(jiǎn)單的辦法?還望賜教啊。

我想回服你的,但每次把思路方法打到一半,就會(huì)彈個(gè)筐筐出來(lái),說(shuō)“哈哈360瀏覽器崩潰了”,每次都這樣,字實(shí)在是太難打了,所以我只有回著些了

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

11#
ID:80992 發(fā)表于 2015-7-18 20:36 | 只看該作者
樓主要得可是這個(gè)效果

整個(gè)程序從頭文件到尾,加上大大小小的文件各種括號(hào)47行,左右擺18行,當(dāng)然沒(méi)寫(xiě)停擺,停擺加個(gè)變量加個(gè)IF

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

12#
ID:80992 發(fā)表于 2015-7-18 21:02 | 只看該作者
本帖最后由 xtitxjg 于 2015-7-18 21:04 編輯

哎呀,有崩潰了,回帖字一多就崩潰
等著我用記事本打,完了COPY過(guò)來(lái),看它還崩潰不
回復(fù)

使用道具 舉報(bào)

13#
ID:85201 發(fā)表于 2015-7-18 21:42 | 只看該作者
xtitxjg 發(fā)表于 2015-7-18 20:36
樓主要得可是這個(gè)效果

整個(gè)程序從頭文件到尾,加上大大小小的文件各種括號(hào)47行,左右擺18行,當(dāng)然沒(méi)寫(xiě)停 ...

沒(méi)錯(cuò),就是要這種效果。
回復(fù)

使用道具 舉報(bào)

14#
ID:80992 發(fā)表于 2015-7-18 22:28 | 只看該作者
本帖最后由 xtitxjg 于 2015-7-18 23:07 編輯
slh0721 發(fā)表于 2015-7-18 21:42
沒(méi)錯(cuò),就是要這種效果。

程序就不給你了,給你點(diǎn)思路,也許這樣對(duì)你幫助更大,先看波形圖。
+90度波形圖
-90度波形圖
如圖所示,PWM的周期為20MS,要改變舵機(jī)角度,就要改變此PWM的占空比
有個(gè)方法,假如我們吧這個(gè)20MS分成200份,那1份的時(shí)間就是100US
我們可以用定時(shí)器定時(shí)100US中斷一次,中斷200次就是一個(gè)周期,分了段就簡(jiǎn)單了,
我們知道普通模擬舵機(jī)的控制信號(hào)為50HZ,高電平寬度為500us對(duì)應(yīng)-90度—2500us對(duì)應(yīng)+90度
如果我們想讓舵機(jī)移到-90度,我們只需要對(duì)中斷計(jì)數(shù)。
在第1次進(jìn)入中斷的時(shí)候,我們把XI/O口拉高,在第6次進(jìn)中斷的時(shí)候拉低,我們就得到了500us的高電平
舵機(jī)移到-90度位置。
在下一個(gè)周期來(lái)的第一次中斷的時(shí)候,我們把XI/O口拉高,在第7次進(jìn)中斷的時(shí)候拉低,這次我們就得到了600us的高電平
舵機(jī)移到-90度+100us/度的位置。
接下來(lái)就是700US.800us........以此類(lèi)推,一直到2500us,
當(dāng)?shù)搅?500us的時(shí)候,我們?cè)賮?lái)減
周期開(kāi)始第一次拉高,25次的是時(shí)候拉低,舵機(jī)移到+90度-100/度,
在下一個(gè)周期來(lái)的第一次中斷的時(shí)候拉高,24次的是時(shí)候拉低,舵機(jī)移到+90度-100us/度-100us度,
以此類(lèi)推,一直到500us,又開(kāi)加,到2500有減,如次往復(fù)一個(gè)定時(shí)器搞定,是不是很簡(jiǎn)單?
思路告述你了。
至于振膜計(jì)數(shù)和清零,舵機(jī)每次轉(zhuǎn)動(dòng)多少度以及多少時(shí)間動(dòng)作一次,這個(gè)就要你自己去悟想辦法寫(xiě)了。
其實(shí)也并不復(fù)雜,就是兩三個(gè)變量,幾個(gè)IF和分辨率THX,TLX配置的問(wèn)題,等你看明白了,寫(xiě)出來(lái)了,普通51軟件模擬PWM
也就算學(xué)會(huì)了

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

15#
ID:85201 發(fā)表于 2015-7-19 01:21 | 只看該作者
xtitxjg 發(fā)表于 2015-7-18 22:28
程序就不給你了,給你點(diǎn)思路,也許這樣對(duì)你幫助更大,先看波形圖。
+90度波形圖
-90度波形圖

我現(xiàn)在剛看完中斷這段教程。后面的還沒(méi)有學(xué)到。你講的道理很明白,但現(xiàn)在我還不知道用什么方法能讓它順序加、順序減,等于是閉門(mén)造車(chē)啊。如果不是時(shí)間緊的話,我就按部就班的學(xué)了,但現(xiàn)在我需要盡快把小裝置做出來(lái)給別人,所以我想還是給我看看你的程序吧,我作為一個(gè)參考,也能更快的掌握這方面的知識(shí)。萬(wàn)分感謝。
回復(fù)

使用道具 舉報(bào)

16#
ID:85201 發(fā)表于 2015-7-19 23:57 | 只看該作者
xtitxjg 發(fā)表于 2015-7-18 22:28
程序就不給你了,給你點(diǎn)思路,也許這樣對(duì)你幫助更大,先看波形圖。
+90度波形圖
-90度波形圖

我今天又抽空研究了一下,還是沒(méi)有頭緒,就期待您的程序發(fā)布出來(lái)了。不然我這個(gè)坎看來(lái)是短期內(nèi)不好過(guò)去了。
回復(fù)

使用道具 舉報(bào)

17#
ID:80992 發(fā)表于 2015-7-20 00:50 | 只看該作者
本帖最后由 xtitxjg 于 2015-7-20 01:03 編輯
slh0721 發(fā)表于 2015-7-19 01:21
我現(xiàn)在剛看完中斷這段教程。后面的還沒(méi)有學(xué)到。你講的道理很明白,但現(xiàn)在我還不知道用什么方法能讓它順序 ...

加減循環(huán)

if(變量1)
{
if(變量2>5)
{
變量2--;
}
else
{
變量1=0;
}
}
else
{
if(變量2<26)
{
變量2++;
}
else
{
變量1=1;
}
}

/////////////////////////////////////////////////////////////


f(變量1)
{
變量2--;
if(變量2〈=5)
{
變量1=0;
}
}
else
{
變量2++;
if(變量2>=26)
{
變量1=1;
}
}




評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

18#
ID:86218 發(fā)表于 2015-7-20 09:52 | 只看該作者
沒(méi)有大循環(huán)

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

19#
ID:85201 發(fā)表于 2015-7-20 12:48 | 只看該作者

謝謝,這個(gè)我后面加上了。
回復(fù)

使用道具 舉報(bào)

20#
ID:85201 發(fā)表于 2015-7-20 23:33 | 只看該作者
xtitxjg 發(fā)表于 2015-7-20 00:50
加減循環(huán)

if(變量1)

沒(méi)太看明白,if后面括號(hào)里面不應(yīng)該是表達(dá)式嗎?只寫(xiě)變量1的話,不算是表達(dá)式吧。
回復(fù)

使用道具 舉報(bào)

21#
ID:80992 發(fā)表于 2015-7-21 08:27 | 只看該作者
本帖最后由 xtitxjg 于 2015-7-21 08:49 編輯
slh0721 發(fā)表于 2015-7-20 23:33
沒(méi)太看明白,if后面括號(hào)里面不應(yīng)該是表達(dá)式嗎?只寫(xiě)變量1的話,不算是表達(dá)式吧。

IF只判斷真假,與是否表達(dá)式無(wú)關(guān)
其實(shí)你那個(gè)程序不需要每次加減,直接給最大或最小

IF(變量>10000) ///////////////10000*100=1s
{                     
IF(變量==25)
{變量2=5;
變量=0;}
else
{
變量2=25;
變量=0;
}
}
變量++;


評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

22#
ID:85201 發(fā)表于 2015-7-21 23:49 | 只看該作者
xtitxjg 發(fā)表于 2015-7-21 08:27
IF只判斷真假,與是否表達(dá)式無(wú)關(guān)
其實(shí)你那個(gè)程序不需要每次加減,直接給最大或最小

見(jiàn)笑,雖然我明白你講的邏輯,但我到現(xiàn)在還是寫(xiě)不出正常的程序來(lái)。我可能還欠缺一些基本知識(shí)。您還是把您的程序給我看看吧,沒(méi)有成功的案例參考,要走不少?gòu)澛纺亍_有,我也沒(méi)多少時(shí)間可用了,再做不出來(lái),我就得失信于人了。拜托了。
回復(fù)

使用道具 舉報(bào)

23#
ID:80992 發(fā)表于 2015-7-23 14:38 | 只看該作者
slh0721 發(fā)表于 2015-7-21 23:49
見(jiàn)笑,雖然我明白你講的邏輯,但我到現(xiàn)在還是寫(xiě)不出正常的程序來(lái)。我可能還欠缺一些基本知識(shí)。您還是把您 ...

給你吧,寫(xiě)好了1秒一次,60次 qd.rar (340 Bytes, 下載次數(shù): 51)

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

24#
ID:85201 發(fā)表于 2015-7-23 14:49 | 只看該作者
xtitxjg 發(fā)表于 2015-7-23 14:38
給你吧,寫(xiě)好了1秒一次,60次

不勝感激,真的是不勝感激。若不介意,能留個(gè)QQ嗎?我們也算是志趣相同,你在這方面也是高手了,所以我想今后有疑難的地方還要向你多請(qǐng)教。
回復(fù)

使用道具 舉報(bào)

25#
ID:80992 發(fā)表于 2015-7-23 15:00 | 只看該作者
slh0721 發(fā)表于 2015-7-23 14:49
不勝感激,真的是不勝感激。若不介意,能留個(gè)QQ嗎?我們也算是志趣相同,你在這方面也是高手了,所以我想 ...

我高手的很反正幼兒園一般的小盆友還是整不贏我滴QQ一般一上了,微信吧33136583
回復(fù)

使用道具 舉報(bào)

26#
ID:85201 發(fā)表于 2015-7-23 17:15 | 只看該作者
xtitxjg 發(fā)表于 2015-7-23 15:00
我高手的很反正幼兒園一般的小盆友還是整不贏我滴QQ一般一上了,微信吧33136583

謙虛了,我現(xiàn)在在單片機(jī)和C語(yǔ)言這塊,也就是幼兒園水平而已。
回復(fù)

使用道具 舉報(bào)

27#
ID:79544 發(fā)表于 2015-7-23 19:37 | 只看該作者
slh0721 發(fā)表于 2015-7-16 14:25
一語(yǔ)驚醒夢(mèng)中人啊,的確是把大循環(huán)忘了。非常感謝。我回家改正一下試試。我這個(gè)程序是想實(shí)現(xiàn)舵機(jī)左右擺動(dòng) ...

給你個(gè)通過(guò)的舵機(jī)程序
  1. //正確的舵機(jī)控制左,右,歸中,程序
  2. //#include<12c5a.h>
  3. #include<reg52.h>
  4. //#define uchar unsigned char
  5. //#define uint unsigned int
  6. //#define moto_pwm  P1_4  //PWM輸出腳控制舵機(jī)

  7. sbit moto_pwm=P1^0;//PWM輸出腳控制舵機(jī)
  8. sbit moto_pwm1=P1^1;//PWM輸出腳控制舵機(jī)
  9. sbit moto_pwm2=P1^2;//PWM輸出腳控制舵機(jī)

  10. sbit xiaocheting=P1^3;
  11. sbit xiaochehouti=P1^4;
  12. sbit xiaocheqianjin=P1^5;

  13. uchar pwm_lefr=0;//定義 定時(shí)器自加1變量
  14. uchar pwm_lefr1=0;//定義 定時(shí)器自加1變量
  15. uchar pwm_lefr2=0;//定義 定時(shí)器自加1變量
  16. uchar duojiguizhong=12;//舵機(jī)歸中1.5ms
  17. uchar duojiguizhong1=12;//舵機(jī)歸中1.5ms
  18. uchar duojiguizhong2=12;//舵機(jī)歸中1.5ms


  19. void pwmmaic()//產(chǎn)生PWM
  20. {
  21.         if(pwm_lefr<=duojiguizhong)
  22.        
  23.                 moto_pwm=1;
  24.                 else
  25.                 moto_pwm=0;
  26.                 if(pwm_lefr>=200)
  27.                 pwm_lefr=0;       
  28. if(pwm_lefr1<=duojiguizhong1)
  29.        
  30.                 moto_pwm1=1;
  31.                 else
  32.                 moto_pwm1=0;
  33.                 if(pwm_lefr1>=200)
  34.                 pwm_lefr1=0;       
  35. if(pwm_lefr2<=duojiguizhong2)
  36.        
  37.                 moto_pwm2=1;
  38.                 else
  39.                 moto_pwm2=0;
  40.                 if(pwm_lefr2>=200)
  41.                 pwm_lefr2=0;       
  42. }
  43. void time1() interrupt 3
  44. {
  45. //        TH1=0XFf;//100us的賦值11.0592M
  46. //        TL1=0XAE;
  47.         TH1=(65536-60)/256;//100us的賦值
  48.         TL1=(65536-60)%256;
  49.         pwm_lefr++;
  50.         pwm_lefr1++;
  51.         pwm_lefr2++;
  52.         pwmmaic();
  53. }
  54. void inttime()
  55. {
  56. //        TMOD=0X10;
  57.         TMOD=0X11;
  58.         TH1=(65536-60)/256;//100us的賦值12M
  59.         TL1=(65536-60)%256;
  60. //        TH1=0XFf;//100us的賦值11.0592M
  61. //        TL1=0XAE;
  62.         ET1=1;
  63.         TR1=1;
  64.         EA=1;
  65. }
  66. void delay(uint z)
  67. {
  68.         uint x,y;
  69.         for(x=z;x>0;x--)
  70.         for(y=240;y>0;y--);
  71. }
  72. void main()
  73. {
  74.         duojiguizhong=12;
  75.         duojiguizhong1=12;
  76.         duojiguizhong2=12;
  77.         inttime();
  78.         while(1)
  79.         {
  80.                 if(xiaocheting==0)       
  81.                 {
  82.                         delay(10);
  83.                         if(xiaocheting==0)       
  84.                         {
  85.                                 duojiguizhong=4;
  86.                                 delay(2000);

  87.                                 duojiguizhong1=6;
  88.                                 delay(1000);

  89.                                 duojiguizhong=14;
  90.                                 delay(2000);

  91.                                 duojiguizhong1=14;
  92.                                 delay(2000);

  93.                                 while(xiaocheting==0);
  94.                         //        duojiguizhong=12;//歸中
  95.                         //        delay(2000);
  96.                          }
  97.                          
  98.                 }
  99.                 /*
  100.                 duojiguizhong=16;
  101.                 delay(1000);
  102.                 duojiguizhong=12;//歸中
  103.                 delay(1000);
  104.                 duojiguizhong=8;//右45度
  105.                 delay(1000);

  106.                 duojiguizhong1=6;
  107.                 delay(1000);
  108.                 duojiguizhong1=12;
  109.                 delay(1000);
  110.                 duojiguizhong1=16;
  111.         //        delay(1000);*/

  112.         }
  113. }
復(fù)制代碼

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

28#
ID:79544 發(fā)表于 2015-7-23 19:43 | 只看該作者
slh0721 發(fā)表于 2015-7-23 14:49
不勝感激,真的是不勝感激。若不介意,能留個(gè)QQ嗎?我們也算是志趣相同,你在這方面也是高手了,所以我想 ...

這個(gè)是我用的舵機(jī)程序 按鍵可以當(dāng)傳感器用。
  1. #include<reg52.h>
  2. //#define uchar unsigned char
  3. //#define uint unsigned int
  4. //#define moto_pwm  P1_4  //PWM輸出腳控制舵機(jī)

  5. sbit moto_pwm=P1^0;//PWM輸出腳控制舵機(jī)
  6. sbit moto_pwm1=P1^1;//PWM輸出腳控制舵機(jī)
  7. sbit moto_pwm2=P1^2;//PWM輸出腳控制舵機(jī)

  8. sbit xiaocheting=P1^3;//按鍵控制
  9. sbit xiaochehouti=P1^4;
  10. sbit xiaocheqianjin=P1^5;

  11. uchar pwm_lefr=0;//定義 定時(shí)器自加1變量
  12. uchar pwm_lefr1=0;//定義 定時(shí)器自加1變量
  13. uchar pwm_lefr2=0;//定義 定時(shí)器自加1變量
  14. uchar duojiguizhong=12;//舵機(jī)歸中1.5ms
  15. uchar duojiguizhong1=12;//舵機(jī)歸中1.5ms
  16. uchar duojiguizhong2=12;//舵機(jī)歸中1.5ms


  17. void pwmmaic()//產(chǎn)生PWM
  18. {
  19.         if(pwm_lefr<=duojiguizhong)
  20.        
  21.                 moto_pwm=1;
  22.                 else
  23.                 moto_pwm=0;
  24.                 if(pwm_lefr>=200)
  25.                 pwm_lefr=0;       
  26. if(pwm_lefr1<=duojiguizhong1)
  27.        
  28.                 moto_pwm1=1;
  29.                 else
  30.                 moto_pwm1=0;
  31.                 if(pwm_lefr1>=200)
  32.                 pwm_lefr1=0;       
  33. if(pwm_lefr2<=duojiguizhong2)
  34.        
  35.                 moto_pwm2=1;
  36.                 else
  37.                 moto_pwm2=0;
  38.                 if(pwm_lefr2>=200)
  39.                 pwm_lefr2=0;       
  40. }
  41. void time1() interrupt 3
  42. {
  43. //        TH1=0XFf;//100us的賦值11.0592M
  44. //        TL1=0XAE;
  45.         TH1=(65536-60)/256;//100us的賦值
  46.         TL1=(65536-60)%256;
  47.         pwm_lefr++;
  48.         pwm_lefr1++;
  49.         pwm_lefr2++;
  50.         pwmmaic();
  51. }
  52. void inttime()
  53. {
  54. //        TMOD=0X10;
  55.         TMOD=0X11;
  56.         TH1=(65536-60)/256;//100us的賦值12M
  57.         TL1=(65536-60)%256;
  58. //        TH1=0XFf;//100us的賦值11.0592M
  59. //        TL1=0XAE;
  60.         ET1=1;
  61.         TR1=1;
  62.         EA=1;
  63. }
  64. void delay(uint z)
  65. {
  66.         uint x,y;
  67.         for(x=z;x>0;x--)
  68.         for(y=240;y>0;y--);
  69. }
  70. void main()
  71. {
  72.         duojiguizhong=12;
  73.         duojiguizhong1=12;
  74.         duojiguizhong2=12;
  75.         inttime();
  76.         while(1)
  77.         {
  78.                 if(xiaocheting==0)       
  79.                 {
  80.                         delay(10);
  81.                         if(xiaocheting==0)       
  82.                         {
  83.                                 duojiguizhong=4;
  84.                                 delay(2000);

  85.                                 duojiguizhong1=6;
  86.                                 delay(1000);

  87.                                 duojiguizhong=14;
  88.                                 delay(2000);

  89.                                 duojiguizhong1=14;
  90.                                 delay(2000);

  91.                                 while(xiaocheting==0);
  92.                                 duojiguizhong=12;//歸中
  93.                                 delay(2000);
  94.                          }
  95.                          
  96.                 }
  97.                 /*
  98.                 duojiguizhong=16;
  99.                 delay(1000);
  100.                 duojiguizhong=12;//歸中
  101.                 delay(1000);
  102.                 duojiguizhong=8;//右45度
  103.                 delay(1000);

  104.                 duojiguizhong1=6;
  105.                 delay(1000);
  106.                 duojiguizhong1=12;
  107.                 delay(1000);
  108.                 duojiguizhong1=16;
  109.         //        delay(1000);*/

  110.         }
  111. }
復(fù)制代碼

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

29#
ID:79544 發(fā)表于 2015-7-23 19:46 | 只看該作者
slh0721 發(fā)表于 2015-7-23 17:15
謙虛了,我現(xiàn)在在單片機(jī)和C語(yǔ)言這塊,也就是幼兒園水平而已。

用的時(shí)候要根據(jù)你的單片機(jī)型號(hào)和晶振適當(dāng)調(diào)整占空比的數(shù)值
回復(fù)

使用道具 舉報(bào)

30#
ID:85201 發(fā)表于 2015-7-28 11:59 | 只看該作者
xtitxjg 發(fā)表于 2015-7-23 14:38
給你吧,寫(xiě)好了1秒一次,60次

你最后給我的那個(gè)程序,我稍微改動(dòng)了一下(因?yàn)槲矣玫氖?9C52單片機(jī),所以頭文件改成了reg52.h),下載到單片機(jī)后,還是沒(méi)有反映,我買(mǎi)了四個(gè)舵機(jī),都逐一試過(guò),單片機(jī)更換過(guò)兩個(gè),也是不行。這是什么原因?
回復(fù)

使用道具 舉報(bào)

31#
ID:85201 發(fā)表于 2015-7-28 12:01 | 只看該作者
騰飛的龍 發(fā)表于 2015-7-23 19:43
這個(gè)是我用的舵機(jī)程序 按鍵可以當(dāng)傳感器用。

謝謝援助,雖然我想要的是不用按鍵自己就動(dòng)的,但你的程序?qū)τ谖医窈蟮膶W(xué)習(xí)會(huì)有幫助,所以再次感謝 。
回復(fù)

使用道具 舉報(bào)

32#
ID:80992 發(fā)表于 2015-8-1 11:24 | 只看該作者
slh0721 發(fā)表于 2015-7-28 11:59
你最后給我的那個(gè)程序,我稍微改動(dòng)了一下(因?yàn)槲矣玫氖?9C52單片機(jī),所以頭文件改成了reg52.h),下載到 ...

亡了告訴你,我用的是24M時(shí)鐘,5152不是問(wèn)題,如果你是其他時(shí)鐘自己改下定時(shí)器就行了
回復(fù)

使用道具 舉報(bào)

33#
ID:85201 發(fā)表于 2015-8-3 13:44 | 只看該作者
xtitxjg 發(fā)表于 2015-8-1 11:24
亡了告訴你,我用的是24M時(shí)鐘,5152不是問(wèn)題,如果你是其他時(shí)鐘自己改下定時(shí)器就行了

明白了。我回去試試
回復(fù)

使用道具 舉報(bào)

34#
ID:94489 發(fā)表于 2016-7-21 20:35 | 只看該作者
定時(shí)一個(gè)就行了
回復(fù)

使用道具 舉報(bào)

35#
ID:84299 發(fā)表于 2016-7-21 21:36 | 只看該作者
程序死在while(1),while后的分號(hào)有問(wèn)題,改成while(1){;}
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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