标题:
飞思卡尔16位单片机+UCOSII串口发送XDP512源程序 两个串口同时发送
[打印本页]
作者:
xoooot
时间:
2018-10-25 13:13
标题:
飞思卡尔16位单片机+UCOSII串口发送XDP512源程序 两个串口同时发送
Freescale MC9S12XDP512双核处理器的串口程序,带操作系统UCOSII。有需要的可以下载。
单片机源程序如下:
#include "includes.h"
extern word Period[8],Duty[8];
#define TASK_STK_SIZE 128 /* static size */
OS_STK TaskStartStk[TASK_STK_SIZE]; /*定义任务的堆栈空间*/
OS_STK TaskStartStkA[TASK_STK_SIZE]; /*定义任务A的堆栈空间*/
OS_STK TaskStartStkB[TASK_STK_SIZE]; /*定义任务B的堆栈空间*/
OS_STK TaskStartStkC[TASK_STK_SIZE]; /*定义任务C的堆栈空间*/
OS_STK TaskStartStkD[TASK_STK_SIZE]; /*定义任务D的堆栈空间*/
OS_STK TaskStartStkE[TASK_STK_SIZE]; /*定义任务D的堆栈空间*/
OS_STK TaskStartStkF[TASK_STK_SIZE]; /*定义任务D的堆栈空间*/
void TaskStart(void *data);
void TaskStartA(void *data); /*声明任务A的函数原型*/
void TaskStartB(void *data); /*声明任务B的函数原型*/
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 系统初始化函数*/
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(); /* 开始多任务调度!该函数永远不会返回*/
}
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); /*让运行中的任务进入延时等待10*20=200ms*/
}
}
/*测试数据的初始化---------------------*/
void DATA_Init(){
}
int key5,key4,key4,key3,key2,key1,key0;
int ta,tb,tc,td,te,tf;
int flash,f,onoff_flag;
/*定义任务A--------------------等待测试开始信号*/
void TaskStartA (void *pdata)
{
pdata = pdata;
for(;;)
{
watchdog_clr();
DDRA=0XFF;
ta++;
OSTimeDly(1); /*让运行中的任务进入等待状态655300ms*/
}
}
int err;
/*定义任务B-----------比较模块的通道参数等,*/
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); /*让运行中的任务进入等待状态200ms*/
}
}
/*定义任务C-----------获取待测板数据并比较测试结果*/
void TaskStartC (void *pdata)
{
pdata = pdata;
for(;;)
{
watchdog_clr();
tc++;
OSTimeDly(4); /*让运行中的任务进入等待状态200ms*/
}
}
word cc;
/*定义任务D------------发送数据至CAN口,到电脑*/
void TaskStartD (void *pdata)
{
pdata = pdata;
for(;;)
{
watchdog_clr();
//CAN_sr();
//SCISend('A');
//UART_sr();
td++;
OSTimeDly(1); /*让运行中的任务进入等待状态60ms*/
}
}
/*定义任务/E---------------------发送数据至串口,到电脑*/
void TaskStartE (void *pdata)
{
pdata = pdata;
for(;;)
{
watchdog_clr();
//UART_sr();
te++;
OSTimeDly(1); /*让运行中的任务进入等待状态100*10ms*/
}
}
/*定义任务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); /*让运行中的任务进入等待状态0ms*/
}
}
复制代码
所有资料51hei提供下载:
串口发送XDP512 两个串口同时发送.rar
(1.77 MB, 下载次数: 17)
2018-10-25 13:11 上传
点击文件名下载附件
飞思卡尔16位单片机程序
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1