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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3724|回復: 1
打印 上一主題 下一主題
收起左側(cè)

關(guān)于C語言定時器重載值修正的問題

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:204609 發(fā)表于 2017-7-24 10:28 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
只是一個PWM控制LED燈的小程序。我對于C語言的定時器修正值判斷不清楚,這里的修正值13,
不知道從哪里開始數(shù)機械周期的
#include <reg52.h>
sbit  PWMOUT = P0^0;
sbit  ADDR0 = P1^0;
sbit  ADDR1 = P1^1;
sbit  ADDR2 = P1^2;
sbit  ADDR3 = P1^3;
sbit  ENLED = P1^4;
unsigned char HReloadH = 0;  //高電平重載值的高字節(jié)
unsigned char HReloadL = 0;  //高電平重載值的低字節(jié)
unsigned char LReloadH = 0;  //低電平重載值的高字節(jié)
unsigned char LReloadL = 0;  //低電平重載值的低字節(jié)
void ConfigPWM(unsigned int fr, unsigned char dc);
void ClosePWM();
void main ()
{
    unsigned int i;
    P0 = 0xFF;  //P0口初始化
    ADDR0 = 0;  //選擇獨立LED
    ADDR1 = 1;
    ADDR2 = 1;
    ADDR3 = 1;
    ENLED = 0;  //LED總使能
    EA = 1;     //開總中斷

    while(1)
    {
        ConfigPWM(100, 10);  //頻率100Hz,占空比10%
        for (i=0; i<40000; i++);
        ClosePWM();
        ConfigPWM(100, 40);  //頻率100Hz,占空比40%
        for (i=0; i<40000; i++);
        ClosePWM();
        ConfigPWM(100, 90);  //頻率100Hz,占空比90%
        for (i=0; i<40000; i++);
        ClosePWM();
        for (i=0; i<40000; i++);
    }
}
void ConfigPWM(unsigned int fr, unsigned char dc)  //PWM配置函數(shù),fr-頻率,dc-占空比
{
    unsigned int  high, low;
    unsigned long tmp;

    tmp  = (11059200 / 12) / fr;  //計算一個周期所需的計數(shù)值
    high = (tmp * dc) / 100;      //計算高電平所需的計數(shù)值
    low  = tmp - high;            //計算低電平所需的計數(shù)值
    high = 65536 - high + 13;     //計算高電平的定時器重載值并修正
    low  = 65536 - low  + 13;     //計算低電平的定時器重載值并修正

    HReloadH = (unsigned char)(high >> 8);  //高電平重載值拆分為高低字節(jié)
    HReloadL = (unsigned char)high;
    LReloadH = (unsigned char)(low >> 8);   //低電平重載值拆分為高低字節(jié)
    LReloadL = (unsigned char)low;

    TMOD &= 0xF0;   //清零T0的控制位
    TMOD |= 0x01;   //配置T0為模式1
    TH0 = HReloadH; //加載T0重載值
    TL0 = HReloadL;
    ET0 = 1;        //使能T0中斷
    TR0 = 1;        //啟動T0
    PWMOUT = 1;     //輸出高電平
}
void ClosePWM()  //關(guān)閉PWM
{
    TR0 = 0;     //停止定時器
    ET0 = 0;
    PWMOUT = 1;  //輸出高電平
}
void InterruptTimer0() interrupt 1  //T0中斷服務函數(shù)
{
    if (PWMOUT == 1)  //當前輸出為高電平時,裝載低電平值并輸出低電平
    {
        TH0 = LReloadH;
        TL0 = LReloadL;
        PWMOUT = 0;
    }
    else              //當前輸出為低電平時,裝載高電平值并輸出高電平
    {
        TH0 = HReloadH;
        TL0 = HReloadL;
        PWMOUT = 1;
    }



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

使用道具 舉報

沙發(fā)
ID:204609 發(fā)表于 2017-7-25 10:05 | 只看該作者
我能說我打錯字了嗎  “這是控制LED燈的程序”
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 特黄毛片 | 操操操操操操 | 小日子的在线观看免费第8集 | av在线播放网站 | 国产天堂网 | 日韩免费一区二区 | www.jiujiu| 欧美国产日韩视频 | 中文在线字幕免费观看 | 午夜黄色小视频 | 大尺度做爰呻吟舌吻网站 | 国产午夜一区二区 | 亚洲性视频 | 婷婷导航 | аⅴ资源新版在线天堂 | 自拍偷拍欧美日韩 | 不卡在线视频 | 一级免费黄色片 | 亚洲精品乱码久久久久久动漫 | 日韩av在线免费播放 | 丁香综合网 | 欧美黄色一级视频 | 四虎入口| 国产视频在线看 | 天天干夜夜艹 | 手机福利视频 | 亚洲免费看片 | 日韩欧美国产精品 | 毛片在线观看网站 | av大片在线观看 | 欧美一区二区三区在线视频 | 成人在线小视频 | 黄骗免费网站 | wwwxxx欧美| 欧美三级大片 | 国产一区二三区 | 国产va在线观看 | 最新超碰 | 亚洲免费网站 | 久久久久亚洲精品 | 可以在线观看的av |