📄 main.c
字号:
#include "..\header files\includes.H"
#include "smaRTClock.h"
sbit LED3=P1^2;
sbit LED4=P1^1;
/***************变量定义***********************/
int idata sam_p=0;
float idata sam_pt100=0.0f;
/*****************************************************/
OS_STK Task_Test1_Stk[MaxStkSize];
OS_STK Task_Test2_Stk[MaxStkSize];
OS_STK TaskStart_Stk[MaxStkSize];
/********************信号量定义***********************/
OS_EVENT *UartSem;
/*****************************************************/
/********************外部变量**************************/
extern DATE_INFO event1;
/*****************************************************/
void TaskStart(void *pdat) reentrant;
void Task_Test1(void *pdat) reentrant;
void Task_Test2(void *pdat) reentrant;
void OSTimeTickHook (void) reentrant;
void Timer2_ISR (void) reentrant;
/****************************************************************************
* 功 能: Timer0钩子函数
*---------------------------------------------------------------------------*
* 入口参数:
* 出口参数:
****************************************************************************/
void OSTimeTickHook (void) reentrant
{
}
/****************************************************************************
* 功 能: 主函数
*---------------------------------------------------------------------------*
* 入口参数:
* 出口参数:
****************************************************************************/
void main(void)
{
UU32 alarm_interval_second; // Will hold new alarm interval after
// second_alarm bit set
config();
RTC_Init();
Init_DateINFO();
// Update output_month and output_days for output
Compute_Month(&event1.output_month, &event1.output_days, event1.days,event1.years);
// Output initial time
printf("Current Time: %d-%d-%d %d:%d:%d\n",
event1.output_month, event1.output_days, event1.years,
event1.hours, event1.minutes, event1.seconds);
alarm_interval_second.U32 = (RTC_SECOND); // Set alarm to trigger every 1 second
// Copy the alarm interval to the alarm registers
RTC_Write (ALARM0, alarm_interval_second.U8[b0]); // LSB
RTC_Write (ALARM1, alarm_interval_second.U8[b1]);
RTC_Write (ALARM2, alarm_interval_second.U8[b2]);
RTC_Write (ALARM3, alarm_interval_second.U8[b3]); // MSB
RTC_Write (ALARM4, 0X00); // MSB
RTC_Write (ALARM5, 0X00); // MSB
OSInit();
OSTaskCreate(TaskStart, (void *)0, TaskStart_Stk,0);
OSStart();
}
/****************************************************************************
* 功 能: 最高优先级任务
*---------------------------------------------------------------------------*
* 入口参数:
* 出口参数:
****************************************************************************/
void TaskStart(void *pdat) reentrant
{
INT8U err;
pdat=pdat;
printf ("UCOSII Verson=%d\n",OSVersion ());
printf ("UCOSII Starting OK ...\n");
InitTimer0();
ET0=1; //允许T0中断
UartSem = OSSemCreate(1);
OSTaskCreate(Task_Test1, (void *)0, Task_Test1_Stk,2);
OSTaskCreate(Task_Test2, (void *)0, Task_Test2_Stk,3);
while(1)
{
sam_p +=1;
OSSemPend(UartSem, 0, &err);
printf ("TaskStart runing----->:%d\n",sam_p);
OSSemPost(UartSem);
OSTimeDly(OS_TICKS_PER_SEC/4);
}
}
/****************************************************************************
* 功 能: 测试任务------------1
*---------------------------------------------------------------------------*
* 入口参数:
* 出口参数:
****************************************************************************/
void Task_Test1(void *pdat)reentrant
{
INT8U err;
pdat=pdat;
while(1)
{
sam_pt100 += 0.2;
OSSemPend(UartSem, 0, &err);
printf ("Task Test 1 runing--->: %3.1f \n",sam_pt100);
OSSemPost(UartSem);
LED4=~LED4;
OSTimeDly(OS_TICKS_PER_SEC/4);
}
}
/****************************************************************************
* 功 能: 测试任务------------2
*---------------------------------------------------------------------------*
* 入口参数:
* 出口参数:
****************************************************************************/
void Task_Test2(void *pdat) reentrant
{
INT8U err;
UU32 RTC_Capture; // Will hold contents of RTC timer when
// button is pushed
pdat=pdat;
while(1)
{
OSSemPend(UartSem, 0, &err);
printf ("Task Test---2 runing\n");
OSSemPost(UartSem);
// Compute month and days for output
Compute_Month(&event1.output_month, &event1.output_days,
event1.days, event1.years);
RTC_Write (RTC0CN, 0xDD); // Initiate smaRTClock timer
// capture
// Wait for smaRTClock timer capture valid
while ((RTC_Read (RTC0CN) & 0x01)== 0x01);
// Copy the RTC capture timer to the RTC capture variable
RTC_Capture.U8[b0] = RTC_Read (CAPTURE0); // LSB
RTC_Capture.U8[b1] = RTC_Read (CAPTURE1);
RTC_Capture.U8[b2] = RTC_Read (CAPTURE2);
RTC_Capture.U8[b3] = RTC_Read (CAPTURE3); // MSB
RTC_Capture.U32 = (RTC_Capture.U32)+TIME_INIT;
event1.hours = (RTC_Capture.U32)/RTC_HOUR;
(RTC_Capture.U32) = (RTC_Capture.U32)%RTC_HOUR;
event1.minutes = (RTC_Capture.U32)/RTC_MINUTE;
(RTC_Capture.U32) = (RTC_Capture.U32)%RTC_MINUTE;
event1.seconds = (RTC_Capture.U32)/RTC_SECOND;
(RTC_Capture.U32) = (RTC_Capture.U32)%RTC_SECOND;
event1.hundreths = (RTC_Capture.U32)/RTC_HUNDRETH;
OSSemPend(UartSem, 0, &err);
// Output date
printf("\nCurrent Time: %d-%d-%d ",
event1.output_month, event1.output_days, event1.years);
printf("%d:%d:%d\n",event1.hours, event1.minutes,event1.seconds);
OSSemPost(UartSem);
LED3=~LED3;
OSTimeDly(OS_TICKS_PER_SEC/4);
}
}
/****************************************************************************
* 功 能:定时器2中断服务函数
*---------------------------------------------------------------------------*
* 入口参数:
* 出口参数:
****************************************************************************/
void Timer2_ISR (void) reentrant
{
TMR2CN &=0x04;//TF2必须由软件清除,TR2=1
}
/******************************************************
*功能: PCA模块中断处理 *
*参数: *
*******************************************************/
void PCA0_ISR(void) reentrant
{
if(CCF0)
{
CCF0=0;
}
if(CCF1)
{
CCF1=0;
}
if(CCF2)
{
CCF2=0;
}
}
void SMBus_ISR(void) reentrant
{
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -