8.CC2530 定时器T3的使用

* 文 件 名: main.c
* 描    述: 定时器T3通过中断方式控制LED1周期性闪烁
****************************************************************************/
#include <ioCC2530.h>
#include "lcd.h"

typedef unsigned char uchar;
typedef unsigned int  uint;

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

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

/****************************************************************************
* 名    称: InitLed()
* 功    能: 设置LED灯相应的IO口
* 入口参数: 无
* 出口参数: 无
****************************************************************************/
void InitLed(void)
{
    P1DIR |= 0x01;           //P1.0定义为输出
    LED1 = 1;                //使LED1灯上电默认为熄灭     
}
/****************************************************************************
* 名    称: InitT3()
* 功    能: 定时器初始化,系统不配置工作时钟时默认是2分频,即16MHz
* 入口参数: 无
* 出口参数: 无
****************************************************************************/
void InitT3()
{     
    T3CTL |= 0x08 ;          //开溢出中断     
    T3IE = 1;                //开总中断和T3中断
    T3CTL |= 0xE0;           //128分频,128/16000000*N=0.5S,N=62500
    T3CTL &= ~0x03;          //自动重装 00->0xff  62500/255=245(次)
    T3CTL |= 0x10;           //启动
    EA = 1;                  //开总中断
}

void dispLED1State()
{
  if(LED1>0)
  {
    //显示"D1:灭"
    LCD_P8x16Str(16, 5, "D1:");
    LCD_P16x16Ch(40, 5, 15);    
  }
  else
  {
     //显示"D1:亮"
    LCD_P8x16Str(16, 5, "D1:");
    LCD_P16x16Ch(40, 5, 14);   
  }                

}

//定时器T3中断处理函数
#pragma vector = T3_VECTOR 
__interrupt void T3_ISR(void) 

    IRCON = 0x00;            //清中断标志, 也可由硬件自动完成 
    if(count++ > 245)        //245次中断后LED取反,闪烁一轮(约为0.5 秒时间) 
    {                        //经过示波器测量确保精确
        count = 0;           //计数清零 
        LED1 = ~LED1;        //改变LED1的状态
        dispLED1State();
    } 
}

/****************************************************************************
* 程序入口函数
****************************************************************************/
void main(void)
{
    InitLed();             //设置LED灯相应的IO口
    InitT3();            //设置T3相应的寄存器
 
    LCD_Init();//LCD初始化
    LCD_CLS();//清屏
    LCD_welcome();
    dispLED1State();
    
    while(1);
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值