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

標題: 關于C語言定時器重載值修正的問題 [打印本頁]

作者: 星際漫游者    時間: 2017-7-24 10:28
標題: 關于C語言定時器重載值修正的問題
只是一個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;
    }




作者: 星際漫游者    時間: 2017-7-25 10:05
我能說我打錯字了嗎  “這是控制LED燈的程序”




歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 国产一级特黄 | 黄色片在线免费观看 | 韩日一级片 | 日本黄色录像 | 91蝌蚪少妇偷拍 | 成人精品免费视频 | 国产一区精品在线 | 九九色综合| 黄色免费片 | 日本久久久久 | 五月婷婷色 | 在线亚洲天堂 | 亚洲在线一区二区 | 日韩精品视频在线免费观看 | 国产欧美日本 | 中文字幕三区 | 欧美一区视频 | 三级在线观看 | 亚洲欧美日韩综合 | 免费看黄色aaaaaa 片 | 99久久九九 | 白白色在线观看 | 亚洲福利视频一区 | 亚洲色网址 | 久久久国产一区二区三区 | 亚洲一区二区国产精品 | 成人一级视频 | 中文在线免费看视频 | 视频在线一区 | 一区二区三区免费观看 | 久久精品福利视频 | 青青草网站 | 国产涩涩 | 国产一区二区三区久久 | 中文字幕在线观看日本 | 亚洲二区视频 | 精品亚洲一区二区 | 18视频在线观看 | 天天爽夜夜操 | 在线不卡av| 中文字幕在线观看一区二区三区 |