一、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>