找回密码
 立即注册

QQ登录

只需一步,快速开始

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

MC9S12XEP100 can总线接收程序源码

  [复制链接]
跳转到指定楼层
楼主
MC9S12XEP100处理器can总线接收程序



源程序:
  1. /*---------------------------------------------------------*/
  2. /************************************************************
  3. 飞翔科技MC9S12XEP100汽车电子开发板
  4. E-mail: 2008f.d@163.com
  5. ************************************************************/
  6. /*---------------------------------------------------------*/
  7. #include <hidef.h>      /* common defines and macros */
  8. #include "derivative.h"      /* derivative-specific definitions */
  9. #include "CAN.h"      
  10. #include "LCD.h"      

  11. #define LEDCPU PORTK_PK4
  12. #define LEDCPU_dir DDRK_DDRK4
  13. #define  BUS_CLOCK                   32000000           //总线频率
  14. #define  OSC_CLOCK                   16000000           //晶振频率

  15. char *xianshi[3] = {
  16. "飞翔科技开发板",
  17. "接收到的数据为:",
  18. };

  19. #define ID                  0x0001       //发送标识符
  20. #define data_len_TX          7           //发送数据长度

  21. unsigned char k;

  22. unsigned char senddata[8] = {'F','R','E','E','F','L','Y',0};     //发送的数据

  23. struct can_msg msg_send, msg_get;
  24. unsigned char datain=0;

  25. /*************************************************************/
  26. /*                      初始化锁相环                         */
  27. /*************************************************************/
  28. void INIT_PLL(void)
  29. {
  30.     CLKSEL &= 0x7f;       //set OSCCLK as sysclk
  31.     PLLCTL &= 0x8F;       //Disable PLL circuit
  32.     CRGINT &= 0xDF;
  33.    
  34.     #if(BUS_CLOCK == 40000000)
  35.       SYNR = 0x44;
  36.     #elif(BUS_CLOCK == 32000000)
  37.       SYNR = 0x43;     
  38.     #elif(BUS_CLOCK == 24000000)
  39.       SYNR = 0x42;
  40.     #endif

  41.     REFDV = 0x81;         //PLLCLK=2×OSCCLK×(SYNDIV+1)/(REFDIV+1)=64MHz ,fbus=32M
  42.     PLLCTL =PLLCTL|0x70;  //Enable PLL circuit
  43.     asm NOP;
  44.     asm NOP;
  45.     while(!(CRGFLG&0x08)); //PLLCLK is Locked already
  46.     CLKSEL |= 0x80;        //set PLLCLK as sysclk
  47. }

  48. /************************************************************/
  49. /*                    初始化ECT模块                         */
  50. /************************************************************/
  51. void initialize_ect(void){
  52.   ECT_TSCR1_TFFCA = 1;  // 定时器标志位快速清除
  53.   ECT_TSCR1_TEN = 1;    // 定时器使能位. 1=允许定时器正常工作; 0=使主定时器不起作用(包括计数器)
  54.   ECT_TIOS  = 0xff;      //指定所有通道为输出比较方式
  55.   ECT_TCTL1 = 0x00;            // 后四个通道设置为定时器与输出引脚断开
  56.   ECT_TCTL2 = 0x00;     // 前四个通道设置为定时器与输出引脚断开
  57.   ECT_DLYCT = 0x00;            // 延迟控制功能禁止
  58.   ECT_ICOVW = 0x00;            // 对应的寄存器允许被覆盖;  NOVWx = 1, 对应的寄存器不允许覆盖
  59.   ECT_ICSYS = 0x00;            // 禁止IC及PAC的保持寄存器
  60.   ECT_TIE   = 0x00;     // 禁止所有通道定时中断
  61.   ECT_TSCR2 = 0x07;            // 预分频系数pr2-pr0:111,,时钟周期为4us,
  62.   ECT_TFLG1 = 0xff;            // 清除各IC/OC中断标志位
  63.   ECT_TFLG2 = 0xff;     // 清除自由定时器中断标志位
  64. }

  65. /************************************************************/
  66. /*                在液晶上显示接收到的数据                  */
  67. /************************************************************/
  68. void play_data(void)
  69. {
  70.     unsigned char l;
  71.     write_command(0x8A);
  72.     for(l=0;l<msg_get.len;l++)
  73.        write_Data(msg_get.data[l]);
  74. }

  75. /*************************************************************/
  76. /*                      中断接收函数                         */
  77. /*************************************************************/
  78. #pragma CODE_SEG __NEAR_SEG NON_BANKED
  79. void interrupt CAN_receive(void)
  80. {
  81.       if(MSCAN0GetMsg(&msg_get))
  82.       {
  83.         // 接收新信息
  84.          if(msg_get.id == ID && (!msg_get.RTR))
  85.          {
  86.                  LEDCPU = ~LEDCPU;
  87.                  datain=1;      
  88.          }
  89.       }
  90.       else
  91.       {
  92.        for(;;);
  93.       }
  94. }
  95. #pragma CODE_SEG DEFAULT

  96. /*************************************************************/
  97. /*                        主函数                             */
  98. /*************************************************************/
  99. void main(void) {
  100.   DisableInterrupts;
  101.   INIT_PLL();
  102.   initialize_ect();
  103.   INIT_CAN0();
  104.   INIT_PORT();
  105.   LEDCPU_dir=1;


  106. …………限于本文篇幅 余下代码请从5 1黑电子论坛下载附件…………
复制代码


下载:
CAN接收.rar (545.79 KB, 下载次数: 81)



评分

参与人数 2黑币 +10 收起 理由
17756131173 + 5
tsfda + 5 赞一个!

查看全部评分

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

使用道具 举报

沙发
ID:163379 发表于 2017-8-20 10:50 | 只看该作者
x谢谢楼主
回复

使用道具 举报

板凳
ID:163379 发表于 2017-8-20 10:51 | 只看该作者
谢谢楼主!!!!!!!!!!!!!!!!!!!!!!!
回复

使用道具 举报

地板
ID:225731 发表于 2017-9-26 10:42 | 只看该作者
非常感谢 分享 正在学习中
回复

使用道具 举报

5#
ID:271807 发表于 2018-3-5 09:16 | 只看该作者
多谢楼主
回复

使用道具 举报

6#
ID:304739 发表于 2018-4-12 16:10 | 只看该作者
有问题想请教楼主
回复

使用道具 举报

7#
ID:304739 发表于 2018-4-12 17:32 | 只看该作者
主函数里面没有看到接收函数啊
回复

使用道具 举报

8#
ID:287445 发表于 2018-4-18 23:24 | 只看该作者
感谢大神分享   顶一个
回复

使用道具 举报

9#
ID:162611 发表于 2018-5-4 15:51 | 只看该作者
嗯,不错,谢谢分享!
回复

使用道具 举报

10#
ID:190160 发表于 2018-7-24 22:17 | 只看该作者
感谢楼主分享,学习一下
回复

使用道具 举报

11#
ID:382760 发表于 2018-8-4 09:18 | 只看该作者
好资料
回复

使用道具 举报

12#
ID:264735 发表于 2019-4-1 00:03 | 只看该作者
非常感谢!!!  
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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