[CAN-bus/DeviceNet] 18f458中的can应用问题请教

[复制链接]
 楼主| 魔影 发表于 2007-3-27 13:44 | 显示全部楼层 |阅读模式
CAN, AD, tc, pi, NTC
#include&nbsp;&quot;pic18.h&quot;<br />char&nbsp;CAN_Adress_H,CAN_Adress_L;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//CAN标识符高低字节<br />char&nbsp;CAN_Adress_EH,CAN_Adress_EL;&nbsp;&nbsp;&nbsp;&nbsp;//CAN扩展标识符高低字节<br />int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CAN_FLAG;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//=1接收到CAN数据,=0未接收到数据<br />unsigned&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;&nbsp;CAN_Delay_count=0;&nbsp;&nbsp;&nbsp;&nbsp;//间隔一定时间发送CAN数据<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;initial()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;INTCON=0x00;<br />&nbsp;&nbsp;&nbsp;&nbsp;ADCON1=0x07;<br />&nbsp;&nbsp;&nbsp;&nbsp;PIE1=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;PIE2=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;PIE3=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;initcan()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;TRISB=(TRISB|0x08)&0xFB;<br />&nbsp;&nbsp;&nbsp;&nbsp;CANCON=0x80;<br />&nbsp;&nbsp;&nbsp;&nbsp;while((CANSTAT&0x80)==0)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;;<br /><br />}<br />&nbsp;&nbsp;&nbsp;&nbsp;BRGCON1=0x01;<br />&nbsp;&nbsp;&nbsp;&nbsp;BRGCON2=0x90;<br />&nbsp;&nbsp;&nbsp;&nbsp;BRGCON3=0x42;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;TXB0CON=0x03;<br />&nbsp;&nbsp;&nbsp;&nbsp;TXB0SIDL=CAN_Adress_L&0xE0;<br />&nbsp;&nbsp;&nbsp;&nbsp;TXB0SIDH=CAN_Adress_H;<br />&nbsp;&nbsp;&nbsp;&nbsp;TXB0DLC=0x08;<br />&nbsp;&nbsp;&nbsp;&nbsp;TXB0D0=0x00;<br />&nbsp;&nbsp;&nbsp;&nbsp;TXB0D1=0x01;<br />&nbsp;&nbsp;&nbsp;&nbsp;TXB0D2=0x02;<br />&nbsp;&nbsp;&nbsp;&nbsp;TXB0D3=0x03;<br />&nbsp;&nbsp;&nbsp;&nbsp;TXB0D4=0x04;<br />&nbsp;&nbsp;&nbsp;&nbsp;TXB0D5=0x05;<br />&nbsp;&nbsp;&nbsp;&nbsp;TXB0D6=0x06;<br />&nbsp;&nbsp;&nbsp;&nbsp;TXB0D7=0x07;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;RXB0SIDL=CAN_Adress_L&0xE0;<br />&nbsp;&nbsp;&nbsp;&nbsp;RXB0SIDH=CAN_Adress_H;<br />&nbsp;&nbsp;&nbsp;&nbsp;RXB0CON=0x20;<br />&nbsp;&nbsp;&nbsp;&nbsp;RXB0DLC=0x08;<br />&nbsp;&nbsp;&nbsp;&nbsp;RXB0D0=0x02;<br />&nbsp;&nbsp;&nbsp;&nbsp;RXB0D1=0x03;<br />&nbsp;&nbsp;&nbsp;&nbsp;RXB0D2=0x04;<br />&nbsp;&nbsp;&nbsp;&nbsp;RXB0D3=0x05;<br />&nbsp;&nbsp;&nbsp;&nbsp;RXB0D4=0x00;<br />&nbsp;&nbsp;&nbsp;&nbsp;RXB0D5=0x00;<br />&nbsp;&nbsp;&nbsp;&nbsp;RXB0D6=0x00;<br />&nbsp;&nbsp;&nbsp;&nbsp;RXB0D7=0x00;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;RXF0SIDH=CAN_Adress_H;<br />&nbsp;&nbsp;&nbsp;&nbsp;RXF0SIDL=CAN_Adress_L;<br />&nbsp;&nbsp;&nbsp;&nbsp;RXM0SIDH=0xFF;<br />&nbsp;&nbsp;&nbsp;&nbsp;RXM0SIDL=0xE0;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;CANCON=0x40;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;while((CANSTAT&0x40)!=0)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;;<br /><br />}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;PIR3=0x00;<br />&nbsp;&nbsp;&nbsp;&nbsp;PIE3=PIE3|0x01;<br />&nbsp;&nbsp;&nbsp;&nbsp;IPR3=IPR3|0x01;<br />}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;CAN_deal()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;CAN_FLAG=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;TXB0CON=TXB0CON&0xF7;<br />&nbsp;&nbsp;&nbsp;&nbsp;TXB0D0=RXB0D0+1;<br />&nbsp;&nbsp;&nbsp;&nbsp;TXB0D1=RXB0D1+1;<br />&nbsp;&nbsp;&nbsp;&nbsp;TXB0D2=RXB0D2+1;<br />&nbsp;&nbsp;&nbsp;&nbsp;TXB0D3=RXB0D3+1;<br />&nbsp;&nbsp;&nbsp;&nbsp;TXB0D4=RXB0D4+1;<br />&nbsp;&nbsp;&nbsp;&nbsp;TXB0D5=RXB0D5+1;<br />&nbsp;&nbsp;&nbsp;&nbsp;TXB0D6=RXB0D6+1;<br />&nbsp;&nbsp;&nbsp;&nbsp;TXB0D7=RXB0D7+1;<br />}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;interrupt&nbsp;HI_ISR()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(RXB0IF==1)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CAN_FLAG=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RXB0IF=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RXB0FUL=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;main&nbsp;()<br />{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;initial();<br />&nbsp;&nbsp;&nbsp;&nbsp;CAN_Adress_H=0x33;<br />&nbsp;&nbsp;&nbsp;&nbsp;CAN_Adress_L=0xEE;<br />&nbsp;&nbsp;&nbsp;&nbsp;initcan();<br />&nbsp;&nbsp;&nbsp;&nbsp;IPEN=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;INTCON=INTCON|0xC0;<br />&nbsp;&nbsp;&nbsp;&nbsp;while(1)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(CAN_FLAG==1)CAN_deal();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(CAN_Delay_count&gt0x2FE)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TXB0CON=TXB0CON|0x08;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CAN_Delay_count=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;CAN_Delay_count++;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br />这是一个自检方式下的例子,为什么运行的不对啊,请高手指点,谢谢
whyjj 发表于 2009-1-29 19:10 | 显示全部楼层

有设置波特率吗?

  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

3

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部