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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

用單片機管腳輸出PWM波,仿真的波形出現了明顯錯誤的連續波,請問程序哪里出錯了呢?

[復制鏈接]
跳轉到指定樓層
樓主
本帖最后由 明日香 于 2021-1-29 10:53 編輯

用定時器0,任選一管腳P21,使其輸出頻率50HZ,周期20ms,輸出1500us的高電平時間

具體單片機程序如下:
#include <stc12c5a.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define uchar unsigned char
#define uint  unsigned int
sbit PWM=P2^1;//P21輸出PWM波   
uchar time=0;   //占空比
/**單片機晶振11.0592MHZ,時鐘周期為1/11.0592us,8位定時器最大定時時間256us**/
/*11.0592MHZ除以12=921600HZ,就是1秒921600機器周期,0.1ms就是92機器周期*/
/** 輸出PWM頻率為50HZ,即周期20ms,分成兩百份,中斷200次**/
/**  定時器初值:256-92=164 **/
/*周期20ms中高電平時間為1.5ms,也就是15*0.1ms*/
void time0init()//定時器0初始化
{
   TMOD=0X02;//定時器0,工作方式2
  TH0=164;
  TL0=164;
  ET0=1;
  EA=1;
  TR0=1;//開啟定時器
}
void timer0() interrupt 1
{
   TR0=0;//賦初值時關閉定時器
   TH0=164; //定時器賦初值
   TL0=164; //定時器賦初值
   TR0=1;
  time++;
  if(time == 200)//PWM周期為0.1ms*200=20ms
  {
    time=0;
    PWM=1;
  }
    if(time == 15)//占空比為15%,高電平時間為1500us
    PWM=0;
}
void main()
{
  time0init();
  while(1)
   {
   }
}
用這是proteus仿真的波形:為啥會出現連續的波形呢?這明顯不對啊,請問程序哪里不對呢?




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

使用道具 舉報

沙發
ID:390416 發表于 2021-1-26 11:16 | 只看該作者
回復

使用道具 舉報

板凳
ID:752974 發表于 2021-1-26 16:41 | 只看該作者
STC各類單片機的應用文檔寫的還可以,各種應用例程都有,當下來看看就可以了,大學畢業就應該會學習了。

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

地板
ID:796670 發表于 2021-1-27 15:45 | 只看該作者
它為什么會出現連續的波形呢?應該是一段持續的高電平才對。
回復

使用道具 舉報

5#
ID:880958 發表于 2021-1-27 16:38 | 只看該作者
個人習慣,不管是什么單片機,設定定時后在定時中斷里用一個IO口取反,然后看一下定時時間對不對

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

6#
ID:669393 發表于 2021-1-28 00:02 | 只看該作者
感覺你的思路有些混亂啊,晶振是11.0592MHZ,時鐘周期不是1/11.0592us嗎,怎么又在注釋里寫了1/12us呢?這個算錯了之后的定時時間肯定是錯的。照你的意思,應該是輸出50HZ,周期0.02s的方波,把每個周期分為200份,其中15%輸出高電平,既然是這樣,高電平不應該是200*0.15=30份嗎,或者說一個pwm周期20ms,其中高電平時間應該是3ms,才符合15%的占空比,程序里咋寫了個1500us。。周期0.02s,分成200份,按照11.0592MHZ晶振,每一份差不多是92us,就是定時器中斷一次花的時間,用定時器0模式2就夠了,初值設為164,正常的波形應該是圖片那樣。中斷里的程序應該這樣寫才對
  1. void timer0() interrupt 1
  2. {
  3.         TH0 = 164;
  4.         TL0 = 164;
  5.         t++;
  6.         if(t == 200)
  7.         {
  8.                 pwm =1;
  9.                 t =0;
  10.         }
  11.         if(t == 30)
  12.         pwm = 0;               
  13. }
復制代碼

pwm.png (93.81 KB, 下載次數: 120)

pwm.png

評分

參與人數 1黑幣 +40 收起 理由
admin + 40 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

7#
ID:669393 發表于 2021-1-28 00:09 | 只看該作者
好像看錯了,應該把30改成15,按照題目的意思占空比應該是7.5%不是15%
回復

使用道具 舉報

8#
ID:796670 發表于 2021-1-29 10:15 | 只看該作者
SPEAR 發表于 2021-1-28 00:02
感覺你的思路有些混亂啊,晶振是11.0592MHZ,時鐘周期不是1/11.0592us嗎,怎么又在注釋里寫了1/12us呢?這 ...

是我表述的不清楚,周期20ms其中高電平為1.5ms(也就是1500us)

老哥,請問 “周期20ms,分成兩百份,按照11.0592MHZ,每份92us”
為什么92us初值是164呢?
不是按照65536-92+1=FFA5嗎?
然后TH0=FF,TL0=A5,請問這種算法為什么不對呢?
回復

使用道具 舉報

9#
ID:796670 發表于 2021-1-29 10:17 | 只看該作者
SPEAR 發表于 2021-1-28 00:02
感覺你的思路有些混亂啊,晶振是11.0592MHZ,時鐘周期不是1/11.0592us嗎,怎么又在注釋里寫了1/12us呢?這 ...

我知道了,我用的是定時器0模式1
回復

使用道具 舉報

10#
ID:796670 發表于 2021-1-29 10:51 | 只看該作者
SPEAR 發表于 2021-1-28 00:02
感覺你的思路有些混亂啊,晶振是11.0592MHZ,時鐘周期不是1/11.0592us嗎,怎么又在注釋里寫了1/12us呢?這 ...

老哥,發一下你完整的程序吧,謝謝了,我改了之后仿真仍然是連續波形,多謝多謝
回復

使用道具 舉報

11#
ID:796670 發表于 2021-1-30 10:32 | 只看該作者
使用方式2八位自動重裝模式的話,中斷程序里不需要再設置初值了吧
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美一级黄色网 | 中文字幕在线第二页 | 亚洲精品99| 日韩av高清在线 | 国产精品一区在线观看 | 99国产精品视频免费观看一公开 | 免费超碰 | 国产高潮av | 国产精品污污视频 | 黄色激情毛片 | 狠狠爱综合网 | 亚洲精品一二区 | 国产69精品久久99不卡免费版 | 五月天婷婷久久 | 欧美日韩精品亚洲 | 亚洲高清久久 | 精品国产一区二区三区性色av | 美女国产一区 | 狠狠久久 | 欧美日韩不卡 | 亚洲欧美视频一区 | 亚洲综合在线播放 | 国产成人精品在线播放 | 日韩欧美三级 | 亚洲免费一区二区 | 日本爱爱视频 | 深夜福利影院 | av在线二区| 国产乱码精品1区2区3区 | 女人牲交视频一级毛片 | 欧美日韩专区 | 精品久久久久久久久久久 | 亚洲综合无码一区二区 | 亚洲一区久久 | 亚洲永久免费 | 久久爱综合 | 成人精品一区二区三区中文字幕 | 91精品国产高清一区二区三区 | 欧美中文字幕一区二区三区亚洲 | 羞羞在线观看视频 | 亚州成人 |