打印
[CAN-bus/DeviceNet]

我看了一段时间书,做出来得程序还是不能通讯,麻烦给指

[复制链接]
2275|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
张学勇|  楼主 | 2007-1-10 16:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
以下是我写的,在发送端芯片上烧的程序,用的Basic模式,目前已知情况:
1、寄存器已定义好(通过串口查询的寄存器值跟书上说的一致);
2、发送两次以后就停止工作啦;
3、接收端没有任何反应,也没进入中断;
/********************************************************************/

#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit L=P1^3;                         //指示灯
uchar TXB[10]={0xFF,0xFF,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15};
/********************************************************************/
//CAN控制器初始化程序(12兆晶振,波特率为250kbs)
init_can(void)
{
    CR_CAN=0x01;    //进入复位模式
//    CDR_CAN=0x08;    //通过有无频率输出,检测初始化是否成功
    CDR_CAN=0x40;    //(新添加)设置CBP位,根据P_82;
    BTR0_CAN=0x00;    //12兆晶振,波特率为250kbs
    BTR1_CAN=0x5F;
    OCR_CAN=0x1A;    //选择正常模式
    ACR_CAN=0xFF;    //验收代码
    AMR_CAN=0xFF;    //屏蔽代码
    CR_CAN=0x7E;    //使能接收中断
    CMR_CAN=0x60;    //
//    CDR_CAN=0x08;    //通过有无频率输出,检测是否回到了工作状态
}
/********************************************************************/
//发送程序
send_can(void)
{
    uchar xdata *pt;            //定义一个外部指针变量
    uchar i;                //定义一个变量
    if(SR_CAN&0x40)            //判断总线是否空闲
        {
        pt=0x7F0A;        //发送缓冲器的起始地址(有疑问)
        for(i=0;i<10;i++)
        {
        *(pt++)=TXB;   //将数组中的数字送入发送缓冲区
        }
        CMR_CAN=0x61;    //启动发送命令,发送数据
        delayms(1500);  //3秒延时,在此延长指示灯的跳变时间
        }
}
/********************************************************************/
main()
{
    init_can();            //初始化SJA1000
    while(1)                //循环发送
    {    
        send_can();        //调发送函数,发送数据
        delayms(200);        //0.4秒延时
        L=!L;            //指示灯变化
    }
}
/********************************************************************/

相关帖子

沙发
yizaisong| | 2007-4-2 14:32 | 只看该作者

这个程序有什么问题????

这个程序有什么问题????

使用特权

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

本版积分规则

3

主题

8

帖子

0

粉丝