📄 main.c
字号:
#include <ioCC2430.h>
#define RLED P1_0
#define YLED P1_1
#define uchar unsigned char
/*****************************************
//定义全局变量
*****************************************/
uchar counter = 0;
/*****************************************
//T3配置定义
*****************************************/
// Where _timer_ must be either 3 or 4
// Macro for initialising timer 3 or 4
//将T3/4配置寄存复位
#define TIMER34_INIT(timer) \
do { \
T##timer##CTL = 0x06; \
T##timer##CCTL0 = 0x00; \
T##timer##CC0 = 0x00; \
T##timer##CCTL1 = 0x00; \
T##timer##CC1 = 0x00; \
} while (0)
//Macro for enabling overflow interrupt
//打开T3/4溢出中断
#define TIMER34_ENABLE_OVERFLOW_INT(timer,val) \
(T##timer##CTL = (val) ? T##timer##CTL | 0x08 : T##timer##CTL & ~0x08)
//启动T3
#define TIMER3_START(val) \
(T3CTL = (val) ? T3CTL | 0X10 : T3CTL&~0X10)
//时钟分步选择
#define TIMER3_SET_CLOCK_DIVIDE(val) \
do{ \
T3CTL &= ~0XE0; \
(val==2) ? (T3CTL|=0X20): \
(val==4) ? (T3CTL|=0x40): \
(val==8) ? (T3CTL|=0X60): \
(val==16)? (T3CTL|=0x80): \
(val==32)? (T3CTL|=0xa0): \
(val==64) ? (T3CTL|=0xc0): \
(val==128) ? (T3CTL|=0XE0): \
(T3CTL|=0X00); /* 1 */ \
}while(0)
//Macro for setting the mode of timer3
//设置T3的工作方式
#define TIMER3_SET_MODE(val) \
do{ \
T3CTL &= ~0X03; \
(val==1)?(T3CTL|=0X01): /*DOWN */ \
(val==2)?(T3CTL|=0X02): /*Modulo */ \
(val==3)?(T3CTL|=0X03): /*UP / DOWN */ \
(T3CTL|=0X00); /*free runing */ \
}while(0)
/*****************************************
//T3及LED初始化
*****************************************/
void Init_T3_AND_LED(void)
{
P1DIR = 0X03;
RLED = 1;
YLED = 1;
TIMER34_INIT(3); //初始化T3
TIMER34_ENABLE_OVERFLOW_INT(3,1); //开T3中断
EA = 1;
T3IE = 1;
//T3CTL |= 0XA0; //时钟32分频101
TIMER3_SET_CLOCK_DIVIDE(16);
TIMER3_SET_MODE(0); //自动重装00->0xff
T3CC0 = 0Xf0;
TIMER3_START(1); //启动
};
/*****************************************
//主函数
*****************************************/
void main(void)
{
Init_T3_AND_LED();
YLED = 0;
while(1); //等待中断
}
#pragma vector = T3_VECTOR
__interrupt void T3_ISR(void)
{
IRCON = 0x00; //可不清中断标志,硬件自动完成
//YLED = 0; //for test
if(counter<200)counter++; //10次中断LED闪烁一轮
else
{
counter = 0; //计数清零
RLED = !RLED; //改变小灯的状态
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -