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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

寫了一個PWM波程序,STC12單片機運行錯誤,51單片機運行正確,請問為什么呢?

[復制鏈接]
跳轉到指定樓層
樓主
自己寫了一個PWM波程序,頻率50HZ,用的STC12C5A單片機,然后用邏輯分析儀測了一下,結果出現了錯誤的連續波



我在一個群里問了一下,有人用51單片機運行我的程序,結果卻是對的
但我用STC12C5a單片機,波形卻不對,請問這是為啥呢?是因為STC12C和51之間的差別造成的嗎?該如何修改呢?謝謝老哥們指點

源程序如下:

#include <stc12c5a.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define uchar unsigned char
#define uint  unsigned int
/*用定時器T0,任選一管腳P21輸出PWM波*/
/*單片機晶振11.0592MHZ,時鐘周期為1/11.0592us*/
/*11.0592M除以12=921600,就是1秒921600個機器周期*/
/*0.1ms就是92機器周期,輸出PWM波周期為20ms,分成200份,
中斷200次,定時器初值為256-92=164*/
/*周期20ms中高電平時間1.5ms,也就是0.1ms×15*/

sbit PWM=P2^1;//P21輸出PWM波   
uchar time=0;   //占空比

void time0init()//定時器初始化
{
  TMOD=0X02;//定時器0工作方式2,8位重裝
        TH0=164;//92個機器周期,即0.1ms
        TL0=164;
        ET0=1;
        EA=1;
        TR0=1;
}

void time0() interrupt 1
{
        time++;
        if(time<200)//周期為0.1ms*200=20ms
        {
          if(time<=15)//高電平時間為0.1ms*15=1.5ms
                  PWM=1;
    else
                  PWM=0;
        }
        else
                time=0;
}

void main()
{
  time0init();
        while(1)
        {
        }
}

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

使用道具 舉報

沙發
ID:844772 發表于 2021-3-10 10:55 | 只看該作者
你算錯了,對于AT89c51,1個機器周期=12個震蕩周期,對于STC12C5A60S2,1個機器周期=1個震蕩周期。
回復

使用道具 舉報

板凳
ID:584814 發表于 2021-3-10 17:17 | 只看該作者
看過STC那些山寨般的廣告了么,速度快真的不是胡吹的,樓上正解
回復

使用道具 舉報

地板
ID:57657 發表于 2021-3-10 23:55 | 只看該作者
這種波形,可能是看門狗有問題。
回復

使用道具 舉報

5#
ID:143767 發表于 2021-3-11 10:15 | 只看該作者
AT89C51是12T單片機,STC12是1T單片機
回復

使用道具 舉報

6#
ID:796670 發表于 2021-3-15 08:17 | 只看該作者
dj3365191 發表于 2021-3-11 10:15
AT89C51是12T單片機,STC12是1T單片機

請問STC12的定時器不是默認12分頻嗎?這樣他的機器周期和51不一樣嗎?
回復

使用道具 舉報

7#
ID:796670 發表于 2021-3-15 08:22 | 只看該作者
glinfei 發表于 2021-3-10 10:55
你算錯了,對于AT89c51,1個機器周期=12個震蕩周期,對于STC12C5A60S2,1個機器周期=1個震蕩周期。

請問可以通過設置AUXR為12分頻,解決這個問題嗎?
回復

使用道具 舉報

8#
ID:155507 發表于 2021-3-15 12:00 | 只看該作者
可以通過設置AUXR為12分頻,解決這個問題

  1. #include <stc12c5a.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <math.h>
  5. #define uchar unsigned char
  6. #define uint  unsigned int
  7. /*用定時器T0,任選一管腳P21輸出PWM波*/
  8. /*單片機晶振11.0592MHZ,時鐘周期為1/11.0592us*/
  9. /*11.0592M除以12=921600,就是1秒921600個機器周期*/
  10. /*0.1ms就是92機器周期,輸出PWM波周期為20ms,分成200份,
  11. 中斷200次,定時器初值為256-92=164*/
  12. /*周期20ms中高電平時間1.5ms,也就是0.1ms×15*/

  13. sbit PWM=P2^1;//P21輸出PWM波   
  14. uchar time=0;   //占空比

  15. void time0init()//定時器初始化
  16. {
  17.         AUXR &= 0x7F;                //定時器時鐘12T模式
  18.         TMOD &= 0xF0;                //設置定時器模式
  19.         TMOD|=0x02;   //定時器0工作方式2,8位重裝
  20.         TH0=164;     //92個機器周期,即0.1ms
  21.         TL0=164;
  22.         ET0=1;
  23.         EA=1;
  24.         TR0=1;
  25. }

  26. void time0() interrupt 1
  27. {
  28.         time++;
  29.         if(time<200)     //周期為0.1ms*200=20ms
  30.         {
  31.                 if(time<=15) //高電平時間為0.1ms*15=1.5ms
  32.                 PWM=1;
  33.                 else
  34.                 PWM=0;
  35.         }
  36.         else
  37.         time=0;
  38. }

  39. void main()
  40. {
  41.         time0init();
  42.         while(1)
  43.         {
  44.                
  45.         }
  46. }

復制代碼
回復

使用道具 舉報

9#
ID:430857 發表于 2021-4-18 18:12 | 只看該作者
angmall 發表于 2021-3-15 12:00
可以通過設置AUXR為12分頻,解決這個問題

void time0() interrupt 1
{
        time++;
        if(time<200)     //周期為0.1ms*200=20ms
        {
                if(time<=15) //高電平時間為0.1ms*15=1.5ms
                PWM=1;
                else
                PWM=0;
        }
        else
        time=0;
}

你的中斷程序里面居然沒有裝初值,也能正常運行嗎?
回復

使用道具 舉報

10#
ID:57657 發表于 2021-4-18 18:45 | 只看該作者
study2018 發表于 2021-4-18 18:12
void time0() interrupt 1
{
        time++;

定時器模式2,裝什么初值。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91视频中文| 国产一在线观看 | 一区二区三区国产在线观看 | 99pao成人国产永久免费视频 | 中文久久| 色婷婷久久久久swag精品 | 欧美一区视频 | 亚州激情 | 韩国精品在线 | 日本成人福利视频 | 国产在线精品一区二区 | 免费久久久 | 精品国产一区久久 | 正在播放国产精品 | 日韩国产一区二区三区 | 久热精品在线播放 | 中文字幕一区二区三区四区 | 中文字幕在线播放第一页 | 久久精品久久综合 | 涩涩操 | 日韩欧美国产精品 | 国产精品高潮呻吟久久av野狼 | 韩日在线| 综合第一页 | 一级在线观看 | avhd101在线成人播放 | 国产精品欧美一区二区三区 | 国产精品久久久久久久久久尿 | 成人不卡 | 国产高清在线观看 | 日韩在线不卡视频 | 亚洲第一视频网站 | a级黄色片在线观看 | 欧美专区在线视频 | 精品亚洲一区二区三区四区五区高 | 欧美精品欧美精品系列 | 一级黄色录像毛片 | 成人精品一区二区 | 一色一黄视频 | 亚洲欧美日本国产 | 欧美亚洲另类丝袜综合网动图 |