找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

如何以公式的形式給單片機定時器賦初值

  [復制鏈接]
跳轉到指定樓層
樓主
ID:86913 發(fā)表于 2019-2-18 19:46 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
如:定時0.02秒,用公式的形式給定時器TH0、TL0賦值?這個C語言的語句怎么寫?(注意,是以公式的形式,不是TH0=0xB8、TL0=0x00這種寫法),謝謝!
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:401564 發(fā)表于 2019-2-18 21:15 | 只看該作者
TH0=0xB8、TL0=0x00這種寫法必須存在!你想改變定時器的溢出時間,只能由這兩個地址來決定,不管你是想用什么公式,這代碼是一定要有的,除非是別人已經寫好了函數,但這會讓原本不是很復雜的定時器設定變得很復雜
你多用幾次就可以了
如果是一定要用公式的話,就用延時函數吧
回復

使用道具 舉報

板凳
ID:213173 發(fā)表于 2019-2-18 21:21 | 只看該作者
在實際應用中用公式不如用工具。
回復

使用道具 舉報

地板
ID:477932 發(fā)表于 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++;                    //獲得節(jié)拍值
                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++;
        }
}

評分

參與人數 3黑幣 +38 收起 理由
zhengchong60 + 15
sheng7533967 + 15
春風十里吹 + 8

查看全部評分

回復

使用道具 舉報

5#
ID:158375 發(fā)表于 2019-2-19 08:17 | 只看該作者
這個想法不錯,只是實際運用中需要你考慮的問題太多,程序復雜。這也許是它的不足。
回復

使用道具 舉報

6#
ID:86913 發(fā)表于 2019-2-19 11:30 | 只看該作者
謝謝上面各位朋友的賜教!
我曾看到過;
TH0=(65536-Y)/256
TL0=(65536-Y)%256
其中Y=65536-S*12/11059200
式中 S是定時值,單位:秒
不過,我看不明白
回復

使用道具 舉報

7#
ID:86913 發(fā)表于 2019-2-19 20:32 | 只看該作者
Y_G_G 發(fā)表于 2019-2-18 21:15
TH0=0xB8、TL0=0x00這種寫法必須存在!!你想改變定時器的溢出時間,只能由這兩個地址來決定,不管你是想用 ...

謝謝賜教,
我曾看到過;
TH0=(65536-Y)/256
TL0=(65536-Y)%256
其中Y=65536-S*12/11059200
式中 S是定時值,單位:秒
不過,我看不明白
回復

使用道具 舉報

8#
ID:86913 發(fā)表于 2019-2-19 20:33 | 只看該作者
wulin 發(fā)表于 2019-2-18 21:21
在實際應用中用公式不如用工具。

謝謝賜教,
我曾看到過;
TH0=(65536-Y)/256
TL0=(65536-Y)%256
其中Y=65536-S*12/11059200
式中 S是定時值,單位:秒
不過,我看不明白
回復

使用道具 舉報

9#
ID:86913 發(fā)表于 2019-2-19 20:36 | 只看該作者
static 發(fā)表于 2019-2-19 00:10
給你一個
void Music_Play(uint8 *MusicTab)
{

這里P0和P1為什么有兩種賦值形式
回復

使用道具 舉報

10#
ID:86913 發(fā)表于 2019-2-19 20:38 | 只看該作者
static 發(fā)表于 2019-2-19 00:10
給你一個
void Music_Play(uint8 *MusicTab)
{

謝謝提供資料1
這里,P0和P1為什么用兩種賦值方式?
回復

使用道具 舉報

11#
ID:86913 發(fā)表于 2019-2-19 20:40 | 只看該作者
wulin 發(fā)表于 2019-2-18 21:21
在實際應用中用公式不如用工具。

謝謝賜教,
我曾看到過;
TH0=(65536-Y)/256
TL0=(65536-Y)%256
其中Y=65536-S*12/11059200
式中 S是定時值,單位:秒
我覺得用公式來改變初值比較方便
回復

使用道具 舉報

12#
ID:477934 發(fā)表于 2019-2-20 18:04 | 只看該作者
tmxk0574 發(fā)表于 2019-2-19 20:40
謝謝賜教,
我曾看到過;
TH0=(65536-Y)/256

那里面就是公式啊!看個人的悟性了!

評分

參與人數 8黑幣 +112 收起 理由
static + 10
zhengchong60 + 15
sheng7533967 + 15
shuisheng60 + 16
還有誰? + 10
找人PK + 14
鉆牛尖滴劉尖尖 + 16
yoxi + 16

查看全部評分

回復

使用道具 舉報

13#
ID:469417 發(fā)表于 2019-3-10 03:34 | 只看該作者
你可以用N多種公式來做,最終將結賦值給定時器
回復

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表