打印
[CAN-bus/DeviceNet]

调试好的can总线程序(c语言),开发板源程序

[复制链接]
4453|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
nnyt|  楼主 | 2008-5-9 12:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家需要的话联系我:nnyt@tom.com;13671387011()
       QQ: 531706356
    提供can实验开发板给初学者,完美的源程序和电路图;
对于购买“CAN开发板”的网友,我们提供完善的技术支持。如果您有任何关于can总线的问题,可以发邮件到nnyt@tom.com,或QQ:531706356,从而获得解答。


下面的淘宝网址是开发板网址,

 

    http://auction1.taobao.com/auction/item_detail-0db2-6e3c6f5717a53a6802d3068fd054ecf3.jhtml

下面的网址是其他款开发板网址

http://shop35312684.taobao.com/?catId=45939404&queryType=cat&categoryName=CAN%BF%AA%B7%A2%B0%E5&browseType=#pagebar


CAN51开发板功能 

1、  USB或DC+5V供电;

2、  89c52+sja1000+tja1050(tja1040)(p82c250);89c52+mcp2515+tja1050(tja1040)(p82c250);通过跳键选择sja1000或 mcp2515,用户任选一种CAN控制芯片;

3、  支持RS232/422/485总线与CAN总线相互转换;

4、  CAN总线波特率可调:20,40,50,80,100,125,200,250,400,500,666,800,1000Kbit/s

5、  提供电路图;

6、  提供源程序:basican和pelican模式(CAN2.0A和CAN2.0B),c语言和汇编语言,程序注释详尽;

7、  成对购买开发板可以实现:A开发板发送数据,B开发板接收数据,并把接收到的数据通过串口上传到计算机显示;A开发板上短路键的状态,可以通过CAN总线发送给B开发板,通过B开发板LED灯的亮灭,显示A开发板上短路键的状态;

8、  提供技术支持,接受CAN开发项目;

特别声明:以下程序只是例子程序!仅供参考,如需完美的程序请联系我。
 //**********程序功能************************************************
//节点1向CAN节点2发送数据,数据的头两个字节分别是:节点1的ID和要求节点2回复的数据长度
//节点2收到节点1的信息后,立即按照节点1的要求回复数据


***************************************************//
void Init_Cpu(void);                                //初始化单片机
void Sja_1000_Init(void);                           //初始化SIA
//************************************************************************************
bit s;                                              //配置sja标志
bit flag_send;                                      //发送命令标志
unsigned char data a[5]={0x05,0x05,0x05,0x05,0x05}; //显示"5"
unsigned char b[5]={0x12,0x12,0x12,0x12,0x12};      //显示"p"
unsigned char c[5]={0x01,0x01,0x01,0x01,0x01};      //显示"1"
unsigned char data  send_data[10],rcv_data[10];     //发送和接收数组
unsigned char bdata flag_init;                      //保存中断寄存器值
unsigned int count_k;                               //延时记数用
sbit rcv_flag=flag_init^0;                          //接收中断标志
sbit err_flag=flag_init^2;                          //错误中断标志
//***********************************************************************************//
void main(void)
{   

s=0;                                            //配置sja1000出现错误时,重新初始化
    do{
       Sja_1000_Init();
      }while(s!=0);                                    
    Init_Cpu();                                        //initialize mcu
    flag_init=0x00;                                 //保存中断寄存器值清零
    while(1)
    {
        if(rcv_flag)                                //if there is receive interrupt
        {
            rcv_flag=0;                             //接收标志位清零
            BCAN_DATA_RECEIVE(rcv_data);            //接收数据
            BCAN_CMD_PRG(RRB_CMD);                  //释放接收缓冲区
            flag_send=1;                            //发送命令置位
        }
        if(flag_send)                                
        {
            flag_send=0;                            //发送位清零
            send_data[0]=rcv_data[2];                //接收到的"发送方ID10~ID3"
send_data[1]=rcv_data[3];               //接收到的"发送方ID2~ID0"和要求的数据长度
            send_data[2]=0x88;
            send_data[3]=0x89;
            BCAN_DATA_WRITE(send_data);             //发送数据
            BCAN_CMD_PRG(TR_CMD);                   //置位发送请求位
            for(count_k=0;count_k<200;count_k++)
            display(a);                             //延时显示"5"
        }
        if (err_flag)                               //错误中断
        {   
            for(count_k=0;count_k<280;count_k++)    
            display(c);                             //错误显示"1"
            err_flag=0;                             //错误标志位清零
            Sja_1000_Init();                        //初始化SJA
            
        }
        display(b);                                 //显示"p"
    }
}

void ex0_int(void) interrupt 0 using 1              //外部中断0
{
    SJA_BCANAdr=REG_INTERRUPT;                      //指针指向中断寄存器
    flag_init=*SJA_BCANAdr;                         //保持中断寄存器值
}


void Init_Cpu(void)                                 //单片机初始化,开放外部中断0
{
    PX0=1;
    EX0=1;
    EA=1;
}
void Sja_1000_Init(void)
{
    s=BCAN_CREATE_COMMUNATION();  //SJA自测
    s=BCAN_ENTER_RETMODEL();      //进入复位
    s=BCAN_SET_BANDRATE(0x04);    //设置波特率100K/S
    s=BCAN_SET_OBJECT(0xaa,0x00); //设置地址ID:550
    s=BCAN_SET_OUTCLK(0xaa,0x48); //设置输出方式,禁止COLOCKOUT输出
    s=BCAN_QUIT_RETMODEL();       //退出复位模式
    SJA_BCANAdr=REG_CONTROL;      //地址指针指向控制寄存器
    *SJA_BCANAdr|=0x1e;           //开放错误接收发送中断
}



相关帖子

沙发
nnyt|  楼主 | 2008-5-9 12:37 | 只看该作者

图片

https://bbs.21ic.com/upfiles/img/20076/2007624122552177.jpg

使用特权

评论回复
板凳
nnyt|  楼主 | 2008-5-16 13:04 | 只看该作者

图片

https://bbs.21ic.com/upfiles/img/20076/2007624122552177.jpg

使用特权

评论回复
地板
nnyt|  楼主 | 2008-5-24 15:11 | 只看该作者

图片发不上去

为何?

使用特权

评论回复
5
qxd05| | 2008-5-28 18:02 | 只看该作者

垃圾

一块 AT89c52 5元钱 
一块 sja1000 12元钱
电路板批量加工,一块成本不超过10元钱

你的这些资料,在网上都可以下载到,BASIC CAN 的源代码图书馆书配光盘里面就有!

你卖多少钱? 想钱想疯了吧

欺负学生啊!!!  摸摸自己的良心,脑子注水了

社会上怎么出了你这种垃圾!!!!!

使用特权

评论回复
6
wswh2o| | 2008-6-4 16:02 | 只看该作者

这东西也有人买??

使用特权

评论回复
7
xuxiaozhao| | 2008-6-4 22:59 | 只看该作者

调试好的can总线程序

/??
这是什么东西啊/?
送别人都不要.怕误导别人

使用特权

评论回复
8
xuxiaozhao| | 2008-6-8 11:17 | 只看该作者

C语言 CAN

我的博客也是这样的程序.
xuxiaozhao163.blog.163.com

使用特权

评论回复
9
nnyt|  楼主 | 2008-7-5 18:59 | 只看该作者

关于qxd05

    关于开发板和程序是我付出劳动的,至于买卖问题,完全出于自愿,我除了提供开发板外,还qq提供问题解答!
    在此,谨请qxd05同志注意自己的言行,不要显得太没有教养!
    谢谢!

使用特权

评论回复
10
nnyt|  楼主 | 2008-7-5 19:13 | 只看该作者

关于qxd05

qxd05:
     您好,如果您有时间的话,请您做出来USB_CAN的开发板,调试好程序,另外您可以在网络上搜一下,看看USB_CAN的板子公司售价几何?
    还有,如果您是高手,顺便做出来8路12位ADC精度的采集卡,并把采集的数据通过CAN总线来传输,然后把资料发给大家,这样您才有话语权!我做的板子在北航用的很好,做出来就给大家分享,收取一点酬劳,过分吗?说实话这点酬劳远远不及导师给我的,我只是业余时间玩玩CAN而已!
    不要看着别人做的东西都一文不值,起码也是付出劳动的吧!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

18

主题

84

帖子

0

粉丝