|
Freescale MC9S12XDP512雙核處理器的串口程序,帶操作系統(tǒng)UCOSII。有需要的可以下載。
單片機(jī)源程序如下:
- #include "includes.h"
- extern word Period[8],Duty[8];
- #define TASK_STK_SIZE 128 /* static size */
- OS_STK TaskStartStk[TASK_STK_SIZE]; /*定義任務(wù)的堆棧空間*/
- OS_STK TaskStartStkA[TASK_STK_SIZE]; /*定義任務(wù)A的堆棧空間*/
- OS_STK TaskStartStkB[TASK_STK_SIZE]; /*定義任務(wù)B的堆棧空間*/
- OS_STK TaskStartStkC[TASK_STK_SIZE]; /*定義任務(wù)C的堆棧空間*/
- OS_STK TaskStartStkD[TASK_STK_SIZE]; /*定義任務(wù)D的堆棧空間*/
- OS_STK TaskStartStkE[TASK_STK_SIZE]; /*定義任務(wù)D的堆棧空間*/
- OS_STK TaskStartStkF[TASK_STK_SIZE]; /*定義任務(wù)D的堆棧空間*/
- void TaskStart(void *data);
- void TaskStartA(void *data); /*聲明任務(wù)A的函數(shù)原型*/
- void TaskStartB(void *data); /*聲明任務(wù)B的函數(shù)原型*/
- void TaskStartC (void *pdata);
- void TaskStartD (void *pdata);
- void TaskStartE (void *pdata);
- void TaskStartF (void *pdata);
- void DATA_Init();
- #define ROUTE_INTERRUPT(vec_adr, cfdata) \
- INT_CFADDR= (vec_adr) & 0xF0; \
- INT_CFDATA_ARR[((vec_adr) & 0x0F) >> 1]= (cfdata)
-
- static void SetupXGATE(void) {
- XGVBR= (unsigned int)(void*__far)(XGATE_VectorTable - XGATE_VECTOR_OFFSET);
- ROUTE_INTERRUPT(TIMER_OVERFLOW, 0x86); /* RQST=1 and PRIO=1 */
- ROUTE_INTERRUPT(CAPTURE_CH0, 0x87);
- ROUTE_INTERRUPT(CAPTURE_CH1, 0x87);
- ROUTE_INTERRUPT(CAPTURE_CH2, 0x87);
- ROUTE_INTERRUPT(CAPTURE_CH3, 0x87);
- ROUTE_INTERRUPT(CAPTURE_CH4, 0x87);
- ROUTE_INTERRUPT(CAPTURE_CH5, 0x87);
- ROUTE_INTERRUPT(CAPTURE_CH6, 0x87);
- ROUTE_INTERRUPT(CAPTURE_CH7, 0x87);
- ROUTE_INTERRUPT(ATD0, 0x81);
- ROUTE_INTERRUPT(ATD1, 0x81);
- ROUTE_INTERRUPT(SPI0, 0x84);
- ROUTE_INTERRUPT(SPI1, 0x84);
- ROUTE_INTERRUPT(RTI, 0x85);
- ROUTE_INTERRUPT(MODULUS_UNDERFLOW, 0x82);
- XGMCTL= 0xFBC1; /* XGE | XGFRZ | XGIE */
- }
- void main (void)
- {
-
- DisableInterrupts;
- DATA_Init();
- MCU_Init();
- SetupXGATE();
- OSInit(); /* initial UCOS-II 系統(tǒng)初始化函數(shù)*/
- OSTaskCreate(TaskStart , (void *)0, &TaskStartStk[TASK_STK_SIZE - 1], 8);
- OSTaskCreate(TaskStartA, (void *)0, &TaskStartStkA[TASK_STK_SIZE - 1], 3);
- OSTaskCreate(TaskStartB, (void *)0, &TaskStartStkB[TASK_STK_SIZE - 1], 4);
- OSTaskCreate(TaskStartC, (void *)0, &TaskStartStkC[TASK_STK_SIZE - 1], 5);
- OSTaskCreate(TaskStartD, (void *)0, &TaskStartStkD[TASK_STK_SIZE - 1], 6);
- OSTaskCreate(TaskStartE, (void *)0, &TaskStartStkE[TASK_STK_SIZE - 1], 7);
- OSTaskCreate(TaskStartF, (void *)0, &TaskStartStkF[TASK_STK_SIZE - 1], 9);
-
- EnableInterrupts;
-
- OSStart(); /* 開始多任務(wù)調(diào)度!該函數(shù)永遠(yuǎn)不會(huì)返回*/
- }
-
- void TaskStart(void *pdata)
- {
- volatile static byte yy = 0;
- pdata = pdata;
-
- //RTICTL = 0xBF; /*160000 * /16MHz=10Ms*/
- RTICTL = 0xAF; /*80000 * /8MHz=10Ms*/
- CRGINT_RTIE = 1; /*Enabe Interrupt*/
-
- for(;;)
- {
- watchdog_clr();
- //display_ad();
- //=======================================================
- if(test>0)
- {
- if(test>1)
- {
- induction_switch_test();
- }
- /*else
- {
- shift_sensor_test();
- } */
- }
- //yys003();
- //=======================================================
- OSTimeDly(80); /*讓運(yùn)行中的任務(wù)進(jìn)入延時(shí)等待10*20=200ms*/
- }
-
- }
- /*測試數(shù)據(jù)的初始化---------------------*/
- void DATA_Init(){
-
-
- }
- int key5,key4,key4,key3,key2,key1,key0;
- int ta,tb,tc,td,te,tf;
- int flash,f,onoff_flag;
- /*定義任務(wù)A--------------------等待測試開始信號(hào)*/
- void TaskStartA (void *pdata)
- {
-
- pdata = pdata;
-
- for(;;)
- {
- watchdog_clr();
- DDRA=0XFF;
- ta++;
- OSTimeDly(1); /*讓運(yùn)行中的任務(wù)進(jìn)入等待狀態(tài)655300ms*/
- }
- }
- int err;
- /*定義任務(wù)B-----------比較模塊的通道參數(shù)等,*/
- void TaskStartB (void *pdata)
- {
- pdata = pdata;
- for(;;)
- {
- watchdog_clr();
-
- /*if(tb==2)
- {
- while(1)
- {
- PORTA=0;
- if(PORTA_PA0==0) err=0; else
- {
- err=1;
- while(1);
- }
- PORTA=0xFF;
- if(PORTA_PA0==1) err=0; else
- {
- err=1;
- while(1);
- }
-
- }
-
- }*/
- tb++;
- OSTimeDly(3); /*讓運(yùn)行中的任務(wù)進(jìn)入等待狀態(tài)200ms*/
- }
- }
- /*定義任務(wù)C-----------獲取待測板數(shù)據(jù)并比較測試結(jié)果*/
- void TaskStartC (void *pdata)
- {
- pdata = pdata;
-
- for(;;)
- {
- watchdog_clr();
- tc++;
- OSTimeDly(4); /*讓運(yùn)行中的任務(wù)進(jìn)入等待狀態(tài)200ms*/
- }
- }
- word cc;
- /*定義任務(wù)D------------發(fā)送數(shù)據(jù)至CAN口,到電腦*/
- void TaskStartD (void *pdata)
- {
- pdata = pdata;
- for(;;)
- {
- watchdog_clr();
- //CAN_sr();
- //SCISend('A');
-
-
- //UART_sr();
- td++;
- OSTimeDly(1); /*讓運(yùn)行中的任務(wù)進(jìn)入等待狀態(tài)60ms*/
- }
- }
- /*定義任務(wù)/E---------------------發(fā)送數(shù)據(jù)至串口,到電腦*/
- void TaskStartE (void *pdata)
- {
-
- pdata = pdata;
-
- for(;;)
- {
- watchdog_clr();
- //UART_sr();
- te++;
- OSTimeDly(1); /*讓運(yùn)行中的任務(wù)進(jìn)入等待狀態(tài)100*10ms*/
- }
- }
- /*定義任務(wù)F*/
- void TaskStartF (void *pdata)
- {
- pdata = pdata;
-
- for(;;)
- {
- watchdog_clr();
- //Ad5668Out(0,0,2048); //控制57檔B 待測板的AD10
- if(tf>=1) UART_sr();
-
- tf++;
- OSTimeDly(0); /*讓運(yùn)行中的任務(wù)進(jìn)入等待狀態(tài)0ms*/
- }
- }
復(fù)制代碼
所有資料51hei提供下載:
串口發(fā)送XDP512 兩個(gè)串口同時(shí)發(fā)送.rar
(1.77 MB, 下載次數(shù): 17)
2018-10-25 13:11 上傳
點(diǎn)擊文件名下載附件
飛思卡爾16位單片機(jī)程序 下載積分: 黑幣 -5
|
|