KA52
24-06-2008, 12:41 PM
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
#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,0x0 f};
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
#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];
}*/
}
}
Truyền
#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,0x0 f};
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
#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];
}*/
}
}