⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 CC1110 TIME实验
💻 C
字号:
#include <ioCC1110.h>

#define uint unsigned int
#define uchar unsigned char

#define led1 P1_0
#define led2 P1_1

uint counter=0;				//统计溢出次数
uint TempFlag;				//用来标志是否要闪烁

void Initial(void);
void Delay(uint);
/*****************************************
//初始化T2的配置程序
*****************************************/
#define TIMER2_INIT()  \
   do {                \
      T2CTL = 0x00;    \
      T2CT = 0x00;     \
      T2PR = 0x00;     \
   } while (0)

/*****************************************
set_counter     T2CT
prescaler       T2PR
tick_period     T2CTL.TIP
(dis)enable_interrupt T2CTL.INT
clear_expired   T2CTL.TEX
mode            T2CTL.TIG
*****************************************/
#define TIMER2_SET_COUNTER(counter)     do{ T2CT = counter; }while(0)
#define TIMER2_SET_PRESCALER(prescaler) do{ T2PR = prescaler; }while(0)
#define TIMER2_SET_TICK_PERIOD(tick)    do{ T2CTL = ((T2CTL & ~0x03) | tick); }while(0)
#define TIMER2_ENABLE_INTERRUPT()       do{ T2CTL |= 0x10; }while(0)
#define TIMER2_DISABLE_INTERRUPT()      do{ T2CTL &= ~0x10; }while(0)
#define TIMER2_CLEAR_EXPIRED()          do{ T2CTL &= ~0x40; }while(0)
#define TIMER2_EXPIRED                  (T2CTL & 0x40)
#define TIMER2_SET_MODE(mode)           (T2CTL  = (mode) ? T2CTL|0x04  : T2CTL&~0x04)

/****************************
//初始化程序
***************************/
void Initial(void)
{
	//初始化P1
	P1DIR = 0x03; 	//P10 P11为输出
	led1 = 1;
	led2 = 1;		//灭LED

	//用T2来做实验
        TIMER2_INIT();
	EA = 1;             //开总中断
        IEN1 |= 0X04;       //开T2中断
        //T2CTL &= ~0X10;      //关T2CTL寄存器允许中断
        TIMER2_ENABLE_INTERRUPT();      //开

        TIMER2_SET_COUNTER(0x50);       // t = T2PR*VAL(T2CTL.TIP)/TIMER tick speed.
        TIMER2_SET_TICK_PERIOD(0);
        TIMER2_SET_MODE(1);
}

/***************************
//主函数
***************************/
void main()
{

	Initial(); 	 //调用初始化函数
	led1 = 0;	 //点这红色LED
	led2 = 1;
	while(1)   	 //等待中断
	{
                  if(TempFlag)
                  {
			//led2 = led1;
			led1 = !led1;
                        TempFlag = 0;
			Delay(6000);
		  }
	}
}

#pragma vector = T2_VECTOR
 __interrupt void T2_ISR(void)
 {
        TIMER2_CLEAR_EXPIRED();         //清T2CTL寄存器标志位
 	IRCON = 0x00;			//可不清中断标志,硬件自动完成
         if(counter<2)counter++;	//10次中断LED闪烁一轮
        else
        {
          counter = 0;                  //计数清零
          TempFlag = !TempFlag;                   //改变闪烁标志
        }
 }

/****************************
//普通延时程序
***************************/
void Delay(uint n)
{
	uint i;
	for(i=0;i<n;i++);
	for(i=0;i<n;i++);
	for(i=0;i<n;i++);
	for(i=0;i<n;i++);
	for(i=0;i<n;i++);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -