//定时器2配置,1毫秒产生一次中断,用于系统计时
void TIM2_Init(void)
{
CLK_PeripheralClockConfig(CLK_Peripheral_TIM2,ENABLE);//将主时钟信号送给定时器4(L系列单片机必需)
TIM2_TimeBaseInit(TIM2_Prescaler_16,TIM2_CounterMode_Up,0x7D); //定时器4,将主时钟16分频.自动装载FA=125
TIM2_SetCounter(0xFA); //设定计数值FA=125
TIM2_ITConfig(TIM2_IT_Update,ENABLE);
TIM2_ARRPreloadConfig(ENABLE);
TIM2_Cmd(ENABLE); //计数器使能,开始计数
}
/*
****************************************************************************
* INTERRUPT_HANDLER(TIM2_UPD_OVF_TRG_BRK_IRQHandler, 19)
* 功能描述: TIM2中断处理函数,产生1毫秒中断,用于计时
* 返 回 值:无
****************************************************************************
*/
//中断处理函数,在中断中累加数据
INTERRUPT_HANDLER(TIM2_UPD_OVF_TRG_BRK_IRQHandler, 19)//TIM2中断处理函数,产生1毫秒中断,用于计时
{
TIM2_ClearFlag(TIM2_FLAG_Update); //清中断标志位
ms2_cnt++;
ms10_cnt++;
ms100_cnt++;
UsartTime++;
if( Second_cnt >= 999 )
{
Second_cnt = 0;
SecondFlag = 1;
}
else
{
Second_cnt++;
}
}
/*
****************************************************************************
* void Init(void)
* 功能描述: 初始化各个功能模块状态
* 返 回 值:无
****************************************************************************
*/
void Init(void)
{
asm("sim"); //关全局中断
CLK_Init( ); //时钟初始化
SPI_Initial( ); //SPI初始化sht10
GPIO_Initial( );//端口初始化
USART_Initial( );//用于485通讯
IIC_Init(); //用于传感器通讯
Init_BH1750( ); //初始化BH1750
TIM2_Init( ); //时钟2用于1毫秒计时
FLASH_DeInit(); //eeprom初始化
InitEeprom( );
InitAWU( ); //使能自动唤醒功能
asm("rim"); //开全局中断
}
/*
****************************************************************************
* main()
* 功能描述: 主函数
* 返 回 值:无
****************************************************************************
*/
#define CC1101Tx 0 //0:接收模式,1:发送模式
void main (void)
{
unsigned char i=0;
unsigned char timecnt=0;
Init();
//485设为接收模式//
//M485_Para.ReceivePoint = 0;
//M485_Para.ReadPoint = 0;
//s_connectionreset();
//Single_Write_BH1750(0x01); //传感器上电power on
//Single_Write_BH1750(0x10); //设定传感器工作模式 H- resolution mode
delay_ms(180); //延时180ms,用于等待传感器初始化
//GS_CC1101SetTRMode( RX_MODE );
while(1)
{
if( ms2_cnt > 2 )
{
ms2_cnt = 0;
//M485DataPro();//485数据处理
}
if( ms10_cnt >=10 )
{
ms10_cnt = 0;
ms10_Work();//10毫秒执行的任务
}
if( ms100_cnt >= 100 )
{
ms100_cnt = 0;
ms100_Work();//100毫秒执行的任务
}
if( SecondFlag == 1 )
{
timecnt++;
SecondFlag = 0;
Second_Work();//每秒执行的任务
#if CC1101Tx //数据发送
CC1101SendData(0x03,0x00,0x0E);
//GS_CC1101SendPacket( M485_Send_Buffer,9, ADDRESS_CHECK );
#else //数据接收
i = CC1101DataPro();
if( i== 0 )
GPIO_ToggleBits( GPIOD, GPIO_Pin_0); //反转灯的状态
for(i=0;i<27;i++)
{
putchar(M485_Para.Uart_Buffer[i]);
}
if(timecnt > 20)
{
timecnt = 0;
halt(); //进入待机模式
}
#endif
}
}
}
说明:TIM2用于产生1毫秒中断,作为系统工作节拍。main函数到10ms,100ms ,1s执行不同的任务
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』