[CAN-bus/DeviceNet] 我看了一段时间书,做出来得程序还是不能通讯,麻烦给指

[复制链接]
3142|1
 楼主| 张学勇 发表于 2007-1-10 16:00 | 显示全部楼层 |阅读模式
以下是我写的,在发送端芯片上烧的程序,用的Basic模式,目前已知情况:<br />1、寄存器已定义好(通过串口查询的寄存器值跟书上说的一致);<br />2、发送两次以后就停止工作啦;<br />3、接收端没有任何反应,也没进入中断;<br />/********************************************************************/<br /><br />#include&ltreg51.h&gt<br />#include&ltintrins.h&gt<br />#define&nbsp;uchar&nbsp;unsigned&nbsp;char<br />#define&nbsp;uint&nbsp;unsigned&nbsp;int<br />sbit&nbsp;L=P1^3;&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 />uchar&nbsp;TXB[10]={0xFF,0xFF,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15};<br />/********************************************************************/<br />//CAN控制器初始化程序(12兆晶振,波特率为250kbs)<br />init_can(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;CR_CAN=0x01;&nbsp;&nbsp;&nbsp;&nbsp;//进入复位模式<br />//&nbsp;&nbsp;&nbsp;&nbsp;CDR_CAN=0x08;&nbsp;&nbsp;&nbsp;&nbsp;//通过有无频率输出,检测初始化是否成功<br />&nbsp;&nbsp;&nbsp;&nbsp;CDR_CAN=0x40;&nbsp;&nbsp;&nbsp;&nbsp;//(新添加)设置CBP位,根据P_82;<br />&nbsp;&nbsp;&nbsp;&nbsp;BTR0_CAN=0x00;&nbsp;&nbsp;&nbsp;&nbsp;//12兆晶振,波特率为250kbs<br />&nbsp;&nbsp;&nbsp;&nbsp;BTR1_CAN=0x5F;<br />&nbsp;&nbsp;&nbsp;&nbsp;OCR_CAN=0x1A;&nbsp;&nbsp;&nbsp;&nbsp;//选择正常模式<br />&nbsp;&nbsp;&nbsp;&nbsp;ACR_CAN=0xFF;&nbsp;&nbsp;&nbsp;&nbsp;//验收代码<br />&nbsp;&nbsp;&nbsp;&nbsp;AMR_CAN=0xFF;&nbsp;&nbsp;&nbsp;&nbsp;//屏蔽代码<br />&nbsp;&nbsp;&nbsp;&nbsp;CR_CAN=0x7E;&nbsp;&nbsp;&nbsp;&nbsp;//使能接收中断<br />&nbsp;&nbsp;&nbsp;&nbsp;CMR_CAN=0x60;&nbsp;&nbsp;&nbsp;&nbsp;//<br />//&nbsp;&nbsp;&nbsp;&nbsp;CDR_CAN=0x08;&nbsp;&nbsp;&nbsp;&nbsp;//通过有无频率输出,检测是否回到了工作状态<br />}<br />/********************************************************************/<br />//发送程序<br />send_can(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;uchar&nbsp;xdata&nbsp;*pt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//定义一个外部指针变量<br />&nbsp;&nbsp;&nbsp;&nbsp;uchar&nbsp;i;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//定义一个变量<br />&nbsp;&nbsp;&nbsp;&nbsp;if(SR_CAN&0x40)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//判断总线是否空闲<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pt=0x7F0A;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//发送缓冲器的起始地址(有疑问)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&lt10;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*(pt++)=TXB;&nbsp;&nbsp;&nbsp;//将数组中的数字送入发送缓冲区<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CMR_CAN=0x61;&nbsp;&nbsp;&nbsp;&nbsp;//启动发送命令,发送数据<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delayms(1500);&nbsp;&nbsp;//3秒延时,在此延长指示灯的跳变时间<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br />/********************************************************************/<br />main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;init_can();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//初始化SJA1000<br />&nbsp;&nbsp;&nbsp;&nbsp;while(1)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//循环发送<br />&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;send_can();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//调发送函数,发送数据<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delayms(200);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//0.4秒延时<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;L=!L;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//指示灯变化<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br />/********************************************************************/
yizaisong 发表于 2007-4-2 14:32 | 显示全部楼层

这个程序有什么问题????

这个程序有什么问题????
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

8

帖子

0

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