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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

STC89單片機 定時器做PWM程序

  [復制鏈接]
跳轉到指定樓層
樓主
ID:390416 發表于 2020-12-31 11:20 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最后由 人人學會單片機 于 2020-12-31 15:10 編輯

很多小白不明白PWM怎么回事。只能說明你們看的教程沒講。我們人人學會單片機教程就講過。其實很簡單的。特分享CPU定時器模擬PWM輸出給你們
#include "STC89.H"                                        //頭文件包含
#include <intrins.h>                                //頭文件包含
typedef unsigned char u8;                        //重新定義數據類型名
typedef unsigned short u16;                        //重新定義數據類型名
typedef unsigned long u32;                        //重新定義數據類型名
sbit PWM_OUT=P2^1;        
u8 idata PWM_Write_Byte[3]=0;

//****************************祁緒電子 2020年5月***
// 定時器0初始化  晶振11059200,12T,輸出50Hz的PWM,占空比0~255
// 定時器初值為:256-(11059200÷12÷50Hz÷256) = 184 = 0xB8
void PWM_Init(void)
{
        TMOD &= 0xF0;                                        //配置定時器工作模式
        TMOD |= 0x02;                                        //配置定時器工作模式 8位自動重裝模式
    TL0 = 0xB8;;                    //定時器初值
    TH0 = 0xB8;                                //定時器重裝初值
    TR0 = 1;                        //啟動定時器0
    ET0=1;                                                         //允許定時器0申請中斷
        EA=1;                                                        //中斷總閘閉合
}
//****************************祁緒電子 2020年5月***
//定時器0的CPU處理函數,位置任意寫都行
void PWM_Display_timer0() interrupt 1
{
        
        static u8 pwm_t=0;                                 //局部變量,不丟失數據
        if(pwm_t<PWM_Write_Byte[0])
        {
                PWM_OUT=1;                                 
        }
        else PWM_OUT=0;
        pwm_t++;
}

//***************************祁緒電子 2020年5月***
// PWM 數模變換數據分配
void PWM_Allot()                                          
{
        static u8 kkk=0;        
        static u8 count=0;
        count++;
        if(count>100)
        {
                count=0;
                kkk++;
                PWM_Write_Byte[0]=kkk;        //kkk為占空比自動增加
                PWM_Write_Byte[1]=10;        
                PWM_Write_Byte[2]=10;
        }
}


void main()                                                        //主函數
{
        PWM_Init();
        while(1)                                                //主函數大循環
        {
                PWM_Allot();        
        }
}


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

使用道具 舉報

沙發
ID:607312 發表于 2021-1-5 17:42 | 只看該作者
學習了。很好
回復

使用道具 舉報

板凳
ID:796670 發表于 2021-1-24 09:52 | 只看該作者
請問PWM_Write_Byte[3]的作用是什么啊?為什么要進行數模轉換呢?
回復

使用道具 舉報

地板
ID:390416 發表于 2021-1-24 10:16 | 只看該作者
明日香 發表于 2021-1-24 09:52
請問PWM_Write_Byte[3]的作用是什么啊?為什么要進行數模轉換呢?

你居然能問這種問題,你家的燈,你不開它你又看不見,開它吧你又覺得太亮,太浪費電。而有時候必須最亮工作。你說怎么辦?
回復

使用道具 舉報

5#
ID:582255 發表于 2021-1-24 14:17 | 只看該作者
這貌似是一個比較復雜的PWM
回復

使用道具 舉報

6#
ID:878420 發表于 2021-1-25 15:38 來自手機 | 只看該作者
學習啦!用到哪里學習到哪里,知識慢慢地積累
回復

使用道具 舉報

7#
ID:444215 發表于 2021-1-29 09:51 | 只看該作者
學習啦!用到哪里學習到哪里,知識慢慢地積累
回復

使用道具 舉報

8#
ID:594968 發表于 2021-1-29 15:37 | 只看該作者
程序看的很清楚,真是用心啊
回復

使用道具 舉報

9#
ID:444215 發表于 2023-9-13 16:03 | 只看該作者
需要這樣才能產生準確的50HZ的PWM。
void PWM_Init(void)
{
    TMOD &= 0xF0;                   //配置定時器工作模式
    TMOD |= 0x02;                   //配置定時器工作模式 8位自動重裝模式
    TL0 = 0xB8;;                    //定時器初值
    TH0 = 0xB8;                     //定時器重裝初值
    TR0 = 1;                        //啟動定時器0
    ET0=1;                          //允許定時器0申請中斷
    EA=1;                           //中斷總閘閉合
}
void PWM_Display_timer0() interrupt 1
{
        static u8 pwm_t=0;                                 //局部變量,不丟失數據
                TR0 = 0;
        if(pwm_t<PWM_Write_Byte[0])
        {
            PWM_OUT=1;                                 
        }
        else PWM_OUT=0;
        pwm_t++;
                TR0 = 1;
}
回復

使用道具 舉報

10#
ID:628588 發表于 2023-10-6 19:50 | 只看該作者
249449417@qq.co 發表于 2023-9-13 16:03
需要這樣才能產生準確的50HZ的PWM。
void PWM_Init(void)
{

pwm_t 都沒有清零,
回復

使用道具 舉報

11#
ID:675799 發表于 2023-10-12 10:49 | 只看該作者
oiui1 發表于 2023-10-6 19:50
pwm_t 都沒有清零,

if(pwm_t >255)
pwm_t =0;
回復

使用道具 舉報

12#
ID:675799 發表于 2023-10-12 10:56 | 只看該作者
oiui1 發表于 2023-10-6 19:50
pwm_t 都沒有清零,

if(pwm_t >100) pwm_t =0;
回復

使用道具 舉報

13#
ID:149799 發表于 2024-6-22 15:43 | 只看該作者
多謝樓主分享,51黑有你更精彩。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: av电影一区二区 | 欧美日韩成人网 | 久久久精品一区二区 | 99久久婷婷国产精品综合 | 国产在线视频一区二区 | 亚洲国产自产 | 亚洲乱码一区二区三区在线观看 | 999精品在线 | 欧美精品久久久久 | 视频三区| 亚洲精品一区二区三区蜜桃久 | 在线视频一区二区三区 | 这里只有精品999 | 高清人人天天夜夜曰狠狠狠狠 | 日本国产精品视频 | 亚洲视频中文字幕 | 久热精品免费 | 女人夜夜春 | 欧美区在线 | 一级黄色播放 | 欧美一区二区网站 | 婷婷久久综合 | 精品亚洲一区二区三区四区五区 | 五月花丁香婷婷 | 一区中文字幕 | 国产一级网站 | 久久av一区二区三区 | 成人在线观看免费 | 国产最新视频在线 | 99精品视频免费观看 | 久久久久久久av麻豆果冻 | 一区二区三区不卡视频 | 免费在线一区二区 | 久久久久国产一区二区三区 | 狠狠色香婷婷久久亚洲精品 | a毛片| 亚洲精品久久久久国产 | 久久久网 | 99久久婷婷国产综合精品首页 | 国产高清免费在线 | 91在线免费视频 |