View Single Post
Old 24-06-2008, 12:41 PM   #1
KA52
Đệ tử 1 túi
 
Tham gia ngày: Oct 2007
Bài gửi: 22
:
Angry Ai làm về CAN rồi xem dùm e

Cái này là 1 node e vẽ, sau khi lắp 2 cái như vậy, chạy và... ko thấy zì hết. Pác nào làm cái này rùi xem dùm e có bị sai zì ko vậy?
Truyền
Code:
#include <18F4580.h>
#fuses HS,NOPROTECT,NOLVP,NOWDT
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)

#include <can-18F4580.c>

#define SET_LED_ID_B         0x202  //set LEDs for CAN port B

void main() 
{
   int mang[16]={0,1,2,3,4,5,6,7,8,9,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f};
   int *pointer,led,i;
   set_tris_A(0x00);
   set_tris_D(0xff);
   pointer=&mang[0];
   can_init();
   i=16;
   while(1)
   { 
   //if(input(pin_D4)==0)
   //{
      if ( can_tbe() )       //every two seconds, send new data if transmit buffer is empty
      {   
         led=*pointer;
         can_putd(SET_LED_ID_B,&led , 1, 1, 1, 0);        
         output_A(led);
         delay_ms(1000);         
      }
      pointer++;
      i--;
      
      if(i==0)
      {
         i=16;
         pointer=&mang[0];
      }
   }
   
   //} 
}
Nhận
Code:
#include <18F4580.h>
#fuses H4,NOPROTECT,NOLVP,NOWDT
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)



#define SET_LED_ID_B         0x202

#include <can-18F4580.c>


////khai bao cac ham dung trong truong trinh
void BinToHexAscii(char c);
int8 Ascii2Hex(char c1,char c2);


//////////////////////////////////////
int16 ms;
struct rx_stat rxstat;
int32 rx_id;
int in_data;
int rx_len=8,*pointer;

int recive[15],i=0;

///////////////////////////////////////
#INT_CANRX0 
void can_reciver()
{
   can_getd(rx_id, &in_data,rx_len, rxstat);
   if(rx_id==SET_LED_ID_B)
   {
      output_A(in_data);
    //  *pointer=in_data;
      //if(pointer==14)
     // {pointer=0;}
   }
//   pointer++;
}
//////////////////////////////////////
void main() 
{
   enable_interrupts(GLOBAL);
   enable_interrupts(INT_CANRX0);
   pointer=&recive[0];
   can_init();
   set_tris_A(0x00);
   //set_tris_C(0x00);
   set_tris_D(0xff);
   while(TRUE)
   {
   /*   if(input(pin_D0)==0)
      {
         pointer=&recive[0];
         while(pointer<(15+&recive[0]))
         {
            output_A(*pointer);
            pointer++;
            delay_ms(1000);
         }
         pointer=&recive[0];
      }*/
   }   
}

thay đổi nội dung bởi: KA52, 05-07-2008 lúc 12:12 AM.
KA52 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn