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

📄 test.c

📁 ucos-ii在PIC18F4520上的移植
💻 C
字号:
//***************************************************************/
#include    "includes.h"
#include    "xlcd.h"
#include    <timers.h>
#include    <delays.h>
#include    <string.h>
#include    <stdlib.h>
/************************************************************************/
#define    LED1    PORTBbits.RB0
#define    LED2    PORTBbits.RB1
#define    LED3    PORTBbits.RB2
#define    LED4    PORTBbits.RB3   

static char rstr_welcome[17L] = "Welcome uC/OS-II"; 

OS_STK    Task1Stk[100];
OS_STK    Task2Stk[50];
OS_STK    Task3Stk[50];
OS_STK    Task4Stk[50];
OS_STK    LCDTaskStk[200L];

void Task1(void *pdata);
void Task2(void *pdata);
void Task3(void *pdata);
void Task4(void *pdata);
void LCDTask(void *pdata);

void Task1(void *pdata)
{    
    OpenTimer0(TIMER_INT_ON & T0_16BIT & T0_SOURCE_INT & T0_PS_1_1);
    WriteTimer0(-10000);
    
    // Initialize statistics task
    OSStatInit();
    
    OSTaskCreate(Task2,(void *)0,Task2Stk,1);
    for(;;)
    {   LED1 =1;        
        OSTimeDly(0x20);
        LED1 =0;
        OSTimeDly(0x20);
    }
}

void Task2(void *pdata)
{   
	 OSTaskCreate(Task3,(void *)0,Task3Stk,2);
    for(;;)
    {   LED2 =1;
        OSTimeDly(0x40);
        LED2 =0;
        OSTimeDly(0x40);
    }
}

void Task3(void *pdata)
{   
    	 OSTaskCreate(Task4,(void *)0,Task4Stk,3);	
	 for(;;)
    {   
	    LED3 =1;
        OSTimeDly(0x80);
        LED3 =0;
        OSTimeDly(0x80);
    }
}

void Task4(void *pdata)
{   
    	 OSTaskCreate(LCDTask,(void *)0,LCDTaskStk,4);	
	 for(;;)
    {   
	    LED4 =1;
        OSTimeDly(0xA0);
        LED4 =0;
        OSTimeDly(0xA0);
    }
}

void LCDTask(void *pdata)
{
    char    str_time[17];
    char    str_proc[4];
    INT32U  ui32_Time;  
    INT8U   ui8_Proc;

    // Initialize the LCD
    OpenXLCD(FOUR_BIT & LINES_5X7 & LINES_FLIP);
    while(BusyXLCD());
    WriteCmdXLCD(DON & CURSOR_OFF & BLINK_OFF); // display on
    while(BusyXLCD());
    WriteCmdXLCD(0b00000001); // display clear
    while(BusyXLCD());
    WriteCmdXLCD(ENTRY_CURSOR_INC & ENTRY_DISPLAY_NO_SHIFT); // entrymode

    while(BusyXLCD());              // Wait if LCD busy
    SetDDRamAddr(0x0);                // Set Display data ram address to 0
    putsXLCD(rstr_welcome);

    for(;;)
    {
        ui32_Time = OSTimeGet();
        ultoa(ui32_Time, str_time);
        btoa(OSCPUUsage, str_proc);

        while(BusyXLCD());              // Wait if LCD busy
        SetDDRamAddr(0x40);             // Set Display data ram address to 0
        putsXLCD(str_time);

        while(BusyXLCD());              // Wait if LCD busy
        SetDDRamAddr(0x4E);             // Set Display data ram address to 0
        putsXLCD(str_proc);

        if(strlen(str_proc) < 2)        // If two characters wouldn't have been
        {                               // written, then write the second one.
            while(BusyXLCD());
            putcXLCD(' ');
        }

        OSTimeDly(10);
    }
}

// initialization
void Initialize(void)
{        
    ADCON1=0x0E;    // all ad conversion disable at this system
    PORTA=0x00;
    LATA=0x00;
    TRISA=0x00;    

    PORTB=0xF0;
    LATB=0xF0;
    TRISB=0xF0;
    
    PORTC=0x00;
    LATC=0x80;
    TRISC=0x80;
    
    PORTD=0x00;
    LATD=0x00;
    TRISD=0x00;  
   
    
    PORTE=0x00;
    LATE=0x00;
    TRISE=0x00;     
}

//main rouitine
void main(void)
{    Initialize();
    OSInit();
    OSTaskCreate(Task1,(void *)0,Task1Stk,0);    
    OSStart();
}

⌨️ 快捷键说明

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