找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2225|回复: 0
收起左侧

飞思卡尔16位单片机+UCOSII串口发送XDP512源程序 两个串口同时发送

[复制链接]
ID:415144 发表于 2018-10-25 13:13 | 显示全部楼层 |阅读模式
Freescale MC9S12XDP512双核处理器的串口程序,带操作系统UCOSII。有需要的可以下载。

单片机源程序如下:
  1. #include "includes.h"
  2. extern word Period[8],Duty[8];
  3. #define  TASK_STK_SIZE                  128       /* static size     */
  4. OS_STK   TaskStartStk[TASK_STK_SIZE];       /*定义任务的堆栈空间*/
  5. OS_STK   TaskStartStkA[TASK_STK_SIZE];      /*定义任务A的堆栈空间*/
  6. OS_STK   TaskStartStkB[TASK_STK_SIZE];      /*定义任务B的堆栈空间*/
  7. OS_STK   TaskStartStkC[TASK_STK_SIZE];      /*定义任务C的堆栈空间*/
  8. OS_STK   TaskStartStkD[TASK_STK_SIZE];      /*定义任务D的堆栈空间*/
  9. OS_STK   TaskStartStkE[TASK_STK_SIZE];      /*定义任务D的堆栈空间*/
  10. OS_STK   TaskStartStkF[TASK_STK_SIZE];      /*定义任务D的堆栈空间*/
  11. void   TaskStart(void *data);
  12. void   TaskStartA(void *data);              /*声明任务A的函数原型*/
  13. void   TaskStartB(void *data);              /*声明任务B的函数原型*/     
  14. void   TaskStartC (void *pdata);
  15. void   TaskStartD (void *pdata);
  16. void   TaskStartE (void *pdata);
  17. void   TaskStartF (void *pdata);
  18. void   DATA_Init();

  19. #define ROUTE_INTERRUPT(vec_adr, cfdata)                \
  20.   INT_CFADDR= (vec_adr) & 0xF0;                         \
  21.   INT_CFDATA_ARR[((vec_adr) & 0x0F) >> 1]= (cfdata)
  22.          
  23. static void SetupXGATE(void) {
  24.   XGVBR= (unsigned int)(void*__far)(XGATE_VectorTable - XGATE_VECTOR_OFFSET);

  25.   ROUTE_INTERRUPT(TIMER_OVERFLOW, 0x86); /* RQST=1 and PRIO=1 */
  26.   ROUTE_INTERRUPT(CAPTURE_CH0, 0x87);
  27.   ROUTE_INTERRUPT(CAPTURE_CH1, 0x87);
  28.   ROUTE_INTERRUPT(CAPTURE_CH2, 0x87);
  29.   ROUTE_INTERRUPT(CAPTURE_CH3, 0x87);
  30.   ROUTE_INTERRUPT(CAPTURE_CH4, 0x87);
  31.   ROUTE_INTERRUPT(CAPTURE_CH5, 0x87);
  32.   ROUTE_INTERRUPT(CAPTURE_CH6, 0x87);
  33.   ROUTE_INTERRUPT(CAPTURE_CH7, 0x87);

  34.   ROUTE_INTERRUPT(ATD0, 0x81);
  35.   ROUTE_INTERRUPT(ATD1, 0x81);


  36.   ROUTE_INTERRUPT(SPI0, 0x84);
  37.   ROUTE_INTERRUPT(SPI1, 0x84);
  38.   ROUTE_INTERRUPT(RTI, 0x85);
  39.   ROUTE_INTERRUPT(MODULUS_UNDERFLOW, 0x82);
  40.   XGMCTL= 0xFBC1; /* XGE | XGFRZ | XGIE */
  41. }



  42. void  main (void)
  43. {
  44.   
  45.   DisableInterrupts;
  46.   DATA_Init();
  47.   MCU_Init();
  48.   SetupXGATE();
  49.         OSInit();         /* initial UCOS-II 系统初始化函数*/

  50.   OSTaskCreate(TaskStart , (void *)0, &TaskStartStk[TASK_STK_SIZE - 1],  8);                                         
  51.         OSTaskCreate(TaskStartA, (void *)0, &TaskStartStkA[TASK_STK_SIZE - 1], 3);
  52.         OSTaskCreate(TaskStartB, (void *)0, &TaskStartStkB[TASK_STK_SIZE - 1], 4);
  53.         OSTaskCreate(TaskStartC, (void *)0, &TaskStartStkC[TASK_STK_SIZE - 1], 5);
  54.         OSTaskCreate(TaskStartD, (void *)0, &TaskStartStkD[TASK_STK_SIZE - 1], 6);
  55.         OSTaskCreate(TaskStartE, (void *)0, &TaskStartStkE[TASK_STK_SIZE - 1], 7);
  56.         OSTaskCreate(TaskStartF, (void *)0, &TaskStartStkF[TASK_STK_SIZE - 1], 9);
  57.        
  58.         EnableInterrupts;
  59.                     
  60.         OSStart();        /* 开始多任务调度!该函数永远不会返回*/                                    
  61. }

  62.                                        
  63. void TaskStart(void *pdata)
  64. {                                               
  65.   volatile static byte yy = 0;
  66.   pdata  = pdata;                 
  67.   

  68.   //RTICTL = 0xBF;       /*160000 * /16MHz=10Ms*/
  69.   RTICTL = 0xAF;       /*80000 * /8MHz=10Ms*/
  70.         CRGINT_RTIE = 1;       /*Enabe Interrupt*/
  71.        
  72.         for(;;)
  73.         {
  74.          watchdog_clr();
  75.          //display_ad();
  76.     //=======================================================         
  77.     if(test>0)
  78.      {
  79.       if(test>1)
  80.        {  
  81.         induction_switch_test();
  82.        }
  83.       /*else
  84.        {
  85.         shift_sensor_test();
  86.        } */
  87.      }
  88.     //yys003();
  89.     //=======================================================         
  90.              OSTimeDly(80);       /*让运行中的任务进入延时等待10*20=200ms*/
  91.             }
  92.           
  93. }

  94. /*测试数据的初始化---------------------*/
  95. void DATA_Init(){

  96.   
  97.   
  98. }


  99. int key5,key4,key4,key3,key2,key1,key0;
  100. int ta,tb,tc,td,te,tf;
  101. int flash,f,onoff_flag;


  102. /*定义任务A--------------------等待测试开始信号*/
  103. void  TaskStartA (void *pdata)
  104. {
  105.   
  106.         pdata  = pdata;                 
  107.   
  108.         for(;;)
  109.         {
  110.         watchdog_clr();

  111.         DDRA=0XFF;

  112.         ta++;
  113.         OSTimeDly(1);   /*让运行中的任务进入等待状态655300ms*/
  114.         }

  115. }
  116. int err;
  117. /*定义任务B-----------比较模块的通道参数等,*/
  118. void  TaskStartB (void *pdata)
  119. {
  120.         pdata  = pdata;

  121.         for(;;)
  122.         {
  123.         watchdog_clr();   
  124.               
  125.         /*if(tb==2)
  126.         {
  127.             while(1)
  128.             {
  129.                 PORTA=0;
  130.                 if(PORTA_PA0==0) err=0; else
  131.                 {
  132.                     err=1;
  133.                     while(1);
  134.                 }
  135.                 PORTA=0xFF;
  136.                 if(PORTA_PA0==1) err=0; else
  137.                 {
  138.                     err=1;
  139.                     while(1);
  140.                 }
  141.                
  142.             }
  143.             
  144.         }*/
  145.         tb++;      
  146.             OSTimeDly(3);   /*让运行中的任务进入等待状态200ms*/
  147.         }
  148. }




  149. /*定义任务C-----------获取待测板数据并比较测试结果*/
  150. void  TaskStartC (void *pdata)
  151. {  
  152.         pdata  = pdata;       
  153.        
  154.         for(;;)
  155.         {
  156.         watchdog_clr();


  157.         tc++;
  158.         OSTimeDly(4);   /*让运行中的任务进入等待状态200ms*/

  159.         }
  160. }

  161. word cc;
  162. /*定义任务D------------发送数据至CAN口,到电脑*/
  163. void  TaskStartD (void *pdata)
  164. {
  165.     pdata  = pdata;
  166.     for(;;)
  167.     {  
  168.         watchdog_clr();



  169.         //CAN_sr();         
  170.         //SCISend('A');  
  171.         
  172.         
  173.         //UART_sr();

  174.         td++;
  175.         OSTimeDly(1);   /*让运行中的任务进入等待状态60ms*/
  176.     }
  177. }



  178. /*定义任务/E---------------------发送数据至串口,到电脑*/
  179. void  TaskStartE (void *pdata)
  180. {
  181.   
  182.         pdata  = pdata;
  183.   
  184.         for(;;)
  185.         {  
  186.         watchdog_clr();

  187.         //UART_sr();
  188.         te++;
  189.         OSTimeDly(1);   /*让运行中的任务进入等待状态100*10ms*/
  190.         }
  191. }


  192. /*定义任务F*/
  193. void  TaskStartF (void *pdata)
  194. {
  195.         pdata  = pdata;
  196.        
  197.         for(;;)
  198.         {           
  199.         watchdog_clr();

  200.         //Ad5668Out(0,0,2048);                       //控制57档B    待测板的AD10
  201.         if(tf>=1) UART_sr();
  202.         
  203.         tf++;
  204.         OSTimeDly(0);   /*让运行中的任务进入等待状态0ms*/
  205.         }
  206. }
复制代码

所有资料51hei提供下载:
串口发送XDP512 两个串口同时发送.rar (1.77 MB, 下载次数: 17)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表