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/

浙公网安备 33010602011771号