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

📄 main.c

📁 uCos-ii 2.86 在C8051F410单片机上移植成功!!! 其中包括:UART驱动
💻 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 + -