標(biāo)題:
飛思卡爾16位單片機(jī)+UCOSII串口發(fā)送XDP512源程序 兩個(gè)串口同時(shí)發(fā)送
[打印本頁(yè)]
作者:
xoooot
時(shí)間:
2018-10-25 13:13
標(biāo)題:
飛思卡爾16位單片機(jī)+UCOSII串口發(fā)送XDP512源程序 兩個(gè)串口同時(shí)發(fā)送
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的堆?臻g*/
OS_STK TaskStartStkB[TASK_STK_SIZE]; /*定義任務(wù)B的堆棧空間*/
OS_STK TaskStartStkC[TASK_STK_SIZE]; /*定義任務(wù)C的堆?臻g*/
OS_STK TaskStartStkD[TASK_STK_SIZE]; /*定義任務(wù)D的堆棧空間*/
OS_STK TaskStartStkE[TASK_STK_SIZE]; /*定義任務(wù)D的堆?臻g*/
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*/
}
}
/*測(cè)試數(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--------------------等待測(cè)試開始信號(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-----------獲取待測(cè)板數(shù)據(jù)并比較測(cè)試結(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 待測(cè)板的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
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1