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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4219|回復: 20
打印 上一主題 下一主題
收起左側

51單片機利用定時器生成10K的PWM,可實際只有2500Hz是怎么回事?

  [復制鏈接]
跳轉到指定樓層
樓主
源程序如下,用示波器看,PWM頻率是2500Hz,不知道哪里出了問題。晶振設置的是11.0592MHz

#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit PWM=P0^0;
sbit k1=P2^0;
uchar time=0;

void main()
{
TMOD=0x01;
TH0=(65536-10)/256;
TL0=(65536-10)%256;
EA=1;
ET0=1;
TR0=1;
while(1)
{
}
}

void time1() interrupt 1
{
    TR0=0;
    TH0=(65536-10)/256;
    TL0=(65536-10)%256;
    TR0=1;
    time++;
    if(time>=10)                                
    time=0;                                       
    if(time<3)
    PWM=1;
    else
    PWM=0;
    }                                      



PWM.jpg (48.59 KB, 下載次數: 78)

PWM.jpg
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:395176 發表于 2019-4-8 10:58 | 只看該作者
設置成50us電平翻轉試試
回復

使用道具 舉報

板凳
ID:468240 發表于 2019-4-8 11:41 | 只看該作者
飛機翻筋斗 發表于 2019-4-8 10:58
設置成50us電平翻轉試試

設置了其他的,也是一樣的。我程序沒寫錯吧
回復

使用道具 舉報

地板
ID:46065 發表于 2019-4-8 12:15 | 只看該作者
可以用現成的定時器生成器!
void Timer0Init(void)                //100微秒@11.0592MHz
{      EA=1;
        ET0=1;
        AUXR &= 0x7F;                //定時器時鐘12T模式
        TMOD &= 0xF0;                //設置定時器模式
        TMOD |= 0x01;                //設置定時器模式
        TL0 = 0xA4;                //設置定時初值
        TH0 = 0xFF;                //設置定時初值
        TF0 = 0;                //清除TF0標志
        TR0 = 1;                //定時器0開始計時
}
回復

使用道具 舉報

5#
ID:451718 發表于 2019-4-8 12:40 | 只看該作者
中斷里面除法運算,你以為這些都不占用時間的么?
回復

使用道具 舉報

6#
ID:451718 發表于 2019-4-8 12:49 | 只看該作者
另外,你的計時器初值好像也不對, 試試
回復

使用道具 舉報

7#
ID:74585 發表于 2019-4-8 15:19 | 只看該作者
這個你需要考慮下進入中斷的最小時間,如果最小時間計算不能做到10Khz,那就是不可以
回復

使用道具 舉報

8#
ID:74585 發表于 2019-4-8 15:19 | 只看該作者
你這個是模擬PWM
回復

使用道具 舉報

9#
ID:213173 發表于 2019-4-8 16:16 | 只看該作者
你首先算一下10us的中斷周期,CPU執行中斷里的語句時間夠不夠就明白是怎么回事了。
回復

使用道具 舉報

10#
ID:388197 發表于 2019-4-8 17:55 | 只看該作者
定時器初值問題吧.下載工具里就有定時器代碼生成器,輸入參數直接復制就行了.
回復

使用道具 舉報

11#
ID:468240 發表于 2019-4-8 21:02 | 只看該作者
robinsonlin 發表于 2019-4-8 12:49
另外,你的計時器初值好像也不對, 試試

初值怎么不對了,大佬。
回復

使用道具 舉報

12#
ID:468240 發表于 2019-4-8 21:03 | 只看該作者

模擬的就做不到10K嗎
回復

使用道具 舉報

13#
ID:468240 發表于 2019-4-8 21:04 | 只看該作者
wxxl 發表于 2019-4-8 12:15
可以用現成的定時器生成器!
void Timer0Init(void)                //100微秒@11.0592MHz
{      EA=1;

不太懂
回復

使用道具 舉報

14#
ID:451718 發表于 2019-4-9 13:10 | 只看該作者
assor 發表于 2019-4-8 21:02
初值怎么不對了,大佬。

昨天回車鍵敲快了。 圖片沒有貼上去。  

STC.jpg (206.75 KB, 下載次數: 64)

STC.jpg
回復

使用道具 舉報

15#
ID:468240 發表于 2019-4-9 20:15 | 只看該作者
robinsonlin 發表于 2019-4-9 13:10
昨天回車鍵敲快了。 圖片沒有貼上去。

我就是定的0.1ms啊
回復

使用道具 舉報

16#
ID:508245 發表于 2019-4-9 20:51 | 只看該作者
可以用現成的定時器生成器!
void Timer0Init(void)                //100微秒@11.0592MHz
{      EA=1;
        ET0=1;
        AUXR &= 0x7F;                //定時器時鐘12T模式
        TMOD &= 0xF0;                //設置定時器模式
        TMOD |= 0x01;                //設置定時器模式
        TL0 = 0xA4;                //設置定時初值
        TH0 = 0xFF;                //設置定時初值
        TF0 = 0;                //清除TF0標志
        TR0 = 1;                //定時器0開始計時
}
這個很正確!
回復

使用道具 舉報

17#
ID:468240 發表于 2019-4-10 11:05 | 只看該作者
LIZHIZHI1 發表于 2019-4-9 20:51
可以用現成的定時器生成器!
void Timer0Init(void)                //100微秒@11.0592MHz
{      EA=1;
...

我試試
回復

使用道具 舉報

18#
ID:468240 發表于 2019-4-10 11:05 | 只看該作者
LIZHIZHI1 發表于 2019-4-9 20:51
可以用現成的定時器生成器!
void Timer0Init(void)                //100微秒@11.0592MHz
{      EA=1;
...

這個程序放那里?大佬
回復

使用道具 舉報

19#
ID:491577 發表于 2019-4-10 13:30 | 只看該作者
只是51單片機速度太慢造成的,中斷時間太短還沒有運算完。改成1kHZ頻率,如果仿真正常就說明這個判斷是對的,或者把單片機晶振改成30MHZ,如果這時示波器檢測的頻率大于2500HZ也能說明是51單片機速度太慢造成的。
回復

使用道具 舉報

20#
ID:468240 發表于 2019-4-11 09:23 | 只看該作者
hhh402 發表于 2019-4-10 13:30
只是51單片機速度太慢造成的,中斷時間太短還沒有運算完。改成1kHZ頻率,如果仿真正常就說明這個判斷是對的 ...

多謝
回復

使用道具 舉報

21#
ID:530343 發表于 2019-5-9 08:40 | 只看該作者
可以用現成的定時器生成器!
void Timer0Init(void)                //100微秒@11.0592MHz
{      EA=1;
        ET0=1;
        AUXR &= 0x7F;                //定時器時鐘12T模式
        TMOD &= 0xF0;                //設置定時器模式
        TMOD |= 0x01;                //設置定時器模式
        TL0 = 0xA4;                //設置定時初值
        TH0 = 0xFF;                //設置定時初值
        TF0 = 0;                //清除TF0標志
        TR0 = 1;                //定時器0開始計時
}

EA=1;
ET0=1;   這兩句在開始位,如在結束位,有什么不同.
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 区一区二区三在线观看 | 成年无码av片在线 | 亚洲精品66 | 国产xxxx搡xxxxx搡麻豆 | 国产一区二区三区视频在线观看 | 欧美情趣视频 | 91成人在线视频 | 中文字幕国产日韩 | 精品亚洲永久免费精品 | 成人免费视频网站在线看 | 91视频免费视频 | 国产在线精品一区 | 成人精品在线 | 国产一区二区电影网 | 亚洲一区二区在线 | 91久久夜色 | 国产一区二区三区在线 | 天堂av免费观看 | 国产日韩一区二区三区 | 91人人看| 中文字幕成人av | 一区二区三区视频在线观看 | 成人精品国产免费网站 | 欧美视频1 | 精品久久久久一区二区国产 | 欧美极品视频在线观看 | www亚洲精品| 91精品国产一二三 | 一区二区三区视频 | 亚洲视频一区 | 韩日一区二区三区 | 麻豆精品久久 | 国产黄色网址在线观看 | 中文字幕 在线观看 | 怡红院免费的全部视频 | 日韩国产在线 | 亚洲人成人一区二区在线观看 | 免费1区2区3区 | 狠狠综合久久av一区二区老牛 | 欧美激情在线一区二区三区 | 亚洲免费在线观看 |