学者之家电子论坛--打造电子工程师共同致富的平台's Archiver

涛行九天 发表于 2007-4-30 02:22

一个网友的SJA1000调试经验,大家参考!

<p style="LINE-HEIGHT: 125%;">&nbsp;&nbsp;&nbsp;&nbsp;去年年底的时候,一个公司给我打电话,问我最近有没有空,说要请我帮忙做一个基于CAN总<br/>线通讯的东西,我去看了看,是一个数据采集系统,下面是一系列数据采集的智能板卡,上位机是基于WINBOND的一块486的工业嵌入式控制板,操作系统使用的是WINCE。智能板卡通过工业底板和数据线两种方式和上位机通讯,通信协议选择的是CAN,其中底板上的通信选用高速波特率(1Mbps),数据线选用低速(100kbps)。<br/>&nbsp;&nbsp;&nbsp;&nbsp;去公司的时候,公司给了我一个参考的东西,采用SST单片机+SJA1000的方案构成的智能板卡<br/>,同时告诉我可以自己设计方案。考虑到SST的东西没有用过,P8X591是PLCC封装的,烧写起来不<br/>方便,于是我设计了如下的方案:<br/>&nbsp;&nbsp;&nbsp;&nbsp;1、智能板卡上的通讯采用AT89S51+两块SJA1000的方式进行;<br/>&nbsp;&nbsp;&nbsp;&nbsp;2、上位机通过PC104总线和一块CAN控制板卡连接,CAN控制板卡上同样采用AT89S51+两块<br/>SJA1000的方案。AT89S51和上位机通过PC104总线共享内存(使用IDT的双口RAM);<br/>&nbsp;&nbsp;&nbsp;&nbsp;3、采用西门子的组态软件进行WINCE下的板卡驱动开发;<br/>&nbsp;&nbsp;&nbsp;&nbsp;由于以前没有做过CAN的东西,于是决定了先调试CAN通信,然后设计板卡的方案。<br/>&nbsp;&nbsp;&nbsp;&nbsp;方案确定之后,首先是上www.zlgmcu.com上下载了全部的SJA1000和PCA82C250的资料。然后开始设计电路板。采用了SJA1000应用指南中推荐的方案,采用SJA1000的时钟输出为AT89S51的时钟,没有采用光电隔离芯片,把TX1接地,TX0和RX0分别连接到PCA82C250的TXD和RXD引脚上,RX1连接到PCA82C250的VR上;加上了5欧姆的限流电阻和120欧姆的匹配电阻(用110欧姆替代),另外加上了一个调试用的串口。没有注意而且要命的是把SJA1000的复位引脚和单片机的复位引脚连接到了一起。<br/>&nbsp;&nbsp;&nbsp;&nbsp;第一次的板子用的加急,用了三天,结果那次的板子做的极差——连铜皮都翻起来了;我马上让那个电路板厂重新做了三块。在做板的过程中我发现了复位引脚的错误,SJA1000的文档上提供的是一个复位电路,但是没有给出电路的详细组成,于是我就误以为和单片机的复位电路是一样的了。在设计这块电路板的时候,最担心的事情就是SJA1000的输出时钟能不能够驱动AT89S51,如果不能够驱动,那么一切就OVER了,可惜的是我的担心成为了现实,板子焊好之后系统不工作,在SJA1000的时钟输入引脚上有信号输入,而且输出时钟也正常,但是单片机就是不工作。于是我先把SJA1000的复位引脚连线割断,连接到了AT89S51的IO引脚上,再把S51的XTAL的两个引脚连接到SJA晶体的上,可惜系统还是不工作,这次电路板设计失败了。<br/>&nbsp;&nbsp;&nbsp;&nbsp;在总结了第一次失败的经验后,参看了21IC上的一个设计,决定把AT89S51和SJA的晶体分开。并且用单片机的一个IO引脚来控制对SJA的复位。<br/>&nbsp;&nbsp;&nbsp;&nbsp;第二次的电路板比较成功,焊接好了之后首先测试单片机的串口和LED指示灯,一切OK。然后<br/>就开始测试SJA。ZLG提供了一个BASIC模式下的参考例程,我看了一下,然后又找了本《现场总线<br/>CAN的原理和测试》把SJA的寄存器详细看了看(由于开始的时候比较忙,所以直到这个时候才算是<br/>仔细看了看SJA的内部,至于CAN的基础协议我是根本没有看,这给我后面带来了极大的麻烦)。然<br/>后就参考ZLG的程序开始写SJA的测试程序,那个程序写的很大,也很全,因为我想快点把东西给做出来,于是弄了一个1000多行的程序,以前我的调试程序一般都很小的。写好程序之后就开始测试,首先测试的是测试寄存器,然后一步步测试下去,在BASIC模式下所有的寄存器都正常,但是在发送的时候是总是不正常,启动发送之后就一直在发送,状态寄存器的标志位一直处在发送的状态下,然后就是报总线错误,不知道是怎么会事情,很郁闷,上bbs看了一下。bullfrog告诉我单个CAN节点发送是成功不了的,如果没有收到接受CAN节点的应答,发送节点就会一直发送,直到超出错误计数器的允许值使得总线关闭。同时在精华区发现在peli模式下有ECC(错误寄存器),可以跟踪错误,于是开始看peli模式操作过程。这个东西比较麻烦,zlg没有提供公开的c代码,我找了一个汇编的作为参考。<br/>&nbsp;&nbsp;&nbsp;&nbsp;我第一步的目标是自发送,在peli模式下有自发送这种模式,在有匹配电阻的情况下可以进行单个节点的接收和发送。第一次调试的时候没有成功,给北京zlg打电话,北京分公司说让我给广州打电话,给广州打电话,几个问题都得到了很好的解答(在此谢谢zlg的工程师了):<br/>&nbsp;&nbsp;&nbsp;&nbsp;1、自发送的时候必须加上匹配电阻;<br/>&nbsp;&nbsp;&nbsp;&nbsp;2、5欧的限流电阻可以不需要;<br/>&nbsp;&nbsp;&nbsp;&nbsp;3、每次发送完成之后<br/>&nbsp;&nbsp;&nbsp;&nbsp;4、建议使用中止发送来进行单步发送;<br/>&nbsp;&nbsp;&nbsp;&nbsp;另外他告诉我可以在zlg的论坛上找到很多很有用的东西。<br/>&nbsp;&nbsp;&nbsp;&nbsp;听了他的建议,我第一件事情就是检查我的电路板,检查的结果让我大吃一惊——我的ch和cl竟然是短路的,万用表的狂叫不止。一步步检查,发现那个110欧的匹配电阻有问题,万用表碰上去就叫,于是把那个电阻剪下来,量量还是短路。于是我怀疑把5欧的限流电阻当成了110欧的电阻,于是把匹配电阻都去掉了。没有想到的是当我把新的110欧电阻拿来的时候,万用表还是叫,这时候才发现这块万用表在300欧姆以下都要叫,可怜我又打理了n长时间的电路板......<br/>&nbsp;&nbsp;&nbsp;&nbsp;再仔细阅读了一次peli模式下的操作指南,又仔细阅读了zlg提供的初始化规范,发现在子发<br/>送的时候发送的命令应该是0x10或者是0x12(即CMR寄存器里面有一个专门的控制位是用来控制自发送的,和普通的发送命令位是不同的)。在发现了这个问题之后,自发送一切顺利的通过了。<br/>&nbsp;&nbsp;&nbsp;&nbsp;接下来就是两个节点的互调了,我首先用自发送程序把两个节点都调试了一下,保证单个节点发送硬件没有任何问题。然后就用双绞线通过接线端子把两个系统连接到了一起。第一次调试采用的是1M的波特率(由于ZLG只给出了16M晶体下的BTR0和BTR1的初始值,我在ZLG的论坛上找到了一个网友自己计算的数值,后来证明这个东西有些问题),没有成功。发送节点通过串口利用串口调试助手来控制发送,接收节点通过仿真器观察数据。虽然没有发送成功,但是通过串口的反馈数据和仿真器的观察窗,可以看到ECC寄存器都发生了变化,证明数据线上有数据过去(由于我没有示波器,只有采用这种办法)。于是我改变了两次波特率,最低到了5k,都没有成功,最后我从21IC上的一篇应用文章上找到了两个参数,这次就成功了,通讯速率20k。现在一切稳定,在写这篇文章的时候哪几个LED正欢快的闪烁着。<br/>&nbsp;&nbsp;&nbsp;&nbsp;最后,总结几个经验:<br/>&nbsp;&nbsp;&nbsp;&nbsp;1、一定要详细的阅读sja的手册和CAN的相关知识;<br/>&nbsp;&nbsp;&nbsp;&nbsp;2、SJA的复位是低电平,而且不是用一个非们把单片机的RST反相就可以的,有两种解决方式<br/>:第一种是使用单片机的IO引脚来控制SJA的复位引脚,好处是单片机完全控制SJA的复位过程;第二种是采用适当的复位芯片,ZLG给我推荐的是CAT1161,我没有用过,其好处是同步复位。<br/>&nbsp;&nbsp;&nbsp;&nbsp;3、在自发送的模式下,需要匹配电阻,而且自发送的启动命令和普通发送的启动命令不相同;<br/>&nbsp;&nbsp;&nbsp;&nbsp;4、BRT0和BRT1的选择,和串口通信中只要两个的误差一样就可以了不同,一定要精心选择,<br/>建议SJA的外部晶体选择16M的,这样有利于参考ZLG的标准数值<br/>&nbsp;&nbsp;&nbsp;&nbsp;5、SJA和其他外部器件连接的时候,数据线在373前后都可以;<br/>&nbsp;&nbsp;&nbsp;&nbsp;6、最好有一个示波器;<br/>&nbsp;&nbsp;&nbsp;&nbsp;7、不要太大意的相信万用表的蜂鸣器;<br/>&nbsp;&nbsp;&nbsp;&nbsp;8、这是从ZLG网站上转载过来的peli模式下的初始化流程<br/>&nbsp;&nbsp;&nbsp;&nbsp;a)检测硬件连接是否正确&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;b)进入复位状态&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;c)设置时钟分频寄存器&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;d)设置输出控制寄存器&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;e)设置通讯波特率&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;f)设置代码验收寄存器&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;g)设置代码屏蔽寄存器&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;h)退出复位状态&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;i)设置工作模式&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;j)设置中断使能寄存器&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/></p>

涛行九天 发表于 2007-4-30 02:23

<p>这是一个自发收程序,采用at89s51+sja1000,分离晶体,at89s51晶体11.0592<br/>sja1000外部晶体为12M,通过串口进行监控<br/>******************************************************</p><p>以下为头文件定义<br/>copyright&nbsp;by&nbsp;alloy</p><p>******************************************************</p><p>#define&nbsp;SJA_REG_BaseADD&nbsp;0x7800</p><p>#define&nbsp;REG_MODE&nbsp;&nbsp;&nbsp;&nbsp;XBYTE[SJA_REG_BaseADD&nbsp;+&nbsp;0x00]<br/>#define&nbsp;REG_CMD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XBYTE[SJA_REG_BaseADD&nbsp;+&nbsp;0x01]<br/>#define&nbsp;REG_SR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XBYTE[SJA_REG_BaseADD&nbsp;+&nbsp;0x02]<br/>#define&nbsp;REG_IR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XBYTE[SJA_REG_BaseADD&nbsp;+&nbsp;0x03]<br/>#define&nbsp;REG_IR_ABLE&nbsp;&nbsp;&nbsp;&nbsp;XBYTE[SJA_REG_BaseADD&nbsp;+&nbsp;0x04]<br/>#define&nbsp;REG_BTR0&nbsp;&nbsp;&nbsp;&nbsp;XBYTE[SJA_REG_BaseADD&nbsp;+&nbsp;0x06]&nbsp;&nbsp;&nbsp;&nbsp;//05保留<br/>#define&nbsp;REG_BTR1&nbsp;&nbsp;&nbsp;&nbsp;XBYTE[SJA_REG_BaseADD&nbsp;+&nbsp;0x07]<br/>#define&nbsp;REG_OCR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XBYTE[SJA_REG_BaseADD&nbsp;+&nbsp;0x08]<br/>#define&nbsp;REG_TEST&nbsp;&nbsp;&nbsp;&nbsp;XBYTE[SJA_REG_BaseADD&nbsp;+&nbsp;0x09]<br/>#define&nbsp;REG_ALC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XBYTE[SJA_REG_BaseADD&nbsp;+&nbsp;0x0b]&nbsp;&nbsp;&nbsp;&nbsp;//0a保留<br/>#define&nbsp;REG_ECC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XBYTE[SJA_REG_BaseADD&nbsp;+&nbsp;0x0c]<br/>#define&nbsp;REG_EMLR&nbsp;&nbsp;&nbsp;&nbsp;XBYTE[SJA_REG_BaseADD&nbsp;+&nbsp;0x0d]<br/>#define&nbsp;REG_RXERR&nbsp;&nbsp;&nbsp;&nbsp;XBYTE[SJA_REG_BaseADD&nbsp;+&nbsp;0x0e]<br/>#define&nbsp;REG_TXERR&nbsp;&nbsp;&nbsp;&nbsp;XBYTE[SJA_REG_BaseADD&nbsp;+&nbsp;0x0f]</p><p>#define&nbsp;REG_ACR0&nbsp;&nbsp;&nbsp;&nbsp;XBYTE[SJA_REG_BaseADD&nbsp;+&nbsp;0x10]<br/>#define&nbsp;REG_ACR1&nbsp;&nbsp;&nbsp;&nbsp;XBYTE[SJA_REG_BaseADD&nbsp;+&nbsp;0x11]<br/>#define&nbsp;REG_ACR2&nbsp;&nbsp;&nbsp;&nbsp;XBYTE[SJA_REG_BaseADD&nbsp;+&nbsp;0x12]<br/>#define&nbsp;REG_ACR3&nbsp;&nbsp;&nbsp;&nbsp;XBYTE[SJA_REG_BaseADD&nbsp;+&nbsp;0x13]<br/>#define&nbsp;REG_AMR0&nbsp;&nbsp;&nbsp;&nbsp;XBYTE[SJA_REG_BaseADD&nbsp;+&nbsp;0x14]<br/>#define&nbsp;REG_AMR1&nbsp;&nbsp;&nbsp;&nbsp;XBYTE[SJA_REG_BaseADD&nbsp;+&nbsp;0x15]<br/>#define&nbsp;REG_AMR2&nbsp;&nbsp;&nbsp;&nbsp;XBYTE[SJA_REG_BaseADD&nbsp;+&nbsp;0x16]<br/>#define&nbsp;REG_AMR3&nbsp;&nbsp;&nbsp;&nbsp;XBYTE[SJA_REG_BaseADD&nbsp;+&nbsp;0x17]</p><p>#define&nbsp;REG_RxBuffer0&nbsp;&nbsp;&nbsp;&nbsp;XBYTE[SJA_REG_BaseADD&nbsp;+&nbsp;0x10]<br/>#define&nbsp;REG_RxBuffer1&nbsp;&nbsp;&nbsp;&nbsp;XBYTE[SJA_REG_BaseADD&nbsp;+&nbsp;0x11]<br/>#define&nbsp;REG_RxBuffer2&nbsp;&nbsp;&nbsp;&nbsp;XBYTE[SJA_REG_BaseADD&nbsp;+&nbsp;0x12]<br/>#define&nbsp;REG_RxBuffer3&nbsp;&nbsp;&nbsp;&nbsp;XBYTE[SJA_REG_BaseADD&nbsp;+&nbsp;0x13]<br/>#define&nbsp;REG_RxBuffer4&nbsp;&nbsp;&nbsp;&nbsp;XBYTE[SJA_REG_BaseADD&nbsp;+&nbsp;0x14]</p><p>#define&nbsp;REG_TxBuffer0&nbsp;&nbsp;&nbsp;&nbsp;XBYTE[SJA_REG_BaseADD&nbsp;+&nbsp;0x10]<br/>#define&nbsp;REG_TxBuffer1&nbsp;&nbsp;&nbsp;&nbsp;XBYTE[SJA_REG_BaseADD&nbsp;+&nbsp;0x11]<br/>#define&nbsp;REG_TxBuffer2&nbsp;&nbsp;&nbsp;&nbsp;XBYTE[SJA_REG_BaseADD&nbsp;+&nbsp;0x12]<br/>#define&nbsp;REG_TxBuffer3&nbsp;&nbsp;&nbsp;&nbsp;XBYTE[SJA_REG_BaseADD&nbsp;+&nbsp;0x13]<br/>#define&nbsp;REG_TxBuffer4&nbsp;&nbsp;&nbsp;&nbsp;XBYTE[SJA_REG_BaseADD&nbsp;+&nbsp;0x14]</p><p>#define&nbsp;REG_DataBuffer1&nbsp;XBYTE[SJA_REG_BaseADD&nbsp;+&nbsp;0x15]<br/>#define&nbsp;REG_DataBuffer2&nbsp;XBYTE[SJA_REG_BaseADD&nbsp;+&nbsp;0x16]<br/>#define&nbsp;REG_DataBuffer3&nbsp;XBYTE[SJA_REG_BaseADD&nbsp;+&nbsp;0x17]<br/>#define&nbsp;REG_DataBuffer4&nbsp;XBYTE[SJA_REG_BaseADD&nbsp;+&nbsp;0x18]<br/>#define&nbsp;REG_DataBuffer5&nbsp;XBYTE[SJA_REG_BaseADD&nbsp;+&nbsp;0x19]<br/>#define&nbsp;&nbsp;&nbsp;&nbsp;REG_DataBuffer6&nbsp;XBYTE[SJA_REG_BaseADD&nbsp;+&nbsp;0x1a]<br/>#define&nbsp;REG_DataBuffer7&nbsp;XBYTE[SJA_REG_BaseADD&nbsp;+&nbsp;0x1b]<br/>#define&nbsp;REG_DataBuffer8&nbsp;XBYTE[SJA_REG_BaseADD&nbsp;+&nbsp;0x1c]</p><p><br/>#define&nbsp;REG_RBSA&nbsp;&nbsp;&nbsp;&nbsp;XBYTE[SJA_REG_BaseADD&nbsp;+&nbsp;0x1e]<br/>#define&nbsp;REG_CDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XBYTE[SJA_REG_BaseADD&nbsp;+&nbsp;0x1f]<br/>#define&nbsp;REG_Receive_Counter&nbsp;&nbsp;&nbsp;&nbsp;XBYTE[SJA_REG_BaseADD&nbsp;+&nbsp;0x1d]</p><p>#define&nbsp;&nbsp;&nbsp;&nbsp;OK&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1<br/>#define&nbsp;&nbsp;&nbsp;&nbsp;Fail&nbsp;&nbsp;&nbsp;&nbsp;0<br/>#define&nbsp;ON&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1<br/>#define&nbsp;OFF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<br/>#define&nbsp;True&nbsp;&nbsp;&nbsp;&nbsp;1<br/>#define&nbsp;False&nbsp;&nbsp;&nbsp;&nbsp;0</p><p>sbit&nbsp;SJARst&nbsp;=&nbsp;P2&nbsp;^&nbsp;6;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//复位控制<br/>sbit&nbsp;LED0&nbsp;=&nbsp;P1&nbsp;^&nbsp;0;<br/>sbit&nbsp;LED1&nbsp;=&nbsp;P1&nbsp;^&nbsp;1;<br/>sbit&nbsp;Key0&nbsp;=&nbsp;P1&nbsp;^&nbsp;2;<br/>sbit&nbsp;Key1&nbsp;=&nbsp;P1&nbsp;^&nbsp;3;<br/>sbit&nbsp;Key2&nbsp;=&nbsp;P1&nbsp;^&nbsp;4;<br/>sbit&nbsp;Key3&nbsp;=&nbsp;P1&nbsp;^&nbsp;5;</p><p>bit&nbsp;step_flg;<br/>bit&nbsp;Tx_flg;<br/>bit&nbsp;Rx_flg;</p><p>unsigned&nbsp;char&nbsp;step_counter;<br/>unsigned&nbsp;char&nbsp;Tx_counter;<br/>unsigned&nbsp;char&nbsp;PC_RX_Buffer;<br/>unsigned&nbsp;char&nbsp;temp_data1;<br/>unsigned&nbsp;char&nbsp;Rx_Buffer[6];</p><p>void&nbsp;MCU_Init(void);<br/>void&nbsp;SJA_Init(void);<br/>void&nbsp;send(unsigned&nbsp;char&nbsp;S_Data);<br/>void&nbsp;Serial(void);<br/>void&nbsp;Delay(unsigned&nbsp;char&nbsp;Delay_time);<br/>void&nbsp;step(void);<br/></p>

涛行九天 发表于 2007-4-30 02:24

<p>*******************************************************</p><p>以下为c的主程序<br/>copyright&nbsp;by&nbsp;alloy</p><p>*******************************************************<br/>#include&nbsp;&lt;stdio.h&gt;<br/>#include&nbsp;&lt;string.h&gt;<br/>#include&nbsp;&lt;REG51.h&gt;<br/>#include&nbsp;&lt;TxMCU.h&gt;<br/>#include&nbsp;&lt;absacc.h&gt;<br/>main()<br/>{</p><p>&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;i;<br/>&nbsp;&nbsp;&nbsp;&nbsp;MCU_Init();<br/>&nbsp;&nbsp;&nbsp;&nbsp;SJA_Init();<br/>&nbsp;&nbsp;&nbsp;&nbsp;REG_MODE&nbsp;=&nbsp;0x01;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//进入复位模式</p><p>&nbsp;&nbsp;&nbsp;&nbsp;temp_data1&nbsp;=&nbsp;REG_MODE;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp_data1&nbsp;=&nbsp;temp_data1&nbsp;&amp;&nbsp;0x01;<br/>&nbsp;&nbsp;&nbsp;&nbsp;if(temp_data1&nbsp;&nbsp;==&nbsp;&nbsp;0x01)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//在复位模式中<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;REG_BTR0&nbsp;=&nbsp;0x85;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;REG_BTR1&nbsp;=&nbsp;0xb4;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//100k<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;REG_OCR&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;0x1a;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;REG_CDR&nbsp;=&nbsp;0xc0;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;REG_RBSA&nbsp;=&nbsp;0x00;</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;REG_ACR0&nbsp;=&nbsp;0xff;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;REG_ACR1&nbsp;=&nbsp;0xff;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;REG_ACR2&nbsp;=&nbsp;0xff;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;REG_ACR3&nbsp;=&nbsp;0xff;</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;REG_AMR0&nbsp;=&nbsp;0xff;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;REG_AMR1&nbsp;=&nbsp;0xff;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;REG_AMR2&nbsp;=&nbsp;0xff;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;REG_AMR3&nbsp;=&nbsp;0xff;</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;REG_IR_ABLE&nbsp;=&nbsp;0xff;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;REG_MODE&nbsp;=&nbsp;0x0c;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//进入自接收模式<br/>&nbsp;&nbsp;&nbsp;&nbsp;REG_MODE&nbsp;=&nbsp;0x0c;</p><p>&nbsp;&nbsp;&nbsp;&nbsp;for(i&nbsp;=&nbsp;0;i&lt;100;i++);<br/>&nbsp;&nbsp;&nbsp;&nbsp;temp_data1&nbsp;=&nbsp;REG_Receive_Counter;<br/>&nbsp;&nbsp;&nbsp;&nbsp;send(temp_data1);<br/>&nbsp;&nbsp;&nbsp;&nbsp;for(;;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(Tx_flg&nbsp;==&nbsp;False);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Tx_flg&nbsp;=&nbsp;False;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Tx_counter++;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;send(Tx_counter);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp_data1&nbsp;=&nbsp;REG_SR;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while((temp_data1&nbsp;&amp;&nbsp;0x10)&nbsp;==&nbsp;0x10);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp_data1&nbsp;=&nbsp;REG_SR;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if((temp_data1&nbsp;&amp;&nbsp;0x04)&nbsp;==&nbsp;0x04)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;REG_RxBuffer0&nbsp;=&nbsp;0x08;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//标准帧,长度为8<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;REG_RxBuffer1&nbsp;=&nbsp;0xff;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;REG_RxBuffer2&nbsp;=&nbsp;0xff;</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;REG_RxBuffer3&nbsp;=&nbsp;0x01;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;REG_RxBuffer4&nbsp;=&nbsp;0x02;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;REG_DataBuffer1&nbsp;=&nbsp;0x03;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;REG_DataBuffer2&nbsp;=&nbsp;0x04;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;REG_DataBuffer3&nbsp;=&nbsp;0x05;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;REG_DataBuffer4&nbsp;=&nbsp;0x06;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;REG_DataBuffer5&nbsp;=&nbsp;0x07;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;REG_DataBuffer6&nbsp;=&nbsp;0x08;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;REG_DataBuffer7&nbsp;=&nbsp;0x09;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;REG_DataBuffer8&nbsp;=&nbsp;0x0a;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;REG_CMD&nbsp;=&nbsp;0x10;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp_data1&nbsp;=&nbsp;REG_SR;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp_data1&nbsp;=&nbsp;temp_data1&nbsp;&amp;&nbsp;0x20;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(temp_data1&nbsp;==&nbsp;0x20)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//检查是否发送完成<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//send(0xaa);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp_data1&nbsp;=&nbsp;REG_ECC;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;send(temp_data1);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp_data1&nbsp;=&nbsp;REG_SR;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp_data1&nbsp;=&nbsp;temp_data1&nbsp;&amp;&nbsp;0x20;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//send(temp_data1);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;send(0x66);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp_data1&nbsp;=&nbsp;REG_ALC;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;send(temp_data1);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp_data1&nbsp;=&nbsp;REG_ECC;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;send(temp_data1);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp_data1&nbsp;=&nbsp;REG_SR;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;send(temp_data1);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp_data1&nbsp;=&nbsp;REG_Receive_Counter;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;send(temp_data1);</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PC_RX_Buffer&nbsp;=&nbsp;0x77;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LED0&nbsp;=&nbsp;~LED0;</p><p>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Tx_counter&nbsp;=&nbsp;0x00;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>}</p><p>void&nbsp;MCU_Init(void)<br/>{<br/>&nbsp;&nbsp;&nbsp;&nbsp;SJARst&nbsp;=&nbsp;1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;LED0&nbsp;=&nbsp;OFF;<br/>&nbsp;&nbsp;&nbsp;&nbsp;LED1&nbsp;=&nbsp;OFF;<br/>&nbsp;&nbsp;&nbsp;&nbsp;PC_RX_Buffer&nbsp;=&nbsp;0x77;<br/>&nbsp;&nbsp;&nbsp;&nbsp;step_counter&nbsp;=&nbsp;0x00;<br/>&nbsp;&nbsp;&nbsp;&nbsp;step_flg&nbsp;=&nbsp;False;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Tx_flg&nbsp;=&nbsp;False;<br/>&nbsp;&nbsp;&nbsp;&nbsp;temp_data1&nbsp;=&nbsp;0x00;<br/>&nbsp;&nbsp;&nbsp;&nbsp;TMOD&nbsp;=&nbsp;0x20;<br/>&nbsp;&nbsp;&nbsp;&nbsp;TH1&nbsp;=&nbsp;0xff;<br/>&nbsp;&nbsp;&nbsp;&nbsp;TL1&nbsp;=&nbsp;0xff;<br/>&nbsp;&nbsp;&nbsp;&nbsp;TR1&nbsp;=&nbsp;1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;SCON&nbsp;=&nbsp;0x50;<br/>&nbsp;&nbsp;&nbsp;&nbsp;PCON&nbsp;=&nbsp;0x80;<br/>&nbsp;&nbsp;&nbsp;&nbsp;EA&nbsp;=&nbsp;1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;ES&nbsp;=&nbsp;1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Tx_counter&nbsp;=&nbsp;0x00;</p><p>}</p><p>void&nbsp;SJA_Init(void)<br/>{<br/>&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;i;<br/>&nbsp;&nbsp;&nbsp;&nbsp;for(i&nbsp;=&nbsp;0;i&nbsp;&lt;&nbsp;125;i++);<br/>&nbsp;&nbsp;&nbsp;&nbsp;SJARst&nbsp;=&nbsp;0;<br/>&nbsp;&nbsp;&nbsp;&nbsp;for(i&nbsp;=&nbsp;0;i&nbsp;&lt;&nbsp;125;i++);<br/>&nbsp;&nbsp;&nbsp;&nbsp;SJARst&nbsp;=&nbsp;1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;for(i&nbsp;=&nbsp;0;i&nbsp;&lt;&nbsp;125;i++);<br/>}</p><p>void&nbsp;send(unsigned&nbsp;char&nbsp;S_Data)<br/>{<br/>&nbsp;&nbsp;&nbsp;&nbsp;SBUF&nbsp;=&nbsp;S_Data;<br/>&nbsp;&nbsp;&nbsp;&nbsp;while(TI&nbsp;==&nbsp;0);<br/>&nbsp;&nbsp;&nbsp;&nbsp;TI&nbsp;=0;<br/>}</p><p>void&nbsp;Serial()&nbsp;interrupt&nbsp;4&nbsp;using&nbsp;2<br/>{</p><p>&nbsp;&nbsp;&nbsp;&nbsp;if(RI&nbsp;==&nbsp;1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PC_RX_Buffer&nbsp;=&nbsp;SBUF;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RI&nbsp;=&nbsp;0;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(PC_RX_Buffer&nbsp;==&nbsp;0xaa)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;send(0x13);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Tx_flg&nbsp;=&nbsp;True;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PC_RX_Buffer&nbsp;=&nbsp;0x77;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(PC_RX_Buffer&nbsp;==&nbsp;0x55)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;send(0x14);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Rx_flg&nbsp;=&nbsp;True;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PC_RX_Buffer&nbsp;=&nbsp;0x77;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;send(0x15);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PC_RX_Buffer&nbsp;=&nbsp;0x77;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;}</p><p>}&nbsp;<br/></p>

mccClane 发表于 2007-5-27 17:08

http://www.nethand.cn

[url=http://www.nethand.cn][img]http://www.nethand.cn/jpg/013.jpg[/img][/url]

mccClane 发表于 2007-5-27 17:08

http://www.nethand.cn

[url=http://www.nethand.cn][img]http://www.nethand.cn/jpg/052.jpg[/img][/url]

pkrdsgplwn 发表于 2007-6-3 14:06

流量,是网站的生命,请用群发狂顶王

**** 作者被禁止或删除 内容自动屏蔽 ****

wjafwuwgsj 发表于 2007-6-3 14:22

推广网站/推广私服必备利器,论坛帖子狂顶王!

**** 作者被禁止或删除 内容自动屏蔽 ****

messagebox 发表于 2007-6-20 18:53

<p>呵,好资料</p>

nomad10000 发表于 2007-7-12 20:41

可以用MCU复位位直接反相的方法复位SJA,只是在初始化SJA之前MCU要等待500ms左右。

涛行九天 发表于 2007-7-14 10:29

不建议用mcu的复位,那样太不灵活了!

meiling01 发表于 2007-7-31 17:33

非常感谢

qdlhwu69wc 发表于 2008-1-16 20:33

谢谢阿

无中生有 发表于 2008-3-6 17:43

<p>在复位时在程序中应对CR添加效验,以确认SJA1000的确进入了需要的工作状态(复位或是工作)</p>

DAVIDYE 发表于 2008-6-10 17:02

十分珍贵的实战经验!多谢分享!

页: [1]

Powered by Discuz! Archiver 7.1  © 2001-2009 Comsenz Inc.

302 Found

302 Found


nginx/1.8.0