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

QQ登錄

只需一步,快速開始

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

求助 51單片機(jī) 中斷

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:76158 發(fā)表于 2015-4-5 21:56 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
論壇的各位前輩,請(qǐng)求指點(diǎn)
我本人喜歡單片機(jī),也是自學(xué)的,基礎(chǔ)不好!學(xué)習(xí)單片機(jī)已經(jīng)困在定時(shí)中斷這里很久了,看了很多書,也不理解,心里實(shí)在是矛盾,請(qǐng)求有耐心的前輩指點(diǎn)一二
請(qǐng)各位前輩指點(diǎn);
第一:這里對(duì)于中斷我想弄清楚以下:
1.裝載初始值:例如我晶振為11.0592
機(jī)器周期=12/11.0592=1.085us  我需要讓它50ms中斷一次  50000/1.09=45872   
初始值就是 TH0=(65536-45872)/256=應(yīng)該是76 ,那么這個(gè)76,裝載到高八位是裝換成16進(jìn)制嗎?還是二進(jìn)制
                   TL0=(65536-45872)%256=應(yīng)該是8125 這個(gè)裝載到低八位中 又是什么樣子的!可能問的問題都不對(duì),大家別笑話,我看書上面講的比較籠統(tǒng),不明白其中的意思!

2.所謂中斷溢出,書上就是說 TH0 和TL0 都滿后,那么如何才是 低八位滿后向高八位進(jìn)1?不理解。也沒有老師教,自己之前也不是學(xué)這些課程的!

郭天祥老師里面的
void main()
{
     TMOD=0X01;
     TH0=(65536-45872)/256;//這個(gè)數(shù)得出來 76
      TL0=(65536-45872)%256;//這個(gè)數(shù)得出來8125 就不不懂這個(gè)地方 所謂的高八位和低八位的概念
      EA=1;
      ET0=1;
      TR0=1;
      while(1)
     {
      if(num==20)
           {
             num=0;
             led=~led;
            }
      }

}


另外我自己寫了個(gè)小程序,就是按鍵 然后LED從第一個(gè)到最后一個(gè)一次點(diǎn)亮 按鍵1加 按鍵2減
里面也有個(gè)小問題,請(qǐng)前輩們看看

#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar code table[]={0xff,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00};
uchar num;
uchar num0;
void delayms(uint);
sbit key_jia=P3^4;
sbit key_jian=P3^5;

void led()  //LED子函數(shù)
{
P1=table[num];
}

void keyscan()
{

if(key_jia==0)
{
  delayms(10);
  if(key_jia==0)
  {
   num++;
   if(num==9)  //如果這個(gè)地方是if(num==8)的話,當(dāng)我按鍵到第8次的時(shí)候應(yīng)該是全部亮吧,但是按第八次的時(shí)候全部滅了,只亮了前面7顆LED燈這個(gè)                        //是為什么
    num=0;     //非得改成if(num==9)才行,按第八次的時(shí)候才會(huì)全部亮
     while(!key_jian);//此處的while語句不要 加延時(shí)時(shí)間長(zhǎng)一點(diǎn)是不是也一樣,一定要加這個(gè)釋放按鍵的語句嗎,如果不加的話一直按鍵LED是從一顆到全                                 //部亮,而加了則需要一次一次按鍵   
   delayms(200);

  }

}
if(key_jian==0)
{
  delayms(10);
  if(key_jian==0)
  {

   if(num==0)
    num=9;
       num--;
   while(!key_jian);
  }
}
}

void main()  //主函數(shù)
{
while(1)
{
keyscan();
  led();
}
}

void delayms(uint xms)//延時(shí)函數(shù)
{
uint j,l;
for(j=xms;j>0;j--)
  for(l=110;l>0;l--);
}



最后一個(gè)問題,我想做一個(gè)用定時(shí)器產(chǎn)生一個(gè)1KHZ的可調(diào)PWM波形
用兩個(gè)按鍵實(shí)現(xiàn) 0-100%  和100-0%的調(diào)整
我想了很久,因?yàn)樯厦娴闹袛鄾]有學(xué)會(huì)不理解,所以糾結(jié)了很久
我說下我的思路,請(qǐng)前輩指點(diǎn)一下
利用定時(shí)器的中斷 100us  為1KHZ的PWM波
應(yīng)該來說當(dāng)是100US的時(shí)候 應(yīng)該是最大占空比了
但是如何去固定頻率,去調(diào)整它的通段時(shí)間呢?這里是不是要用到兩個(gè)定時(shí)器呀?
有那個(gè)前輩給個(gè)思路
謝謝大家!


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:76158 發(fā)表于 2015-4-5 21:59 | 只看該作者
另外如果那個(gè)有經(jīng)驗(yàn)有耐心的前輩能指點(diǎn)的話,帶我學(xué)習(xí)51的話,本人有償答謝!
回復(fù)

使用道具 舉報(bào)

板凳
ID:69634 發(fā)表于 2015-4-6 19:22 | 只看該作者
樓主, while(!key_jian);//此處的while語句不要 加延時(shí)時(shí)間長(zhǎng)一點(diǎn)是不是也一樣,------這里應(yīng)是while(!key_jia);,uchar num0;---這沒用。num==9是對(duì)的,也就是num=0,八個(gè)燈加全滅不是九次嗎

評(píng)分

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

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

地板
ID:76158 發(fā)表于 2015-4-6 20:17 | 只看該作者
888zhjzhj 發(fā)表于 2015-4-6 19:22
樓主, while(!key_jian);//此處的while語句不要 加延時(shí)時(shí)間長(zhǎng)一點(diǎn)是不是也一樣,------這里應(yīng)是while(!key ...

謝謝您的回復(fù),很感激,我看了基本沒有人會(huì)這么耐心的講解的
恩 uchar num0;只定義了,沒有用  說明您是真心的看過我這個(gè)小程序,謝謝
num==9是對(duì)的,是我理解錯(cuò)誤了,你這樣一說,反過來一想,就對(duì)了 呵呵
對(duì)于無極調(diào)光的程序 您有什么好的思路嗎,能否指點(diǎn)一下!
回復(fù)

使用道具 舉報(bào)

5#
ID:69634 發(fā)表于 2015-4-6 22:18 | 只看該作者
樓主,這是我編寫小程序,八個(gè)燈的無極變光,第一個(gè)燈從不亮到最亮,最亮到不亮,接著第二個(gè)又是這樣。
你可以參考一下,我也不太懂的。
#include <reg52.h>
unsigned int  cycle=1000;
unsigned int   high;
unsigned int   low;
unsigned char cnt = 0;
unsigned char array[] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f };

void delay(unsigned int t)
{
        while(t--);
}

void configPWM( unsigned char cnt )

             {
                     for(high=1;high<=cycle;high++)
                 {
                         P0=array[cnt];
                        delay(high);
                         P0=0xff;
                        low=cycle-high;
                        delay(low);
                }
                           for(high=1;high<=cycle;high++)
                {
                        P0=0xff;
                        delay(high);
                        P0=array[cnt];
                        low=cycle-high;
                        delay(low);
                }
              }

void main()
            {       
               for(cnt=0;cnt<8;cnt++)
                   {
                      configPWM( unsigned char cnt );

                   }
             }

評(píng)分

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

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

6#
ID:69634 發(fā)表于 2015-4-6 22:25 | 只看該作者
cycle=1000,可能長(zhǎng)的,可改成600

評(píng)分

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

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

7#
ID:76158 發(fā)表于 2015-4-7 20:18 | 只看該作者
888zhjzhj 發(fā)表于 2015-4-6 22:25
cycle=1000,可能長(zhǎng)的,可改成600

謝謝你,用延時(shí)函數(shù)寫的,很好哦
最后的cofigPWM();括號(hào)里面不要帶形參了!
用來做精準(zhǔn)PWM調(diào)光肯定是不行的!大家一起討論一起學(xué)習(xí)吧!謝謝你
回復(fù)

使用道具 舉報(bào)

8#
ID:73833 發(fā)表于 2015-4-8 20:33 | 只看該作者
我來試著解答你的前兩個(gè)問題。其實(shí)應(yīng)該先說第二個(gè)問題即溢出。TH0和TL0是兩個(gè)8位寄存器,TL0溢出一次TH0加1,8位寄存器寄存的的數(shù)最大是256,這樣可以認(rèn)為,低8位的TL0獲得256個(gè)數(shù)后,打個(gè)包,記做1包,把這個(gè)1存在TH0,同時(shí)TL0自身清零,以此類推直到TH0收到第256包時(shí)也告?zhèn)}滿,你可知這時(shí)這兩個(gè)寄存器共存儲(chǔ)了65536個(gè)數(shù),再多一個(gè)就全部溢出,所謂溢出就是自身清零向高位進(jìn)一,這個(gè)一,就代表自身進(jìn)位前的全部?jī)?nèi)容。
好第一個(gè)問題----先說那個(gè)45872,被從65536中減去的這個(gè)數(shù),正是想讓單片機(jī)計(jì)量的數(shù),其余的空間填上初值,這個(gè)初值是不讓單片機(jī)計(jì)量而直接從此基礎(chǔ)上累加45872個(gè)數(shù),再多一個(gè)溢出。至于TH0中的76就是十進(jìn)制意義上的76,它代表76個(gè)256,取余的結(jié)果并不是8125,而是可以理解為0.8125,是不足256(即1包)的部分,你算一下0.8125個(gè)256應(yīng)當(dāng)是208,這個(gè)數(shù)就是TL0的初值。至于數(shù)制,并不重要,在KEIL中可以混用,當(dāng)然在單片機(jī)中肯定是二進(jìn)制了。

評(píng)分

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

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

9#
ID:76158 發(fā)表于 2015-4-9 14:39 | 只看該作者
dingmingzhou 發(fā)表于 2015-4-8 20:33
我來試著解答你的前兩個(gè)問題。其實(shí)應(yīng)該先說第二個(gè)問題即溢出。TH0和TL0是兩個(gè)8位寄存器,TL0溢出一次TH0加1 ...

謝謝!
你這種通俗的講解好容易理解,跟陳老師講解一樣,對(duì)于我們沒有基礎(chǔ)的人來說很好理解
其實(shí)就是將65536個(gè)數(shù)分成了高低8位兩個(gè)寄存器,低位滿后,向高位進(jìn)1,依次類推,當(dāng)高位滿后,低位自身滿256個(gè)數(shù)后 再多加1位 相當(dāng)于高地位都溢出,就表示 這兩個(gè)寄存器已經(jīng)滿 且溢出了
初始值就像類似于水桶里面已經(jīng)有一半水了,只需要再原來的基礎(chǔ)上再往桶里裝水,原來的水加上你需要的水剛剛好就滿,是這樣吧 就像你說的 TH0=76 TL0=0.8125  TL0加滿256后 TH0變成77  一直這樣,當(dāng)TH0=256 TL0=256  剛好是65536個(gè)數(shù) TL0再加1的話就產(chǎn)生了溢出!是這樣吧,謝謝你,這樣算是理解了(高位TH0的初始值是76  低位TL0的初始值 是0.8125)

評(píng)分

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

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

10#
ID:73833 發(fā)表于 2015-4-9 22:58 | 只看該作者
對(duì)頭,是這樣的。
回復(fù)

使用道具 舉報(bào)

11#
ID:73833 發(fā)表于 2015-4-9 23:36 | 只看該作者
樓主,看了你的回復(fù),大部分是對(duì)的,但那個(gè)TL0=0.8125,是不對(duì)的,應(yīng)當(dāng)是0.8125*256=208才對(duì),你說呢?
回復(fù)

使用道具 舉報(bào)

12#
ID:76158 發(fā)表于 2015-4-10 10:15 | 只看該作者
dingmingzhou 發(fā)表于 2015-4-9 23:36
樓主,看了你的回復(fù),大部分是對(duì)的,但那個(gè)TL0=0.8125,是不對(duì)的,應(yīng)當(dāng)是0.8125*256=208才對(duì),你說呢?

嗯,您這樣一說,您的意思是說這個(gè)是16位定時(shí)器數(shù)據(jù) 每一位為8個(gè)字節(jié) 就是16*8*256=32768 低八位裝載其實(shí)是32768  高八位也一樣  32768*2=65536 是這樣嗎?

回復(fù)

使用道具 舉報(bào)

13#
ID:76471 發(fā)表于 2015-4-10 11:50 | 只看該作者
算TH0和TL0不用那么麻煩,用windows自帶的計(jì)算器算出65536-45872=19664后,直接轉(zhuǎn)換16進(jìn)制4CD0,TH0就是4C,TL0為D0,分開轉(zhuǎn)回去4C就是76,D0就是208

評(píng)分

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

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

14#
ID:76471 發(fā)表于 2015-4-10 11:54 | 只看該作者
直接將TH0和TL0合起來看作16位數(shù)據(jù),總數(shù)65536,預(yù)存19664數(shù)據(jù),加45872后溢出
回復(fù)

使用道具 舉報(bào)

15#
ID:76158 發(fā)表于 2015-4-10 13:40 | 只看該作者
panzishi123456 發(fā)表于 2015-4-10 11:54
直接將TH0和TL0合起來看作16位數(shù)據(jù),總數(shù)65536,預(yù)存19664數(shù)據(jù),加45872后溢出

是的,現(xiàn)在知道了 就以后會(huì)這樣做的!呵呵
昨天剛才STC那邊買了一些STC15W402AS STC15F104W  不知道STC15W402AS中的3路PWM怎么用
正在努力學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

16#
ID:76158 發(fā)表于 2015-4-10 13:43 | 只看該作者
panzishi123456 發(fā)表于 2015-4-10 11:54
直接將TH0和TL0合起來看作16位數(shù)據(jù),總數(shù)65536,預(yù)存19664數(shù)據(jù),加45872后溢出

好的,現(xiàn)在知道了,我是想知道是如何演變而來的,現(xiàn)在知道是這么一回事,我以后就直接用就好了!呵呵
您會(huì)用15W402AS這個(gè)片子嗎?
回復(fù)

使用道具 舉報(bào)

17#
ID:76471 發(fā)表于 2015-4-10 14:40 | 只看該作者
danpianji258 發(fā)表于 2015-4-10 13:43
好的,現(xiàn)在知道了,我是想知道是如何演變而來的,現(xiàn)在知道是這么一回事,我以后就直接用就好了!呵呵
您 ...

沒有用過,用的現(xiàn)代的芯片,之前用的匯編,現(xiàn)在剛開始學(xué)C
回復(fù)

使用道具 舉報(bào)

18#
ID:73833 發(fā)表于 2015-4-10 16:55 | 只看該作者
本帖最后由 dingmingzhou 于 2015-4-10 17:58 編輯

       樓主,您好。13樓14樓在計(jì)算上是沒錯(cuò)的,用的時(shí)候就是那么計(jì)算。但是在理解上我覺不是你說的這樣“16位定時(shí)器數(shù)據(jù) 每一位為8個(gè)字節(jié) 就是16*8*256=32768 低八位裝載其實(shí)是32768  高八位也一樣  32768*2=65536 “,這樣理解是錯(cuò)誤的,也理解不了13樓14樓的做法。       應(yīng)當(dāng)這樣理解:TH0,TL0都是8位寄存器,在內(nèi)存中都是這個(gè)樣子:”****   ****“(*號(hào)代表要么是1,要么是 0)。一個(gè)8位的寄存器最大存儲(chǔ)的數(shù)字是256(包括0),只不過這兩個(gè)寄存器,在單片機(jī)計(jì)數(shù)過程中,先從TL0的最低位存起,滿一個(gè)256,就自身清零,同時(shí)向TH0進(jìn)1(TH0=B0000 0001),滿兩個(gè)進(jìn)兩個(gè)1(TH0=B0000 0010),所以TH0是存儲(chǔ)了多少個(gè)從低位送來的256.這就是叫做高8位、低8位的道理。一個(gè)8位寄存器是存不了32768的。32768在內(nèi)存中是這個(gè)樣子(1000 0000 0000 0000)。65535是這個(gè)樣子(1111 1111 1111  1111),65536是這個(gè)樣子(0000 0000 0000 0000)。這就是你可能看到有些人在計(jì)算初值時(shí)寫作(-*****)/256、(-***)%256;不寫65536,而只寫一個(gè)(-),因?yàn)?5536,在內(nèi)存中表示為零。
      但這種0和從0起步的0,在意義上可能有些不同,你說呢?當(dāng)在65536那個(gè)樣子時(shí),65536這一大包存到哪里去了?存到中斷標(biāo)志去了!(從0開始的0是沒有這能耐的),但是中斷標(biāo)志似乎是個(gè)死腦筋,傻呼呼地只會(huì)告訴你一個(gè)字---1   !好在用中斷服務(wù)程序時(shí),定時(shí)器的中斷標(biāo)志是由硬件清零,而用查詢時(shí),它則更傻B了,連兩個(gè)數(shù)也記不住,還要軟件去清零,不過不要緊,記錄這個(gè) 1出現(xiàn)的次數(shù),就知道溢出幾次。


評(píng)分

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

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

19#
ID:73833 發(fā)表于 2015-4-10 17:14 | 只看該作者
本帖最后由 dingmingzhou 于 2015-4-10 17:42 編輯

11111111111111111111111
回復(fù)

使用道具 舉報(bào)

20#
ID:76158 發(fā)表于 2015-4-11 09:47 | 只看該作者
dingmingzhou 發(fā)表于 2015-4-10 16:55
樓主,您好。13樓14樓在計(jì)算上是沒錯(cuò)的,用的時(shí)候就是那么計(jì)算。但是在理解上我覺不是你說的這樣“16 ...

好的,知道了,謝謝你耐心講解!
回復(fù)

使用道具 舉報(bào)

21#
ID:74245 發(fā)表于 2015-4-11 11:58 | 只看該作者
我也是自學(xué),剛弄懂這個(gè)定時(shí)器不久,裝初值是這樣理解的。
設(shè)置為定時(shí)器模式后,你這個(gè)程序是定時(shí)器方式1,16位的二進(jìn)制數(shù),初始狀態(tài)就是16個(gè)0,假如加滿了就變成了16個(gè)1,就是65536了,65536的來由就是2的16次方。每來一個(gè)機(jī)器周期,就往里面加1;你的晶振一個(gè)機(jī)器周期就是1.085us,那么想要得到50ms就是要45872個(gè)機(jī)器周期,就是說首先往定時(shí)器里面裝一個(gè)數(shù),然后讓它自己加,再加45872次就滿了產(chǎn)生中斷了,那既然它加了45872次是不是也就是說到了50ms呢。后面就很簡(jiǎn)單了,初值要裝什么數(shù)呢,45872+初值=65536滿了,那么初值就是65536-45872啊。
其實(shí)里面還有很多其他知識(shí)的,不能一一說出來,可以跟帖繼續(xù)解答。

評(píng)分

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

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

22#
ID:76158 發(fā)表于 2015-4-11 13:37 | 只看該作者
#include <reg52.h>                                                                                       
#define uint unsigned int
#define uchar unsigned char
sbit pwm=P1^0;                       
sbit pwm_up=P3^6;               
sbit pwm_dn=P3^7;                 
uint i;                                         
char j,k=5;                                  
void timer_init()        
{
        TMOD=0X02;                     
        TH0=56;                             
        TL0=56;                                  
        IE=0X82;                          
        TR0=1;                             
}
void delayms(uint xms)
{
        uint j,k;                       
        for(j=xms;j>0;j--)
                for(k=110;j>0;j--);
}
void timer0()interrupt 1  
{
        i++;                                 
        if(i==5000)                          
        {
         i=0;                                  
         j++;                                  
         j=j%10;                          

        }
       if(j<k)                         
           {
                   pwm=1;                          
           }
                        else                  
                        pwm=0;                 
}

void key_pwm()                         
{
        if(pwm_up==0)                 
        {
                delayms(5);                  
                if(pwm_up==0)         
                {
                         k++;                  
                        if(k>=10)               
                        {
                                k=10;               
                        }
                        while(!pwm_up);
                }                                       

        }
        if(pwm_dn==0)                       
        {
                 delayms(5);                       
                if(pwm_dn==0)               
                {
                        k--;                       
                        if(k<=0)               
                        {
                                k=0;       
                        }
                         while(!pwm_dn);
                }
        }

}

  void main()                               
  {
   timer_init();               
   for(;;)                               
           {
                key_pwm();
        }
  }

  
回復(fù)

使用道具 舉報(bào)

23#
ID:76158 發(fā)表于 2015-4-11 13:40 | 只看該作者
上面這個(gè)程序,也是從網(wǎng)絡(luò)上半抄半寫的
如果我將K的值變成122級(jí)
將中斷的時(shí)間再改短,
這樣看起來等還會(huì)閃嗎
因?yàn)樵诠?沒有帶開發(fā)板來公司 暫時(shí)不知道!

回復(fù)

使用道具 舉報(bào)

24#
ID:76158 發(fā)表于 2015-4-11 14:03 | 只看該作者
yesonjob 發(fā)表于 2015-4-11 11:58
我也是自學(xué),剛弄懂這個(gè)定時(shí)器不久,裝初值是這樣理解的。
設(shè)置為定時(shí)器模式后,你這個(gè)程序是定時(shí)器方式1, ...

如果定時(shí)器的時(shí)間太短,中斷的頻率很高是不是會(huì)容易產(chǎn)生問題啊
例如我用定時(shí)器中斷產(chǎn)生一個(gè)5KHZ的占空比50%方波
如果在中斷的時(shí)間內(nèi),我在其他程序里面占用的時(shí)間大于中斷的時(shí)間,是不是程序就亂套了,第一次中斷還沒有處理完畢,第二中斷又來了
應(yīng)該如何去評(píng)估這個(gè)中斷中 其它程序運(yùn)行需要的時(shí)間呢
回復(fù)

使用道具 舉報(bào)

25#
ID:76158 發(fā)表于 2015-4-11 14:19 | 只看該作者
本帖最后由 danpianji258 于 2015-4-11 14:27 編輯
yesonjob 發(fā)表于 2015-4-11 11:58
我也是自學(xué),剛弄懂這個(gè)定時(shí)器不久,裝初值是這樣理解的。
設(shè)置為定時(shí)器模式后,你這個(gè)程序是定時(shí)器方式1, ...

#include <reg52.h>                                                                                       
#define uchar unsigned char
sbit pwm=P1^0;        
uchar num;               

void main()
{
        while(1)
        {
        void init();
        void pwmss();
        }

}
void init()
{
  TMOD=0X01;
  TH0=(65536-200)/256;
  TL0=(65536-200)%256;
  EA=1;
  ET0=1;
  TR0=1;
}
void time()interrupt 1
{
  TH0=(65536-200)/256;
  TL0=(65536-200)%256;
  num++;
}
void pwmss()
{
         if(num=2)
        {        
                num=0;
                 pwm=1 ;
        }
                 else
                {
                 pwm=0;
                }
}

你看這個(gè)程序是不是產(chǎn)生一個(gè)5KHZ的標(biāo)準(zhǔn)的50%的PWM波形?
回復(fù)

使用道具 舉報(bào)

26#
ID:76471 發(fā)表于 2015-4-11 14:45 | 只看該作者
danpianji258 發(fā)表于 2015-4-11 14:19
#include                                                                                         
...

if(num=2)這個(gè)應(yīng)該是 if(num==2)吧。 想學(xué)51C,買套學(xué)習(xí)板,但QQ留言和打電話都沒有反應(yīng),想知道如何購(gòu)買本網(wǎng)站的學(xué)習(xí)板,如果知道告訴一下,謝謝
回復(fù)

使用道具 舉報(bào)

27#
ID:76471 發(fā)表于 2015-4-11 14:53 | 只看該作者
danpianji258 發(fā)表于 2015-4-11 14:19
#include                                                                                         
...

5kHz周期為200us,半周期為100us,半周期翻轉(zhuǎn)一次,所以65536應(yīng)該要-100
回復(fù)

使用道具 舉報(bào)

28#
ID:76158 發(fā)表于 2015-4-11 15:02 | 只看該作者
panzishi123456 發(fā)表于 2015-4-11 14:53
5kHz周期為200us,半周期為100us,半周期翻轉(zhuǎn)一次,所以65536應(yīng)該要-100

嗯 是的 你比我厲害多了
書寫確實(shí)是大意了
寫程序真的不能大意
學(xué)習(xí)板我買的是天詳?shù)?br /> 這個(gè)程序剛運(yùn)行下還是沒有方波出來  還有兩個(gè)警告
回復(fù)

使用道具 舉報(bào)

29#
ID:76471 發(fā)表于 2015-4-11 15:18 | 只看該作者
void init();中斷初始化放while循環(huán)上面,我也不是很厲害,要學(xué)的東西很多,你的天詳學(xué)習(xí)板跟這個(gè)網(wǎng)站的是不是一樣的,有沒有鏈接,我看一下

評(píng)分

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

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

30#
ID:76158 發(fā)表于 2015-4-11 15:30 | 只看該作者
panzishi123456 發(fā)表于 2015-4-11 15:18
void init();中斷初始化放while循環(huán)上面,我也不是很厲害,要學(xué)的東西很多,你的天詳學(xué)習(xí)板跟這個(gè)網(wǎng)站的是 ...

是的 我已經(jīng)換上去了 結(jié)果還是一樣的!你先聯(lián)系一下管理員 它應(yīng)該賣的!
回復(fù)

使用道具 舉報(bào)

31#
ID:76158 發(fā)表于 2015-4-11 15:37 | 只看該作者
管理員回復(fù)你帖子了 你看看 聯(lián)系他看看
回復(fù)

使用道具 舉報(bào)

32#
ID:76471 發(fā)表于 2015-4-11 15:52 | 只看該作者
danpianji258 發(fā)表于 2015-4-11 15:37
管理員回復(fù)你帖子了 你看看 聯(lián)系他看看

多謝了,剛上這論壇沒多久,不知道他移走我貼子,還以為不見了
回復(fù)

使用道具 舉報(bào)

33#
ID:76471 發(fā)表于 2015-4-11 15:52 | 只看該作者
danpianji258 發(fā)表于 2015-4-11 15:37
管理員回復(fù)你帖子了 你看看 聯(lián)系他看看

多謝了,剛上這論壇沒多久,不知道他移走我貼子,還以為不見了
回復(fù)

使用道具 舉報(bào)

34#
ID:76158 發(fā)表于 2015-4-11 16:14 | 只看該作者
panzishi123456 發(fā)表于 2015-4-11 15:52
多謝了,剛上這論壇沒多久,不知道他移走我貼子,還以為不見了

是不是這個(gè)R52C的IO口跟不上。∮檬静ㄆ骺 根本就沒有方波出來。。。
回復(fù)

使用道具 舉報(bào)

35#
ID:76471 發(fā)表于 2015-4-11 16:30 | 只看該作者
danpianji258 發(fā)表于 2015-4-11 16:14
是不是這個(gè)R52C的IO口跟不上!用示波器看 根本就沒有方波出來。。。

才5KHZ,不可能跟不上啊
回復(fù)

使用道具 舉報(bào)

36#
ID:76471 發(fā)表于 2015-4-11 16:30 | 只看該作者
danpianji258 發(fā)表于 2015-4-11 16:14
是不是這個(gè)R52C的IO口跟不上!用示波器看 根本就沒有方波出來!。。

才5KHZ,不可能跟不上啊
回復(fù)

使用道具 舉報(bào)

37#
ID:76158 發(fā)表于 2015-4-11 16:34 | 只看該作者
panzishi123456 發(fā)表于 2015-4-11 16:30
才5KHZ,不可能跟不上啊

你買到板子沒有,如果沒有買到的話 你說聲 我將天詳?shù)牡刂方o你 另外 我們加個(gè)QQ吧!呵呵  跟你學(xué)習(xí)學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

38#
ID:76471 發(fā)表于 2015-4-11 16:36 | 只看該作者
danpianji258 發(fā)表于 2015-4-11 16:14
是不是這個(gè)R52C的IO口跟不上。∮檬静ㄆ骺 根本就沒有方波出來。。!

你不用定時(shí)器,直接主程序那里將P0口取反看看
回復(fù)

使用道具 舉報(bào)

39#
ID:76471 發(fā)表于 2015-4-11 16:36 | 只看該作者
說錯(cuò)了,主函數(shù)
回復(fù)

使用道具 舉報(bào)

40#
ID:76471 發(fā)表于 2015-4-11 16:39 | 只看該作者
danpianji258 發(fā)表于 2015-4-11 16:34
你買到板子沒有,如果沒有買到的話 你說聲 我將天詳?shù)牡刂方o你 另外 我們加個(gè)QQ吧!呵呵  跟你學(xué)習(xí)學(xué)習(xí)

還沒有,我QQ48325047,互相學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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