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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3709|回復: 1
收起左側

關于C語言定時器重載值修正的問題

[復制鏈接]
ID:204609 發表于 2017-7-24 10:28 | 顯示全部樓層 |閱讀模式
只是一個PWM控制LED燈的小程序。我對于C語言的定時器修正值判斷不清楚,這里的修正值13,
不知道從哪里開始數機械周期的
#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;  //高電平重載值的高字節
unsigned char HReloadL = 0;  //高電平重載值的低字節
unsigned char LReloadH = 0;  //低電平重載值的高字節
unsigned char LReloadL = 0;  //低電平重載值的低字節
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配置函數,fr-頻率,dc-占空比
{
    unsigned int  high, low;
    unsigned long tmp;

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

    HReloadH = (unsigned char)(high >> 8);  //高電平重載值拆分為高低字節
    HReloadL = (unsigned char)high;
    LReloadH = (unsigned char)(low >> 8);   //低電平重載值拆分為高低字節
    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()  //關閉PWM
{
    TR0 = 0;     //停止定時器
    ET0 = 0;
    PWMOUT = 1;  //輸出高電平
}
void InterruptTimer0() interrupt 1  //T0中斷服務函數
{
    if (PWMOUT == 1)  //當前輸出為高電平時,裝載低電平值并輸出低電平
    {
        TH0 = LReloadH;
        TL0 = LReloadL;
        PWMOUT = 0;
    }
    else              //當前輸出為低電平時,裝載高電平值并輸出高電平
    {
        TH0 = HReloadH;
        TL0 = HReloadL;
        PWMOUT = 1;
    }



回復

使用道具 舉報

ID:204609 發表于 2017-7-25 10:05 | 顯示全部樓層
我能說我打錯字了嗎  “這是控制LED燈的程序”
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产日产精品一区二区三区四区 | 免费黄色的视频 | 国产欧美精品一区 | 黄色大片免费观看 | 精品日韩欧美一区二区 | 天天操妹子 | 成人av网页 | 午夜男人天堂 | 亚洲午夜在线 | 亚洲在线高清 | 最新中文字幕第一页视频 | 亚洲91视频 | 亚洲情综合五月天 | 18性欧美 | 亚洲欧美日韩精品久久亚洲区 | 国产成人综合久久 | 人人干天天干 | 18成人在线观看 | 免费在线视频精品 | 亚洲视频中文字幕 | 黄a免费看 | 97高清国语自产拍 | 一级日批片 | 一级毛片视频 | 国产福利视频 | 91在线免费视频 | 在线a视频 | 亚洲精品一二三区 | 久草视频网站 | 精品久久中文字幕 | 色婷婷综合网 | 韩日一区二区 | 蜜桃视频一区二区三区 | 夜夜草av | xx视频在线观看 | 伊人精品在线视频 | 精品久久一区二区三区 | 国产视频导航 | av一二三区 | 观看av| 成人免费黄色 |