www.pudn.com > iccavrUCOS_m64.rar > test2._c
#define Test1_GLOBALS #include "includes.h" //****************************************************************************** // Constants #define TaskStartPrio 10 // Task-Prioritaeten //***************************************************************************** // Variablen INT8U display[5]; INT8U h,m,s,state; OS_STK Task1Stack[OS_TASK_DEF_STK_SIZE]; // startup task stack OS_STK Task2Stack[OS_TASK_DEF_STK_SIZE]; //ICC-AVR application builder : 2003-12-28 21:52:56 // Target : M8 // Crystal: 8.0000Mhz #include#include //#include #include "uart.h" //***************************************************************************** // Prototypes /* #define BAUD 9600 #define CRYSTAL 11059200 #define BAUD_SETTING (unsigned int)((unsigned long)CRYSTAL/(16*(unsigned long)BAUD)-1) #define BAUD_H (unsigned char)(BAUD_SETTING>>8) #define BAUD_L (unsigned char)(BAUD_SETTING) void uartInit(uint8 uartNum) { if(1==uartNum) { UCSR1B = 0x00; //disable while setting baud rate UCSR1A = 0x00; UCSR1C = 0x06; UBRR1L = BAUD_L; //set baud rate lo UBRR1H = BAUD_H; //set baud rate hi UCSR1B = 0x18; ///共有3个中断源, 接受, 发送, 寄存器空, 对应此寄存器的高3位 } else { UCSR0B = 0x00; //disable while setting baud rate UCSR0A = 0x00; UCSR0C = 0x06; //set frame format, 8 bits, 2stop] UBRR0H = BAUD_H; UBRR0L = BAUD_L; UCSR0B = 0x18; //enable receive and transmite } } void putChar(uint8 num, uint8 dat) { ENTER_CRITICAL(); if(1==num) { UDR1 = dat; while(!(UCSR1A&BIT(TXC1))); //发送寄存器空 UCSR1A|=BIT(TXC1); } else { UDR0 = dat; while(!(UCSR0A&BIT(TXC0))); UCSR0A|=BIT(TXC0); } EXIT_CRITICAL(); } */ //***************************************************************************** // TickISR //***************************************************************************** // WGM: 0) Normal, TOP=0xFFFF // desired value: 1Hz // actual value: Out of range void t1Init(void) { TCCR1B = 0x00; //stop TCNT1H = 0x79; //setup TCNT1L = 0x02; OCR1AH = 0x00; OCR1AL = 0x00; OCR1BH = 0x00; OCR1BL = 0x00; OCR1CH = 0x00; OCR1CL = 0x00; ICR1H = 0x00; ICR1L = 0x00; TCCR1A = 0x00; TCCR1B = 0x02; //start Timer //时钟源选择 } //***************************************************************************** //8倍分频, 11.0592M晶振, 定时25ms //#pragma interrupt_handler OSTickISR:15 void OSTickISR(void); #pragma interrupt_handler fuc:15 void fuc() { TCNT1H = 0x79; TCNT1L = 0x00; OSTickISR(); } //call this routine to initialize all peripherals void init_devices(void) { //stop errant interrupts until set up CLI(); //disable all interrupts XDIV = 0x00; //xtal divider XMCRA = 0x00; //external memory t1Init(); MCUCR = 0x00; EICRA = 0x00; //extended ext ints EICRB = 0x00; //extended ext ints EIMSK = 0x00; TIMSK = 0x04; //timer interrupt sources ETIMSK = 0x00; //extended timer interrupt sources //SEI(); //re-enable interrupts } void Task1(void *pdata); void Task2(void *pdata); //***************************************************************************** // Start #define LED() PORTC = PORTC^BIT(4); void main(void){ PORTC=BIT(4); DDRC=BIT(4); LED(); OSInit(); // OS init OSTaskCreate(Task1, (void *)0, &Task1Stack[OS_TASK_DEF_STK_SIZE-1], 7); OSTaskCreate(Task2, (void *)0, &Task2Stack[OS_TASK_DEF_STK_SIZE-1], 6); // init und start tick init_devices(); uartInit(1); OSStart(); // start multitasking } //***************************************************************************** void Task1(void *data) { SEI(); for (;;) { LED(); putStr(1, "task 1!\n\r"); OSTimeDly (20); } } void Task2(void *data) { SEI(); for (;;) { putStr(1, "task 2!\n\r"); OSTimeDly (40); } }