定时器T1通过查询方式控制LED1周期性闪烁
1 /**************************************************************************** 2 * 文 件 名: main.c 3 * 作 者: Amo [ www.amoMcu.com 阿莫单片机] 4 * 修 订: 2014-04-08 5 * 版 本: 1.0 6 * 描 述: 定时器T1通过查询方式控制LED1周期性闪烁 7 ****************************************************************************/ 8 #include <ioCC2540.h> 9 10 typedef unsigned char uchar; 11 typedef unsigned int uint; 12 13 #define LED1 P1_0 // P1.0口控制LED1 14 15 /**************************************************************************** 16 * 名 称: InitLed() 17 * 功 能: 设置LED灯相应的IO口 18 * 入口参数: 无 19 * 出口参数: 无 20 ****************************************************************************/ 21 void InitLed(void) 22 { 23 P1DIR |= 0x01; //P1.0定义为输出 24 LED1 = 0; //使LED1灯下电默认为熄灭 25 } 26 27 /**************************************************************************** 28 * 名 称: InitT1() 29 * 功 能: 定时器初始化,系统不配置工作时钟时默认是2分频,即16MHz 30 * 入口参数: 无 31 * 出口参数: 无 32 ****************************************************************************/ 33 void InitT1() 34 { 35 T1CTL = 0x0d; //128分频,自动重装 0x0000-0xFFFF 36 T1STAT= 0x21; //通道0,中断有效 37 } 38 39 /**************************************************************************** 40 * 程序入口函数 41 ****************************************************************************/ 42 void main(void) 43 { 44 uchar count=0; 45 46 InitLed(); //调用初始化函数 47 InitT1(); 48 49 while(1) 50 { 51 if(IRCON > 0) 52 { 53 IRCON=0; 54 if(count++ >= 1) //约1s周期性闪烁,示波器测大约为1025MS 55 { 56 count=0; 57 LED1 = !LED1; //LED1闪烁 58 } 59 } 60 } 61 }
CC254x 的 T1 定时器( 16 位) 需要配置三个寄存器 T1CTL、 T1STAT、 IRCON:
所以配置如下:
27 /**************************************************************************** 28 * 名 称: InitT1() 29 * 功 能: 定时器初始化,系统不配置工作时钟时默认是2分频,即16MHz 30 * 入口参数: 无 31 * 出口参数: 无 32 ****************************************************************************/ 33 void InitT1() 34 { 35 T1CTL = 0x0d; //128分频,自动重装 0x0000-0xFFFF 36 T1STAT= 0x21; //通道0,中断有效 37 }
不采用中断可以轮训IRCON,当定时器1中断时置为1,轮训需要手动清零(采用中断子程序会自动清零)
链接:http://pan.baidu.com/s/1bnlWvEJ
时间: 2024-10-26 05:23:44