找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4570|回复: 12
收起左侧

如何以公式的形式给单片机定时器赋初值

  [复制链接]
ID:86913 发表于 2019-2-18 19:46 | 显示全部楼层 |阅读模式
如:定时0.02秒,用公式的形式给定时器TH0、TL0赋值?这个C语言的语句怎么写?(注意,是以公式的形式,不是TH0=0xB8、TL0=0x00这种写法),谢谢!
回复

使用道具 举报

ID:401564 发表于 2019-2-18 21:15 | 显示全部楼层
TH0=0xB8、TL0=0x00这种写法必须存在!!你想改变定时器的溢出时间,只能由这两个地址来决定,不管你是想用什么公式,这代码是一定要有的,除非是别人已经写好了函数,但这会让原本不是很复杂的定时器设定变得很复杂
你多用几次就可以了
如果是一定要用公式的话,就用延时函数吧
回复

使用道具 举报

ID:213173 发表于 2019-2-18 21:21 | 显示全部楼层
在实际应用中用公式不如用工具。
回复

使用道具 举报

ID:477932 发表于 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++;
        }
}

评分

参与人数 3黑币 +38 收起 理由
zhengchong60 + 15
sheng7533967 + 15
春风十里吹 + 8

查看全部评分

回复

使用道具 举报

ID:158375 发表于 2019-2-19 08:17 | 显示全部楼层
这个想法不错,只是实际运用中需要你考虑的问题太多,程序复杂。这也许是它的不足。
回复

使用道具 举报

ID:86913 发表于 2019-2-19 11:30 | 显示全部楼层
谢谢上面各位朋友的赐教!
我曾看到过;
TH0=(65536-Y)/256
TL0=(65536-Y)%256
其中Y=65536-S*12/11059200
式中 S是定时值,单位:秒
不过,我看不明白
回复

使用道具 举报

ID:86913 发表于 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是定时值,单位:秒
不过,我看不明白
回复

使用道具 举报

ID:86913 发表于 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是定时值,单位:秒
不过,我看不明白
回复

使用道具 举报

ID:86913 发表于 2019-2-19 20:36 | 显示全部楼层
static 发表于 2019-2-19 00:10
给你一个
void Music_Play(uint8 *MusicTab)
{

这里P0和P1为什么有两种赋值形式
回复

使用道具 举报

ID:86913 发表于 2019-2-19 20:38 | 显示全部楼层
static 发表于 2019-2-19 00:10
给你一个
void Music_Play(uint8 *MusicTab)
{

谢谢提供资料1
这里,P0和P1为什么用两种赋值方式?
回复

使用道具 举报

ID:86913 发表于 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是定时值,单位:秒
我觉得用公式来改变初值比较方便
回复

使用道具 举报

ID:477934 发表于 2019-2-20 18:04 | 显示全部楼层
tmxk0574 发表于 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

查看全部评分

回复

使用道具 举报

ID:469417 发表于 2019-3-10 03:34 | 显示全部楼层
你可以用N多种公式来做,最终将结赋值给定时器
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表