调试好的can(汇编及C语言)程序,与大家分享! <br /><br />//************************************程序功能***************************************************<br />//节点1向CAN节点2发送数据,数据的头两个字节分别是:节点1的ID和要求节点2回复的数据长度<br />//节点2收到节点1的信息后,立即按照节点1的要求回复数据<br />//************************************************************************************************<br />#include <AT89X51.H><br />#include <SJA_nnyt.H> //SJA存储器定义头文件<br />#include <SJA_nnyt.C> //SJA子程序文件<br />#include <display_s.h> //显示头文件<br />#include<string.h> //字符串函数<br />//***************************头文件***************************************************//<br />void Init_Cpu(void); //初始化单片机<br />void Sja_1000_Init(void); //初始化SIA<br />//************************************************************************************<br />bit s; //配置sja标志<br />bit flag_send; //发送命令标志<br />unsigned char data a[5]={0x05,0x05,0x05,0x05,0x05}; //显示"5"<br />unsigned char b[5]={0x12,0x12,0x12,0x12,0x12}; //显示"p"<br />unsigned char c[5]={0x01,0x01,0x01,0x01,0x01}; //显示"1"<br />unsigned char data send_data[10],rcv_data[10]; //发送和接收数组<br />unsigned char bdata flag_init; //保存中断寄存器值<br />unsigned int count_k; //延时记数用<br />sbit rcv_flag=flag_init^0; //接收中断标志<br />sbit err_flag=flag_init^2; //错误中断标志<br />//***********************************************************************************//<br />void main(void)<br />{ <br /><br /> s=0; //配置sja1000出现错误时,重新初始化<br /> do{<br /> Sja_1000_Init();<br /> }while(s!=0); <br /> Init_Cpu(); //initialize mcu<br /> flag_init=0x00; //保存中断寄存器值清零<br /> while(1)<br /> {<br /> if(rcv_flag) //if there is receive interrupt<br /> {<br /> rcv_flag=0; //接收标志位清零<br /> BCAN_DATA_RECEIVE(rcv_data); //接收数据<br /> BCAN_CMD_PRG(RRB_CMD); //释放接收缓冲区<br /> flag_send=1; //发送命令置位<br /> }<br /> if(flag_send) <br /> {<br /> flag_send=0; //发送位清零<br /> send_data[0]=rcv_data[2]; //接收到的"发送方ID10~ID3"<br /> send_data[1]=rcv_data[3]; //接收到的"发送方ID2~ID0"和要求的数据长度<br /> send_data[2]=0x88;<br /> send_data[3]=0x89;<br /> BCAN_DATA_WRITE(send_data); //发送数据<br /> BCAN_CMD_PRG(TR_CMD); //置位发送请求位<br /> for(count_k=0;count_k<200;count_k++)<br /> display(a); //延时显示"5"<br /> }<br /> if (err_flag) //错误中断<br /> { <br /> for(count_k=0;count_k<280;count_k++) <br /> display(c); //错误显示"1"<br /> err_flag=0; //错误标志位清零<br /> Sja_1000_Init(); //初始化SJA<br /> <br /> }<br /> display(b); //显示"p"<br /> }<br />}<br /><br /><br />void ex0_int(void) interrupt 0 using 1 //外部中断0<br />{<br /> SJA_BCANAdr=REG_INTERRUPT; //指针指向中断寄存器<br /> flag_init=*SJA_BCANAdr; //保持中断寄存器值<br />}<br /><br /><br />void Init_Cpu(void) //单片机初始化,开放外部中断0<br />{<br /> PX0=1;<br /> EX0=1;<br /> EA=1;<br />}<br /><br />void Sja_1000_Init(void)<br />{<br /> s=BCAN_CREATE_COMMUNATION(); //SJA自测<br /> s=BCAN_ENTER_RETMODEL(); //进入复位<br /> s=BCAN_SET_BANDRATE(0x04); //设置波特率100K/S<br /> s=BCAN_SET_OBJECT(0xaa,0x00); //设置地址ID:550<br /> s=BCAN_SET_OUTCLK(0xaa,0x48); //设置输出方式,禁止COLOCKOUT输出<br /> s=BCAN_QUIT_RETMODEL(); //退出复位模式<br /> SJA_BCANAdr=REG_CONTROL; //地址指针指向控制寄存器<br /> *SJA_BCANAdr|=0x1e; //开放错误接收发送中断<br />}<br />******************以下为汇编程序*********************************************************************<br /><br />系统can地址为550,用于can系统测试,应用T0定时器每隔1s向can总线发送一组数据:数据长度为8个字节,<br />首字节为05H,第二个字节为累加变量,每秒钟数值增加1,<br />*********************************************************************************************************<br />CONTROLLER_BASE EQU 7E00H ;SJA1000的片选地址<br /><br />RCV_GOOD BIT 0FH ;成功的接收一帧标志<br />SEC_FLAG BIT 010H ;一秒到标志<br />ERR_FLAG BIT 011H ;监测到错误标志<br /><br />SAVE_INT_INFO DATA 032H ;保存SJA1000中断寄存器的内容<br /><br />SEND_DATA_BUF1 DATA 040H ;发送缓冲区<br />SEND_DATA_BUF2 DATA 041H <br />SEND_DATA_BUF3 DATA 042H<br />SEND_DATA_BUF4 DATA 043H <br />SEND_DATA_BUF5 DATA 044H<br />SEND_DATA_BUF6 DATA 045H <br />SEND_DATA_BUF7 DATA 046H<br />SEND_DATA_BUF8 DATA 047H <br />SEND_DATA_BUF9 DATA 048H<br />SEND_DATA_BUF10 DATA 049H <br /><br />RCV_DATA_BUF1 DATA 050H ;接收缓冲区<br />RCV_DATA_BUF2 DATA 051H <br />RCV_DATA_BUF3 DATA 052H<br />RCV_DATA_BUF4 DATA 053H <br />RCV_DATA_BUF5 DATA 054H<br />RCV_DATA_BUF6 DATA 055H <br />RCV_DATA_BUF7 DATA 056H<br />RCV_DATA_BUF8 DATA 057H <br />RCV_DATA_BUF9 DATA 058H<br />RCV_DATA_BUF10 DATA 059H <br /><br />ERROR_STATUS DATA 07CH ;错误状态表示<br />TEST_DATA DATA 07FH ;测试发送数据<br />;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />;程序开始<br />ORG 0000H<br />LJMP MAIN ;运行主程序<br /><br />ORG 0003H <br />LJMP BCAN_INT0 ;中断方式访问SJA1000程序<br /><br />ORG 000BH<br />LJMP T0_INTERRUPT ;定时器0中断<br /><br />;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br /><br />ORG 0100H ;程序开始<br />MAIN:<br /> MOV R0,#07fH<br /> CLR A<br /> MOV @R0,A<br /> DJNZ R0,$-1<br /> MOV @R0,A<br /> MOV SP,#60H ;设置SP<br /> CLR P2.0 ;SJA1000退出硬件复位模式<br /> <br /> LCALL SJA1000_INT0 ;初始化SJA1000<br /> LCALL T0_INIT<br /> CLR P3.4 ;点亮指示灯<br /> SETB PX0<br /> SETB IT0<br /> SETB EX0<br /> SETB ET0<br /> SETB TR0<br /> SETB EA<br /><br />LOOPER:<br /> JNB RCV_GOOD,LOOPER2 ;sja1000成功接收一帧,通知CPU处理<br /> CLR RCV_GOOD<br /> LCALL RCVDATA_PRG<br />LOOPER2:<br /> JNB SEC_FLAG,LOOPER3 ;一秒时间到,每秒发送一次<br /> CLR SEC_FLAG<br /> CLR P3.5 ;点亮指示灯<br /> LCALL SENDDATA_PRG<br />LOOPER3:<br /> JNB ERR_FLAG,LOOPER4 ;错误标志,错误处理<br /> CLR ERR_FLAG<br /> LCALL ERR_PRG<br />LOOPER4:<br /> AJMP LOOPER<br /><br />;;;;;;;;;;;;;;;;;;;;;;;;;;;;;初始化SJA1000;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; <br /> <br />SJA1000_INT0: <br /> LCALL BCAN_CREATE_COMMUNATION ;调用SJA1000接口测试函数<br /> MOV R7, #04<br /> LCALL BCAN_SET_BANDRATE ;设置波特率为100k <br /> MOV R7, #0A8H ;设置接收报文ID<br /> MOV R6, #0FFH<br /> LCALL BCAN_SET_OBJECT<br /> MOV R7, #0AAH ;设置输出控制、时钟分频;正常输出模式<br /> MOV R6, #048H ;使能内部比较器、禁止CLKOUT<br /> LCALL BCAN_SET_OUTCLK ;<br /> LCALL BCAN_QUIT_RETMODEL ;退出复位状态<br /> MOV DPTR,#REG_CONTROL ;开放SJA1000内部功能中断<br /> MOV A,#01EH ;中断开放<br /> MOVX @DPTR,A <br /> CLR F0<br /> RET <br /><br />;;;;;;;;;;;;;;;;;;;;;;错误信息处理;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />ERR_PRG:<br /> LCALL BCAN_ENTER_RETMODEL ;进入复位模式<br /> LCALL SJA1000_INT0 ;<br /> MOV ERROR_STATUS,#0FCH<br /> RET<br /><br />;;;;;;;;;;;;;;;;;;;;;;;接收数据处理部分;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />RCVDATA_PRG:<br /> MOV R0,# RCV_DATA_BUF1 ;微处理器接收首地址<br /> LCALL BCAN_DATA_RECEIVE ;调用接收数据子程序<br /> MOV R7,#04H ;释放接收缓冲区 <br /> LCALL BCAN_CMD_PRG ;<br /> RET<br />;;;;;;;;;;;;;;;;;;控制SJA1000向CAN总线发送数据处理部分;;;;;;;;;;;;;;;<br />SENDDATA_PRG:<br /> MOV R0, #SEND_DATA_BUF1 <br /> MOV @R0, #02H<br /> INC R0<br /> MOV @R0, #08H<br /> INC R0<br /> MOV @R0, #05H<br /> MOV A, TEST_DATA<br /> INC R0<br /> MOV @R0, A<br /> MOV R0, #SEND_DATA_BUF1<br /> LCALL BCAN_DATA_WRITE ;将要发送的数据送入发送缓冲区<br /> MOV R7, #01<br /> LCALL BCAN_CMD_PRG<br /> RET<br /><br />;;;;;;;;;;;;;;;;;;;;;;;;;;;;;定时器0初始化;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />T0_INIT:<br /> MOV A,TMOD<br /> ANL A,#0F0H<br /> ORL A,#01H<br /> MOV TMOD,A;T0工作在方式1<br /> MOV TH0,#0FCH ;定时周期1MS<br /> MOV TL0,#066H<br /> MOV 3AH,#00H<br /> RET<br /><br />;;;;;;;;;;;;;;;;;;;;;;;;;;;;;外部中断0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />BCAN_INT0:<br /> push DPH<br /> PUSH DPL<br /> PUSH PSW ;PSW,ACC入栈<br /> PUSH ACC<br /> USING 3 ;应用寄存器第3组 <br /> MOV DPTR,#REG_INTERRUPT ;读中断寄存器<br /> MOVX A,@DPTR ;<br /> MOV SAVE_INT_INFO,A ;保存中断寄存器的内容<br /> JNB ACC.0,BCAN_INT1 ;接收中断<br /> SETB RCV_GOOD ;置位接收标志<br /><br />BCAN_INT1:<br /> MOV A,SAVE_INT_INFO <br /> JNB ACC.2,BCAN_INT2 ;错误中断<br /> SETB ERR_FLAG ;置位错误标志<br />BCAN_INT2:<br /> POP ACC<br /> POP PSW<br /> POP DPL<br /> POP DPH <br /> RETI<br />;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;定时器0中断;;;;;;;;;;;;;;;;<br />T0_INTERRUPT:<br /> push DPH<br /> PUSH DPL<br /> PUSH PSW ;PSW、ACC入栈<br /> PUSH ACC<br /> USING 2<br /> MOV TH0,#80H ;设置定时周期0.3S<br /> MOV TL0,#26H<br /> INC 3AH<br /> MOV A,3AH<br /> CJNE A,#23H,T0_QUIT ;判断1秒时间是否到<br /> MOV 3AH,#00H<br /> INC TEST_DATA ;测试发送的数据,每1秒加1<br /> SETB SEC_FLAG ;置位1秒到标志<br />T0_QUIT:<br /> POP ACC<br /> POP PSW<br /> POP DPL<br /> POP DPH<br /> RETI<br /><br /><br /><br /><br /><br />BCAN_ENTER_RETMODEL:<br /> MOV DPTR, #REG_CONTROL ;控制寄存器访问 <br /> MOVX A, @DPTR ;<br /> ORL A, #01H ;置位复位请求<br /> MOVX @DPTR, A ;<br /> CLR F0<br /> MOVX A, @DPTR ;验证复位是否写入<br /> JB ACC.0, BCAN_ER_QUIT<br /> SETB F0 ;复位不成功<br />BCAN_ER_QUIT:<br /> RET<br /><br /><br /><br />BCAN_QUIT_RETMODEL:<br /> MOV DPTR, #REG_CONTROL ; 控制寄存器访问 <br /> MOVX A, @DPTR ;<br /> ANL A, #0FEH ;清零复位请求,进入工作状态<br /> MOVX @DPTR, A<br /> CLR F0<br /> MOVX A, @DPTR <br /> JNB ACC.0, BCAN_QR_QUIT ;验证是否退出复位状态<br /> SETB F0<br />BCAN_QR_QUIT:<br /> RET<br /><br /><br /><br /><br /><br /><br />BCAN_DATA_WRITE:<br /> MOV DPTR, #REG_STATUS ;读取状态寄存器<br /> MOVX A, @DPTR ;判断上次发送是否完成<br /> SETB F0<br /> JNB ACC.3, BCAN_DW_QUIT ;正在发送退出<br /> CLR F0 <br /> MOVX A, @DPTR ;判断发送缓冲区是否锁定,<br /> SETB F0 <br /> JNB ACC.2, BCAN_DW_QUIT ;锁定则跳出 <br /> CLR F0 <br /> <br /> INC R0 ;<br /> MOV A, @R0 ;ID号的低3位 RTR位 数据长度DLC<br /> DEC R0 ;恢复指针指向发送数据的首地址<br /> MOV DPTR, #REG_TxBuffer1;发送缓冲区首地址<br /><br /> JB ACC.4, BCAN_WYB ;远程帧<br /> ;数据帧<br /> ANL A, #0FH ;计算发送数据的长度<br /> ADD A, #02H<br /> MOV R7, A<br /> AJMP BCAN_WRTXBUF ;<br /><br />BCAN_WYB:<br /> MOV R7, #02 ;写入发送缓冲区数据长度为2<br /><br />BCAN_WRTXBUF: <br /> MOV A, @R0 ;开始写入<br /> MOVX @DPTR, A<br /> SETB F0<br /> MOVX A, @DPTR ;校验写入的是否正确<br /> XRL A, @R0<br /> JNZ BCAN_DW_QUIT ;写入错误退出<br /> CLR F0 ;正确写入继续<br /> INC R0<br /> INC DPTR<br /> DJNZ R7, BCAN_WRTXBUF ;没有写完继续<br /> <br />BCAN_DW_QUIT: <br /> RET <br /><br /><br /><br />BCAN_DATA_RECEIVE:<br /> MOV DPTR, #REG_STATUS<br /> MOVX A, @DPTR<br /> SETB F0<br /> JNB ACC.0, BCAN_DR_QUIT ;判断报文是否有效<br /> CLR F0 <br /><br /> MOV DPTR, #REG_RxBuffer2 ;接收报文的ID号的低3位 RTR位 数据长度DLC<br /> MOVX A, @DPTR<br /> MOV DPTR, #REG_RxBuffer1 ;接收缓冲区的首地址<br /> JB ACC.4, BCAN_RCVYB ;接收到的是远程帧<br /> ;数据帧<br /> ANL A, #0FH ;计算接收到的数据长度<br /> ADD A, #02H ;计算报文的长度<br /> MOV R6, A<br /> AJMP BCAN_RCVDATA<br /><br />BCAN_RCVYB:<br /> MOV R6, #02 ;远程帧<br /><br />BCAN_RCVDATA: ;开始读取数据<br /> MOVX A, @DPTR<br /> MOV @R0, A<br /> INC DPTR<br /> INC R0<br /> DJNZ R6, BCAN_RCVDATA<br /><br />BCAN_DR_QUIT:<br /> <br /> RET<br /><br />BCAN_SET_BANDRATE:<br /> MOV A, R7 ;判断波特率的值是否存在<br /> CLR CY<br /> SUBB A, #13 ;<br /> SETB F0<br /> JNC BCAN_SETBR_QUIT ;输入的值大于12则不正确 <br /> CLR F0<br /> MOV A, R7 <br /> RL A<br /> MOV DPTR, #BCAN_SETBR ;查表找出相应的预设第一个值<br /> MOVC A, @A+DPTR<br /> MOV R5, A ;将数据保存<br /> MOV A, R7 ;找出第二个值 <br /> RL A<br /> INC A<br /> MOVC A, @A+DPTR<br /> MOV R6, A ;保存值<br /><br /> MOV DPTR, #REG_BTR0 ;装入波特率预设值,同步跳转宽度<br /> ;位宽度<br /> MOV A, R5 <br /> MOVX @DPTR, A<br /> SETB F0<br /> MOVX A, @DPTR <br /> XRL A, R5 ;判断写入是否正确<br /> JNZ BCAN_SETBR_QUIT ;不正确 <br /> CLR F0<br /> INC DPTR<br /> MOV A, R6<br /> MOVX @DPTR, A<br /> SETB F0<br /> MOVX A, @DPTR<br /> XRL A, R6 ;判断写入是否正确<br /> JNZ BCAN_SETBR_QUIT<br /> CLR F0 <br />BCAN_SETBR_QUIT:<br /> RET <br /><br /><br />BCAN_SETBR:<br /> DB 053H, 02FH ;20KBPS的预设值<br /> DB 087H, 0FFH ;40KBPS的预设值<br /> DB 047H, 02FH ;50KBPS的预设值<br /> DB 083H, 0FFH ;80KBPS的预设值<br /> DB 043H, 02fH ;100KBPS的预设值<br /> DB 03H, 01cH ;125KBPS的预设值<br /> DB 081H, 0faH ;200KBPS的预设值<br /> DB 01H, 01cH ;250KBPS的预设值<br /> DB 080H, 0faH ;400KBPS的预设值<br /> DB 00H, 01cH ;500KBPS的预设值<br /> DB 080H, 0b6H ;666KBPS的预设值<br /> DB 00H, 016H ;800KBPS的预设值<br /> DB 00H, 014H ;1000KBPS的预设值<br /> <br /><br />BCAN_SET_OBJECT:<br /> MOV DPTR, #REG_ACR ;写ACR寄存器<br /> MOV A, R7<br /> MOVX @DPTR, A<br /> MOVX A, @DPTR<br /> SETB F0<br /> XRL A, R7 ;检验写入是否正确<br /> JNZ BCAN_SETO_QUIT<br /> CLR F0<br /> INC DPTR ;写AMR寄存器<br /> MOV A, R6<br /> MOVX @DPTR, A<br /> MOVX A, @DPTR<br /> SETB F0<br /> XRL A, R6 ;检验写入是否正确<br /> JNZ BCAN_SETO_QUIT<br /> CLR F0<br />BCAN_SETO_QUIT:<br /> RET <br /><br /><br /><br />BCAN_SET_OUTCLK:<br /> MOV DPTR, #REG_OCR ;写OCR寄存器<br /> MOV A, R7<br /> MOVX @DPTR, A<br /> MOVX A, @DPTR<br /> SETB F0<br /> XRL A,R7<br /> JNZ BCAN_OCR_QUIT ;检验写入是否正确<br /> CLR F0<br /> MOV DPTR, #REG_CDR ;写CDR寄存器<br /> MOV A, R6<br /> MOVX @DPTR, A<br /> MOVX A, @DPTR<br /> SETB F0<br /> XRL A,R6<br /> JNZ BCAN_OCR_QUIT ;检验写入是否正确<br /> CLR F0<br />BCAN_OCR_QUIT:<br /> RET <br />;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />BCAN_CMD_PRG:<br /> MOV A, R7<br /> CJNE A, #01, BCAN_CMD1<br /> ;发送请求命令 <br /> MOV DPTR, #REG_COMMAND; 地址指向命令寄存器 <br /> MOVX @DPTR, A ;写入命令字<br /> CLR F0<br /> RET<br /><br />BCAN_CMD1:<br /> CJNE A, #02, BCAN_CMD2<br /> ;;//夭折发送命令<br /> MOV DPTR, #REG_STATUS ;地址指向状态寄存器<br /> MOVX A, @DPTR ;判断是否有正在发送的状态<br /> SETB F0<br /> JB ACC.5, BCAN_CMD_QUIT<br /> CLR F0<br />BCAN_CMD_QUIT:<br /> RET<br /><br />BCAN_CMD2:<br /> CJNE A, #04, BCAN_CMD3 <br /> ;释放接收缓冲区 <br /> MOV DPTR, #REG_COMMAND; 地址指向命令寄存器 <br /> MOVX @DPTR, A ;写入命令字 <br /> NOP<br /> NOP<br /> MOV DPTR, #REG_STATUS ;判断是否释放成功<br /> MOVX A, @DPTR <br /> SETB F0 <br /> JB ACC.0, BCAN_DB_QUIT ;不成功跳转<br /> CLR F0<br />BCAN_DB_QUIT:<br /> RET<br /><br />BCAN_CMD3: <br /> CJNE A, #08, BCAN_CMD4<br /> ;清除超载状态 <br /> MOV DPTR, #REG_COMMAND; 地址指向命令寄存器 <br /> MOVX @DPTR, A ;写入命令字 <br /> NOP<br /> NOP<br /> MOV DPTR, #REG_STATUS ;判断清除超载是否成功<br /> MOVX A, @DPTR <br /> SETB F0 <br /> JB ACC.1, BCAN_DOVER_QUIT ;不成功跳转<br /> CLR F0<br />BCAN_DOVER_QUIT:<br /> RET<br /><br />BCAN_CMD4:<br /> CJNE A, #10H, BCAN_CMD5<br /> ;进入睡眠状态命令 <br /> MOV DPTR, #REG_COMMAND; 地址指向命令寄存器 <br /> MOVX @DPTR, A ;写入命令字 <br /> CLR F0<br />BCAN_CMD5:<br /> RET<br />END<br /><br />*********************************************************************<br />本人同时提供can实验开发板给初学者<br />1 CAN控制器为SJA1000,驱动器为TJA1050,电源隔离;<br />2 提供详尽的源程序,可根据用户需求编写程序<br />联系我:13671387011(短信联系,QQ详谈)<br /> QQ: 531706356<br /><br /><br /><br />nnyt 发表于 2006-6-29 19:54 CAN-bus/DeviceNet ←返回版面 <br /><br />can说明 <br /><br />1、 实验板分为主节点和从节点;CAN通讯波特率设置为800K;最高可设置为1M,用户根据自己的需要进行设置.<br />2、 从节点每隔2.25秒钟向主节点发送一组8个字节的数据,数据格式为:05H i 00H 00H 00H 00H 00H 00H ;其中变量I的范围是00H~FFH,他随着每发送一次数据而累加递增1;从节点指示灯1表示实验板工作正常,指示灯2以0.44Hz的频率闪烁,表示发送数据正常.<br />3、 主节点的ID为550,每当收到从节点发送的数据后,主节点便以19.2K波特率把收到的数据通过232串口发送给计算机,计算机上安装的用户界面可以实时显示接收到的数据,此数据用户可以存储于计算机上. 主节点指示灯1表示实验板工作正常,指示灯2以1Hz的频率闪烁,表示接收和串口发送数据正常.<br />4、 单片机为AT89c51,适用于实验板; 主控单片机为ADuC812,适用于工程应用:ADuC812通过自带的12位精度的A/D采集传感器信号后,将采集结果通过can总线传输到“主控节点”,主控节点将数据通过串口传输给计算机;指示灯显示状态;可以通过串口给主控节点发送指令,来完成对某一节点的控制;通过串口下载程序到单片机ADuC812(详见ADuC812用户手册),可以不用编程器<br /> <br /> <br /> |
|