OSA_Examples

 

IDE: MPLAB X + MCC18

裸机版本

#include < p18f2520.h >


#pragma config OSC      = HSPLL
#pragma config FCMEN    = OFF
#pragma config IESO     = OFF
#pragma config PWRT     = ON
#pragma config BOREN    = ON
#pragma config BORV     = 1
#pragma config MCLRE    = ON
#pragma config LPT1OSC  = OFF
#pragma config PBADEN   = OFF
#pragma config STVREN   = OFF
#pragma config DEBUG    = OFF
#pragma config WDT      = OFF
#pragma config LVP      = OFF


int i,flag;

void PIC_Init(void)
{
    LATC            = 0x00;
    TRISC           = 0x00;

    T1CON           = 0x80;     // 16bit mode
    TMR1H           = 0xD8;     // 1ms
    TMR1L           = 0xF0;

    INTCON = 0;
    INTCONbits.PEIE = 1;
    PIR1bits.TMR1IF = 0;
    PIE1bits.TMR1IE = 1;
    T1CONbits.TMR1ON= 1;
    INTCONbits.GIE  = 1;
}

void main(void)
{
    PIC_Init();

    for(;;)
    {
        if(flag)
        {
            flag=0;
            i++;
            if((i%100)==0) {LATCbits.LATC0^=1;}
            if((i%200)==0) {LATCbits.LATC1^=1;}
            if((i%300)==0) {LATCbits.LATC2^=1;}
            if((i%400)==0) {LATCbits.LATC3^=1;}
        }
    }
}


void kesme(void);


#pragma code InterruptVectorHigh = 0x08
void InterruptVectorHigh (void)
{
  _asm
    goto kesme
  _endasm
}
#pragma code

#pragma interrupt kesme
void kesme(void)
{
    if (PIR1bits.TMR1IF)
    {
        PIR1bits.TMR1IF = 0;
        TMR1H           = 0xD8;     // 1ms
        TMR1L           = 0xF0;
        flag=1;
    }
}

 

OSA系统

#include < p18f2520.h >
#include < osa.h >

#pragma config OSC      = HSPLL
#pragma config FCMEN    = OFF
#pragma config IESO     = OFF
#pragma config PWRT     = ON
#pragma config BOREN    = ON
#pragma config BORV     = 1
#pragma config MCLRE    = ON
#pragma config LPT1OSC  = OFF
#pragma config PBADEN   = OFF
#pragma config STVREN   = OFF
#pragma config DEBUG    = OFF
#pragma config WDT      = OFF
#pragma config LVP      = OFF

void PIC_Init(void)
{
    LATC            = 0x00;
    TRISC           = 0x00;

    T1CON           = 0x80;     // 16bit mode
    TMR1H           = 0xD8;     // 1ms
    TMR1L           = 0xF0;

    INTCON = 0;
    INTCONbits.PEIE = 1;
    PIR1bits.TMR1IF = 0;
    PIE1bits.TMR1IE = 1;
    T1CONbits.TMR1ON= 1;
}

void Task_1(void)
{
    for(;;)
    {
        OS_Delay(100);
        LATCbits.LATC0^=1;
    }
}

void Task_2(void)
{
    for(;;)
    {
        OS_Delay(200);
        LATCbits.LATC1^=1;
    }
}

void Task_3(void)
{
    for(;;)
    {
        OS_Delay(300);
        LATCbits.LATC2^=1;
    }
}

void Task_4(void)
{
    for(;;)
    {
        OS_Delay(400);
        LATCbits.LATC3^=1;
    }
}

void main(void)
{
    PIC_Init();
    
    OS_Init();

    OS_Task_Create(1,Task_1);
    OS_Task_Create(2,Task_2);
    OS_Task_Create(3,Task_3);
    OS_Task_Create(4,Task_4);
    
    OS_EI();
    OS_Run();
}


void kesme(void);


#pragma code InterruptVectorHigh = 0x08
void InterruptVectorHigh (void)
{
  _asm
    goto kesme
  _endasm
}
#pragma code

#pragma interrupt kesme
void kesme(void)
{
    if (PIR1bits.TMR1IF)
    {
        PIR1bits.TMR1IF = 0;
        TMR1H           = 0xD8;     // 1ms
        TMR1L           = 0xF0;
        OS_Timer();
    }
}

 

http://320volt.com/rtosa-giris-osa-rtos/

posted @ 2017-05-15 15:28  sinferwu  阅读(249)  评论(0)    收藏  举报