找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3243|回复: 0
打印 上一主题 下一主题
收起左侧

mpc5643l定时器捕捉测量频率 系统初始化等源码分享

[复制链接]
跳转到指定楼层
楼主
包括mpc5643l的工程代码

单片机源程序如下:

  1. /*************************************************************************
  2. 【平    台】MPC5643L
  3. 【编    写】
  4. 【版    本】V1.0
  5. 【时    间】
  6. 【功    能】1.通过8PIN拨码开关输入阈值转速值("BM_INPUT.h");
  7.                         2.初始化系统,包括看门狗、系统时钟、外设时钟、中断初始化(MPC5643L_SysCtrl.h")
  8.                         3.gpio输出电平控制led,报警和停机"TASK_LED.h"
  9.                         4.脉冲输出功能"OPWM.h"
  10.                         5,转速输入测频率,计算转速,比较大小"TIMER_ECT.h"
  11.                         6,超速测试按键输入函数Key_OVERSPEED.h                       
  12. *************************************************************************/
  13. /*******************头文件******************/
  14. #include "MPC5643L.h"            
  15. #include "MPC5643L_SysCtrl.h"                                           //系统控制函数
  16. #include "TASK_LED.h"                                                   //GPIO输出
  17. #include "Etimer_OutputPulseWidth.h"                      //脉冲输出
  18.                                           

  19. #include "Key_OverspeedTest.h"                                      //超速测试复位键扫描                                   
  20. #include "TIMER_ECT.h"
  21. #include "FLEXCAN.h"
  22. #include "frequecythershord_input.h"                                //拨码开关输入函数
  23. #include "config_output.h"                                                        //GPIO输出


  24. /****************全局变量定义**************/
  25. uint8_t compare(uint8_t num1,uint8_t num2)

  26. {
  27.         if(num1 < (uint8_t)(num2/2))
  28.         {
  29. //                init_OUTPUT(7,0);
  30.                 return 1;
  31.        
  32.         }
  33.        
  34.         else if(num1 > num2)
  35.         {
  36. //                init_OUTPUT(7,0);
  37.                 return 0;
  38.        
  39.         }
  40.        
  41.         else
  42.         {
  43. //                init_OUTPUT(7,0);
  44.                 return 2;

  45.         }
  46. }

  47. uint16_t main(void)
  48. {
  49.         uint8_t Result;                                                        //拨码开关输入pin配置
  50.         float temp_bm;                                                        //频率阈值定义
  51.         uint8_t  Flag_HalfSpeedWSE;                                                                     //半速不停机测试标志位
  52.         uint8_t  Flag_HalfSpeedSE;                                                                      //半速停机测试标志位
  53.         uint8_t  Flag_OverSpeedWSE;                                                                     //超速不停机测试标志位
  54.         uint8_t  Flag_OverSpeedSE;                                                                      //超速停机测试标志位
  55.         InitSysCtrl();                                                        //初始化系统时钟,中断,看门狗,外设时钟
  56.        
  57.         init_OUTPUT(7,1);
  58. //        init_OUTPUT(7,0);                                                //上电LED灯亮

  59.         init_OUTPUT(81,1);                                                //LED_green正常
  60.         init_OUTPUT(73,1);                                                //LED_red        超速报警
  61.        
  62.         init_OUTPUT(2,0);                                                //脉冲输出,开始输出低电平
  63.        
  64.         init_OUTPUT(128,1);                                                //out1
  65.         init_OUTPUT(125,1);                                                //out2
  66.         init_OUTPUT(124,1);                                                //csbh_bf_out
  67.         init_OUTPUT(121,1);                                                //out3
  68.         init_OUTPUT(119,1);                                                //out5
  69.         init_OUTPUT(117,1);                                     //out6

  70.         Init_BM_COFIG();                                                //拨码开关输入配置

  71.         InitEtimer1_3();
  72.        
  73.         INTC_InstallINTCInterruptHandler(ISRICEimer, Source_Etimer1_3, Priority);
  74.        
  75.         Init_opweTimer0();
  76.        
  77.         INTC_InstallINTCInterruptHandler(eTimer_OPWisr, Source_Etimer0_0, Priority);
  78.        
  79.         INTC.CPR_PRC0.R = 0;                                                                                                           //定义优先级

  80.         InitCan1();
  81.        
  82.         InitCan0();

  83.         INTC_InstallINTCInterruptHandler(RecieveMsg,Source_Flexcan,Priority);        //开启CAN_1接收中断

  84.         ETIMER_1.CHANNEL[3].CCCTRL.B.ARM = 1;                                                                      //开始捕捉
  85.        
  86.         while(1)
  87.         {
  88.             float bj = 78;
  89.             
  90.             InputCaptureChannel3_FREQHandler();                                        //转速处理函数

  91.                 temp_bm = threshold_value();
  92.                
  93.                 TransmitMsg();
  94. /*频率比较,控制柴油机及报警功能*/
  95.                        
  96.                 temp_bm = threshold_value();
  97.                     
  98.                 Result = compare(bj,temp_bm);
  99.                
  100. /*测试按键输入功能*/

  101.                 Skan_OverspeedPB1Key();                                                                                                  //扫描超速测试按键,进行超速测试
  102.                
  103.                 Flag_OverSpeedWSE = OverspeedSystemTest_WithStopEngi();                       //超速测试不停机标志       
  104.                 Flag_OverSpeedSE = OverspeedSystemTest_EngineStopeed();                       //超速停机测试标志
  105.                 Flag_HalfSpeedWSE = HalfSpeedTest_WithoutStoppingEngineKeep();                //半速不停机测试标志
  106.                 Flag_HalfSpeedSE = HalfSpeedTest_EngineStopeed();
  107. //                Skan_Key();                                        //扫描超速测试按键
  108. //                csfw_test();                //超速复位测试程序
  109. //                csbtj_test();               //超速不停机测试程序
  110. //                bsbtj_test();               //半速不停机测试程序
  111. //                bstj_test();                //半速停机测试程序
  112.                 switch(Result)
  113.                 {
  114.                         case 1:
  115.                                 if(Flag_OverSpeedWSE)                                                                                        // self-checking:超速测试不停机
  116.                                 {
  117.                                         SwitchOverspeedOut_WithoutStoppingEngine();                                        //不停机测试程序
  118.                                                                                
  119.                                 }
  120.                                        
  121.                                 if(Flag_OverSpeedSE)                                                                                        // self-checking:超速测试停机
  122.                                 {
  123.                                         SwitchOverspeedOut_EngineStopeed();                                                 //停机测试程序
  124.                                                                 
  125.                                                
  126.                                 }
  127.                                        
  128.                        
  129.                                 PressAfterFaultTest_Reset();                                                                   //超速保护复位测试,停机报警复位函数
  130.                                                                                                                                             //复位故障检测函
  131.                                
  132.                                 if((Flag_OverSpeedWSE | Flag_OverSpeedSE | Flag_HalfSpeedWSE |Flag_HalfSpeedSE) == 0)        //无超速测试按键按下
  133.                                 {
  134.                                         SwitchOverspeedOut_EngineStopeed();                                                                                                        //停机测试程序
  135.                                                                                                                             
  136.                                 }
  137.                                        
  138.                                 break;
  139.                        

  140.                         case 0:
  141.                                 if(Flag_HalfSpeedWSE)                                                                                                                                        //self-checking:测试不停机
  142.                                 {
  143.                                         SwitchOverspeedOut_WithoutStoppingEngine();                                                                                        //不停机测试程序       
  144.                                 //        Inspection_WithStopEngi();                                                                                                          //不停机测试故障检测函数
  145.                                 }
  146.                                
  147.                                        
  148.                                 if(Flag_HalfSpeedSE)                                                                                                                                        //self-checking:测试停机
  149.                                 {
  150.                                         SwitchOverspeedOut_EngineStopeed();                                                                                                        //停机测试程序
  151.                                 //        Inspection_StopEngi();                                                                                                                  //停机测试故障检测函数
  152.                                 }
  153.                                        
  154.                                 PressAfterFaultTest_Reset();                                                                                                                        //超速保护复位测试,停机报警复位函数
  155.                                
  156.                                 if((Flag_OverSpeedWSE | Flag_OverSpeedSE | Flag_HalfSpeedWSE |Flag_HalfSpeedSE) == 0)        //无超速测按键按下
  157.                                 {
  158.                                         SwitchOverspeedOut_EngineStopeed();                                                                                                        //停机测试程序
  159.                                 //        Inspection_StopEngi();                                                                                                                          //停机测试故障检测函数
  160.                                 }       
  161.                                
  162.                                 break;                                                //停机测试程序

  163.        
  164.                         case 2:
  165.                                 SystemInWorking0rder();                        //正常运行
  166.                                 break;
  167.                  
  168.                   }
  169.        
  170.         }
  171. ……………………

  172. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
mpc5643l_test.zip (275.48 KB, 下载次数: 15)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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