打印
[CAN-bus/DeviceNet]

一个测试发送/必然中断的例子。

[复制链接]
2168|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wxj1952|  楼主 | 2007-5-30 08:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
AD, LED, AN, CAN, TE
化简,化到最简!

运行以下程序,(无论节点在不在总线上。)send( )发送后,中断EPI发生,LED1亮。(节点进入错误消极状态)证实你的系统工作正常。
然后在此基础上完善你的程序。

#pragma SMALL
#include<reg51.h>
#include<sjareg.h>
#define uchar unsigned char

bdata uchar ws1;
sbit LED0=P1^0;
sbit LED1=P1^1;
sbit LED2=P1^2;

uchar xdata *SJA_Adr=0x7f00;
#define can_read(RegAdr)  SJA_Adr[RegAdr]
#define can_write(RegAdr,Val)  SJA_Adr[RegAdr]=Val

void initial()  using 0
{
do{ 
 can_write(MOD,0x01);
}while(can_read(MOD)^0x01);

can_write(CDR,0xcf);
 can_write(IER,0x20); 

 can_write(MOD,0);
}

void main(void)

LED0=0;
initial( );
IE=0x81;         

send( );   //can_write(CMR,1);

LED2=!LED2;
while(1);
}

void int0(void) interrupt 0  using 0
{
LED1=!LED1;
ws1=can_read(IR);
}

再次运行该程序,LED1无反应。按下硬复位按键,可重复实验。

相关帖子

沙发
lotto023| | 2007-5-30 09:12 | 只看该作者

怎么没有send()子函数啊?

使用特权

评论回复
板凳
lotto023| | 2007-5-30 09:56 | 只看该作者

SJA1000的复位引脚/RST怎么接啊?

使用特权

评论回复
地板
lizk1979| | 2007-5-30 10:12 | 只看该作者

en

谢谢

使用特权

评论回复
5
lotto023| | 2007-5-30 10:48 | 只看该作者

我的实验板子坏了??

 to:wxj1952
    我测试了一下,发现的确是硬件问题,不知道您对DP-668的实验板熟不熟悉,我下到DP-668里测试了一下,还是不行,DP-668是ZLG已经做好的实验板,硬件连接都是已经连好了的,我看了一下操作指南,只要通过跳线把SJA1000的INT 与MCU的INT0连接起来就可以,别的没有需要连接的.难道是我的实验板子坏了??

使用特权

评论回复
6
wxj1952|  楼主 | 2007-5-30 11:26 | 只看该作者

测板子至少要有逻辑笔工具

硬件不容易坏。要想找到硬件故障点,最好借助仿真器。或者把ZLG的技术人员叫来,他们做的板子,他们来保障用户能使用。

send( )函数留给实验者自己编。我的send( )1000元求解还没人有答案。

SJA1000复位管脚经8031RST接一个施密特反向器74ls14之类即可,不过最好还是用8031的P1脚控制,这样恢复EI、EPI、等等时省事。不用按复位键。

把can_write(CDR,0xcf);改为can_write(CDR,0x4f);

把can_write(MOD,0);改为can_write(MOD,4);即可用于BASIC_CAN实验。


使用特权

评论回复
7
lotto023| | 2007-5-30 16:03 | 只看该作者

直接调用send( )空函数,测试程序还好用吗?

to:wxj1952
send( )函数留给实验者自己编。我的send( )1000元求解还没人有答案。
///////////////////////////////////////////////////////////////////

   
我是初学者,PELI模式下发送函数真地不太会编.水平有限,望见谅.
直接调用send( )空函数,测试程序还好用吗?



把can_write(MOD,0);改为can_write(MOD,4);即可用于BASIC_CAN实验。
/////////////////////////////////////////////////////
BASIC_CAN模式下没有模式寄存器(MOD)啊,而且也没有IER寄存器,这段程序怎么用于BASIC下测试?

使用特权

评论回复
8
lotto023| | 2007-5-30 16:35 | 只看该作者

看我写得SEND()函数对不对?


to:wxj1952 
////////////////////////////////
我参考了一下别的程序,写了一个,望帮忙看一下对不对,多谢.多谢

struct BASICCAN_BUFstruct{
                           unsigned char FrameID_H  ;             //帧ID高8位
                           unsigned char FrameLENTH ;             //帧数据长度
               unsigned char FrameKIND  ;             //数据帧或远程帧(0:数据;1:远程)
               unsigned char FrameID_L3 ;             //帧ID低3位
               unsigned char Frame_Data[8];             //数据缓冲区
               };




void Send(void)
{
      send_BUF.FrameID_H = 0xaa;
      send_BUF.FrameLENTH= 0x08;
      send_BUF.FrameKIND = 0x00;
      send_BUF.FrameID_L3= 0x00;
      send_BUF.Frame_Data[0]=0x00;
      send_BUF.Frame_Data[1]=0x00;
      send_BUF.Frame_Data[2]=0x00;
      send_BUF.Frame_Data[3]=0x00;
      send_BUF.Frame_Data[4]=0x00;
      send_BUF.Frame_Data[5]=0x00;
      send_BUF.Frame_Data[6]=0x00;
      send_BUF.Frame_Data[7]=0x00;

          Write_SJAsendBUF();
          CANREG_write(0x01,0x01);    

}


bit Write_SJAsendBUF(void)
{
    
    unsigned char i;
   if((CANREG_read(0x02)&0x10)==0)
   {
       if((CANREG_read(0x02)&0x04)!=0)
      {
          CANREG_write(10,send_BUF.FrameID_H);
          CANREG_write(11,(send_BUF.FrameLENTH)|(send_BUF.FrameKIND<<4)|(send_BUF.FrameID_L3<<5));
         
          if(send_BUF.FrameKIND==0)
         {
              for(i=0;i<send_BUF.FrameLENTH,i<8;i++)
                CANREG_write(12+i,send_BUF.Frame_Data);
          }
            }
       
       }
 
}

使用特权

评论回复
9
wxj1952|  楼主 | 2007-5-30 17:19 | 只看该作者

送你个发送程序。

void send(void)  

can_write(CMR,0x01);
}




使用特权

评论回复
10
wxj1952|  楼主 | 2007-5-30 17:42 | 只看该作者

一样!

把can_write(MOD,0);改为can_write(MOD,4);即可用于BASIC_CAN实验。
/////////////////////////////////////////////////////
BASIC_CAN模式下没有模式寄存器(MOD)啊,而且也没有IER寄存器,这段程序怎么用于BASIC下测试?


 MOD 地址是几?CR是几?

使用特权

评论回复
11
wxj1952|  楼主 | 2007-6-2 11:00 | 只看该作者

少了一条关键语句。

这个简化程序还少了一条关键的,否测不会中断。哪一条?

使用特权

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

本版积分规则

38

主题

757

帖子

1

粉丝