找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机定时器0演示程序-与PCA计数的区别

[复制链接]
跳转到指定楼层
楼主
ID:26188 发表于 2015-2-18 01:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
定时器与PCA计数的区别:
定时计数器从零或指定值自加到溢出后产生中断,后自动或程序加载指定值到计数器,PCA有和定时器
相同的溢出中断,但在多数情况下使用比较装载值相等的方式产生中断,比较产生中断能根据设定状态
,由硬件自动执行特定位翻转或PWM
//数据类型定义
struct Times
{//定时器结构数据类型
unsigned int    Match;    //重装值容器
unsigned int    Dou;      //扩展精度自加容器
unsigned int    Doub;     //扩展精度终点容器
}Times0;                  //结构变量名
==========================================================================================*/
void Times0_Setup()
{
//设定计数脉冲模式================
    //AUXR|= 0x80;   //定时器0工作在1T模式
    AUXR&= 0x7F;   //定时器0工作在12T模式
//设定工作方式====================
    TMOD&=0xF0;    //清除定时器0的所有状态,隐含13位计数器
    //TMOD|=0x0C;    //使用外部中断INT0做计数脉冲
    TMOD|=0x01;    //16位定时
    //TMOD|=0x02;    //8位自动重装模式
    //TMOD|=0x03;    //双8位定时
//装入重装值======================
//13位定时器
    //TL0 = Times0.Match;         //低8位装载
    //TH0 = Times0.Match >> 5;    //高5位装载
//16位软件重装定时器
    TL0 = Times0.Match;         //低8位装载
    TH0 = Times0.Match >> 8;    //高8位装载
//8位重装定时器
    //TH0 = TL0 = Times0.Match;
//开始定时
    ET0=1;         //开定时器0中断
    TR0=1;         //定时器0开始运行
    EA=1;          //开总中断
}

//中断函数()
void tm0_isr() interrupt 1 using 1
{
//16位模式需要软件重装
      TL0 = Times0.Match;
      TH0 = Times0.Match >> 8;
//Times0.Match是ms级,加入判断Times0.Dou变量自减或自加可以达到秒或分钟级
      if (Times0.Dou-- == 0)
      {//Dou自减,直到等于0
          Times0.Dou = Times0.Doub;    //Doub重装
//=======================Times0事件做出处理=========================
//==================================================================
      }
}


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

使用道具 举报

沙发
ID:91009 发表于 2015-9-24 22:40 | 只看该作者
先看看
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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