标题:
MC9S12XEP100 can总线接收程序源码
[打印本页]
作者:
liujianwe
时间:
2017-5-7 16:01
标题:
MC9S12XEP100 can总线接收程序源码
MC9S12XEP100处理器can总线接收程序
0.png
(59.75 KB, 下载次数: 175)
下载附件
2017-5-7 17:07 上传
源程序:
/*---------------------------------------------------------*/
/************************************************************
飞翔科技MC9S12XEP100汽车电子开发板
E-mail: 2008f.d@163.com
************************************************************/
/*---------------------------------------------------------*/
#include <hidef.h> /* common defines and macros */
#include "derivative.h" /* derivative-specific definitions */
#include "CAN.h"
#include "LCD.h"
#define LEDCPU PORTK_PK4
#define LEDCPU_dir DDRK_DDRK4
#define BUS_CLOCK 32000000 //总线频率
#define OSC_CLOCK 16000000 //晶振频率
char *xianshi[3] = {
"飞翔科技开发板",
"接收到的数据为:",
};
#define ID 0x0001 //发送标识符
#define data_len_TX 7 //发送数据长度
unsigned char k;
unsigned char senddata[8] = {'F','R','E','E','F','L','Y',0}; //发送的数据
struct can_msg msg_send, msg_get;
unsigned char datain=0;
/*************************************************************/
/* 初始化锁相环 */
/*************************************************************/
void INIT_PLL(void)
{
CLKSEL &= 0x7f; //set OSCCLK as sysclk
PLLCTL &= 0x8F; //Disable PLL circuit
CRGINT &= 0xDF;
#if(BUS_CLOCK == 40000000)
SYNR = 0x44;
#elif(BUS_CLOCK == 32000000)
SYNR = 0x43;
#elif(BUS_CLOCK == 24000000)
SYNR = 0x42;
#endif
REFDV = 0x81; //PLLCLK=2×OSCCLK×(SYNDIV+1)/(REFDIV+1)=64MHz ,fbus=32M
PLLCTL =PLLCTL|0x70; //Enable PLL circuit
asm NOP;
asm NOP;
while(!(CRGFLG&0x08)); //PLLCLK is Locked already
CLKSEL |= 0x80; //set PLLCLK as sysclk
}
/************************************************************/
/* 初始化ECT模块 */
/************************************************************/
void initialize_ect(void){
ECT_TSCR1_TFFCA = 1; // 定时器标志位快速清除
ECT_TSCR1_TEN = 1; // 定时器使能位. 1=允许定时器正常工作; 0=使主定时器不起作用(包括计数器)
ECT_TIOS = 0xff; //指定所有通道为输出比较方式
ECT_TCTL1 = 0x00; // 后四个通道设置为定时器与输出引脚断开
ECT_TCTL2 = 0x00; // 前四个通道设置为定时器与输出引脚断开
ECT_DLYCT = 0x00; // 延迟控制功能禁止
ECT_ICOVW = 0x00; // 对应的寄存器允许被覆盖; NOVWx = 1, 对应的寄存器不允许覆盖
ECT_ICSYS = 0x00; // 禁止IC及PAC的保持寄存器
ECT_TIE = 0x00; // 禁止所有通道定时中断
ECT_TSCR2 = 0x07; // 预分频系数pr2-pr0:111,,时钟周期为4us,
ECT_TFLG1 = 0xff; // 清除各IC/OC中断标志位
ECT_TFLG2 = 0xff; // 清除自由定时器中断标志位
}
/************************************************************/
/* 在液晶上显示接收到的数据 */
/************************************************************/
void play_data(void)
{
unsigned char l;
write_command(0x8A);
for(l=0;l<msg_get.len;l++)
write_Data(msg_get.data[l]);
}
/*************************************************************/
/* 中断接收函数 */
/*************************************************************/
#pragma CODE_SEG __NEAR_SEG NON_BANKED
void interrupt CAN_receive(void)
{
if(MSCAN0GetMsg(&msg_get))
{
// 接收新信息
if(msg_get.id == ID && (!msg_get.RTR))
{
LEDCPU = ~LEDCPU;
datain=1;
}
}
else
{
for(;;);
}
}
#pragma CODE_SEG DEFAULT
/*************************************************************/
/* 主函数 */
/*************************************************************/
void main(void) {
DisableInterrupts;
INIT_PLL();
initialize_ect();
INIT_CAN0();
INIT_PORT();
LEDCPU_dir=1;
…………限于本文篇幅 余下代码请从5 1黑电子论坛下载附件…………
复制代码
下载:
CAN接收.rar
(545.79 KB, 下载次数: 81)
2017-5-7 16:01 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
zhjh159357
时间:
2017-8-20 10:50
x谢谢楼主
作者:
zhjh159357
时间:
2017-8-20 10:51
谢谢楼主!!!!!!!!!!!!!!!!!!!!!!!
作者:
zimiaoxinghan
时间:
2017-9-26 10:42
非常感谢 分享 正在学习中
作者:
HLX
时间:
2018-3-5 09:16
多谢楼主
作者:
yyz_1111
时间:
2018-4-12 16:10
有问题想请教楼主
作者:
yyz_1111
时间:
2018-4-12 17:32
主函数里面没有看到接收函数啊
作者:
王力斯
时间:
2018-4-18 23:24
感谢大神分享 顶一个
作者:
wkei007
时间:
2018-5-4 15:51
嗯,不错,谢谢分享!
作者:
众星电子
时间:
2018-7-24 22:17
感谢楼主分享,学习一下
作者:
semonpic
时间:
2018-8-4 09:18
好资料
作者:
guoshisheng
时间:
2019-4-1 00:03
非常感谢!!!
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1