找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2390|回复: 0
打印 上一主题 下一主题
收起左侧

IAP15F2定时器模式

[复制链接]
跳转到指定楼层
楼主
ID:197626 发表于 2017-9-16 21:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位大佬,我想用定时器0来设置10S读取一次温度并显示在数码管上,
当我用IAP15单片机的定时器0的模式1(16位)时代码如下:

void Timer0Init(void)                //1毫秒@11.0592MHz
{
        AUXR |= 0x80;                //定时器时钟1T模式
        TMOD &= 0xF0;                //设置定时器模
        TMOD |= 0x01;
        TL0 = 0xCD;                    //设置定时初值
        TH0 = 0xD4;                    //设置定时初值
        TF0 = 0;                    //清除TF0标志
        TR0 = 1;                    //定时器0开始计时
        EA=1;
        ET0=1;
}
void Time0 () interrupt 1
{
  u16 T;
          TL0 = 0xCD;                    //设置定时初值
        TH0 = 0xD4;                    //设置定时初值
  i++;
  if(i==10000)     //10s
  {
   i=0;
   T=Ds18b20ReadTemp();                                 //读取温度
   Tempdatapros(T);                         //数据转换
   TF0=0;                                     //清除中断标志位
  }
}
啥反应都没有。

但是换成模式1(16位自动重装载时),代码如下:

void Timer0Init(void)                //1毫秒@11.0592MHz
{
        AUXR |= 0x80;                //定时器时钟1T模式
        TMOD &= 0xF0;                //设置定时器模式(16位自动重装载)
        TL0 = 0xCD;                    //设置定时初值
        TH0 = 0xD4;                    //设置定时初值
        TF0 = 0;                    //清除TF0标志
        TR0 = 1;                    //定时器0开始计时
        EA=1;
        ET0=1;
}


void Time0 () interrupt 1
{
  u16 T;
  i++;
  if(i==10000)     //10s
  {
   i=0;
   T=Ds18b20ReadTemp();                                 //读取温度
   Tempdatapros(T);                         //数据转换
   TF0=0;                                     //清除中断标志位
  }
}


结果就正确了,

有大佬知道这是为什么吗?





分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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