T1与T3定时器的使用

  


一、T1定时器



<span style="font-size:18px;color:#cc6600;">#include<iocc2530.h>


#define uint unsigned int
#define uchar unsigned char


#define LED P1_0
#define LED1 P1_1


uint counter = 0;//统计溢出次数
uint LEDFlag;//标志是否要闪烁
uint fen = 0;


void InitIO(void);


void InitIO(void)
{
  P1DIR |= 0x03;//LED设为输出口
  LED = 1;
  LED1 = 1;
  /************初始化计数器***********/
  T1CTL = 0x05;//0000  0101 8分频  自动重装
  /*
  T1CTL寄存器bit4--bit7未用 
  bit3_bit2 ==00 不分频,==01 8分频 , ==10 32分频 ,==11 128分频
  bit1_bit0 ==00暂停运行 ,
  ==01自由运行反复从0x0000到0xffff 自动重载,
  ==10模计数,从0x000到T1CC0反复计数 ,
  ==11正计数/倒计数,从0x0000到T1CC0反复计数并且从T1CC0倒计数到0x0000
  */
  T1STAT = 0x21; //0010  0001  1通道  0中断标志位 在计数器达到计数终值时置1
  
}


void main()
{
  InitIO();
  while(1)
  {
    if(IRCON > 0)//查询中断  中断标志位寄存器
    {
      IRCON = 0;
      counter++;
     
      if(counter == 60) //中断计时  约1s
      {
        fen++;
        counter = 0;
        LEDFlag = !LEDFlag;
      }
      if(fen%15==0) //每30秒翻转
      {
        LED1 = !LED1;
      }
  }
  
  if(LEDFlag)
  {
    LED = !LED;
   
    LEDFlag = !LEDFlag;//闪烁标志变量值置0
  }
}


}</span>



二、T3定时器



<span style="font-size:18px;color:#666600;">#include <ioCC2530.h>

typedef unsigned char uchar;
typedef unsigned int  uint;

#define LED1 P1_0       // P1.0口控制LED1

uint count;             //用于定时器计数


void InitLed(void)
{
    P1DIR |= 0x01;           //P1.0定义为输出
    LED1 = 1;                //使LED1灯上电默认为熄灭     
}


// 功    能: 定时器初始化,系统不配置工作时钟时默认是2分频,即16MHz

void InitT3()
{     
    T3CTL |= 0x08 ;          //开溢出中断       000_ 0_ 1_ 0_ 00_  开溢出中断 
    T3IE = 1;                //开总中断和T3中断   
    T3CTL |= 0xE0;           //128分频,128/16000000*N=0.5S,N=62500    1110  0000  111/128分频
    T3CTL &= ~0x03;          //自动重装 00->0xff  62500/255=245(次)    1111  1100  00/自动重装 
    T3CTL |= 0x10;           //启动  0001 0000  //开启溢出中断
    EA = 1;                  //开总中断
}


//定时器T3中断处理函数
#pragma vector = T3_VECTOR        //响应中断进行操作
__interrupt void T3_ISR(void) 
{ 
    IRCON = 0x00;            //清中断标志, 也可由硬件自动完成 
    if(count++ > 245)        //245次中断后LED取反,闪烁一轮(约为0.5 秒时间) 
      /**
      count++>245  判断count是否>245 如果运行符合就运行下边的如果不符合就继续进行++运算
      */
    {                        //经过示波器测量确保精确
        count = 0;           //计数清零 
        LED1 = ~LED1;        //改变LED1的状态
       
    } 
}


/****************************************************************************
* 程序入口函数
****************************************************************************/
void main(void)
{
    InitLed();		     //设置LED灯相应的IO口
    InitT3();            //设置T3相应的寄存器
    
    while(1)
    {};
}
</span>




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值