欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 如何以公式的形式給單片機定時器賦初值 [打印本頁]

作者: tmxk0574    時間: 2019-2-18 19:46
標題: 如何以公式的形式給單片機定時器賦初值
如:定時0.02秒,用公式的形式給定時器TH0、TL0賦值?這個C語言的語句怎么寫?(注意,是以公式的形式,不是TH0=0xB8、TL0=0x00這種寫法),謝謝!
作者: Y_G_G    時間: 2019-2-18 21:15
TH0=0xB8、TL0=0x00這種寫法必須存在!!你想改變定時器的溢出時間,只能由這兩個地址來決定,不管你是想用什么公式,這代碼是一定要有的,除非是別人已經寫好了函數,但這會讓原本不是很復雜的定時器設定變得很復雜
你多用幾次就可以了
如果是一定要用公式的話,就用延時函數吧
作者: wulin    時間: 2019-2-18 21:21
在實際應用中用公式不如用工具。
作者: static    時間: 2019-2-19 00:10
給你一個
void Music_Play(uint8 *MusicTab)
{
        uint8 *pMusic;
        uint8 temp,i;

        pMusic=MusicTab;  //將歌曲首地址給指針變量
        while(*pMusic!=0)
        {
                if((*pMusic&0xf0)==0x00)
                        Fre=65536-1000000/FreTab_Low[*pMusic&0x0f];
                else if((*pMusic&0xf0)==0x10)
                        Fre=65536-1000000/FreTab_Mid[*pMusic&0x0f];
                else if((*pMusic&0xf0)==0x20)
                        Fre=65536-1000000/FreTab_Hight[*pMusic&0x0f];
                       
                TH0=Fre/256;                //計算頻率初值,賦高八位
                TL0=Fre%256;                //計算頻率初值,賦低八位
                TH1=0x3c;                    //定時器1賦初值,定時50ms
                TL1=0xb0;
               
                pMusic++;                    //獲得節拍值
                temp=*pMusic;
                TR0=1;                        //開啟定時器T0
                TR1=1;                        //開啟定時器T1
                for(i=0;i<temp;i++)
                {
                        while(TF1==0);        //判斷定時器1是否溢出
                        TH1=0x3c;
                        TL1=0xb0;
                        TF1=0;       
                }
                pMusic++;
        }
}
作者: 笨笨兔    時間: 2019-2-19 08:17
這個想法不錯,只是實際運用中需要你考慮的問題太多,程序復雜。這也許是它的不足。
作者: tmxk0574    時間: 2019-2-19 11:30
謝謝上面各位朋友的賜教!
我曾看到過;
TH0=(65536-Y)/256
TL0=(65536-Y)%256
其中Y=65536-S*12/11059200
式中 S是定時值,單位:秒
不過,我看不明白
作者: tmxk0574    時間: 2019-2-19 20:32
Y_G_G 發表于 2019-2-18 21:15
TH0=0xB8、TL0=0x00這種寫法必須存在!!你想改變定時器的溢出時間,只能由這兩個地址來決定,不管你是想用 ...

謝謝賜教,
我曾看到過;
TH0=(65536-Y)/256
TL0=(65536-Y)%256
其中Y=65536-S*12/11059200
式中 S是定時值,單位:秒
不過,我看不明白
作者: tmxk0574    時間: 2019-2-19 20:33
wulin 發表于 2019-2-18 21:21
在實際應用中用公式不如用工具。

謝謝賜教,
我曾看到過;
TH0=(65536-Y)/256
TL0=(65536-Y)%256
其中Y=65536-S*12/11059200
式中 S是定時值,單位:秒
不過,我看不明白
作者: tmxk0574    時間: 2019-2-19 20:36
static 發表于 2019-2-19 00:10
給你一個
void Music_Play(uint8 *MusicTab)
{

這里P0和P1為什么有兩種賦值形式
作者: tmxk0574    時間: 2019-2-19 20:38
static 發表于 2019-2-19 00:10
給你一個
void Music_Play(uint8 *MusicTab)
{

謝謝提供資料1
這里,P0和P1為什么用兩種賦值方式?
作者: tmxk0574    時間: 2019-2-19 20:40
wulin 發表于 2019-2-18 21:21
在實際應用中用公式不如用工具。

謝謝賜教,
我曾看到過;
TH0=(65536-Y)/256
TL0=(65536-Y)%256
其中Y=65536-S*12/11059200
式中 S是定時值,單位:秒
我覺得用公式來改變初值比較方便
作者: struct00    時間: 2019-2-20 18:04
tmxk0574 發表于 2019-2-19 20:40
謝謝賜教,
我曾看到過;
TH0=(65536-Y)/256

那里面就是公式啊!看個人的悟性了!
作者: 刀刀見紅    時間: 2019-3-10 03:34
你可以用N多種公式來做,最終將結賦值給定時器




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1