大家需要的话联系我:;13671387011()
QQ: 531706356
2、Aduc812+sja1000+tja1050(tja1040)(p82c250);
3、支持RS232/422/485总线与CAN总线相互转换;
4、CAN总线波特率可调:20,40,50,80,100,125,200,250,400,500,666,800,1000Kbit/s;
5、DC-DC隔离;
6、提供电路图;
7、提供源程序:basican和pelican模式(CAN2.0A和CAN2.0B),c语言和汇编语言,程序注释详尽;
8、8路12位精度的ADC采集功能,把采集的数据通过CAN总线发送;
9、成对购买开发板可以实现:A开发板发送数据,B开发板接收数据,并把接收到的数据通过串口上传到计算机显示;
10、提供技术支持,接受CAN开发项目;
以下为例程:
#include<ADuC812.h>
#include<SJA_nnyt.H>
#include<SJA_nnyt.C>
void adc_init(void);
void T1_init(void);
void Sja_1000_Init(void);
/
void adc_int(void) interrupt 6 using 2
{
send_data[k]=ADCDATAH;
send_data[k+1]=ADCDATAL;
k=k+2;
if(k==10) //采集完一组数据
{
k=2;
ADCCON1=0x66;
ADCCON2=0x00; //初始选择adc通道0
send_flag=1; //置位发送标志
}
else
{
ADCCON2&=0xf0;
ADCCON2|=CHANAL[k/2-1]; //选择adc通道0123
}
}
//
void UART_int(void) interrupt 4 using 3
{
send_data[j]=SBUF; //写串口数据到发送数组
RI=0; //接收中断清零
j++;
if(j==10) //接收到8组数据
{j=2;
send_flag=1; //置位发送标志
}
}
void T1_init(void)
{
TMOD=0x20; //定时器1设为方式2
TL1=0xFD; //定时器初值
TH1=0xFD;
SCON=0x50; //串口设为方式1,REN=1允许接收
//PCON=0x80; //波特率提高一倍,19.2k
}
//*************************************************************
void adc_init(void)
{
ADCCON1=0x66; //启动 ADC,ADC时钟4分频,使用定时器2触发模式,注意ADC时钟必须在400k到4M之间
RCAP2L=0x0D2; // 设置采样频率为10K = 2 * T2 reload prd
RCAP2H=0x0FF ; // = 2*(10000h-FFD2h)*1.085us
TL2=0xD2; // = 2*46*1.085us
TH2=0xFF; // = 99.8us
}
//***********************************************************
void Sja_1000_Init(void)
{
BCAN_ENTER_RETMODEL(); //进入复位
BCAN_SET_BANDRATE(0x0b); //800K
BCAN_SET_OBJECT(0x05,0x00); //设置自己的地址ID:#028;(0x01,0x00)~#008;(0x02,0x00)~#010;(0x03,0x00)~#018;(0x04,0x00)~#020;(0x05,0x00)~#028
BCAN_SET_OUTCLK(0xaa,0x48); //设置输出方式,禁止COLOCKOUT输出
BCAN_QUIT_RETMODEL(); //退出复位模式
SJA_BCANAdr=REG_CONTROL; //地址指针指向控制寄存器
*SJA_BCANAdr|=0x1E; //开放错误\接收\发送中断
}
//*******************************************************************
void main(void)
{
SJA_RESET_OUT=0; //SJA1000退出硬件复位模式
Sja_1000_Init(); //initialize Sja100
flag_init=0x00;
PX0=1; //外部中断0高优先级
EX0=1; //外部中断0开放
EA="1"; //开放全局中断
while(1)
{
if(rcv_flag)
{
rcv_flag=0;
BCAN_DATA_RECEIVE(rcv_data);
BCAN_CMD_PRG(RRB_CMD); //释放接收缓冲区
l="rcv"_data[2];m=rcv_data[3];n=rcv_data[4];
if(l==m) //接收的数据前两个相等开始采集
{
//send_data[0]=rcv_data[5]; //接收到的"发送方ID10~ID3"
//send_data[1]=rcv_data[6]; //接收到的"发送方ID2~ID0"和要求的数据长度
if(RS422_ADC_SELECT==0) //如果为零,实现
rs422_can转换功能
{
T1_init(); //初始化T1
TR1=1; //启动定时器1
TR2=0; //关闭t2停止ad采集
}
else
{
adc_init(); //初始化adc
EADC="1"; //打开ADC中断
TR2=1; //启动t2开始ad采集
ES="0"; //串口中断关闭
TR1=0; //关闭定时器1
}
}
if(m==n) //接收到的数据2,3相等停止采集
{
TR2=0; //关闭t2停止ad采集
ADCCON1=0x16; //ADC掉电
ES="0"; //串口中断关闭
TR1=0; //关闭定时器1
}
}
if(send_flag)
{ send_flag=0; //发送标志清零
send_data[0]=0x06;
send_data[1]=0x08; //发送到ID:030,8字节长度
BCAN_DATA_WRITE(send_data);
BCAN_CMD_PRG(0x01);
if(RS422_ADC_SELECT!=0)
{TR2=1; } // 发送完毕后,启动t2开始ad采集
}
if(err_flag)
{ err_flag=0;
Sja_1000_Init();
}
}
}
QQ:531706356,手机13671387011
另外还有其它几款can开发板:http://shop35312684.taobao.com/?catId=45939404&queryType=cat&categoryName=CAN%BF%AA%B7%A2%B0%E5&browseType=#pagebar
文章评论(0条评论)
登录后参与讨论